Initial commit. master
authorRicardo Wurmus <rekado@elephly.net>
Fri, 28 Jun 2019 23:51:57 +0000 (01:51 +0200)
committerRicardo Wurmus <rekado@elephly.net>
Wed, 24 Jul 2019 22:20:57 +0000 (00:20 +0200)
15 files changed:
.gitignore [new file with mode: 0644]
COPYING [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
aws/api/README [new file with mode: 0644]
aws/api/cloudfront-2019-03-26.normal.json [new file with mode: 0644]
aws/api/ec2-2016-11-15.normal.json [new file with mode: 0644]
aws/api/s3-2006-03-01.normal.json [new file with mode: 0644]
aws/base.scm [new file with mode: 0644]
aws/request.scm [new file with mode: 0644]
aws/utils/json.scm [new file with mode: 0644]
bootstrap [new file with mode: 0755]
configure.ac [new file with mode: 0644]
guix.scm [new file with mode: 0644]
language/aws/spec.scm [new file with mode: 0644]
pre-inst-env.in [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..bee3d6a
--- /dev/null
@@ -0,0 +1,11 @@
+Makefile
+Makefile.in
+autom4te.cache/
+build-aux/
+config.cache
+config.log
+config.status
+configure
+pre-inst-env
+*.go
+upstream-json-specs
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..94a9ed0
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..a497b4d
--- /dev/null
@@ -0,0 +1,41 @@
+GOBJECTS = $(GUILE_SOURCES:%.scm=%.go) $(JSON_SOURCES:.normal.json=.go)
+
+nobase_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES)
+nobase_go_DATA = $(GOBJECTS)
+
+# Make sure source files are installed first, so that the mtime of
+# installed compiled files is greater than that of installed source
+# files.  See
+# <http://lists.gnu.org/archive/html/guile-devel/2010-07/msg00125.html>
+# for details.
+guile_install_go_files = install-nobase_goDATA
+$(guile_install_go_files): install-nobase_modDATA
+
+CLEANFILES = $(GOBJECTS)
+EXTRA_DIST = $(SOURCES) $(NOCOMP_SOURCES)
+GUILE_WARNINGS = -Wunbound-variable -Warity-mismatch -Wformat
+SUFFIXES = .scm .go
+.scm.go:
+       $(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILE_TOOLS) compile $(GUILE_WARNINGS) -o "$@" "$<"
+
+moddir=$(prefix)/share/guile/site/$(GUILE_EFFECTIVE_VERSION)
+godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/ccache
+
+GUILE_SOURCES =             \
+  aws/base.scm              \
+  aws/request.scm           \
+  aws/utils/json.scm        \
+  language/aws/spec.scm
+
+JSON_SOURCES = \
+  aws/api/cloudfront-2019-03-26.normal.json \
+  aws/api/ec2-2016-11-15.normal.json \
+  aws/api/s3-2006-03-01.normal.json
+
+$(JSON_SOURCES:.normal.json=.go): %.go: %.normal.json aws/base.scm language/aws/spec.scm
+       $(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILE_TOOLS) \
+         compile $(GUILE_WARNINGS) -O1 --from=aws \
+         -o "$@" "$<"
+
+
+SOURCES = $(GUILE_SOURCES) $(JSON_SOURCES)
diff --git a/aws/api/README b/aws/api/README
new file mode 100644 (file)
index 0000000..115e80b
--- /dev/null
@@ -0,0 +1,4 @@
+These JSON files are unmodified copies taken from v2.484.0 of the AWS
+SDK for JavaScript: https://github.com/aws/aws-sdk-js/tree/master/apis
+
+They are covered under the Apache 2.0 license.
diff --git a/aws/api/cloudfront-2019-03-26.normal.json b/aws/api/cloudfront-2019-03-26.normal.json
new file mode 100644 (file)
index 0000000..ab547c7
--- /dev/null
@@ -0,0 +1,5679 @@
+{
+  "version": "2.0",
+  "metadata": {
+    "apiVersion": "2019-03-26",
+    "endpointPrefix": "cloudfront",
+    "globalEndpoint": "cloudfront.amazonaws.com",
+    "protocol": "rest-xml",
+    "serviceAbbreviation": "CloudFront",
+    "serviceFullName": "Amazon CloudFront",
+    "serviceId": "CloudFront",
+    "signatureVersion": "v4",
+    "uid": "cloudfront-2019-03-26"
+  },
+  "operations": {
+    "CreateCloudFrontOriginAccessIdentity": {
+      "name": "CreateCloudFrontOriginAccessIdentity2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/origin-access-identity/cloudfront",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateCloudFrontOriginAccessIdentityRequest"
+      },
+      "output": {
+        "shape": "CreateCloudFrontOriginAccessIdentityResult"
+      },
+      "errors": [
+        {
+          "shape": "CloudFrontOriginAccessIdentityAlreadyExists"
+        },
+        {
+          "shape": "MissingBody"
+        },
+        {
+          "shape": "TooManyCloudFrontOriginAccessIdentities"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        }
+      ],
+      "documentation": "<p>Creates a new origin access identity. If you're using Amazon S3 for your origin, you can use an origin access identity to require users to access your content using a CloudFront URL instead of the Amazon S3 URL. For more information about how to use origin access identities, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "CreateDistribution": {
+      "name": "CreateDistribution2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/distribution",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateDistributionRequest"
+      },
+      "output": {
+        "shape": "CreateDistributionResult"
+      },
+      "errors": [
+        {
+          "shape": "CNAMEAlreadyExists"
+        },
+        {
+          "shape": "DistributionAlreadyExists"
+        },
+        {
+          "shape": "InvalidOrigin"
+        },
+        {
+          "shape": "InvalidOriginAccessIdentity"
+        },
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "TooManyTrustedSigners"
+        },
+        {
+          "shape": "TrustedSignerDoesNotExist"
+        },
+        {
+          "shape": "InvalidViewerCertificate"
+        },
+        {
+          "shape": "InvalidMinimumProtocolVersion"
+        },
+        {
+          "shape": "MissingBody"
+        },
+        {
+          "shape": "TooManyDistributionCNAMEs"
+        },
+        {
+          "shape": "TooManyDistributions"
+        },
+        {
+          "shape": "InvalidDefaultRootObject"
+        },
+        {
+          "shape": "InvalidRelativePath"
+        },
+        {
+          "shape": "InvalidErrorCode"
+        },
+        {
+          "shape": "InvalidResponseCode"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidRequiredProtocol"
+        },
+        {
+          "shape": "NoSuchOrigin"
+        },
+        {
+          "shape": "TooManyOrigins"
+        },
+        {
+          "shape": "TooManyOriginGroupsPerDistribution"
+        },
+        {
+          "shape": "TooManyCacheBehaviors"
+        },
+        {
+          "shape": "TooManyCookieNamesInWhiteList"
+        },
+        {
+          "shape": "InvalidForwardCookies"
+        },
+        {
+          "shape": "TooManyHeadersInForwardedValues"
+        },
+        {
+          "shape": "InvalidHeadersForS3Origin"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        },
+        {
+          "shape": "TooManyCertificates"
+        },
+        {
+          "shape": "InvalidLocationCode"
+        },
+        {
+          "shape": "InvalidGeoRestrictionParameter"
+        },
+        {
+          "shape": "InvalidProtocolSettings"
+        },
+        {
+          "shape": "InvalidTTLOrder"
+        },
+        {
+          "shape": "InvalidWebACLId"
+        },
+        {
+          "shape": "TooManyOriginCustomHeaders"
+        },
+        {
+          "shape": "TooManyQueryStringParameters"
+        },
+        {
+          "shape": "InvalidQueryStringParameters"
+        },
+        {
+          "shape": "TooManyDistributionsWithLambdaAssociations"
+        },
+        {
+          "shape": "TooManyLambdaFunctionAssociations"
+        },
+        {
+          "shape": "InvalidLambdaFunctionAssociation"
+        },
+        {
+          "shape": "InvalidOriginReadTimeout"
+        },
+        {
+          "shape": "InvalidOriginKeepaliveTimeout"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionConfig"
+        },
+        {
+          "shape": "IllegalFieldLevelEncryptionConfigAssociationWithCacheBehavior"
+        },
+        {
+          "shape": "TooManyDistributionsAssociatedToFieldLevelEncryptionConfig"
+        }
+      ],
+      "documentation": "<p>Creates a new web distribution. You create a CloudFront distribution to tell CloudFront where you want content to be delivered from, and the details about how to track and manage content delivery. Send a <code>POST</code> request to the <code>/<i>CloudFront API version</i>/distribution</code>/<code>distribution ID</code> resource.</p> <important> <p>When you update a distribution, there are more required fields than when you create a distribution. When you update your distribution by using <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html\">UpdateDistribution</a>, follow the steps included in the documentation to get the current configuration and then make your updates. This helps to make sure that you include all of the required fields. To view a summary, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-overview-required-fields.html\">Required Fields for Create Distribution and Update Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </important>"
+    },
+    "CreateDistributionWithTags": {
+      "name": "CreateDistributionWithTags2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/distribution?WithTags",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateDistributionWithTagsRequest"
+      },
+      "output": {
+        "shape": "CreateDistributionWithTagsResult"
+      },
+      "errors": [
+        {
+          "shape": "CNAMEAlreadyExists"
+        },
+        {
+          "shape": "DistributionAlreadyExists"
+        },
+        {
+          "shape": "InvalidOrigin"
+        },
+        {
+          "shape": "InvalidOriginAccessIdentity"
+        },
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "TooManyTrustedSigners"
+        },
+        {
+          "shape": "TrustedSignerDoesNotExist"
+        },
+        {
+          "shape": "InvalidViewerCertificate"
+        },
+        {
+          "shape": "InvalidMinimumProtocolVersion"
+        },
+        {
+          "shape": "MissingBody"
+        },
+        {
+          "shape": "TooManyDistributionCNAMEs"
+        },
+        {
+          "shape": "TooManyDistributions"
+        },
+        {
+          "shape": "InvalidDefaultRootObject"
+        },
+        {
+          "shape": "InvalidRelativePath"
+        },
+        {
+          "shape": "InvalidErrorCode"
+        },
+        {
+          "shape": "InvalidResponseCode"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidRequiredProtocol"
+        },
+        {
+          "shape": "NoSuchOrigin"
+        },
+        {
+          "shape": "TooManyOrigins"
+        },
+        {
+          "shape": "TooManyOriginGroupsPerDistribution"
+        },
+        {
+          "shape": "TooManyCacheBehaviors"
+        },
+        {
+          "shape": "TooManyCookieNamesInWhiteList"
+        },
+        {
+          "shape": "InvalidForwardCookies"
+        },
+        {
+          "shape": "TooManyHeadersInForwardedValues"
+        },
+        {
+          "shape": "InvalidHeadersForS3Origin"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        },
+        {
+          "shape": "TooManyCertificates"
+        },
+        {
+          "shape": "InvalidLocationCode"
+        },
+        {
+          "shape": "InvalidGeoRestrictionParameter"
+        },
+        {
+          "shape": "InvalidProtocolSettings"
+        },
+        {
+          "shape": "InvalidTTLOrder"
+        },
+        {
+          "shape": "InvalidWebACLId"
+        },
+        {
+          "shape": "TooManyOriginCustomHeaders"
+        },
+        {
+          "shape": "InvalidTagging"
+        },
+        {
+          "shape": "TooManyQueryStringParameters"
+        },
+        {
+          "shape": "InvalidQueryStringParameters"
+        },
+        {
+          "shape": "TooManyDistributionsWithLambdaAssociations"
+        },
+        {
+          "shape": "TooManyLambdaFunctionAssociations"
+        },
+        {
+          "shape": "InvalidLambdaFunctionAssociation"
+        },
+        {
+          "shape": "InvalidOriginReadTimeout"
+        },
+        {
+          "shape": "InvalidOriginKeepaliveTimeout"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionConfig"
+        },
+        {
+          "shape": "IllegalFieldLevelEncryptionConfigAssociationWithCacheBehavior"
+        },
+        {
+          "shape": "TooManyDistributionsAssociatedToFieldLevelEncryptionConfig"
+        }
+      ],
+      "documentation": "<p>Create a new distribution with tags.</p>"
+    },
+    "CreateFieldLevelEncryptionConfig": {
+      "name": "CreateFieldLevelEncryptionConfig2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/field-level-encryption",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateFieldLevelEncryptionConfigRequest"
+      },
+      "output": {
+        "shape": "CreateFieldLevelEncryptionConfigResult"
+      },
+      "errors": [
+        {
+          "shape": "InconsistentQuantities"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionProfile"
+        },
+        {
+          "shape": "FieldLevelEncryptionConfigAlreadyExists"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionConfigs"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionQueryArgProfiles"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionContentTypeProfiles"
+        },
+        {
+          "shape": "QueryArgProfileEmpty"
+        }
+      ],
+      "documentation": "<p>Create a new field-level encryption configuration.</p>"
+    },
+    "CreateFieldLevelEncryptionProfile": {
+      "name": "CreateFieldLevelEncryptionProfile2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/field-level-encryption-profile",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateFieldLevelEncryptionProfileRequest"
+      },
+      "output": {
+        "shape": "CreateFieldLevelEncryptionProfileResult"
+      },
+      "errors": [
+        {
+          "shape": "InconsistentQuantities"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "NoSuchPublicKey"
+        },
+        {
+          "shape": "FieldLevelEncryptionProfileAlreadyExists"
+        },
+        {
+          "shape": "FieldLevelEncryptionProfileSizeExceeded"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionProfiles"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionEncryptionEntities"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionFieldPatterns"
+        }
+      ],
+      "documentation": "<p>Create a field-level encryption profile.</p>"
+    },
+    "CreateInvalidation": {
+      "name": "CreateInvalidation2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/distribution/{DistributionId}/invalidation",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateInvalidationRequest"
+      },
+      "output": {
+        "shape": "CreateInvalidationResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "MissingBody"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "NoSuchDistribution"
+        },
+        {
+          "shape": "BatchTooLarge"
+        },
+        {
+          "shape": "TooManyInvalidationsInProgress"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        }
+      ],
+      "documentation": "<p>Create a new invalidation. </p>"
+    },
+    "CreatePublicKey": {
+      "name": "CreatePublicKey2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/public-key",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreatePublicKeyRequest"
+      },
+      "output": {
+        "shape": "CreatePublicKeyResult"
+      },
+      "errors": [
+        {
+          "shape": "PublicKeyAlreadyExists"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "TooManyPublicKeys"
+        }
+      ],
+      "documentation": "<p>Add a new public key to CloudFront to use, for example, for field-level encryption. You can add a maximum of 10 public keys with one AWS account.</p>"
+    },
+    "CreateStreamingDistribution": {
+      "name": "CreateStreamingDistribution2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/streaming-distribution",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateStreamingDistributionRequest"
+      },
+      "output": {
+        "shape": "CreateStreamingDistributionResult"
+      },
+      "errors": [
+        {
+          "shape": "CNAMEAlreadyExists"
+        },
+        {
+          "shape": "StreamingDistributionAlreadyExists"
+        },
+        {
+          "shape": "InvalidOrigin"
+        },
+        {
+          "shape": "InvalidOriginAccessIdentity"
+        },
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "TooManyTrustedSigners"
+        },
+        {
+          "shape": "TrustedSignerDoesNotExist"
+        },
+        {
+          "shape": "MissingBody"
+        },
+        {
+          "shape": "TooManyStreamingDistributionCNAMEs"
+        },
+        {
+          "shape": "TooManyStreamingDistributions"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        }
+      ],
+      "documentation": "<p>Creates a new RTMP distribution. An RTMP distribution is similar to a web distribution, but an RTMP distribution streams media files using the Adobe Real-Time Messaging Protocol (RTMP) instead of serving files using HTTP. </p> <p>To create a new distribution, submit a <code>POST</code> request to the <i>CloudFront API version</i>/distribution resource. The request body must include a document with a <i>StreamingDistributionConfig</i> element. The response echoes the <code>StreamingDistributionConfig</code> element and returns other information about the RTMP distribution.</p> <p>To get the status of your request, use the <i>GET StreamingDistribution</i> API action. When the value of <code>Enabled</code> is <code>true</code> and the value of <code>Status</code> is <code>Deployed</code>, your distribution is ready. A distribution usually deploys in less than 15 minutes.</p> <p>For more information about web distributions, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-rtmp.html\">Working with RTMP Distributions</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <important> <p>Beginning with the 2012-05-05 version of the CloudFront API, we made substantial changes to the format of the XML document that you include in the request body when you create or update a web distribution or an RTMP distribution, and when you invalidate objects. With previous versions of the API, we discovered that it was too easy to accidentally delete one or more values for an element that accepts multiple values, for example, CNAMEs and trusted signers. Our changes for the 2012-05-05 release are intended to prevent these accidental deletions and to notify you when there's a mismatch between the number of values you say you're specifying in the <code>Quantity</code> element and the number of values specified.</p> </important>"
+    },
+    "CreateStreamingDistributionWithTags": {
+      "name": "CreateStreamingDistributionWithTags2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/streaming-distribution?WithTags",
+        "responseCode": 201
+      },
+      "input": {
+        "shape": "CreateStreamingDistributionWithTagsRequest"
+      },
+      "output": {
+        "shape": "CreateStreamingDistributionWithTagsResult"
+      },
+      "errors": [
+        {
+          "shape": "CNAMEAlreadyExists"
+        },
+        {
+          "shape": "StreamingDistributionAlreadyExists"
+        },
+        {
+          "shape": "InvalidOrigin"
+        },
+        {
+          "shape": "InvalidOriginAccessIdentity"
+        },
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "TooManyTrustedSigners"
+        },
+        {
+          "shape": "TrustedSignerDoesNotExist"
+        },
+        {
+          "shape": "MissingBody"
+        },
+        {
+          "shape": "TooManyStreamingDistributionCNAMEs"
+        },
+        {
+          "shape": "TooManyStreamingDistributions"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        },
+        {
+          "shape": "InvalidTagging"
+        }
+      ],
+      "documentation": "<p>Create a new streaming distribution with tags.</p>"
+    },
+    "DeleteCloudFrontOriginAccessIdentity": {
+      "name": "DeleteCloudFrontOriginAccessIdentity2019_03_26",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/2019-03-26/origin-access-identity/cloudfront/{Id}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteCloudFrontOriginAccessIdentityRequest"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "NoSuchCloudFrontOriginAccessIdentity"
+        },
+        {
+          "shape": "PreconditionFailed"
+        },
+        {
+          "shape": "CloudFrontOriginAccessIdentityInUse"
+        }
+      ],
+      "documentation": "<p>Delete an origin access identity. </p>"
+    },
+    "DeleteDistribution": {
+      "name": "DeleteDistribution2019_03_26",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/2019-03-26/distribution/{Id}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteDistributionRequest"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "DistributionNotDisabled"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "NoSuchDistribution"
+        },
+        {
+          "shape": "PreconditionFailed"
+        }
+      ],
+      "documentation": "<p>Delete a distribution. </p>"
+    },
+    "DeleteFieldLevelEncryptionConfig": {
+      "name": "DeleteFieldLevelEncryptionConfig2019_03_26",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/2019-03-26/field-level-encryption/{Id}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteFieldLevelEncryptionConfigRequest"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionConfig"
+        },
+        {
+          "shape": "PreconditionFailed"
+        },
+        {
+          "shape": "FieldLevelEncryptionConfigInUse"
+        }
+      ],
+      "documentation": "<p>Remove a field-level encryption configuration.</p>"
+    },
+    "DeleteFieldLevelEncryptionProfile": {
+      "name": "DeleteFieldLevelEncryptionProfile2019_03_26",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/2019-03-26/field-level-encryption-profile/{Id}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteFieldLevelEncryptionProfileRequest"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionProfile"
+        },
+        {
+          "shape": "PreconditionFailed"
+        },
+        {
+          "shape": "FieldLevelEncryptionProfileInUse"
+        }
+      ],
+      "documentation": "<p>Remove a field-level encryption profile.</p>"
+    },
+    "DeletePublicKey": {
+      "name": "DeletePublicKey2019_03_26",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/2019-03-26/public-key/{Id}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeletePublicKeyRequest"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "PublicKeyInUse"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "NoSuchPublicKey"
+        },
+        {
+          "shape": "PreconditionFailed"
+        }
+      ],
+      "documentation": "<p>Remove a public key you previously added to CloudFront.</p>"
+    },
+    "DeleteStreamingDistribution": {
+      "name": "DeleteStreamingDistribution2019_03_26",
+      "http": {
+        "method": "DELETE",
+        "requestUri": "/2019-03-26/streaming-distribution/{Id}",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "DeleteStreamingDistributionRequest"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "StreamingDistributionNotDisabled"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "NoSuchStreamingDistribution"
+        },
+        {
+          "shape": "PreconditionFailed"
+        }
+      ],
+      "documentation": "<p>Delete a streaming distribution. To delete an RTMP distribution using the CloudFront API, perform the following steps.</p> <p> <b>To delete an RTMP distribution using the CloudFront API</b>:</p> <ol> <li> <p>Disable the RTMP distribution.</p> </li> <li> <p>Submit a <code>GET Streaming Distribution Config</code> request to get the current configuration and the <code>Etag</code> header for the distribution. </p> </li> <li> <p>Update the XML document that was returned in the response to your <code>GET Streaming Distribution Config</code> request to change the value of <code>Enabled</code> to <code>false</code>.</p> </li> <li> <p>Submit a <code>PUT Streaming Distribution Config</code> request to update the configuration for your distribution. In the request body, include the XML document that you updated in Step 3. Then set the value of the HTTP <code>If-Match</code> header to the value of the <code>ETag</code> header that CloudFront returned when you submitted the <code>GET Streaming Distribution Config</code> request in Step 2.</p> </li> <li> <p>Review the response to the <code>PUT Streaming Distribution Config</code> request to confirm that the distribution was successfully disabled.</p> </li> <li> <p>Submit a <code>GET Streaming Distribution Config</code> request to confirm that your changes have propagated. When propagation is complete, the value of <code>Status</code> is <code>Deployed</code>.</p> </li> <li> <p>Submit a <code>DELETE Streaming Distribution</code> request. Set the value of the HTTP <code>If-Match</code> header to the value of the <code>ETag</code> header that CloudFront returned when you submitted the <code>GET Streaming Distribution Config</code> request in Step 2.</p> </li> <li> <p>Review the response to your <code>DELETE Streaming Distribution</code> request to confirm that the distribution was successfully deleted.</p> </li> </ol> <p>For information about deleting a distribution using the CloudFront console, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowToDeleteDistribution.html\">Deleting a Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "GetCloudFrontOriginAccessIdentity": {
+      "name": "GetCloudFrontOriginAccessIdentity2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/origin-access-identity/cloudfront/{Id}"
+      },
+      "input": {
+        "shape": "GetCloudFrontOriginAccessIdentityRequest"
+      },
+      "output": {
+        "shape": "GetCloudFrontOriginAccessIdentityResult"
+      },
+      "errors": [
+        {
+          "shape": "NoSuchCloudFrontOriginAccessIdentity"
+        },
+        {
+          "shape": "AccessDenied"
+        }
+      ],
+      "documentation": "<p>Get the information about an origin access identity. </p>"
+    },
+    "GetCloudFrontOriginAccessIdentityConfig": {
+      "name": "GetCloudFrontOriginAccessIdentityConfig2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/origin-access-identity/cloudfront/{Id}/config"
+      },
+      "input": {
+        "shape": "GetCloudFrontOriginAccessIdentityConfigRequest"
+      },
+      "output": {
+        "shape": "GetCloudFrontOriginAccessIdentityConfigResult"
+      },
+      "errors": [
+        {
+          "shape": "NoSuchCloudFrontOriginAccessIdentity"
+        },
+        {
+          "shape": "AccessDenied"
+        }
+      ],
+      "documentation": "<p>Get the configuration information about an origin access identity. </p>"
+    },
+    "GetDistribution": {
+      "name": "GetDistribution2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/distribution/{Id}"
+      },
+      "input": {
+        "shape": "GetDistributionRequest"
+      },
+      "output": {
+        "shape": "GetDistributionResult"
+      },
+      "errors": [
+        {
+          "shape": "NoSuchDistribution"
+        },
+        {
+          "shape": "AccessDenied"
+        }
+      ],
+      "documentation": "<p>Get the information about a distribution.</p>"
+    },
+    "GetDistributionConfig": {
+      "name": "GetDistributionConfig2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/distribution/{Id}/config"
+      },
+      "input": {
+        "shape": "GetDistributionConfigRequest"
+      },
+      "output": {
+        "shape": "GetDistributionConfigResult"
+      },
+      "errors": [
+        {
+          "shape": "NoSuchDistribution"
+        },
+        {
+          "shape": "AccessDenied"
+        }
+      ],
+      "documentation": "<p>Get the configuration information about a distribution. </p>"
+    },
+    "GetFieldLevelEncryption": {
+      "name": "GetFieldLevelEncryption2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/field-level-encryption/{Id}"
+      },
+      "input": {
+        "shape": "GetFieldLevelEncryptionRequest"
+      },
+      "output": {
+        "shape": "GetFieldLevelEncryptionResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionConfig"
+        }
+      ],
+      "documentation": "<p>Get the field-level encryption configuration information.</p>"
+    },
+    "GetFieldLevelEncryptionConfig": {
+      "name": "GetFieldLevelEncryptionConfig2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/field-level-encryption/{Id}/config"
+      },
+      "input": {
+        "shape": "GetFieldLevelEncryptionConfigRequest"
+      },
+      "output": {
+        "shape": "GetFieldLevelEncryptionConfigResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionConfig"
+        }
+      ],
+      "documentation": "<p>Get the field-level encryption configuration information.</p>"
+    },
+    "GetFieldLevelEncryptionProfile": {
+      "name": "GetFieldLevelEncryptionProfile2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/field-level-encryption-profile/{Id}"
+      },
+      "input": {
+        "shape": "GetFieldLevelEncryptionProfileRequest"
+      },
+      "output": {
+        "shape": "GetFieldLevelEncryptionProfileResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionProfile"
+        }
+      ],
+      "documentation": "<p>Get the field-level encryption profile information.</p>"
+    },
+    "GetFieldLevelEncryptionProfileConfig": {
+      "name": "GetFieldLevelEncryptionProfileConfig2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/field-level-encryption-profile/{Id}/config"
+      },
+      "input": {
+        "shape": "GetFieldLevelEncryptionProfileConfigRequest"
+      },
+      "output": {
+        "shape": "GetFieldLevelEncryptionProfileConfigResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionProfile"
+        }
+      ],
+      "documentation": "<p>Get the field-level encryption profile configuration information.</p>"
+    },
+    "GetInvalidation": {
+      "name": "GetInvalidation2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/distribution/{DistributionId}/invalidation/{Id}"
+      },
+      "input": {
+        "shape": "GetInvalidationRequest"
+      },
+      "output": {
+        "shape": "GetInvalidationResult"
+      },
+      "errors": [
+        {
+          "shape": "NoSuchInvalidation"
+        },
+        {
+          "shape": "NoSuchDistribution"
+        },
+        {
+          "shape": "AccessDenied"
+        }
+      ],
+      "documentation": "<p>Get the information about an invalidation. </p>"
+    },
+    "GetPublicKey": {
+      "name": "GetPublicKey2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/public-key/{Id}"
+      },
+      "input": {
+        "shape": "GetPublicKeyRequest"
+      },
+      "output": {
+        "shape": "GetPublicKeyResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "NoSuchPublicKey"
+        }
+      ],
+      "documentation": "<p>Get the public key information.</p>"
+    },
+    "GetPublicKeyConfig": {
+      "name": "GetPublicKeyConfig2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/public-key/{Id}/config"
+      },
+      "input": {
+        "shape": "GetPublicKeyConfigRequest"
+      },
+      "output": {
+        "shape": "GetPublicKeyConfigResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "NoSuchPublicKey"
+        }
+      ],
+      "documentation": "<p>Return public key configuration informaation</p>"
+    },
+    "GetStreamingDistribution": {
+      "name": "GetStreamingDistribution2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/streaming-distribution/{Id}"
+      },
+      "input": {
+        "shape": "GetStreamingDistributionRequest"
+      },
+      "output": {
+        "shape": "GetStreamingDistributionResult"
+      },
+      "errors": [
+        {
+          "shape": "NoSuchStreamingDistribution"
+        },
+        {
+          "shape": "AccessDenied"
+        }
+      ],
+      "documentation": "<p>Gets information about a specified RTMP distribution, including the distribution configuration.</p>"
+    },
+    "GetStreamingDistributionConfig": {
+      "name": "GetStreamingDistributionConfig2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/streaming-distribution/{Id}/config"
+      },
+      "input": {
+        "shape": "GetStreamingDistributionConfigRequest"
+      },
+      "output": {
+        "shape": "GetStreamingDistributionConfigResult"
+      },
+      "errors": [
+        {
+          "shape": "NoSuchStreamingDistribution"
+        },
+        {
+          "shape": "AccessDenied"
+        }
+      ],
+      "documentation": "<p>Get the configuration information about a streaming distribution. </p>"
+    },
+    "ListCloudFrontOriginAccessIdentities": {
+      "name": "ListCloudFrontOriginAccessIdentities2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/origin-access-identity/cloudfront"
+      },
+      "input": {
+        "shape": "ListCloudFrontOriginAccessIdentitiesRequest"
+      },
+      "output": {
+        "shape": "ListCloudFrontOriginAccessIdentitiesResult"
+      },
+      "errors": [
+        {
+          "shape": "InvalidArgument"
+        }
+      ],
+      "documentation": "<p>Lists origin access identities.</p>"
+    },
+    "ListDistributions": {
+      "name": "ListDistributions2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/distribution"
+      },
+      "input": {
+        "shape": "ListDistributionsRequest"
+      },
+      "output": {
+        "shape": "ListDistributionsResult"
+      },
+      "errors": [
+        {
+          "shape": "InvalidArgument"
+        }
+      ],
+      "documentation": "<p>List CloudFront distributions.</p>"
+    },
+    "ListDistributionsByWebACLId": {
+      "name": "ListDistributionsByWebACLId2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/distributionsByWebACLId/{WebACLId}"
+      },
+      "input": {
+        "shape": "ListDistributionsByWebACLIdRequest"
+      },
+      "output": {
+        "shape": "ListDistributionsByWebACLIdResult"
+      },
+      "errors": [
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidWebACLId"
+        }
+      ],
+      "documentation": "<p>List the distributions that are associated with a specified AWS WAF web ACL. </p>"
+    },
+    "ListFieldLevelEncryptionConfigs": {
+      "name": "ListFieldLevelEncryptionConfigs2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/field-level-encryption"
+      },
+      "input": {
+        "shape": "ListFieldLevelEncryptionConfigsRequest"
+      },
+      "output": {
+        "shape": "ListFieldLevelEncryptionConfigsResult"
+      },
+      "errors": [
+        {
+          "shape": "InvalidArgument"
+        }
+      ],
+      "documentation": "<p>List all field-level encryption configurations that have been created in CloudFront for this account.</p>"
+    },
+    "ListFieldLevelEncryptionProfiles": {
+      "name": "ListFieldLevelEncryptionProfiles2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/field-level-encryption-profile"
+      },
+      "input": {
+        "shape": "ListFieldLevelEncryptionProfilesRequest"
+      },
+      "output": {
+        "shape": "ListFieldLevelEncryptionProfilesResult"
+      },
+      "errors": [
+        {
+          "shape": "InvalidArgument"
+        }
+      ],
+      "documentation": "<p>Request a list of field-level encryption profiles that have been created in CloudFront for this account.</p>"
+    },
+    "ListInvalidations": {
+      "name": "ListInvalidations2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/distribution/{DistributionId}/invalidation"
+      },
+      "input": {
+        "shape": "ListInvalidationsRequest"
+      },
+      "output": {
+        "shape": "ListInvalidationsResult"
+      },
+      "errors": [
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "NoSuchDistribution"
+        },
+        {
+          "shape": "AccessDenied"
+        }
+      ],
+      "documentation": "<p>Lists invalidation batches. </p>"
+    },
+    "ListPublicKeys": {
+      "name": "ListPublicKeys2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/public-key"
+      },
+      "input": {
+        "shape": "ListPublicKeysRequest"
+      },
+      "output": {
+        "shape": "ListPublicKeysResult"
+      },
+      "errors": [
+        {
+          "shape": "InvalidArgument"
+        }
+      ],
+      "documentation": "<p>List all public keys that have been added to CloudFront for this account.</p>"
+    },
+    "ListStreamingDistributions": {
+      "name": "ListStreamingDistributions2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/streaming-distribution"
+      },
+      "input": {
+        "shape": "ListStreamingDistributionsRequest"
+      },
+      "output": {
+        "shape": "ListStreamingDistributionsResult"
+      },
+      "errors": [
+        {
+          "shape": "InvalidArgument"
+        }
+      ],
+      "documentation": "<p>List streaming distributions. </p>"
+    },
+    "ListTagsForResource": {
+      "name": "ListTagsForResource2019_03_26",
+      "http": {
+        "method": "GET",
+        "requestUri": "/2019-03-26/tagging"
+      },
+      "input": {
+        "shape": "ListTagsForResourceRequest"
+      },
+      "output": {
+        "shape": "ListTagsForResourceResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidTagging"
+        },
+        {
+          "shape": "NoSuchResource"
+        }
+      ],
+      "documentation": "<p>List tags for a CloudFront resource.</p>"
+    },
+    "TagResource": {
+      "name": "TagResource2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/tagging?Operation=Tag",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "TagResourceRequest"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidTagging"
+        },
+        {
+          "shape": "NoSuchResource"
+        }
+      ],
+      "documentation": "<p>Add tags to a CloudFront resource.</p>"
+    },
+    "UntagResource": {
+      "name": "UntagResource2019_03_26",
+      "http": {
+        "method": "POST",
+        "requestUri": "/2019-03-26/tagging?Operation=Untag",
+        "responseCode": 204
+      },
+      "input": {
+        "shape": "UntagResourceRequest"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidTagging"
+        },
+        {
+          "shape": "NoSuchResource"
+        }
+      ],
+      "documentation": "<p>Remove tags from a CloudFront resource.</p>"
+    },
+    "UpdateCloudFrontOriginAccessIdentity": {
+      "name": "UpdateCloudFrontOriginAccessIdentity2019_03_26",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/2019-03-26/origin-access-identity/cloudfront/{Id}/config"
+      },
+      "input": {
+        "shape": "UpdateCloudFrontOriginAccessIdentityRequest"
+      },
+      "output": {
+        "shape": "UpdateCloudFrontOriginAccessIdentityResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "IllegalUpdate"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "MissingBody"
+        },
+        {
+          "shape": "NoSuchCloudFrontOriginAccessIdentity"
+        },
+        {
+          "shape": "PreconditionFailed"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        }
+      ],
+      "documentation": "<p>Update an origin access identity. </p>"
+    },
+    "UpdateDistribution": {
+      "name": "UpdateDistribution2019_03_26",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/2019-03-26/distribution/{Id}/config"
+      },
+      "input": {
+        "shape": "UpdateDistributionRequest"
+      },
+      "output": {
+        "shape": "UpdateDistributionResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "CNAMEAlreadyExists"
+        },
+        {
+          "shape": "IllegalUpdate"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "MissingBody"
+        },
+        {
+          "shape": "NoSuchDistribution"
+        },
+        {
+          "shape": "PreconditionFailed"
+        },
+        {
+          "shape": "TooManyDistributionCNAMEs"
+        },
+        {
+          "shape": "InvalidDefaultRootObject"
+        },
+        {
+          "shape": "InvalidRelativePath"
+        },
+        {
+          "shape": "InvalidErrorCode"
+        },
+        {
+          "shape": "InvalidResponseCode"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidOriginAccessIdentity"
+        },
+        {
+          "shape": "TooManyTrustedSigners"
+        },
+        {
+          "shape": "TrustedSignerDoesNotExist"
+        },
+        {
+          "shape": "InvalidViewerCertificate"
+        },
+        {
+          "shape": "InvalidMinimumProtocolVersion"
+        },
+        {
+          "shape": "InvalidRequiredProtocol"
+        },
+        {
+          "shape": "NoSuchOrigin"
+        },
+        {
+          "shape": "TooManyOrigins"
+        },
+        {
+          "shape": "TooManyOriginGroupsPerDistribution"
+        },
+        {
+          "shape": "TooManyCacheBehaviors"
+        },
+        {
+          "shape": "TooManyCookieNamesInWhiteList"
+        },
+        {
+          "shape": "InvalidForwardCookies"
+        },
+        {
+          "shape": "TooManyHeadersInForwardedValues"
+        },
+        {
+          "shape": "InvalidHeadersForS3Origin"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        },
+        {
+          "shape": "TooManyCertificates"
+        },
+        {
+          "shape": "InvalidLocationCode"
+        },
+        {
+          "shape": "InvalidGeoRestrictionParameter"
+        },
+        {
+          "shape": "InvalidTTLOrder"
+        },
+        {
+          "shape": "InvalidWebACLId"
+        },
+        {
+          "shape": "TooManyOriginCustomHeaders"
+        },
+        {
+          "shape": "TooManyQueryStringParameters"
+        },
+        {
+          "shape": "InvalidQueryStringParameters"
+        },
+        {
+          "shape": "TooManyDistributionsWithLambdaAssociations"
+        },
+        {
+          "shape": "TooManyLambdaFunctionAssociations"
+        },
+        {
+          "shape": "InvalidLambdaFunctionAssociation"
+        },
+        {
+          "shape": "InvalidOriginReadTimeout"
+        },
+        {
+          "shape": "InvalidOriginKeepaliveTimeout"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionConfig"
+        },
+        {
+          "shape": "IllegalFieldLevelEncryptionConfigAssociationWithCacheBehavior"
+        },
+        {
+          "shape": "TooManyDistributionsAssociatedToFieldLevelEncryptionConfig"
+        }
+      ],
+      "documentation": "<p>Updates the configuration for a web distribution. </p> <important> <p>When you update a distribution, there are more required fields than when you create a distribution. When you update your distribution by using this API action, follow the steps here to get the current configuration and then make your updates, to make sure that you include all of the required fields. To view a summary, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-overview-required-fields.html\">Required Fields for Create Distribution and Update Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </important> <p>The update process includes getting the current distribution configuration, updating the XML document that is returned to make your changes, and then submitting an <code>UpdateDistribution</code> request to make the updates.</p> <p>For information about updating a distribution using the CloudFront console instead, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-creating-console.html\">Creating a Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p> <b>To update a web distribution using the CloudFront API</b> </p> <ol> <li> <p>Submit a <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistributionConfig.html\">GetDistributionConfig</a> request to get the current configuration and an <code>Etag</code> header for the distribution.</p> <note> <p>If you update the distribution again, you must get a new <code>Etag</code> header.</p> </note> </li> <li> <p>Update the XML document that was returned in the response to your <code>GetDistributionConfig</code> request to include your changes. </p> <important> <p>When you edit the XML file, be aware of the following:</p> <ul> <li> <p>You must strip out the ETag parameter that is returned.</p> </li> <li> <p>Additional fields are required when you update a distribution. There may be fields included in the XML file for features that you haven't configured for your distribution. This is expected and required to successfully update the distribution.</p> </li> <li> <p>You can't change the value of <code>CallerReference</code>. If you try to change this value, CloudFront returns an <code>IllegalUpdate</code> error. </p> </li> <li> <p>The new configuration replaces the existing configuration; the values that you specify in an <code>UpdateDistribution</code> request are not merged into your existing configuration. When you add, delete, or replace values in an element that allows multiple values (for example, <code>CNAME</code>), you must specify all of the values that you want to appear in the updated distribution. In addition, you must update the corresponding <code>Quantity</code> element.</p> </li> </ul> </important> </li> <li> <p>Submit an <code>UpdateDistribution</code> request to update the configuration for your distribution:</p> <ul> <li> <p>In the request body, include the XML document that you updated in Step 2. The request body must include an XML document with a <code>DistributionConfig</code> element.</p> </li> <li> <p>Set the value of the HTTP <code>If-Match</code> header to the value of the <code>ETag</code> header that CloudFront returned when you submitted the <code>GetDistributionConfig</code> request in Step 1.</p> </li> </ul> </li> <li> <p>Review the response to the <code>UpdateDistribution</code> request to confirm that the configuration was successfully updated.</p> </li> <li> <p>Optional: Submit a <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistribution.html\">GetDistribution</a> request to confirm that your changes have propagated. When propagation is complete, the value of <code>Status</code> is <code>Deployed</code>.</p> </li> </ol>"
+    },
+    "UpdateFieldLevelEncryptionConfig": {
+      "name": "UpdateFieldLevelEncryptionConfig2019_03_26",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/2019-03-26/field-level-encryption/{Id}/config"
+      },
+      "input": {
+        "shape": "UpdateFieldLevelEncryptionConfigRequest"
+      },
+      "output": {
+        "shape": "UpdateFieldLevelEncryptionConfigResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "IllegalUpdate"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionProfile"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionConfig"
+        },
+        {
+          "shape": "PreconditionFailed"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionQueryArgProfiles"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionContentTypeProfiles"
+        },
+        {
+          "shape": "QueryArgProfileEmpty"
+        }
+      ],
+      "documentation": "<p>Update a field-level encryption configuration. </p>"
+    },
+    "UpdateFieldLevelEncryptionProfile": {
+      "name": "UpdateFieldLevelEncryptionProfile2019_03_26",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/2019-03-26/field-level-encryption-profile/{Id}/config"
+      },
+      "input": {
+        "shape": "UpdateFieldLevelEncryptionProfileRequest"
+      },
+      "output": {
+        "shape": "UpdateFieldLevelEncryptionProfileResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "FieldLevelEncryptionProfileAlreadyExists"
+        },
+        {
+          "shape": "IllegalUpdate"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "NoSuchPublicKey"
+        },
+        {
+          "shape": "NoSuchFieldLevelEncryptionProfile"
+        },
+        {
+          "shape": "PreconditionFailed"
+        },
+        {
+          "shape": "FieldLevelEncryptionProfileSizeExceeded"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionEncryptionEntities"
+        },
+        {
+          "shape": "TooManyFieldLevelEncryptionFieldPatterns"
+        }
+      ],
+      "documentation": "<p>Update a field-level encryption profile. </p>"
+    },
+    "UpdatePublicKey": {
+      "name": "UpdatePublicKey2019_03_26",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/2019-03-26/public-key/{Id}/config"
+      },
+      "input": {
+        "shape": "UpdatePublicKeyRequest"
+      },
+      "output": {
+        "shape": "UpdatePublicKeyResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "CannotChangeImmutablePublicKeyFields"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "IllegalUpdate"
+        },
+        {
+          "shape": "NoSuchPublicKey"
+        },
+        {
+          "shape": "PreconditionFailed"
+        }
+      ],
+      "documentation": "<p>Update public key information. Note that the only value you can change is the comment.</p>"
+    },
+    "UpdateStreamingDistribution": {
+      "name": "UpdateStreamingDistribution2019_03_26",
+      "http": {
+        "method": "PUT",
+        "requestUri": "/2019-03-26/streaming-distribution/{Id}/config"
+      },
+      "input": {
+        "shape": "UpdateStreamingDistributionRequest"
+      },
+      "output": {
+        "shape": "UpdateStreamingDistributionResult"
+      },
+      "errors": [
+        {
+          "shape": "AccessDenied"
+        },
+        {
+          "shape": "CNAMEAlreadyExists"
+        },
+        {
+          "shape": "IllegalUpdate"
+        },
+        {
+          "shape": "InvalidIfMatchVersion"
+        },
+        {
+          "shape": "MissingBody"
+        },
+        {
+          "shape": "NoSuchStreamingDistribution"
+        },
+        {
+          "shape": "PreconditionFailed"
+        },
+        {
+          "shape": "TooManyStreamingDistributionCNAMEs"
+        },
+        {
+          "shape": "InvalidArgument"
+        },
+        {
+          "shape": "InvalidOriginAccessIdentity"
+        },
+        {
+          "shape": "TooManyTrustedSigners"
+        },
+        {
+          "shape": "TrustedSignerDoesNotExist"
+        },
+        {
+          "shape": "InconsistentQuantities"
+        }
+      ],
+      "documentation": "<p>Update a streaming distribution. </p>"
+    }
+  },
+  "shapes": {
+    "ActiveTrustedSigners": {
+      "type": "structure",
+      "required": [
+        "Enabled",
+        "Quantity"
+      ],
+      "members": {
+        "Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>Enabled is <code>true</code> if any of the AWS accounts listed in the <code>TrustedSigners</code> complex type for this distribution have active CloudFront key pairs. If not, <code>Enabled</code> is <code>false</code>.</p>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of trusted signers specified in the <code>TrustedSigners</code> complex type.</p>"
+        },
+        "Items": {
+          "shape": "SignerList",
+          "documentation": "<p>A complex type that contains one <code>Signer</code> complex type for each trusted signer that is specified in the <code>TrustedSigners</code> complex type.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that lists the AWS accounts, if any, that you included in the <code>TrustedSigners</code> complex type for this distribution. These are the accounts that you want to allow to create signed URLs for private content.</p> <p>The <code>Signer</code> complex type lists the AWS account number of the trusted signer or <code>self</code> if the signer is the AWS account that created the distribution. The <code>Signer</code> element also includes the IDs of any active CloudFront key pairs that are associated with the trusted signer's AWS account. If no <code>KeyPairId</code> element appears for a <code>Signer</code>, that signer can't create signed URLs. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "AliasICPRecordal": {
+      "type": "structure",
+      "members": {
+        "CNAME": {
+          "shape": "string",
+          "documentation": "<p>A domain name associated with a distribution. </p>"
+        },
+        "ICPRecordalStatus": {
+          "shape": "ICPRecordalStatus",
+          "documentation": "<p>The Internet Content Provider (ICP) recordal status for a CNAME. The ICPRecordalStatus is set to APPROVED for all CNAMEs (aliases) in regions outside of China. </p> <p>The status values returned are the following:</p> <ul> <li> <p> <b>APPROVED</b> indicates that the associated CNAME has a valid ICP recordal number. Multiple CNAMEs can be associated with a distribution, and CNAMEs can correspond to different ICP recordals. To be marked as APPROVED, that is, valid to use with China region, a CNAME must have one ICP recordal number associated with it.</p> </li> <li> <p> <b>SUSPENDED</b> indicates that the associated CNAME does not have a valid ICP recordal number.</p> </li> <li> <p> <b>PENDING</b> indicates that at least one CNAME associated with the distribution does not have a valid ICP recordal number.</p> </li> </ul>"
+        }
+      },
+      "documentation": "<p>AWS services in China customers must file for an Internet Content Provider (ICP) recordal if they want to serve content publicly on an alternate domain name, also known as a CNAME, that they've added to CloudFront. AliasICPRecordal provides the ICP recordal status for CNAMEs associated with distributions. The status is returned in the CloudFront response; you can't configure it yourself.</p> <p>For more information about ICP recordals, see <a href=\"https://docs.amazonaws.cn/en_us/aws/latest/userguide/accounts-and-credentials.html\"> Signup, Accounts, and Credentials</a> in <i>Getting Started with AWS services in China</i>.</p>"
+    },
+    "AliasICPRecordals": {
+      "type": "list",
+      "member": {
+        "shape": "AliasICPRecordal",
+        "locationName": "AliasICPRecordal"
+      }
+    },
+    "AliasList": {
+      "type": "list",
+      "member": {
+        "shape": "string",
+        "locationName": "CNAME"
+      }
+    },
+    "Aliases": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of CNAME aliases, if any, that you want to associate with this distribution.</p>"
+        },
+        "Items": {
+          "shape": "AliasList",
+          "documentation": "<p>A complex type that contains the CNAME aliases, if any, that you want to associate with this distribution.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains information about CNAMEs (alternate domain names), if any, for this distribution. </p>"
+    },
+    "AllowedMethods": {
+      "type": "structure",
+      "required": [
+        "Quantity",
+        "Items"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of HTTP methods that you want CloudFront to forward to your origin. Valid values are 2 (for <code>GET</code> and <code>HEAD</code> requests), 3 (for <code>GET</code>, <code>HEAD</code>, and <code>OPTIONS</code> requests) and 7 (for <code>GET, HEAD, OPTIONS, PUT, PATCH, POST</code>, and <code>DELETE</code> requests).</p>"
+        },
+        "Items": {
+          "shape": "MethodsList",
+          "documentation": "<p>A complex type that contains the HTTP methods that you want CloudFront to process and forward to your origin.</p>"
+        },
+        "CachedMethods": {
+          "shape": "CachedMethods"
+        }
+      },
+      "documentation": "<p>A complex type that controls which HTTP methods CloudFront processes and forwards to your Amazon S3 bucket or your custom origin. There are three choices:</p> <ul> <li> <p>CloudFront forwards only <code>GET</code> and <code>HEAD</code> requests.</p> </li> <li> <p>CloudFront forwards only <code>GET</code>, <code>HEAD</code>, and <code>OPTIONS</code> requests.</p> </li> <li> <p>CloudFront forwards <code>GET, HEAD, OPTIONS, PUT, PATCH, POST</code>, and <code>DELETE</code> requests.</p> </li> </ul> <p>If you pick the third choice, you may need to restrict access to your Amazon S3 bucket or to your custom origin so users can't perform operations that you don't want them to. For example, you might not want users to have permissions to delete objects from your origin.</p>"
+    },
+    "AwsAccountNumberList": {
+      "type": "list",
+      "member": {
+        "shape": "string",
+        "locationName": "AwsAccountNumber"
+      }
+    },
+    "CacheBehavior": {
+      "type": "structure",
+      "required": [
+        "PathPattern",
+        "TargetOriginId",
+        "ForwardedValues",
+        "TrustedSigners",
+        "ViewerProtocolPolicy",
+        "MinTTL"
+      ],
+      "members": {
+        "PathPattern": {
+          "shape": "string",
+          "documentation": "<p>The pattern (for example, <code>images/*.jpg</code>) that specifies which requests to apply the behavior to. When CloudFront receives a viewer request, the requested path is compared with path patterns in the order in which cache behaviors are listed in the distribution.</p> <note> <p>You can optionally include a slash (<code>/</code>) at the beginning of the path pattern. For example, <code>/images/*.jpg</code>. CloudFront behavior is the same with or without the leading <code>/</code>.</p> </note> <p>The path pattern for the default cache behavior is <code>*</code> and cannot be changed. If the request for an object does not match the path pattern for any cache behaviors, CloudFront applies the behavior in the default cache behavior.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesPathPattern\">Path Pattern</a> in the <i> Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "TargetOriginId": {
+          "shape": "string",
+          "documentation": "<p>The value of <code>ID</code> for the origin that you want CloudFront to route requests to when a request matches the path pattern either for a cache behavior or for the default cache behavior in your distribution.</p>"
+        },
+        "ForwardedValues": {
+          "shape": "ForwardedValues",
+          "documentation": "<p>A complex type that specifies how CloudFront handles query strings and cookies.</p>"
+        },
+        "TrustedSigners": {
+          "shape": "TrustedSigners",
+          "documentation": "<p>A complex type that specifies the AWS accounts, if any, that you want to allow to create signed URLs for private content.</p> <p>If you want to require signed URLs in requests for objects in the target origin that match the <code>PathPattern</code> for this cache behavior, specify <code>true</code> for <code>Enabled</code>, and specify the applicable values for <code>Quantity</code> and <code>Items</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>. </p> <p>If you don't want to require signed URLs in requests for objects that match <code>PathPattern</code>, specify <code>false</code> for <code>Enabled</code> and <code>0</code> for <code>Quantity</code>. Omit <code>Items</code>.</p> <p>To add, change, or remove one or more trusted signers, change <code>Enabled</code> to <code>true</code> (if it's currently <code>false</code>), change <code>Quantity</code> as applicable, and specify all of the trusted signers that you want to include in the updated distribution.</p>"
+        },
+        "ViewerProtocolPolicy": {
+          "shape": "ViewerProtocolPolicy",
+          "documentation": "<p>The protocol that viewers can use to access the files in the origin specified by <code>TargetOriginId</code> when a request matches the path pattern in <code>PathPattern</code>. You can specify the following options:</p> <ul> <li> <p> <code>allow-all</code>: Viewers can use HTTP or HTTPS.</p> </li> <li> <p> <code>redirect-to-https</code>: If a viewer submits an HTTP request, CloudFront returns an HTTP status code of 301 (Moved Permanently) to the viewer along with the HTTPS URL. The viewer then resubmits the request using the new URL. </p> </li> <li> <p> <code>https-only</code>: If a viewer sends an HTTP request, CloudFront returns an HTTP status code of 403 (Forbidden). </p> </li> </ul> <p>For more information about requiring the HTTPS protocol, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/SecureConnections.html\">Using an HTTPS Connection to Access Your Objects</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <note> <p>The only way to guarantee that viewers retrieve an object that was fetched from the origin using HTTPS is never to use any other protocol to fetch the object. If you have recently changed from HTTP to HTTPS, we recommend that you clear your objects' cache because cached objects are protocol agnostic. That means that an edge location will return an object from the cache regardless of whether the current request protocol matches the protocol used previously. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note>"
+        },
+        "MinTTL": {
+          "shape": "long",
+          "documentation": "<p>The minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\"> Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i> Amazon CloudFront Developer Guide</i>.</p> <p>You must specify <code>0</code> for <code>MinTTL</code> if you configure CloudFront to forward all headers to your origin (under <code>Headers</code>, if you specify <code>1</code> for <code>Quantity</code> and <code>*</code> for <code>Name</code>).</p>"
+        },
+        "AllowedMethods": {
+          "shape": "AllowedMethods"
+        },
+        "SmoothStreaming": {
+          "shape": "boolean",
+          "documentation": "<p>Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify <code>true</code>; if not, specify <code>false</code>. If you specify <code>true</code> for <code>SmoothStreaming</code>, you can still distribute other content using this cache behavior if the content matches the value of <code>PathPattern</code>. </p>"
+        },
+        "DefaultTTL": {
+          "shape": "long",
+          "documentation": "<p>The default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "MaxTTL": {
+          "shape": "long",
+          "documentation": "<p>The maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "Compress": {
+          "shape": "boolean",
+          "documentation": "<p>Whether you want CloudFront to automatically compress certain files for this cache behavior. If so, specify true; if not, specify false. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html\">Serving Compressed Files</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "LambdaFunctionAssociations": {
+          "shape": "LambdaFunctionAssociations",
+          "documentation": "<p>A complex type that contains zero or more Lambda function associations for a cache behavior.</p>"
+        },
+        "FieldLevelEncryptionId": {
+          "shape": "string",
+          "documentation": "<p>The value of <code>ID</code> for the field-level encryption configuration that you want CloudFront to use for encrypting specific fields of data for a cache behavior or for the default cache behavior in your distribution.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that describes how CloudFront processes requests.</p> <p>You must create at least as many cache behaviors (including the default cache behavior) as you have origins if you want CloudFront to distribute objects from all of the origins. Each cache behavior specifies the one origin from which you want CloudFront to get objects. If you have two origins and only the default cache behavior, the default cache behavior will cause CloudFront to get objects from one of the origins, but the other origin is never used.</p> <p>For the current limit on the number of cache behaviors that you can add to a distribution, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_cloudfront\">Amazon CloudFront Limits</a> in the <i>AWS General Reference</i>.</p> <p>If you don't want to specify any cache behaviors, include only an empty <code>CacheBehaviors</code> element. Don't include an empty <code>CacheBehavior</code> element, or CloudFront returns a <code>MalformedXML</code> error.</p> <p>To delete all cache behaviors in an existing distribution, update the distribution configuration and include only an empty <code>CacheBehaviors</code> element.</p> <p>To add, change, or remove one or more cache behaviors, update the distribution configuration and specify all of the cache behaviors that you want to include in the updated distribution.</p> <p>For more information about cache behaviors, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesCacheBehavior\">Cache Behaviors</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "CacheBehaviorList": {
+      "type": "list",
+      "member": {
+        "shape": "CacheBehavior",
+        "locationName": "CacheBehavior"
+      }
+    },
+    "CacheBehaviors": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of cache behaviors for this distribution. </p>"
+        },
+        "Items": {
+          "shape": "CacheBehaviorList",
+          "documentation": "<p>Optional: A complex type that contains cache behaviors for this distribution. If <code>Quantity</code> is <code>0</code>, you can omit <code>Items</code>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains zero or more <code>CacheBehavior</code> elements. </p>"
+    },
+    "CachedMethods": {
+      "type": "structure",
+      "required": [
+        "Quantity",
+        "Items"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of HTTP methods for which you want CloudFront to cache responses. Valid values are <code>2</code> (for caching responses to <code>GET</code> and <code>HEAD</code> requests) and <code>3</code> (for caching responses to <code>GET</code>, <code>HEAD</code>, and <code>OPTIONS</code> requests).</p>"
+        },
+        "Items": {
+          "shape": "MethodsList",
+          "documentation": "<p>A complex type that contains the HTTP methods that you want CloudFront to cache responses to.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that controls whether CloudFront caches the response to requests using the specified HTTP methods. There are two choices:</p> <ul> <li> <p>CloudFront caches responses to <code>GET</code> and <code>HEAD</code> requests.</p> </li> <li> <p>CloudFront caches responses to <code>GET</code>, <code>HEAD</code>, and <code>OPTIONS</code> requests.</p> </li> </ul> <p>If you pick the second choice for your Amazon S3 Origin, you may need to forward Access-Control-Request-Method, Access-Control-Request-Headers, and Origin headers for the responses to be cached correctly. </p>"
+    },
+    "CertificateSource": {
+      "type": "string",
+      "enum": [
+        "cloudfront",
+        "iam",
+        "acm"
+      ]
+    },
+    "CloudFrontOriginAccessIdentity": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "S3CanonicalUserId"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The ID for the origin access identity, for example, <code>E74FTE3AJFJ256A</code>. </p>"
+        },
+        "S3CanonicalUserId": {
+          "shape": "string",
+          "documentation": "<p>The Amazon S3 canonical user ID for the origin access identity, used when giving the origin access identity read permission to an object in Amazon S3. </p>"
+        },
+        "CloudFrontOriginAccessIdentityConfig": {
+          "shape": "CloudFrontOriginAccessIdentityConfig",
+          "documentation": "<p>The current configuration information for the identity. </p>"
+        }
+      },
+      "documentation": "<p>CloudFront origin access identity.</p>"
+    },
+    "CloudFrontOriginAccessIdentityConfig": {
+      "type": "structure",
+      "required": [
+        "CallerReference",
+        "Comment"
+      ],
+      "members": {
+        "CallerReference": {
+          "shape": "string",
+          "documentation": "<p>A unique value (for example, a date-time stamp) that ensures that the request can't be replayed.</p> <p>If the value of <code>CallerReference</code> is new (regardless of the content of the <code>CloudFrontOriginAccessIdentityConfig</code> object), a new origin access identity is created.</p> <p>If the <code>CallerReference</code> is a value already sent in a previous identity request, and the content of the <code>CloudFrontOriginAccessIdentityConfig</code> is identical to the original request (ignoring white space), the response includes the same information returned to the original request. </p> <p>If the <code>CallerReference</code> is a value you already sent in a previous request to create an identity, but the content of the <code>CloudFrontOriginAccessIdentityConfig</code> is different from the original request, CloudFront returns a <code>CloudFrontOriginAccessIdentityAlreadyExists</code> error. </p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>Any comments you want to include about the origin access identity. </p>"
+        }
+      },
+      "documentation": "<p>Origin access identity configuration. Send a <code>GET</code> request to the <code>/<i>CloudFront API version</i>/CloudFront/identity ID/config</code> resource. </p>"
+    },
+    "CloudFrontOriginAccessIdentityList": {
+      "type": "structure",
+      "required": [
+        "Marker",
+        "MaxItems",
+        "IsTruncated",
+        "Quantity"
+      ],
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>Use this when paginating results to indicate where to begin in your list of origin access identities. The results include identities in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response (which is also the ID of the last identity on that page). </p>"
+        },
+        "NextMarker": {
+          "shape": "string",
+          "documentation": "<p>If <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value you can use for the <code>Marker</code> request parameter to continue listing your origin access identities where they left off. </p>"
+        },
+        "MaxItems": {
+          "shape": "integer",
+          "documentation": "<p>The maximum number of origin access identities you want in the response body. </p>"
+        },
+        "IsTruncated": {
+          "shape": "boolean",
+          "documentation": "<p>A flag that indicates whether more origin access identities remain to be listed. If your results were truncated, you can make a follow-up pagination request using the <code>Marker</code> request parameter to retrieve more items in the list.</p>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of CloudFront origin access identities that were created by the current AWS account. </p>"
+        },
+        "Items": {
+          "shape": "CloudFrontOriginAccessIdentitySummaryList",
+          "documentation": "<p>A complex type that contains one <code>CloudFrontOriginAccessIdentitySummary</code> element for each origin access identity that was created by the current AWS account.</p>"
+        }
+      },
+      "documentation": "<p>Lists the origin access identities for CloudFront.Send a <code>GET</code> request to the <code>/<i>CloudFront API version</i>/origin-access-identity/cloudfront</code> resource. The response includes a <code>CloudFrontOriginAccessIdentityList</code> element with zero or more <code>CloudFrontOriginAccessIdentitySummary</code> child elements. By default, your entire list of origin access identities is returned in one single page. If the list is long, you can paginate it using the <code>MaxItems</code> and <code>Marker</code> parameters.</p>"
+    },
+    "CloudFrontOriginAccessIdentitySummary": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "S3CanonicalUserId",
+        "Comment"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The ID for the origin access identity. For example: <code>E74FTE3AJFJ256A</code>.</p>"
+        },
+        "S3CanonicalUserId": {
+          "shape": "string",
+          "documentation": "<p>The Amazon S3 canonical user ID for the origin access identity, which you use when giving the origin access identity read permission to an object in Amazon S3.</p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>The comment for this origin access identity, as originally specified when created.</p>"
+        }
+      },
+      "documentation": "<p>Summary of the information about a CloudFront origin access identity.</p>"
+    },
+    "CloudFrontOriginAccessIdentitySummaryList": {
+      "type": "list",
+      "member": {
+        "shape": "CloudFrontOriginAccessIdentitySummary",
+        "locationName": "CloudFrontOriginAccessIdentitySummary"
+      }
+    },
+    "CommentType": {
+      "type": "string",
+      "sensitive": true
+    },
+    "ContentTypeProfile": {
+      "type": "structure",
+      "required": [
+        "Format",
+        "ContentType"
+      ],
+      "members": {
+        "Format": {
+          "shape": "Format",
+          "documentation": "<p>The format for a field-level encryption content type-profile mapping. </p>"
+        },
+        "ProfileId": {
+          "shape": "string",
+          "documentation": "<p>The profile ID for a field-level encryption content type-profile mapping. </p>"
+        },
+        "ContentType": {
+          "shape": "string",
+          "documentation": "<p>The content type for a field-level encryption content type-profile mapping. </p>"
+        }
+      },
+      "documentation": "<p>A field-level encryption content type profile. </p>"
+    },
+    "ContentTypeProfileConfig": {
+      "type": "structure",
+      "required": [
+        "ForwardWhenContentTypeIsUnknown"
+      ],
+      "members": {
+        "ForwardWhenContentTypeIsUnknown": {
+          "shape": "boolean",
+          "documentation": "<p>The setting in a field-level encryption content type-profile mapping that specifies what to do when an unknown content type is provided for the profile. If true, content is forwarded without being encrypted when the content type is unknown. If false (the default), an error is returned when the content type is unknown. </p>"
+        },
+        "ContentTypeProfiles": {
+          "shape": "ContentTypeProfiles",
+          "documentation": "<p>The configuration for a field-level encryption content type-profile. </p>"
+        }
+      },
+      "documentation": "<p>The configuration for a field-level encryption content type-profile mapping. </p>"
+    },
+    "ContentTypeProfileList": {
+      "type": "list",
+      "member": {
+        "shape": "ContentTypeProfile",
+        "locationName": "ContentTypeProfile"
+      }
+    },
+    "ContentTypeProfiles": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of field-level encryption content type-profile mappings. </p>"
+        },
+        "Items": {
+          "shape": "ContentTypeProfileList",
+          "documentation": "<p>Items in a field-level encryption content type-profile mapping. </p>"
+        }
+      },
+      "documentation": "<p>Field-level encryption content type-profile. </p>"
+    },
+    "CookieNameList": {
+      "type": "list",
+      "member": {
+        "shape": "string",
+        "locationName": "Name"
+      }
+    },
+    "CookieNames": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of different cookies that you want CloudFront to forward to the origin for this cache behavior.</p>"
+        },
+        "Items": {
+          "shape": "CookieNameList",
+          "documentation": "<p>A complex type that contains one <code>Name</code> element for each cookie that you want CloudFront to forward to the origin for this cache behavior.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that specifies whether you want CloudFront to forward cookies to the origin and, if so, which ones. For more information about forwarding cookies to the origin, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html\"> Caching Content Based on Request Headers</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "CookiePreference": {
+      "type": "structure",
+      "required": [
+        "Forward"
+      ],
+      "members": {
+        "Forward": {
+          "shape": "ItemSelection",
+          "documentation": "<p>Specifies which cookies to forward to the origin for this cache behavior: all, none, or the list of cookies specified in the <code>WhitelistedNames</code> complex type.</p> <p>Amazon S3 doesn't process cookies. When the cache behavior is forwarding requests to an Amazon S3 origin, specify none for the <code>Forward</code> element. </p>"
+        },
+        "WhitelistedNames": {
+          "shape": "CookieNames",
+          "documentation": "<p>Required if you specify <code>whitelist</code> for the value of <code>Forward:</code>. A complex type that specifies how many different cookies you want CloudFront to forward to the origin for this cache behavior and, if you want to forward selected cookies, the names of those cookies.</p> <p>If you specify <code>all</code> or none for the value of <code>Forward</code>, omit <code>WhitelistedNames</code>. If you change the value of <code>Forward</code> from <code>whitelist</code> to all or none and you don't delete the <code>WhitelistedNames</code> element and its child elements, CloudFront deletes them automatically.</p> <p>For the current limit on the number of cookie names that you can whitelist for each cache behavior, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/xrefaws_service_limits.html#limits_cloudfront\"> CloudFront Limits</a> in the <i>AWS General Reference</i>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that specifies whether you want CloudFront to forward cookies to the origin and, if so, which ones. For more information about forwarding cookies to the origin, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Cookies.html\">Caching Content Based on Cookies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "CreateCloudFrontOriginAccessIdentityRequest": {
+      "type": "structure",
+      "required": [
+        "CloudFrontOriginAccessIdentityConfig"
+      ],
+      "members": {
+        "CloudFrontOriginAccessIdentityConfig": {
+          "shape": "CloudFrontOriginAccessIdentityConfig",
+          "documentation": "<p>The current configuration information for the identity.</p>",
+          "locationName": "CloudFrontOriginAccessIdentityConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "documentation": "<p>The request to create a new origin access identity (OAI). An origin access identity is a special CloudFront user that you can associate with Amazon S3 origins, so that you can secure all or just some of your Amazon S3 content. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html\"> Restricting Access to Amazon S3 Content by Using an Origin Access Identity</a> in the <i>Amazon CloudFront Developer Guide</i>. </p>",
+      "payload": "CloudFrontOriginAccessIdentityConfig"
+    },
+    "CreateCloudFrontOriginAccessIdentityResult": {
+      "type": "structure",
+      "members": {
+        "CloudFrontOriginAccessIdentity": {
+          "shape": "CloudFrontOriginAccessIdentity",
+          "documentation": "<p>The origin access identity's information.</p>"
+        },
+        "Location": {
+          "shape": "string",
+          "documentation": "<p>The fully qualified URI of the new origin access identity just created. For example: <code>https://cloudfront.amazonaws.com/2010-11-01/origin-access-identity/cloudfront/E74FTE3AJFJ256A</code>.</p>",
+          "location": "header",
+          "locationName": "Location"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the origin access identity created.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "CloudFrontOriginAccessIdentity"
+    },
+    "CreateDistributionRequest": {
+      "type": "structure",
+      "required": [
+        "DistributionConfig"
+      ],
+      "members": {
+        "DistributionConfig": {
+          "shape": "DistributionConfig",
+          "documentation": "<p>The distribution's configuration information.</p>",
+          "locationName": "DistributionConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "documentation": "<p>The request to create a new distribution.</p>",
+      "payload": "DistributionConfig"
+    },
+    "CreateDistributionResult": {
+      "type": "structure",
+      "members": {
+        "Distribution": {
+          "shape": "Distribution",
+          "documentation": "<p>The distribution's information.</p>"
+        },
+        "Location": {
+          "shape": "string",
+          "documentation": "<p>The fully qualified URI of the new distribution resource just created. For example: <code>https://cloudfront.amazonaws.com/2010-11-01/distribution/EDFDVBD632BHDS5</code>.</p>",
+          "location": "header",
+          "locationName": "Location"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the distribution created.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "Distribution"
+    },
+    "CreateDistributionWithTagsRequest": {
+      "type": "structure",
+      "required": [
+        "DistributionConfigWithTags"
+      ],
+      "members": {
+        "DistributionConfigWithTags": {
+          "shape": "DistributionConfigWithTags",
+          "documentation": "<p>The distribution's configuration information. </p>",
+          "locationName": "DistributionConfigWithTags",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "documentation": "<p>The request to create a new distribution with tags. </p>",
+      "payload": "DistributionConfigWithTags"
+    },
+    "CreateDistributionWithTagsResult": {
+      "type": "structure",
+      "members": {
+        "Distribution": {
+          "shape": "Distribution",
+          "documentation": "<p>The distribution's information. </p>"
+        },
+        "Location": {
+          "shape": "string",
+          "documentation": "<p>The fully qualified URI of the new distribution resource just created. For example: <code>https://cloudfront.amazonaws.com/2010-11-01/distribution/EDFDVBD632BHDS5</code>. </p>",
+          "location": "header",
+          "locationName": "Location"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the distribution created.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request. </p>",
+      "payload": "Distribution"
+    },
+    "CreateFieldLevelEncryptionConfigRequest": {
+      "type": "structure",
+      "required": [
+        "FieldLevelEncryptionConfig"
+      ],
+      "members": {
+        "FieldLevelEncryptionConfig": {
+          "shape": "FieldLevelEncryptionConfig",
+          "documentation": "<p>The request to create a new field-level encryption configuration.</p>",
+          "locationName": "FieldLevelEncryptionConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "payload": "FieldLevelEncryptionConfig"
+    },
+    "CreateFieldLevelEncryptionConfigResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryption": {
+          "shape": "FieldLevelEncryption",
+          "documentation": "<p>Returned when you create a new field-level encryption configuration.</p>"
+        },
+        "Location": {
+          "shape": "string",
+          "documentation": "<p>The fully qualified URI of the new configuration resource just created. For example: <code>https://cloudfront.amazonaws.com/2010-11-01/field-level-encryption-config/EDFDVBD632BHDS5</code>.</p>",
+          "location": "header",
+          "locationName": "Location"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the field level encryption configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "FieldLevelEncryption"
+    },
+    "CreateFieldLevelEncryptionProfileRequest": {
+      "type": "structure",
+      "required": [
+        "FieldLevelEncryptionProfileConfig"
+      ],
+      "members": {
+        "FieldLevelEncryptionProfileConfig": {
+          "shape": "FieldLevelEncryptionProfileConfig",
+          "documentation": "<p>The request to create a field-level encryption profile.</p>",
+          "locationName": "FieldLevelEncryptionProfileConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "payload": "FieldLevelEncryptionProfileConfig"
+    },
+    "CreateFieldLevelEncryptionProfileResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryptionProfile": {
+          "shape": "FieldLevelEncryptionProfile",
+          "documentation": "<p>Returned when you create a new field-level encryption profile.</p>"
+        },
+        "Location": {
+          "shape": "string",
+          "documentation": "<p>The fully qualified URI of the new profile resource just created. For example: <code>https://cloudfront.amazonaws.com/2010-11-01/field-level-encryption-profile/EDFDVBD632BHDS5</code>.</p>",
+          "location": "header",
+          "locationName": "Location"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the field level encryption profile. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "FieldLevelEncryptionProfile"
+    },
+    "CreateInvalidationRequest": {
+      "type": "structure",
+      "required": [
+        "DistributionId",
+        "InvalidationBatch"
+      ],
+      "members": {
+        "DistributionId": {
+          "shape": "string",
+          "documentation": "<p>The distribution's id.</p>",
+          "location": "uri",
+          "locationName": "DistributionId"
+        },
+        "InvalidationBatch": {
+          "shape": "InvalidationBatch",
+          "documentation": "<p>The batch information for the invalidation.</p>",
+          "locationName": "InvalidationBatch",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "documentation": "<p>The request to create an invalidation.</p>",
+      "payload": "InvalidationBatch"
+    },
+    "CreateInvalidationResult": {
+      "type": "structure",
+      "members": {
+        "Location": {
+          "shape": "string",
+          "documentation": "<p>The fully qualified URI of the distribution and invalidation batch request, including the <code>Invalidation ID</code>.</p>",
+          "location": "header",
+          "locationName": "Location"
+        },
+        "Invalidation": {
+          "shape": "Invalidation",
+          "documentation": "<p>The invalidation's information.</p>"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "Invalidation"
+    },
+    "CreatePublicKeyRequest": {
+      "type": "structure",
+      "required": [
+        "PublicKeyConfig"
+      ],
+      "members": {
+        "PublicKeyConfig": {
+          "shape": "PublicKeyConfig",
+          "documentation": "<p>The request to add a public key to CloudFront.</p>",
+          "locationName": "PublicKeyConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "payload": "PublicKeyConfig"
+    },
+    "CreatePublicKeyResult": {
+      "type": "structure",
+      "members": {
+        "PublicKey": {
+          "shape": "PublicKey",
+          "documentation": "<p>Returned when you add a public key.</p>"
+        },
+        "Location": {
+          "shape": "string",
+          "documentation": "<p>The fully qualified URI of the new public key resource just created. For example: <code>https://cloudfront.amazonaws.com/2010-11-01/cloudfront-public-key/EDFDVBD632BHDS5</code>.</p>",
+          "location": "header",
+          "locationName": "Location"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the public key. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "PublicKey"
+    },
+    "CreateStreamingDistributionRequest": {
+      "type": "structure",
+      "required": [
+        "StreamingDistributionConfig"
+      ],
+      "members": {
+        "StreamingDistributionConfig": {
+          "shape": "StreamingDistributionConfig",
+          "documentation": "<p>The streaming distribution's configuration information.</p>",
+          "locationName": "StreamingDistributionConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "documentation": "<p>The request to create a new streaming distribution.</p>",
+      "payload": "StreamingDistributionConfig"
+    },
+    "CreateStreamingDistributionResult": {
+      "type": "structure",
+      "members": {
+        "StreamingDistribution": {
+          "shape": "StreamingDistribution",
+          "documentation": "<p>The streaming distribution's information.</p>"
+        },
+        "Location": {
+          "shape": "string",
+          "documentation": "<p>The fully qualified URI of the new streaming distribution resource just created. For example: <code>https://cloudfront.amazonaws.com/2010-11-01/streaming-distribution/EGTXBD79H29TRA8</code>.</p>",
+          "location": "header",
+          "locationName": "Location"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the streaming distribution created.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "StreamingDistribution"
+    },
+    "CreateStreamingDistributionWithTagsRequest": {
+      "type": "structure",
+      "required": [
+        "StreamingDistributionConfigWithTags"
+      ],
+      "members": {
+        "StreamingDistributionConfigWithTags": {
+          "shape": "StreamingDistributionConfigWithTags",
+          "documentation": "<p> The streaming distribution's configuration information. </p>",
+          "locationName": "StreamingDistributionConfigWithTags",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "documentation": "<p>The request to create a new streaming distribution with tags.</p>",
+      "payload": "StreamingDistributionConfigWithTags"
+    },
+    "CreateStreamingDistributionWithTagsResult": {
+      "type": "structure",
+      "members": {
+        "StreamingDistribution": {
+          "shape": "StreamingDistribution",
+          "documentation": "<p>The streaming distribution's information. </p>"
+        },
+        "Location": {
+          "shape": "string",
+          "documentation": "<p>The fully qualified URI of the new streaming distribution resource just created. For example:<code> https://cloudfront.amazonaws.com/2010-11-01/streaming-distribution/EGTXBD79H29TRA8</code>.</p>",
+          "location": "header",
+          "locationName": "Location"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the distribution created.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request. </p>",
+      "payload": "StreamingDistribution"
+    },
+    "CustomErrorResponse": {
+      "type": "structure",
+      "required": [
+        "ErrorCode"
+      ],
+      "members": {
+        "ErrorCode": {
+          "shape": "integer",
+          "documentation": "<p>The HTTP status code for which you want to specify a custom error page and/or a caching duration.</p>"
+        },
+        "ResponsePagePath": {
+          "shape": "string",
+          "documentation": "<p>The path to the custom error page that you want CloudFront to return to a viewer when your origin returns the HTTP status code specified by <code>ErrorCode</code>, for example, <code>/4xx-errors/403-forbidden.html</code>. If you want to store your objects and your custom error pages in different locations, your distribution must include a cache behavior for which the following is true:</p> <ul> <li> <p>The value of <code>PathPattern</code> matches the path to your custom error messages. For example, suppose you saved custom error pages for 4xx errors in an Amazon S3 bucket in a directory named <code>/4xx-errors</code>. Your distribution must include a cache behavior for which the path pattern routes requests for your custom error pages to that location, for example, <code>/4xx-errors/*</code>. </p> </li> <li> <p>The value of <code>TargetOriginId</code> specifies the value of the <code>ID</code> element for the origin that contains your custom error pages.</p> </li> </ul> <p>If you specify a value for <code>ResponsePagePath</code>, you must also specify a value for <code>ResponseCode</code>. If you don't want to specify a value, include an empty element, <code>&lt;ResponsePagePath&gt;</code>, in the XML document.</p> <p>We recommend that you store custom error pages in an Amazon S3 bucket. If you store custom error pages on an HTTP server and the server starts to return 5xx errors, CloudFront can't get the files that you want to return to viewers because the origin server is unavailable.</p>"
+        },
+        "ResponseCode": {
+          "shape": "string",
+          "documentation": "<p>The HTTP status code that you want CloudFront to return to the viewer along with the custom error page. There are a variety of reasons that you might want CloudFront to return a status code different from the status code that your origin returned to CloudFront, for example:</p> <ul> <li> <p>Some Internet devices (some firewalls and corporate proxies, for example) intercept HTTP 4xx and 5xx and prevent the response from being returned to the viewer. If you substitute <code>200</code>, the response typically won't be intercepted.</p> </li> <li> <p>If you don't care about distinguishing among different client errors or server errors, you can specify <code>400</code> or <code>500</code> as the <code>ResponseCode</code> for all 4xx or 5xx errors.</p> </li> <li> <p>You might want to return a <code>200</code> status code (OK) and static website so your customers don't know that your website is down.</p> </li> </ul> <p>If you specify a value for <code>ResponseCode</code>, you must also specify a value for <code>ResponsePagePath</code>. If you don't want to specify a value, include an empty element, <code>&lt;ResponseCode&gt;</code>, in the XML document.</p>"
+        },
+        "ErrorCachingMinTTL": {
+          "shape": "long",
+          "documentation": "<p>The minimum amount of time, in seconds, that you want CloudFront to cache the HTTP status code specified in <code>ErrorCode</code>. When this time period has elapsed, CloudFront queries your origin to see whether the problem that caused the error has been resolved and the requested object is now available.</p> <p>If you don't want to specify a value, include an empty element, <code>&lt;ErrorCachingMinTTL&gt;</code>, in the XML document.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html\">Customizing Error Responses</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that controls:</p> <ul> <li> <p>Whether CloudFront replaces HTTP status codes in the 4xx and 5xx range with custom error messages before returning the response to the viewer. </p> </li> <li> <p>How long CloudFront caches HTTP status codes in the 4xx and 5xx range.</p> </li> </ul> <p>For more information about custom error pages, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html\">Customizing Error Responses</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "CustomErrorResponseList": {
+      "type": "list",
+      "member": {
+        "shape": "CustomErrorResponse",
+        "locationName": "CustomErrorResponse"
+      }
+    },
+    "CustomErrorResponses": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of HTTP status codes for which you want to specify a custom error page and/or a caching duration. If <code>Quantity</code> is <code>0</code>, you can omit <code>Items</code>.</p>"
+        },
+        "Items": {
+          "shape": "CustomErrorResponseList",
+          "documentation": "<p>A complex type that contains a <code>CustomErrorResponse</code> element for each HTTP status code for which you want to specify a custom error page and/or a caching duration. </p>"
+        }
+      },
+      "documentation": "<p>A complex type that controls:</p> <ul> <li> <p>Whether CloudFront replaces HTTP status codes in the 4xx and 5xx range with custom error messages before returning the response to the viewer.</p> </li> <li> <p>How long CloudFront caches HTTP status codes in the 4xx and 5xx range.</p> </li> </ul> <p>For more information about custom error pages, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html\">Customizing Error Responses</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "CustomHeaders": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of custom headers, if any, for this distribution.</p>"
+        },
+        "Items": {
+          "shape": "OriginCustomHeadersList",
+          "documentation": "<p> <b>Optional</b>: A list that contains one <code>OriginCustomHeader</code> element for each custom header that you want CloudFront to forward to the origin. If Quantity is <code>0</code>, omit <code>Items</code>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains the list of Custom Headers for each origin. </p>"
+    },
+    "CustomOriginConfig": {
+      "type": "structure",
+      "required": [
+        "HTTPPort",
+        "HTTPSPort",
+        "OriginProtocolPolicy"
+      ],
+      "members": {
+        "HTTPPort": {
+          "shape": "integer",
+          "documentation": "<p>The HTTP port the custom origin listens on.</p>"
+        },
+        "HTTPSPort": {
+          "shape": "integer",
+          "documentation": "<p>The HTTPS port the custom origin listens on.</p>"
+        },
+        "OriginProtocolPolicy": {
+          "shape": "OriginProtocolPolicy",
+          "documentation": "<p>The origin protocol policy to apply to your origin.</p>"
+        },
+        "OriginSslProtocols": {
+          "shape": "OriginSslProtocols",
+          "documentation": "<p>The SSL/TLS protocols that you want CloudFront to use when communicating with your origin over HTTPS.</p>"
+        },
+        "OriginReadTimeout": {
+          "shape": "integer",
+          "documentation": "<p>You can create a custom origin read timeout. All timeout units are in seconds. The default origin read timeout is 30 seconds, but you can configure custom timeout lengths using the CloudFront API. The minimum timeout length is 4 seconds; the maximum is 60 seconds.</p> <p>If you need to increase the maximum time limit, contact the <a href=\"https://console.aws.amazon.com/support/home#/\">AWS Support Center</a>.</p>"
+        },
+        "OriginKeepaliveTimeout": {
+          "shape": "integer",
+          "documentation": "<p>You can create a custom keep-alive timeout. All timeout units are in seconds. The default keep-alive timeout is 5 seconds, but you can configure custom timeout lengths using the CloudFront API. The minimum timeout length is 1 second; the maximum is 60 seconds.</p> <p>If you need to increase the maximum time limit, contact the <a href=\"https://console.aws.amazon.com/support/home#/\">AWS Support Center</a>.</p>"
+        }
+      },
+      "documentation": "<p>A custom origin or an Amazon S3 bucket configured as a website endpoint.</p>"
+    },
+    "DefaultCacheBehavior": {
+      "type": "structure",
+      "required": [
+        "TargetOriginId",
+        "ForwardedValues",
+        "TrustedSigners",
+        "ViewerProtocolPolicy",
+        "MinTTL"
+      ],
+      "members": {
+        "TargetOriginId": {
+          "shape": "string",
+          "documentation": "<p>The value of <code>ID</code> for the origin that you want CloudFront to route requests to when a request matches the path pattern either for a cache behavior or for the default cache behavior in your distribution.</p>"
+        },
+        "ForwardedValues": {
+          "shape": "ForwardedValues",
+          "documentation": "<p>A complex type that specifies how CloudFront handles query strings and cookies.</p>"
+        },
+        "TrustedSigners": {
+          "shape": "TrustedSigners",
+          "documentation": "<p>A complex type that specifies the AWS accounts, if any, that you want to allow to create signed URLs for private content.</p> <p>If you want to require signed URLs in requests for objects in the target origin that match the <code>PathPattern</code> for this cache behavior, specify <code>true</code> for <code>Enabled</code>, and specify the applicable values for <code>Quantity</code> and <code>Items</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i> Amazon CloudFront Developer Guide</i>.</p> <p>If you don't want to require signed URLs in requests for objects that match <code>PathPattern</code>, specify <code>false</code> for <code>Enabled</code> and <code>0</code> for <code>Quantity</code>. Omit <code>Items</code>.</p> <p>To add, change, or remove one or more trusted signers, change <code>Enabled</code> to <code>true</code> (if it's currently <code>false</code>), change <code>Quantity</code> as applicable, and specify all of the trusted signers that you want to include in the updated distribution.</p>"
+        },
+        "ViewerProtocolPolicy": {
+          "shape": "ViewerProtocolPolicy",
+          "documentation": "<p>The protocol that viewers can use to access the files in the origin specified by <code>TargetOriginId</code> when a request matches the path pattern in <code>PathPattern</code>. You can specify the following options:</p> <ul> <li> <p> <code>allow-all</code>: Viewers can use HTTP or HTTPS.</p> </li> <li> <p> <code>redirect-to-https</code>: If a viewer submits an HTTP request, CloudFront returns an HTTP status code of 301 (Moved Permanently) to the viewer along with the HTTPS URL. The viewer then resubmits the request using the new URL.</p> </li> <li> <p> <code>https-only</code>: If a viewer sends an HTTP request, CloudFront returns an HTTP status code of 403 (Forbidden).</p> </li> </ul> <p>For more information about requiring the HTTPS protocol, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/SecureConnections.html\">Using an HTTPS Connection to Access Your Objects</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <note> <p>The only way to guarantee that viewers retrieve an object that was fetched from the origin using HTTPS is never to use any other protocol to fetch the object. If you have recently changed from HTTP to HTTPS, we recommend that you clear your objects' cache because cached objects are protocol agnostic. That means that an edge location will return an object from the cache regardless of whether the current request protocol matches the protocol used previously. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </note>"
+        },
+        "MinTTL": {
+          "shape": "long",
+          "documentation": "<p>The minimum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>You must specify <code>0</code> for <code>MinTTL</code> if you configure CloudFront to forward all headers to your origin (under <code>Headers</code>, if you specify <code>1</code> for <code>Quantity</code> and <code>*</code> for <code>Name</code>).</p>"
+        },
+        "AllowedMethods": {
+          "shape": "AllowedMethods"
+        },
+        "SmoothStreaming": {
+          "shape": "boolean",
+          "documentation": "<p>Indicates whether you want to distribute media files in the Microsoft Smooth Streaming format using the origin that is associated with this cache behavior. If so, specify <code>true</code>; if not, specify <code>false</code>. If you specify <code>true</code> for <code>SmoothStreaming</code>, you can still distribute other content using this cache behavior if the content matches the value of <code>PathPattern</code>. </p>"
+        },
+        "DefaultTTL": {
+          "shape": "long",
+          "documentation": "<p>The default amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin does not add HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "MaxTTL": {
+          "shape": "long",
+          "documentation": "<p>The maximum amount of time that you want objects to stay in CloudFront caches before CloudFront forwards another request to your origin to determine whether the object has been updated. The value that you specify applies only when your origin adds HTTP headers such as <code>Cache-Control max-age</code>, <code>Cache-Control s-maxage</code>, and <code>Expires</code> to objects. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html\">Managing How Long Content Stays in an Edge Cache (Expiration)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "Compress": {
+          "shape": "boolean",
+          "documentation": "<p>Whether you want CloudFront to automatically compress certain files for this cache behavior. If so, specify <code>true</code>; if not, specify <code>false</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html\">Serving Compressed Files</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "LambdaFunctionAssociations": {
+          "shape": "LambdaFunctionAssociations",
+          "documentation": "<p>A complex type that contains zero or more Lambda function associations for a cache behavior.</p>"
+        },
+        "FieldLevelEncryptionId": {
+          "shape": "string",
+          "documentation": "<p>The value of <code>ID</code> for the field-level encryption configuration that you want CloudFront to use for encrypting specific fields of data for a cache behavior or for the default cache behavior in your distribution.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that describes the default cache behavior if you don't specify a <code>CacheBehavior</code> element or if files don't match any of the values of <code>PathPattern</code> in <code>CacheBehavior</code> elements. You must create exactly one default cache behavior.</p>"
+    },
+    "DeleteCloudFrontOriginAccessIdentityRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The origin access identity's ID.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header you received from a previous <code>GET</code> or <code>PUT</code> request. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      },
+      "documentation": "<p>Deletes a origin access identity.</p>"
+    },
+    "DeleteDistributionRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The distribution ID. </p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when you disabled the distribution. For example: <code>E2QWRUHAPOMQZL</code>. </p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      },
+      "documentation": "<p>This action deletes a web distribution. To delete a web distribution using the CloudFront API, perform the following steps.</p> <p> <b>To delete a web distribution using the CloudFront API:</b> </p> <ol> <li> <p>Disable the web distribution </p> </li> <li> <p>Submit a <code>GET Distribution Config</code> request to get the current configuration and the <code>Etag</code> header for the distribution.</p> </li> <li> <p>Update the XML document that was returned in the response to your <code>GET Distribution Config</code> request to change the value of <code>Enabled</code> to <code>false</code>.</p> </li> <li> <p>Submit a <code>PUT Distribution Config</code> request to update the configuration for your distribution. In the request body, include the XML document that you updated in Step 3. Set the value of the HTTP <code>If-Match</code> header to the value of the <code>ETag</code> header that CloudFront returned when you submitted the <code>GET Distribution Config</code> request in Step 2.</p> </li> <li> <p>Review the response to the <code>PUT Distribution Config</code> request to confirm that the distribution was successfully disabled.</p> </li> <li> <p>Submit a <code>GET Distribution</code> request to confirm that your changes have propagated. When propagation is complete, the value of <code>Status</code> is <code>Deployed</code>.</p> </li> <li> <p>Submit a <code>DELETE Distribution</code> request. Set the value of the HTTP <code>If-Match</code> header to the value of the <code>ETag</code> header that CloudFront returned when you submitted the <code>GET Distribution Config</code> request in Step 6.</p> </li> <li> <p>Review the response to your <code>DELETE Distribution</code> request to confirm that the distribution was successfully deleted.</p> </li> </ol> <p>For information about deleting a distribution using the CloudFront console, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowToDeleteDistribution.html\">Deleting a Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "DeleteFieldLevelEncryptionConfigRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The ID of the configuration you want to delete from CloudFront.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when retrieving the configuration identity to delete. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      }
+    },
+    "DeleteFieldLevelEncryptionProfileRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>Request the ID of the profile you want to delete from CloudFront.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when retrieving the profile to delete. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      }
+    },
+    "DeletePublicKeyRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The ID of the public key you want to remove from CloudFront.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when retrieving the public key identity to delete. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      }
+    },
+    "DeleteStreamingDistributionRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The distribution ID. </p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when you disabled the streaming distribution. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      },
+      "documentation": "<p>The request to delete a streaming distribution.</p>"
+    },
+    "Distribution": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "ARN",
+        "Status",
+        "LastModifiedTime",
+        "InProgressInvalidationBatches",
+        "DomainName",
+        "ActiveTrustedSigners",
+        "DistributionConfig"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The identifier for the distribution. For example: <code>EDFDVBD632BHDS5</code>. </p>"
+        },
+        "ARN": {
+          "shape": "string",
+          "documentation": "<p>The ARN (Amazon Resource Name) for the distribution. For example: <code>arn:aws:cloudfront::123456789012:distribution/EDFDVBD632BHDS5</code>, where <code>123456789012</code> is your AWS account ID.</p>"
+        },
+        "Status": {
+          "shape": "string",
+          "documentation": "<p>This response element indicates the current status of the distribution. When the status is <code>Deployed</code>, the distribution's information is fully propagated to all CloudFront edge locations. </p>"
+        },
+        "LastModifiedTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The date and time the distribution was last modified. </p>"
+        },
+        "InProgressInvalidationBatches": {
+          "shape": "integer",
+          "documentation": "<p>The number of invalidation batches currently in progress. </p>"
+        },
+        "DomainName": {
+          "shape": "string",
+          "documentation": "<p>The domain name corresponding to the distribution, for example, <code>d111111abcdef8.cloudfront.net</code>. </p>"
+        },
+        "ActiveTrustedSigners": {
+          "shape": "ActiveTrustedSigners",
+          "documentation": "<p>CloudFront automatically adds this element to the response only if you've set up the distribution to serve private content with signed URLs. The element lists the key pair IDs that CloudFront is aware of for each trusted signer. The <code>Signer</code> child element lists the AWS account number of the trusted signer (or an empty <code>Self</code> element if the signer is you). The <code>Signer</code> element also includes the IDs of any active key pairs associated with the trusted signer's AWS account. If no <code>KeyPairId</code> element appears for a <code>Signer</code>, that signer can't create working signed URLs.</p>"
+        },
+        "DistributionConfig": {
+          "shape": "DistributionConfig",
+          "documentation": "<p>The current configuration information for the distribution. Send a <code>GET</code> request to the <code>/<i>CloudFront API version</i>/distribution ID/config</code> resource.</p>"
+        },
+        "AliasICPRecordals": {
+          "shape": "AliasICPRecordals",
+          "documentation": "<p>AWS services in China customers must file for an Internet Content Provider (ICP) recordal if they want to serve content publicly on an alternate domain name, also known as a CNAME, that they've added to CloudFront. AliasICPRecordal provides the ICP recordal status for CNAMEs associated with distributions.</p> <p>For more information about ICP recordals, see <a href=\"https://docs.amazonaws.cn/en_us/aws/latest/userguide/accounts-and-credentials.html\"> Signup, Accounts, and Credentials</a> in <i>Getting Started with AWS services in China</i>.</p>"
+        }
+      },
+      "documentation": "<p>A distribution tells CloudFront where you want content to be delivered from, and the details about how to track and manage content delivery.</p>"
+    },
+    "DistributionConfig": {
+      "type": "structure",
+      "required": [
+        "CallerReference",
+        "Origins",
+        "DefaultCacheBehavior",
+        "Comment",
+        "Enabled"
+      ],
+      "members": {
+        "CallerReference": {
+          "shape": "string",
+          "documentation": "<p>A unique value (for example, a date-time stamp) that ensures that the request can't be replayed.</p> <p>If the value of <code>CallerReference</code> is new (regardless of the content of the <code>DistributionConfig</code> object), CloudFront creates a new distribution.</p> <p>If <code>CallerReference</code> is a value that you already sent in a previous request to create a distribution, CloudFront returns a <code>DistributionAlreadyExists</code> error.</p>"
+        },
+        "Aliases": {
+          "shape": "Aliases",
+          "documentation": "<p>A complex type that contains information about CNAMEs (alternate domain names), if any, for this distribution.</p>"
+        },
+        "DefaultRootObject": {
+          "shape": "string",
+          "documentation": "<p>The object that you want CloudFront to request from your origin (for example, <code>index.html</code>) when a viewer requests the root URL for your distribution (<code>http://www.example.com</code>) instead of an object in your distribution (<code>http://www.example.com/product-description.html</code>). Specifying a default root object avoids exposing the contents of your distribution.</p> <p>Specify only the object name, for example, <code>index.html</code>. Don't add a <code>/</code> before the object name.</p> <p>If you don't want to specify a default root object when you create a distribution, include an empty <code>DefaultRootObject</code> element.</p> <p>To delete the default root object from an existing distribution, update the distribution configuration and include an empty <code>DefaultRootObject</code> element.</p> <p>To replace the default root object, update the distribution configuration and specify the new object.</p> <p>For more information about the default root object, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html\">Creating a Default Root Object</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "Origins": {
+          "shape": "Origins",
+          "documentation": "<p>A complex type that contains information about origins for this distribution. </p>"
+        },
+        "OriginGroups": {
+          "shape": "OriginGroups",
+          "documentation": "<p> A complex type that contains information about origin groups for this distribution.</p>"
+        },
+        "DefaultCacheBehavior": {
+          "shape": "DefaultCacheBehavior",
+          "documentation": "<p>A complex type that describes the default cache behavior if you don't specify a <code>CacheBehavior</code> element or if files don't match any of the values of <code>PathPattern</code> in <code>CacheBehavior</code> elements. You must create exactly one default cache behavior.</p>"
+        },
+        "CacheBehaviors": {
+          "shape": "CacheBehaviors",
+          "documentation": "<p>A complex type that contains zero or more <code>CacheBehavior</code> elements. </p>"
+        },
+        "CustomErrorResponses": {
+          "shape": "CustomErrorResponses",
+          "documentation": "<p>A complex type that controls the following:</p> <ul> <li> <p>Whether CloudFront replaces HTTP status codes in the 4xx and 5xx range with custom error messages before returning the response to the viewer.</p> </li> <li> <p>How long CloudFront caches HTTP status codes in the 4xx and 5xx range.</p> </li> </ul> <p>For more information about custom error pages, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html\">Customizing Error Responses</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "Comment": {
+          "shape": "CommentType",
+          "documentation": "<p>Any comments you want to include about the distribution.</p> <p>If you don't want to specify a comment, include an empty <code>Comment</code> element.</p> <p>To delete an existing comment, update the distribution configuration and include an empty <code>Comment</code> element.</p> <p>To add or change a comment, update the distribution configuration and specify the new comment.</p>"
+        },
+        "Logging": {
+          "shape": "LoggingConfig",
+          "documentation": "<p>A complex type that controls whether access logs are written for the distribution.</p> <p>For more information about logging, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html\">Access Logs</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "PriceClass": {
+          "shape": "PriceClass",
+          "documentation": "<p>The price class that corresponds with the maximum price that you want to pay for CloudFront service. If you specify <code>PriceClass_All</code>, CloudFront responds to requests for your objects from all CloudFront edge locations.</p> <p>If you specify a price class other than <code>PriceClass_All</code>, CloudFront serves your objects from the CloudFront edge location that has the lowest latency among the edge locations in your price class. Viewers who are in or near regions that are excluded from your specified price class may encounter slower performance.</p> <p>For more information about price classes, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PriceClass.html\">Choosing the Price Class for a CloudFront Distribution</a> in the <i>Amazon CloudFront Developer Guide</i>. For information about CloudFront pricing, including how price classes (such as Price Class 100) map to CloudFront regions, see <a href=\"http://aws.amazon.com/cloudfront/pricing/\">Amazon CloudFront Pricing</a>. For price class information, scroll down to see the table at the bottom of the page.</p>"
+        },
+        "Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>From this field, you can enable or disable the selected distribution.</p>"
+        },
+        "ViewerCertificate": {
+          "shape": "ViewerCertificate",
+          "documentation": "<p>A complex type that specifies whether you want viewers to use HTTP or HTTPS to request your objects, whether you're using an alternate domain name with HTTPS, and if so, if you're using AWS Certificate Manager (ACM) or a third-party certificate authority.</p>"
+        },
+        "Restrictions": {
+          "shape": "Restrictions",
+          "documentation": "<p>A complex type that identifies ways in which you want to restrict distribution of your content.</p>"
+        },
+        "WebACLId": {
+          "shape": "string",
+          "documentation": "<p>A unique identifier that specifies the AWS WAF web ACL, if any, to associate with this distribution.</p> <p>AWS WAF is a web application firewall that lets you monitor the HTTP and HTTPS requests that are forwarded to CloudFront, and lets you control access to your content. Based on conditions that you specify, such as the IP addresses that requests originate from or the values of query strings, CloudFront responds to requests either with the requested content or with an HTTP 403 status code (Forbidden). You can also configure CloudFront to return a custom error page when a request is blocked. For more information about AWS WAF, see the <a href=\"http://docs.aws.amazon.com/waf/latest/developerguide/what-is-aws-waf.html\">AWS WAF Developer Guide</a>. </p>"
+        },
+        "HttpVersion": {
+          "shape": "HttpVersion",
+          "documentation": "<p>(Optional) Specify the maximum HTTP version that you want viewers to use to communicate with CloudFront. The default value for new web distributions is http2. Viewers that don't support HTTP/2 automatically use an earlier HTTP version.</p> <p>For viewers and CloudFront to use HTTP/2, viewers must support TLS 1.2 or later, and must support Server Name Identification (SNI).</p> <p>In general, configuring CloudFront to communicate with viewers using HTTP/2 reduces latency. You can improve performance by optimizing for HTTP/2. For more information, do an Internet search for \"http/2 optimization.\" </p>"
+        },
+        "IsIPV6Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>If you want CloudFront to respond to IPv6 DNS requests with an IPv6 address for your distribution, specify <code>true</code>. If you specify <code>false</code>, CloudFront responds to IPv6 DNS requests with the DNS response code <code>NOERROR</code> and with no IP addresses. This allows viewers to submit a second request, for an IPv4 address for your distribution. </p> <p>In general, you should enable IPv6 if you have users on IPv6 networks who want to access your content. However, if you're using signed URLs or signed cookies to restrict access to your content, and if you're using a custom policy that includes the <code>IpAddress</code> parameter to restrict the IP addresses that can access your content, don't enable IPv6. If you want to restrict access to some content by IP address and not restrict access to other content (or restrict access but not by IP address), you can create two distributions. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html\">Creating a Signed URL Using a Custom Policy</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>If you're using an Amazon Route 53 alias resource record set to route traffic to your CloudFront distribution, you need to create a second alias resource record set when both of the following are true:</p> <ul> <li> <p>You enable IPv6 for the distribution</p> </li> <li> <p>You're using alternate domain names in the URLs for your objects</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html\">Routing Traffic to an Amazon CloudFront Web Distribution by Using Your Domain Name</a> in the <i>Amazon Route 53 Developer Guide</i>.</p> <p>If you created a CNAME resource record set, either with Amazon Route 53 or with another DNS service, you don't need to make any changes. A CNAME record will route traffic to your distribution regardless of the IP address format of the viewer request.</p>"
+        }
+      },
+      "documentation": "<p>A distribution configuration.</p>"
+    },
+    "DistributionConfigWithTags": {
+      "type": "structure",
+      "required": [
+        "DistributionConfig",
+        "Tags"
+      ],
+      "members": {
+        "DistributionConfig": {
+          "shape": "DistributionConfig",
+          "documentation": "<p>A distribution configuration.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "documentation": "<p>A complex type that contains zero or more <code>Tag</code> elements.</p>"
+        }
+      },
+      "documentation": "<p>A distribution Configuration and a list of tags to be associated with the distribution.</p>"
+    },
+    "DistributionList": {
+      "type": "structure",
+      "required": [
+        "Marker",
+        "MaxItems",
+        "IsTruncated",
+        "Quantity"
+      ],
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>The value you provided for the <code>Marker</code> request parameter.</p>"
+        },
+        "NextMarker": {
+          "shape": "string",
+          "documentation": "<p>If <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value you can use for the <code>Marker</code> request parameter to continue listing your distributions where they left off. </p>"
+        },
+        "MaxItems": {
+          "shape": "integer",
+          "documentation": "<p>The value you provided for the <code>MaxItems</code> request parameter.</p>"
+        },
+        "IsTruncated": {
+          "shape": "boolean",
+          "documentation": "<p>A flag that indicates whether more distributions remain to be listed. If your results were truncated, you can make a follow-up pagination request using the <code>Marker</code> request parameter to retrieve more distributions in the list.</p>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of distributions that were created by the current AWS account. </p>"
+        },
+        "Items": {
+          "shape": "DistributionSummaryList",
+          "documentation": "<p>A complex type that contains one <code>DistributionSummary</code> element for each distribution that was created by the current AWS account.</p>"
+        }
+      },
+      "documentation": "<p>A distribution list.</p>"
+    },
+    "DistributionSummary": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "ARN",
+        "Status",
+        "LastModifiedTime",
+        "DomainName",
+        "Aliases",
+        "Origins",
+        "DefaultCacheBehavior",
+        "CacheBehaviors",
+        "CustomErrorResponses",
+        "Comment",
+        "PriceClass",
+        "Enabled",
+        "ViewerCertificate",
+        "Restrictions",
+        "WebACLId",
+        "HttpVersion",
+        "IsIPV6Enabled"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The identifier for the distribution. For example: <code>EDFDVBD632BHDS5</code>.</p>"
+        },
+        "ARN": {
+          "shape": "string",
+          "documentation": "<p>The ARN (Amazon Resource Name) for the distribution. For example: <code>arn:aws:cloudfront::123456789012:distribution/EDFDVBD632BHDS5</code>, where <code>123456789012</code> is your AWS account ID.</p>"
+        },
+        "Status": {
+          "shape": "string",
+          "documentation": "<p>The current status of the distribution. When the status is <code>Deployed</code>, the distribution's information is propagated to all CloudFront edge locations.</p>"
+        },
+        "LastModifiedTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The date and time the distribution was last modified.</p>"
+        },
+        "DomainName": {
+          "shape": "string",
+          "documentation": "<p>The domain name that corresponds to the distribution, for example, <code>d111111abcdef8.cloudfront.net</code>.</p>"
+        },
+        "Aliases": {
+          "shape": "Aliases",
+          "documentation": "<p>A complex type that contains information about CNAMEs (alternate domain names), if any, for this distribution.</p>"
+        },
+        "Origins": {
+          "shape": "Origins",
+          "documentation": "<p>A complex type that contains information about origins for this distribution.</p>"
+        },
+        "OriginGroups": {
+          "shape": "OriginGroups",
+          "documentation": "<p> A complex type that contains information about origin groups for this distribution.</p>"
+        },
+        "DefaultCacheBehavior": {
+          "shape": "DefaultCacheBehavior",
+          "documentation": "<p>A complex type that describes the default cache behavior if you don't specify a <code>CacheBehavior</code> element or if files don't match any of the values of <code>PathPattern</code> in <code>CacheBehavior</code> elements. You must create exactly one default cache behavior.</p>"
+        },
+        "CacheBehaviors": {
+          "shape": "CacheBehaviors",
+          "documentation": "<p>A complex type that contains zero or more <code>CacheBehavior</code> elements.</p>"
+        },
+        "CustomErrorResponses": {
+          "shape": "CustomErrorResponses",
+          "documentation": "<p>A complex type that contains zero or more <code>CustomErrorResponses</code> elements.</p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>The comment originally specified when this distribution was created.</p>"
+        },
+        "PriceClass": {
+          "shape": "PriceClass",
+          "documentation": "<p>A complex type that contains information about price class for this streaming distribution. </p>"
+        },
+        "Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>Whether the distribution is enabled to accept user requests for content.</p>"
+        },
+        "ViewerCertificate": {
+          "shape": "ViewerCertificate",
+          "documentation": "<p>A complex type that specifies whether you want viewers to use HTTP or HTTPS to request your objects, whether you're using an alternate domain name with HTTPS, and if so, if you're using AWS Certificate Manager (ACM) or a third-party certificate authority.</p>"
+        },
+        "Restrictions": {
+          "shape": "Restrictions",
+          "documentation": "<p>A complex type that identifies ways in which you want to restrict distribution of your content.</p>"
+        },
+        "WebACLId": {
+          "shape": "string",
+          "documentation": "<p>The Web ACL Id (if any) associated with the distribution.</p>"
+        },
+        "HttpVersion": {
+          "shape": "HttpVersion",
+          "documentation": "<p> Specify the maximum HTTP version that you want viewers to use to communicate with CloudFront. The default value for new web distributions is <code>http2</code>. Viewers that don't support <code>HTTP/2</code> will automatically use an earlier version.</p>"
+        },
+        "IsIPV6Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>Whether CloudFront responds to IPv6 DNS requests with an IPv6 address for your distribution.</p>"
+        },
+        "AliasICPRecordals": {
+          "shape": "AliasICPRecordals",
+          "documentation": "<p>AWS services in China customers must file for an Internet Content Provider (ICP) recordal if they want to serve content publicly on an alternate domain name, also known as a CNAME, that they've added to CloudFront. AliasICPRecordal provides the ICP recordal status for CNAMEs associated with distributions.</p> <p>For more information about ICP recordals, see <a href=\"https://docs.amazonaws.cn/en_us/aws/latest/userguide/accounts-and-credentials.html\"> Signup, Accounts, and Credentials</a> in <i>Getting Started with AWS services in China</i>.</p>"
+        }
+      },
+      "documentation": "<p>A summary of the information about a CloudFront distribution.</p>"
+    },
+    "DistributionSummaryList": {
+      "type": "list",
+      "member": {
+        "shape": "DistributionSummary",
+        "locationName": "DistributionSummary"
+      }
+    },
+    "EncryptionEntities": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>Number of field pattern items in a field-level encryption content type-profile mapping. </p>"
+        },
+        "Items": {
+          "shape": "EncryptionEntityList",
+          "documentation": "<p>An array of field patterns in a field-level encryption content type-profile mapping. </p>"
+        }
+      },
+      "documentation": "<p>Complex data type for field-level encryption profiles that includes all of the encryption entities. </p>"
+    },
+    "EncryptionEntity": {
+      "type": "structure",
+      "required": [
+        "PublicKeyId",
+        "ProviderId",
+        "FieldPatterns"
+      ],
+      "members": {
+        "PublicKeyId": {
+          "shape": "string",
+          "documentation": "<p>The public key associated with a set of field-level encryption patterns, to be used when encrypting the fields that match the patterns. </p>"
+        },
+        "ProviderId": {
+          "shape": "string",
+          "documentation": "<p>The provider associated with the public key being used for encryption. This value must also be provided with the private key for applications to be able to decrypt data.</p>"
+        },
+        "FieldPatterns": {
+          "shape": "FieldPatterns",
+          "documentation": "<p>Field patterns in a field-level encryption content type profile specify the fields that you want to be encrypted. You can provide the full field name, or any beginning characters followed by a wildcard (*). You can't overlap field patterns. For example, you can't have both ABC* and AB*. Note that field patterns are case-sensitive. </p>"
+        }
+      },
+      "documentation": "<p>Complex data type for field-level encryption profiles that includes the encryption key and field pattern specifications. </p>"
+    },
+    "EncryptionEntityList": {
+      "type": "list",
+      "member": {
+        "shape": "EncryptionEntity",
+        "locationName": "EncryptionEntity"
+      }
+    },
+    "EventType": {
+      "type": "string",
+      "enum": [
+        "viewer-request",
+        "viewer-response",
+        "origin-request",
+        "origin-response"
+      ]
+    },
+    "FieldLevelEncryption": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "LastModifiedTime",
+        "FieldLevelEncryptionConfig"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The configuration ID for a field-level encryption configuration which includes a set of profiles that specify certain selected data fields to be encrypted by specific public keys.</p>"
+        },
+        "LastModifiedTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The last time the field-level encryption configuration was changed. </p>"
+        },
+        "FieldLevelEncryptionConfig": {
+          "shape": "FieldLevelEncryptionConfig",
+          "documentation": "<p>A complex data type that includes the profile configurations specified for field-level encryption. </p>"
+        }
+      },
+      "documentation": "<p>A complex data type that includes the profile configurations and other options specified for field-level encryption. </p>"
+    },
+    "FieldLevelEncryptionConfig": {
+      "type": "structure",
+      "required": [
+        "CallerReference"
+      ],
+      "members": {
+        "CallerReference": {
+          "shape": "string",
+          "documentation": "<p>A unique number that ensures the request can't be replayed.</p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>An optional comment about the configuration.</p>"
+        },
+        "QueryArgProfileConfig": {
+          "shape": "QueryArgProfileConfig",
+          "documentation": "<p>A complex data type that specifies when to forward content if a profile isn't found and the profile that can be provided as a query argument in a request.</p>"
+        },
+        "ContentTypeProfileConfig": {
+          "shape": "ContentTypeProfileConfig",
+          "documentation": "<p>A complex data type that specifies when to forward content if a content type isn't recognized and profiles to use as by default in a request if a query argument doesn't specify a profile to use.</p>"
+        }
+      },
+      "documentation": "<p>A complex data type that includes the profile configurations specified for field-level encryption. </p>"
+    },
+    "FieldLevelEncryptionList": {
+      "type": "structure",
+      "required": [
+        "MaxItems",
+        "Quantity"
+      ],
+      "members": {
+        "NextMarker": {
+          "shape": "string",
+          "documentation": "<p>If there are more elements to be listed, this element is present and contains the value that you can use for the <code>Marker</code> request parameter to continue listing your configurations where you left off.</p>"
+        },
+        "MaxItems": {
+          "shape": "integer",
+          "documentation": "<p>The maximum number of elements you want in the response body. </p>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of field-level encryption items.</p>"
+        },
+        "Items": {
+          "shape": "FieldLevelEncryptionSummaryList",
+          "documentation": "<p>An array of field-level encryption items.</p>"
+        }
+      },
+      "documentation": "<p>List of field-level encrpytion configurations.</p>"
+    },
+    "FieldLevelEncryptionProfile": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "LastModifiedTime",
+        "FieldLevelEncryptionProfileConfig"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The ID for a field-level encryption profile configuration which includes a set of profiles that specify certain selected data fields to be encrypted by specific public keys.</p>"
+        },
+        "LastModifiedTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The last time the field-level encryption profile was updated.</p>"
+        },
+        "FieldLevelEncryptionProfileConfig": {
+          "shape": "FieldLevelEncryptionProfileConfig",
+          "documentation": "<p>A complex data type that includes the profile name and the encryption entities for the field-level encryption profile.</p>"
+        }
+      },
+      "documentation": "<p>A complex data type for field-level encryption profiles.</p>"
+    },
+    "FieldLevelEncryptionProfileConfig": {
+      "type": "structure",
+      "required": [
+        "Name",
+        "CallerReference",
+        "EncryptionEntities"
+      ],
+      "members": {
+        "Name": {
+          "shape": "string",
+          "documentation": "<p>Profile name for the field-level encryption profile.</p>"
+        },
+        "CallerReference": {
+          "shape": "string",
+          "documentation": "<p>A unique number that ensures that the request can't be replayed.</p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>An optional comment for the field-level encryption profile.</p>"
+        },
+        "EncryptionEntities": {
+          "shape": "EncryptionEntities",
+          "documentation": "<p>A complex data type of encryption entities for the field-level encryption profile that include the public key ID, provider, and field patterns for specifying which fields to encrypt with this key.</p>"
+        }
+      },
+      "documentation": "<p>A complex data type of profiles for the field-level encryption.</p>"
+    },
+    "FieldLevelEncryptionProfileList": {
+      "type": "structure",
+      "required": [
+        "MaxItems",
+        "Quantity"
+      ],
+      "members": {
+        "NextMarker": {
+          "shape": "string",
+          "documentation": "<p>If there are more elements to be listed, this element is present and contains the value that you can use for the <code>Marker</code> request parameter to continue listing your profiles where you left off.</p>"
+        },
+        "MaxItems": {
+          "shape": "integer",
+          "documentation": "<p>The maximum number of field-level encryption profiles you want in the response body. </p>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of field-level encryption profiles.</p>"
+        },
+        "Items": {
+          "shape": "FieldLevelEncryptionProfileSummaryList",
+          "documentation": "<p>The field-level encryption profile items.</p>"
+        }
+      },
+      "documentation": "<p>List of field-level encryption profiles.</p>"
+    },
+    "FieldLevelEncryptionProfileSummary": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "LastModifiedTime",
+        "Name",
+        "EncryptionEntities"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>ID for the field-level encryption profile summary.</p>"
+        },
+        "LastModifiedTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The time when the the field-level encryption profile summary was last updated.</p>"
+        },
+        "Name": {
+          "shape": "string",
+          "documentation": "<p>Name for the field-level encryption profile summary.</p>"
+        },
+        "EncryptionEntities": {
+          "shape": "EncryptionEntities",
+          "documentation": "<p>A complex data type of encryption entities for the field-level encryption profile that include the public key ID, provider, and field patterns for specifying which fields to encrypt with this key.</p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>An optional comment for the field-level encryption profile summary.</p>"
+        }
+      },
+      "documentation": "<p>The field-level encryption profile summary.</p>"
+    },
+    "FieldLevelEncryptionProfileSummaryList": {
+      "type": "list",
+      "member": {
+        "shape": "FieldLevelEncryptionProfileSummary",
+        "locationName": "FieldLevelEncryptionProfileSummary"
+      }
+    },
+    "FieldLevelEncryptionSummary": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "LastModifiedTime"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The unique ID of a field-level encryption item.</p>"
+        },
+        "LastModifiedTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The last time that the summary of field-level encryption items was modified.</p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>An optional comment about the field-level encryption item.</p>"
+        },
+        "QueryArgProfileConfig": {
+          "shape": "QueryArgProfileConfig",
+          "documentation": "<p> A summary of a query argument-profile mapping. </p>"
+        },
+        "ContentTypeProfileConfig": {
+          "shape": "ContentTypeProfileConfig",
+          "documentation": "<p> A summary of a content type-profile mapping. </p>"
+        }
+      },
+      "documentation": "<p>A summary of a field-level encryption item.</p>"
+    },
+    "FieldLevelEncryptionSummaryList": {
+      "type": "list",
+      "member": {
+        "shape": "FieldLevelEncryptionSummary",
+        "locationName": "FieldLevelEncryptionSummary"
+      }
+    },
+    "FieldPatternList": {
+      "type": "list",
+      "member": {
+        "shape": "string",
+        "locationName": "FieldPattern"
+      }
+    },
+    "FieldPatterns": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of field-level encryption field patterns.</p>"
+        },
+        "Items": {
+          "shape": "FieldPatternList",
+          "documentation": "<p>An array of the field-level encryption field patterns.</p>"
+        }
+      },
+      "documentation": "<p>A complex data type that includes the field patterns to match for field-level encryption.</p>"
+    },
+    "Format": {
+      "type": "string",
+      "enum": [
+        "URLEncoded"
+      ]
+    },
+    "ForwardedValues": {
+      "type": "structure",
+      "required": [
+        "QueryString",
+        "Cookies"
+      ],
+      "members": {
+        "QueryString": {
+          "shape": "boolean",
+          "documentation": "<p>Indicates whether you want CloudFront to forward query strings to the origin that is associated with this cache behavior and cache based on the query string parameters. CloudFront behavior depends on the value of <code>QueryString</code> and on the values that you specify for <code>QueryStringCacheKeys</code>, if any:</p> <p>If you specify true for <code>QueryString</code> and you don't specify any values for <code>QueryStringCacheKeys</code>, CloudFront forwards all query string parameters to the origin and caches based on all query string parameters. Depending on how many query string parameters and values you have, this can adversely affect performance because CloudFront must forward more requests to the origin.</p> <p>If you specify true for <code>QueryString</code> and you specify one or more values for <code>QueryStringCacheKeys</code>, CloudFront forwards all query string parameters to the origin, but it only caches based on the query string parameters that you specify.</p> <p>If you specify false for <code>QueryString</code>, CloudFront doesn't forward any query string parameters to the origin, and doesn't cache based on query string parameters.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/QueryStringParameters.html\">Configuring CloudFront to Cache Based on Query String Parameters</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "Cookies": {
+          "shape": "CookiePreference",
+          "documentation": "<p>A complex type that specifies whether you want CloudFront to forward cookies to the origin and, if so, which ones. For more information about forwarding cookies to the origin, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Cookies.html\">How CloudFront Forwards, Caches, and Logs Cookies</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "Headers": {
+          "shape": "Headers",
+          "documentation": "<p>A complex type that specifies the <code>Headers</code>, if any, that you want CloudFront to forward to the origin for this cache behavior (whitelisted headers). For the headers that you specify, CloudFront also caches separate versions of a specified object that is based on the header values in viewer requests.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html\"> Caching Content Based on Request Headers</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "QueryStringCacheKeys": {
+          "shape": "QueryStringCacheKeys",
+          "documentation": "<p>A complex type that contains information about the query string parameters that you want CloudFront to use for caching for this cache behavior.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that specifies how CloudFront handles query strings and cookies.</p>"
+    },
+    "GeoRestriction": {
+      "type": "structure",
+      "required": [
+        "RestrictionType",
+        "Quantity"
+      ],
+      "members": {
+        "RestrictionType": {
+          "shape": "GeoRestrictionType",
+          "documentation": "<p>The method that you want to use to restrict distribution of your content by country:</p> <ul> <li> <p> <code>none</code>: No geo restriction is enabled, meaning access to content is not restricted by client geo location.</p> </li> <li> <p> <code>blacklist</code>: The <code>Location</code> elements specify the countries in which you don't want CloudFront to distribute your content.</p> </li> <li> <p> <code>whitelist</code>: The <code>Location</code> elements specify the countries in which you want CloudFront to distribute your content.</p> </li> </ul>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>When geo restriction is <code>enabled</code>, this is the number of countries in your <code>whitelist</code> or <code>blacklist</code>. Otherwise, when it is not enabled, <code>Quantity</code> is <code>0</code>, and you can omit <code>Items</code>.</p>"
+        },
+        "Items": {
+          "shape": "LocationList",
+          "documentation": "<p> A complex type that contains a <code>Location</code> element for each country in which you want CloudFront either to distribute your content (<code>whitelist</code>) or not distribute your content (<code>blacklist</code>).</p> <p>The <code>Location</code> element is a two-letter, uppercase country code for a country that you want to include in your <code>blacklist</code> or <code>whitelist</code>. Include one <code>Location</code> element for each country.</p> <p>CloudFront and <code>MaxMind</code> both use <code>ISO 3166</code> country codes. For the current list of countries and the corresponding codes, see <code>ISO 3166-1-alpha-2</code> code on the <i>International Organization for Standardization</i> website. You can also refer to the country list on the CloudFront console, which includes both country names and codes.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that controls the countries in which your content is distributed. CloudFront determines the location of your users using <code>MaxMind</code> GeoIP databases. </p>"
+    },
+    "GeoRestrictionType": {
+      "type": "string",
+      "enum": [
+        "blacklist",
+        "whitelist",
+        "none"
+      ]
+    },
+    "GetCloudFrontOriginAccessIdentityConfigRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The identity's ID. </p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      },
+      "documentation": "<p>The origin access identity's configuration information. For more information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CloudFrontOriginAccessIdentityConfig.html\">CloudFrontOriginAccessIdentityConfig</a>.</p>"
+    },
+    "GetCloudFrontOriginAccessIdentityConfigResult": {
+      "type": "structure",
+      "members": {
+        "CloudFrontOriginAccessIdentityConfig": {
+          "shape": "CloudFrontOriginAccessIdentityConfig",
+          "documentation": "<p>The origin access identity's configuration information. </p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "CloudFrontOriginAccessIdentityConfig"
+    },
+    "GetCloudFrontOriginAccessIdentityRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The identity's ID.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      },
+      "documentation": "<p>The request to get an origin access identity's information.</p>"
+    },
+    "GetCloudFrontOriginAccessIdentityResult": {
+      "type": "structure",
+      "members": {
+        "CloudFrontOriginAccessIdentity": {
+          "shape": "CloudFrontOriginAccessIdentity",
+          "documentation": "<p>The origin access identity's information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the origin access identity's information. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "CloudFrontOriginAccessIdentity"
+    },
+    "GetDistributionConfigRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The distribution's ID. If the ID is empty, an empty distribution configuration is returned.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      },
+      "documentation": "<p>The request to get a distribution configuration.</p>"
+    },
+    "GetDistributionConfigResult": {
+      "type": "structure",
+      "members": {
+        "DistributionConfig": {
+          "shape": "DistributionConfig",
+          "documentation": "<p>The distribution's configuration information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "DistributionConfig"
+    },
+    "GetDistributionRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The distribution's ID. If the ID is empty, an empty distribution configuration is returned.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      },
+      "documentation": "<p>The request to get a distribution's information.</p>"
+    },
+    "GetDistributionResult": {
+      "type": "structure",
+      "members": {
+        "Distribution": {
+          "shape": "Distribution",
+          "documentation": "<p>The distribution's information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the distribution's information. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "Distribution"
+    },
+    "GetFieldLevelEncryptionConfigRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>Request the ID for the field-level encryption configuration information.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      }
+    },
+    "GetFieldLevelEncryptionConfigResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryptionConfig": {
+          "shape": "FieldLevelEncryptionConfig",
+          "documentation": "<p>Return the field-level encryption configuration information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the field level encryption configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "FieldLevelEncryptionConfig"
+    },
+    "GetFieldLevelEncryptionProfileConfigRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>Get the ID for the field-level encryption profile configuration information.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      }
+    },
+    "GetFieldLevelEncryptionProfileConfigResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryptionProfileConfig": {
+          "shape": "FieldLevelEncryptionProfileConfig",
+          "documentation": "<p>Return the field-level encryption profile configuration information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the field-level encryption profile configuration result. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "FieldLevelEncryptionProfileConfig"
+    },
+    "GetFieldLevelEncryptionProfileRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>Get the ID for the field-level encryption profile information.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      }
+    },
+    "GetFieldLevelEncryptionProfileResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryptionProfile": {
+          "shape": "FieldLevelEncryptionProfile",
+          "documentation": "<p>Return the field-level encryption profile information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the field level encryption profile. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "FieldLevelEncryptionProfile"
+    },
+    "GetFieldLevelEncryptionRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>Request the ID for the field-level encryption configuration information.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      }
+    },
+    "GetFieldLevelEncryptionResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryption": {
+          "shape": "FieldLevelEncryption",
+          "documentation": "<p>Return the field-level encryption configuration information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the field level encryption configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "FieldLevelEncryption"
+    },
+    "GetInvalidationRequest": {
+      "type": "structure",
+      "required": [
+        "DistributionId",
+        "Id"
+      ],
+      "members": {
+        "DistributionId": {
+          "shape": "string",
+          "documentation": "<p>The distribution's ID.</p>",
+          "location": "uri",
+          "locationName": "DistributionId"
+        },
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The identifier for the invalidation request, for example, <code>IDFDVBD632BHDS5</code>.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      },
+      "documentation": "<p>The request to get an invalidation's information. </p>"
+    },
+    "GetInvalidationResult": {
+      "type": "structure",
+      "members": {
+        "Invalidation": {
+          "shape": "Invalidation",
+          "documentation": "<p>The invalidation's information. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/InvalidationDatatype.html\">Invalidation Complex Type</a>. </p>"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "Invalidation"
+    },
+    "GetPublicKeyConfigRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>Request the ID for the public key configuration.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      }
+    },
+    "GetPublicKeyConfigResult": {
+      "type": "structure",
+      "members": {
+        "PublicKeyConfig": {
+          "shape": "PublicKeyConfig",
+          "documentation": "<p>Return the result for the public key configuration.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the public key configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "PublicKeyConfig"
+    },
+    "GetPublicKeyRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>Request the ID for the public key.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      }
+    },
+    "GetPublicKeyResult": {
+      "type": "structure",
+      "members": {
+        "PublicKey": {
+          "shape": "PublicKey",
+          "documentation": "<p>Return the public key.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the public key. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "PublicKey"
+    },
+    "GetStreamingDistributionConfigRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The streaming distribution's ID.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      },
+      "documentation": "<p>To request to get a streaming distribution configuration.</p>"
+    },
+    "GetStreamingDistributionConfigResult": {
+      "type": "structure",
+      "members": {
+        "StreamingDistributionConfig": {
+          "shape": "StreamingDistributionConfig",
+          "documentation": "<p>The streaming distribution's configuration information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the configuration. For example: <code>E2QWRUHAPOMQZL</code>. </p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "StreamingDistributionConfig"
+    },
+    "GetStreamingDistributionRequest": {
+      "type": "structure",
+      "required": [
+        "Id"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The streaming distribution's ID.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        }
+      },
+      "documentation": "<p>The request to get a streaming distribution's information.</p>"
+    },
+    "GetStreamingDistributionResult": {
+      "type": "structure",
+      "members": {
+        "StreamingDistribution": {
+          "shape": "StreamingDistribution",
+          "documentation": "<p>The streaming distribution's information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the streaming distribution's information. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "StreamingDistribution"
+    },
+    "HeaderList": {
+      "type": "list",
+      "member": {
+        "shape": "string",
+        "locationName": "Name"
+      }
+    },
+    "Headers": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of different headers that you want CloudFront to base caching on for this cache behavior. You can configure each cache behavior in a web distribution to do one of the following:</p> <ul> <li> <p> <b>Forward all headers to your origin</b>: Specify <code>1</code> for <code>Quantity</code> and <code>*</code> for <code>Name</code>.</p> <important> <p>CloudFront doesn't cache the objects that are associated with this cache behavior. Instead, CloudFront sends every request to the origin. </p> </important> </li> <li> <p> <b>Forward a whitelist of headers you specify</b>: Specify the number of headers that you want CloudFront to base caching on. Then specify the header names in <code>Name</code> elements. CloudFront caches your objects based on the values in the specified headers.</p> </li> <li> <p> <b>Forward only the default headers</b>: Specify <code>0</code> for <code>Quantity</code> and omit <code>Items</code>. In this configuration, CloudFront doesn't cache based on the values in the request headers.</p> </li> </ul> <p>Regardless of which option you choose, CloudFront forwards headers to your origin based on whether the origin is an S3 bucket or a custom origin. See the following documentation:</p> <ul> <li> <p> <b>S3 bucket</b>: See <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorS3Origin.html#request-s3-removed-headers\">HTTP Request Headers That CloudFront Removes or Updates</a> </p> </li> <li> <p> <b>Custom origin</b>: See <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/RequestAndResponseBehaviorCustomOrigin.html#request-custom-headers-behavior\">HTTP Request Headers and CloudFront Behavior</a> </p> </li> </ul>"
+        },
+        "Items": {
+          "shape": "HeaderList",
+          "documentation": "<p>A list that contains one <code>Name</code> element for each header that you want CloudFront to use for caching in this cache behavior. If <code>Quantity</code> is <code>0</code>, omit <code>Items</code>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that specifies the request headers, if any, that you want CloudFront to base caching on for this cache behavior. </p> <p>For the headers that you specify, CloudFront caches separate versions of a specified object based on the header values in viewer requests. For example, suppose viewer requests for <code>logo.jpg</code> contain a custom <code>product</code> header that has a value of either <code>acme</code> or <code>apex</code>, and you configure CloudFront to cache your content based on values in the <code>product</code> header. CloudFront forwards the <code>product</code> header to the origin and caches the response from the origin once for each header value. For more information about caching based on header values, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html\">How CloudFront Forwards and Caches Headers</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "HttpVersion": {
+      "type": "string",
+      "enum": [
+        "http1.1",
+        "http2"
+      ]
+    },
+    "ICPRecordalStatus": {
+      "type": "string",
+      "enum": [
+        "APPROVED",
+        "SUSPENDED",
+        "PENDING"
+      ]
+    },
+    "Invalidation": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "Status",
+        "CreateTime",
+        "InvalidationBatch"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The identifier for the invalidation request. For example: <code>IDFDVBD632BHDS5</code>.</p>"
+        },
+        "Status": {
+          "shape": "string",
+          "documentation": "<p>The status of the invalidation request. When the invalidation batch is finished, the status is <code>Completed</code>.</p>"
+        },
+        "CreateTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The date and time the invalidation request was first made. </p>"
+        },
+        "InvalidationBatch": {
+          "shape": "InvalidationBatch",
+          "documentation": "<p>The current invalidation information for the batch request. </p>"
+        }
+      },
+      "documentation": "<p>An invalidation. </p>"
+    },
+    "InvalidationBatch": {
+      "type": "structure",
+      "required": [
+        "Paths",
+        "CallerReference"
+      ],
+      "members": {
+        "Paths": {
+          "shape": "Paths",
+          "documentation": "<p>A complex type that contains information about the objects that you want to invalidate. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html#invalidation-specifying-objects\">Specifying the Objects to Invalidate</a> in the <i>Amazon CloudFront Developer Guide</i>. </p>"
+        },
+        "CallerReference": {
+          "shape": "string",
+          "documentation": "<p>A value that you specify to uniquely identify an invalidation request. CloudFront uses the value to prevent you from accidentally resubmitting an identical request. Whenever you create a new invalidation request, you must specify a new value for <code>CallerReference</code> and change other values in the request as applicable. One way to ensure that the value of <code>CallerReference</code> is unique is to use a <code>timestamp</code>, for example, <code>20120301090000</code>.</p> <p>If you make a second invalidation request with the same value for <code>CallerReference</code>, and if the rest of the request is the same, CloudFront doesn't create a new invalidation request. Instead, CloudFront returns information about the invalidation request that you previously created with the same <code>CallerReference</code>.</p> <p>If <code>CallerReference</code> is a value you already sent in a previous invalidation batch request but the content of any <code>Path</code> is different from the original request, CloudFront returns an <code>InvalidationBatchAlreadyExists</code> error.</p>"
+        }
+      },
+      "documentation": "<p>An invalidation batch.</p>"
+    },
+    "InvalidationList": {
+      "type": "structure",
+      "required": [
+        "Marker",
+        "MaxItems",
+        "IsTruncated",
+        "Quantity"
+      ],
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>The value that you provided for the <code>Marker</code> request parameter.</p>"
+        },
+        "NextMarker": {
+          "shape": "string",
+          "documentation": "<p>If <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value that you can use for the <code>Marker</code> request parameter to continue listing your invalidation batches where they left off.</p>"
+        },
+        "MaxItems": {
+          "shape": "integer",
+          "documentation": "<p>The value that you provided for the <code>MaxItems</code> request parameter.</p>"
+        },
+        "IsTruncated": {
+          "shape": "boolean",
+          "documentation": "<p>A flag that indicates whether more invalidation batch requests remain to be listed. If your results were truncated, you can make a follow-up pagination request using the <code>Marker</code> request parameter to retrieve more invalidation batches in the list.</p>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of invalidation batches that were created by the current AWS account. </p>"
+        },
+        "Items": {
+          "shape": "InvalidationSummaryList",
+          "documentation": "<p>A complex type that contains one <code>InvalidationSummary</code> element for each invalidation batch created by the current AWS account.</p>"
+        }
+      },
+      "documentation": "<p>The <code>InvalidationList</code> complex type describes the list of invalidation objects. For more information about invalidation, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html\">Invalidating Objects (Web Distributions Only)</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "InvalidationSummary": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "CreateTime",
+        "Status"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The unique ID for an invalidation request.</p>"
+        },
+        "CreateTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The time that an invalidation request was created.</p>"
+        },
+        "Status": {
+          "shape": "string",
+          "documentation": "<p>The status of an invalidation request.</p>"
+        }
+      },
+      "documentation": "<p>A summary of an invalidation request.</p>"
+    },
+    "InvalidationSummaryList": {
+      "type": "list",
+      "member": {
+        "shape": "InvalidationSummary",
+        "locationName": "InvalidationSummary"
+      }
+    },
+    "ItemSelection": {
+      "type": "string",
+      "enum": [
+        "none",
+        "whitelist",
+        "all"
+      ]
+    },
+    "KeyPairIdList": {
+      "type": "list",
+      "member": {
+        "shape": "string",
+        "locationName": "KeyPairId"
+      }
+    },
+    "KeyPairIds": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of active CloudFront key pairs for <code>AwsAccountNumber</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ActiveTrustedSigners.html\">ActiveTrustedSigners</a>.</p>"
+        },
+        "Items": {
+          "shape": "KeyPairIdList",
+          "documentation": "<p>A complex type that lists the active CloudFront key pairs, if any, that are associated with <code>AwsAccountNumber</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ActiveTrustedSigners.html\">ActiveTrustedSigners</a>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that lists the active CloudFront key pairs, if any, that are associated with <code>AwsAccountNumber</code>. </p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ActiveTrustedSigners.html\">ActiveTrustedSigners</a>.</p>"
+    },
+    "LambdaFunctionARN": {
+      "type": "string"
+    },
+    "LambdaFunctionAssociation": {
+      "type": "structure",
+      "required": [
+        "LambdaFunctionARN",
+        "EventType"
+      ],
+      "members": {
+        "LambdaFunctionARN": {
+          "shape": "LambdaFunctionARN",
+          "documentation": "<p>The ARN of the Lambda function. You must specify the ARN of a function version; you can't specify a Lambda alias or $LATEST.</p>"
+        },
+        "EventType": {
+          "shape": "EventType",
+          "documentation": "<p>Specifies the event type that triggers a Lambda function invocation. You can specify the following values:</p> <ul> <li> <p> <code>viewer-request</code>: The function executes when CloudFront receives a request from a viewer and before it checks to see whether the requested object is in the edge cache. </p> </li> <li> <p> <code>origin-request</code>: The function executes only when CloudFront forwards a request to your origin. When the requested object is in the edge cache, the function doesn't execute.</p> </li> <li> <p> <code>origin-response</code>: The function executes after CloudFront receives a response from the origin and before it caches the object in the response. When the requested object is in the edge cache, the function doesn't execute.</p> </li> <li> <p> <code>viewer-response</code>: The function executes before CloudFront returns the requested object to the viewer. The function executes regardless of whether the object was already in the edge cache.</p> <p>If the origin returns an HTTP status code other than HTTP 200 (OK), the function doesn't execute.</p> </li> </ul>"
+        },
+        "IncludeBody": {
+          "shape": "boolean",
+          "documentation": "<p>A flag that allows a Lambda function to have read access to the body content. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-include-body-access.html\">Accessing the Request Body by Choosing the Include Body Option</a> in the Amazon CloudFront Developer Guide.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains a Lambda function association.</p>"
+    },
+    "LambdaFunctionAssociationList": {
+      "type": "list",
+      "member": {
+        "shape": "LambdaFunctionAssociation",
+        "locationName": "LambdaFunctionAssociation"
+      }
+    },
+    "LambdaFunctionAssociations": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of Lambda function associations for this cache behavior.</p>"
+        },
+        "Items": {
+          "shape": "LambdaFunctionAssociationList",
+          "documentation": "<p> <b>Optional</b>: A complex type that contains <code>LambdaFunctionAssociation</code> items for this cache behavior. If <code>Quantity</code> is <code>0</code>, you can omit <code>Items</code>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that specifies a list of Lambda functions associations for a cache behavior.</p> <p>If you want to invoke one or more Lambda functions triggered by requests that match the <code>PathPattern</code> of the cache behavior, specify the applicable values for <code>Quantity</code> and <code>Items</code>. Note that there can be up to 4 <code>LambdaFunctionAssociation</code> items in this list (one for each possible value of <code>EventType</code>) and each <code>EventType</code> can be associated with the Lambda function only once.</p> <p>If you don't want to invoke any Lambda functions for the requests that match <code>PathPattern</code>, specify <code>0</code> for <code>Quantity</code> and omit <code>Items</code>. </p>"
+    },
+    "ListCloudFrontOriginAccessIdentitiesRequest": {
+      "type": "structure",
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>Use this when paginating results to indicate where to begin in your list of origin access identities. The results include identities in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response (which is also the ID of the last identity on that page).</p>",
+          "location": "querystring",
+          "locationName": "Marker"
+        },
+        "MaxItems": {
+          "shape": "string",
+          "documentation": "<p>The maximum number of origin access identities you want in the response body. </p>",
+          "location": "querystring",
+          "locationName": "MaxItems"
+        }
+      },
+      "documentation": "<p>The request to list origin access identities. </p>"
+    },
+    "ListCloudFrontOriginAccessIdentitiesResult": {
+      "type": "structure",
+      "members": {
+        "CloudFrontOriginAccessIdentityList": {
+          "shape": "CloudFrontOriginAccessIdentityList",
+          "documentation": "<p>The <code>CloudFrontOriginAccessIdentityList</code> type. </p>"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request. </p>",
+      "payload": "CloudFrontOriginAccessIdentityList"
+    },
+    "ListDistributionsByWebACLIdRequest": {
+      "type": "structure",
+      "required": [
+        "WebACLId"
+      ],
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>Use <code>Marker</code> and <code>MaxItems</code> to control pagination of results. If you have more than <code>MaxItems</code> distributions that satisfy the request, the response includes a <code>NextMarker</code> element. To get the next page of results, submit another request. For the value of <code>Marker</code>, specify the value of <code>NextMarker</code> from the last response. (For the first request, omit <code>Marker</code>.) </p>",
+          "location": "querystring",
+          "locationName": "Marker"
+        },
+        "MaxItems": {
+          "shape": "string",
+          "documentation": "<p>The maximum number of distributions that you want CloudFront to return in the response body. The maximum and default values are both 100.</p>",
+          "location": "querystring",
+          "locationName": "MaxItems"
+        },
+        "WebACLId": {
+          "shape": "string",
+          "documentation": "<p>The ID of the AWS WAF web ACL that you want to list the associated distributions. If you specify \"null\" for the ID, the request returns a list of the distributions that aren't associated with a web ACL. </p>",
+          "location": "uri",
+          "locationName": "WebACLId"
+        }
+      },
+      "documentation": "<p>The request to list distributions that are associated with a specified AWS WAF web ACL. </p>"
+    },
+    "ListDistributionsByWebACLIdResult": {
+      "type": "structure",
+      "members": {
+        "DistributionList": {
+          "shape": "DistributionList",
+          "documentation": "<p>The <code>DistributionList</code> type. </p>"
+        }
+      },
+      "documentation": "<p>The response to a request to list the distributions that are associated with a specified AWS WAF web ACL. </p>",
+      "payload": "DistributionList"
+    },
+    "ListDistributionsRequest": {
+      "type": "structure",
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>Use this when paginating results to indicate where to begin in your list of distributions. The results include distributions in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response (which is also the ID of the last distribution on that page).</p>",
+          "location": "querystring",
+          "locationName": "Marker"
+        },
+        "MaxItems": {
+          "shape": "string",
+          "documentation": "<p>The maximum number of distributions you want in the response body.</p>",
+          "location": "querystring",
+          "locationName": "MaxItems"
+        }
+      },
+      "documentation": "<p>The request to list your distributions. </p>"
+    },
+    "ListDistributionsResult": {
+      "type": "structure",
+      "members": {
+        "DistributionList": {
+          "shape": "DistributionList",
+          "documentation": "<p>The <code>DistributionList</code> type. </p>"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request. </p>",
+      "payload": "DistributionList"
+    },
+    "ListFieldLevelEncryptionConfigsRequest": {
+      "type": "structure",
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>Use this when paginating results to indicate where to begin in your list of configurations. The results include configurations in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response (which is also the ID of the last configuration on that page). </p>",
+          "location": "querystring",
+          "locationName": "Marker"
+        },
+        "MaxItems": {
+          "shape": "string",
+          "documentation": "<p>The maximum number of field-level encryption configurations you want in the response body. </p>",
+          "location": "querystring",
+          "locationName": "MaxItems"
+        }
+      }
+    },
+    "ListFieldLevelEncryptionConfigsResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryptionList": {
+          "shape": "FieldLevelEncryptionList",
+          "documentation": "<p>Returns a list of all field-level encryption configurations that have been created in CloudFront for this account.</p>"
+        }
+      },
+      "payload": "FieldLevelEncryptionList"
+    },
+    "ListFieldLevelEncryptionProfilesRequest": {
+      "type": "structure",
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>Use this when paginating results to indicate where to begin in your list of profiles. The results include profiles in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response (which is also the ID of the last profile on that page). </p>",
+          "location": "querystring",
+          "locationName": "Marker"
+        },
+        "MaxItems": {
+          "shape": "string",
+          "documentation": "<p>The maximum number of field-level encryption profiles you want in the response body. </p>",
+          "location": "querystring",
+          "locationName": "MaxItems"
+        }
+      }
+    },
+    "ListFieldLevelEncryptionProfilesResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryptionProfileList": {
+          "shape": "FieldLevelEncryptionProfileList",
+          "documentation": "<p>Returns a list of the field-level encryption profiles that have been created in CloudFront for this account.</p>"
+        }
+      },
+      "payload": "FieldLevelEncryptionProfileList"
+    },
+    "ListInvalidationsRequest": {
+      "type": "structure",
+      "required": [
+        "DistributionId"
+      ],
+      "members": {
+        "DistributionId": {
+          "shape": "string",
+          "documentation": "<p>The distribution's ID.</p>",
+          "location": "uri",
+          "locationName": "DistributionId"
+        },
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>Use this parameter when paginating results to indicate where to begin in your list of invalidation batches. Because the results are returned in decreasing order from most recent to oldest, the most recent results are on the first page, the second page will contain earlier results, and so on. To get the next page of results, set <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response. This value is the same as the ID of the last invalidation batch on that page. </p>",
+          "location": "querystring",
+          "locationName": "Marker"
+        },
+        "MaxItems": {
+          "shape": "string",
+          "documentation": "<p>The maximum number of invalidation batches that you want in the response body.</p>",
+          "location": "querystring",
+          "locationName": "MaxItems"
+        }
+      },
+      "documentation": "<p>The request to list invalidations. </p>"
+    },
+    "ListInvalidationsResult": {
+      "type": "structure",
+      "members": {
+        "InvalidationList": {
+          "shape": "InvalidationList",
+          "documentation": "<p>Information about invalidation batches. </p>"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request. </p>",
+      "payload": "InvalidationList"
+    },
+    "ListPublicKeysRequest": {
+      "type": "structure",
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>Use this when paginating results to indicate where to begin in your list of public keys. The results include public keys in the list that occur after the marker. To get the next page of results, set the <code>Marker</code> to the value of the <code>NextMarker</code> from the current page's response (which is also the ID of the last public key on that page). </p>",
+          "location": "querystring",
+          "locationName": "Marker"
+        },
+        "MaxItems": {
+          "shape": "string",
+          "documentation": "<p>The maximum number of public keys you want in the response body. </p>",
+          "location": "querystring",
+          "locationName": "MaxItems"
+        }
+      }
+    },
+    "ListPublicKeysResult": {
+      "type": "structure",
+      "members": {
+        "PublicKeyList": {
+          "shape": "PublicKeyList",
+          "documentation": "<p>Returns a list of all public keys that have been added to CloudFront for this account.</p>"
+        }
+      },
+      "payload": "PublicKeyList"
+    },
+    "ListStreamingDistributionsRequest": {
+      "type": "structure",
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>The value that you provided for the <code>Marker</code> request parameter.</p>",
+          "location": "querystring",
+          "locationName": "Marker"
+        },
+        "MaxItems": {
+          "shape": "string",
+          "documentation": "<p>The value that you provided for the <code>MaxItems</code> request parameter.</p>",
+          "location": "querystring",
+          "locationName": "MaxItems"
+        }
+      },
+      "documentation": "<p>The request to list your streaming distributions. </p>"
+    },
+    "ListStreamingDistributionsResult": {
+      "type": "structure",
+      "members": {
+        "StreamingDistributionList": {
+          "shape": "StreamingDistributionList",
+          "documentation": "<p>The <code>StreamingDistributionList</code> type. </p>"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request. </p>",
+      "payload": "StreamingDistributionList"
+    },
+    "ListTagsForResourceRequest": {
+      "type": "structure",
+      "required": [
+        "Resource"
+      ],
+      "members": {
+        "Resource": {
+          "shape": "ResourceARN",
+          "documentation": "<p> An ARN of a CloudFront resource.</p>",
+          "location": "querystring",
+          "locationName": "Resource"
+        }
+      },
+      "documentation": "<p> The request to list tags for a CloudFront resource.</p>"
+    },
+    "ListTagsForResourceResult": {
+      "type": "structure",
+      "required": [
+        "Tags"
+      ],
+      "members": {
+        "Tags": {
+          "shape": "Tags",
+          "documentation": "<p> A complex type that contains zero or more <code>Tag</code> elements.</p>"
+        }
+      },
+      "documentation": "<p> The returned result of the corresponding request.</p>",
+      "payload": "Tags"
+    },
+    "LocationList": {
+      "type": "list",
+      "member": {
+        "shape": "string",
+        "locationName": "Location"
+      }
+    },
+    "LoggingConfig": {
+      "type": "structure",
+      "required": [
+        "Enabled",
+        "IncludeCookies",
+        "Bucket",
+        "Prefix"
+      ],
+      "members": {
+        "Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>Specifies whether you want CloudFront to save access logs to an Amazon S3 bucket. If you don't want to enable logging when you create a distribution or if you want to disable logging for an existing distribution, specify <code>false</code> for <code>Enabled</code>, and specify empty <code>Bucket</code> and <code>Prefix</code> elements. If you specify <code>false</code> for <code>Enabled</code> but you specify values for <code>Bucket</code>, <code>prefix</code>, and <code>IncludeCookies</code>, the values are automatically deleted.</p>"
+        },
+        "IncludeCookies": {
+          "shape": "boolean",
+          "documentation": "<p>Specifies whether you want CloudFront to include cookies in access logs, specify <code>true</code> for <code>IncludeCookies</code>. If you choose to include cookies in logs, CloudFront logs all cookies regardless of how you configure the cache behaviors for this distribution. If you don't want to include cookies when you create a distribution or if you want to disable include cookies for an existing distribution, specify <code>false</code> for <code>IncludeCookies</code>.</p>"
+        },
+        "Bucket": {
+          "shape": "string",
+          "documentation": "<p>The Amazon S3 bucket to store the access logs in, for example, <code>myawslogbucket.s3.amazonaws.com</code>.</p>"
+        },
+        "Prefix": {
+          "shape": "string",
+          "documentation": "<p>An optional string that you want CloudFront to prefix to the access log <code>filenames</code> for this distribution, for example, <code>myprefix/</code>. If you want to enable logging, but you don't want to specify a prefix, you still must include an empty <code>Prefix</code> element in the <code>Logging</code> element.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that controls whether access logs are written for the distribution.</p>"
+    },
+    "Method": {
+      "type": "string",
+      "enum": [
+        "GET",
+        "HEAD",
+        "POST",
+        "PUT",
+        "PATCH",
+        "OPTIONS",
+        "DELETE"
+      ]
+    },
+    "MethodsList": {
+      "type": "list",
+      "member": {
+        "shape": "Method",
+        "locationName": "Method"
+      }
+    },
+    "MinimumProtocolVersion": {
+      "type": "string",
+      "enum": [
+        "SSLv3",
+        "TLSv1",
+        "TLSv1_2016",
+        "TLSv1.1_2016",
+        "TLSv1.2_2018"
+      ]
+    },
+    "Origin": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "DomainName"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>A unique identifier for the origin or origin group. The value of <code>Id</code> must be unique within the distribution.</p> <p>When you specify the value of <code>TargetOriginId</code> for the default cache behavior or for another cache behavior, you indicate the origin to which you want the cache behavior to route requests by specifying the value of the <code>Id</code> element for that origin. When a request matches the path pattern for that cache behavior, CloudFront routes the request to the specified origin. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesCacheBehavior\">Cache Behavior Settings</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "DomainName": {
+          "shape": "string",
+          "documentation": "<p> <b>Amazon S3 origins</b>: The DNS name of the Amazon S3 bucket from which you want CloudFront to get objects for this origin, for example, <code>myawsbucket.s3.amazonaws.com</code>. If you set up your bucket to be configured as a website endpoint, enter the Amazon S3 static website hosting endpoint for the bucket.</p> <p>For more information about specifying this value for different types of origins, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesDomainName\">Origin Domain Name</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> <p>Constraints for Amazon S3 origins: </p> <ul> <li> <p>If you configured Amazon S3 Transfer Acceleration for your bucket, don't specify the <code>s3-accelerate</code> endpoint for <code>DomainName</code>.</p> </li> <li> <p>The bucket name must be between 3 and 63 characters long (inclusive).</p> </li> <li> <p>The bucket name must contain only lowercase characters, numbers, periods, underscores, and dashes.</p> </li> <li> <p>The bucket name must not contain adjacent periods.</p> </li> </ul> <p> <b>Custom Origins</b>: The DNS domain name for the HTTP server from which you want CloudFront to get objects for this origin, for example, <code>www.example.com</code>. </p> <p>Constraints for custom origins:</p> <ul> <li> <p> <code>DomainName</code> must be a valid DNS name that contains only a-z, A-Z, 0-9, dot (.), hyphen (-), or underscore (_) characters.</p> </li> <li> <p>The name cannot exceed 128 characters.</p> </li> </ul>"
+        },
+        "OriginPath": {
+          "shape": "string",
+          "documentation": "<p>An optional element that causes CloudFront to request your content from a directory in your Amazon S3 bucket or your custom origin. When you include the <code>OriginPath</code> element, specify the directory name, beginning with a <code>/</code>. CloudFront appends the directory name to the value of <code>DomainName</code>, for example, <code>example.com/production</code>. Do not include a <code>/</code> at the end of the directory name.</p> <p>For example, suppose you've specified the following values for your distribution:</p> <ul> <li> <p> <code>DomainName</code>: An Amazon S3 bucket named <code>myawsbucket</code>.</p> </li> <li> <p> <code>OriginPath</code>: <code>/production</code> </p> </li> <li> <p> <code>CNAME</code>: <code>example.com</code> </p> </li> </ul> <p>When a user enters <code>example.com/index.html</code> in a browser, CloudFront sends a request to Amazon S3 for <code>myawsbucket/production/index.html</code>.</p> <p>When a user enters <code>example.com/acme/index.html</code> in a browser, CloudFront sends a request to Amazon S3 for <code>myawsbucket/production/acme/index.html</code>.</p>"
+        },
+        "CustomHeaders": {
+          "shape": "CustomHeaders",
+          "documentation": "<p>A complex type that contains names and values for the custom headers that you want.</p>"
+        },
+        "S3OriginConfig": {
+          "shape": "S3OriginConfig",
+          "documentation": "<p>A complex type that contains information about the Amazon S3 origin. If the origin is a custom origin, use the <code>CustomOriginConfig</code> element instead.</p>"
+        },
+        "CustomOriginConfig": {
+          "shape": "CustomOriginConfig",
+          "documentation": "<p>A complex type that contains information about a custom origin. If the origin is an Amazon S3 bucket, use the <code>S3OriginConfig</code> element instead.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that describes the Amazon S3 bucket, HTTP server (for example, a web server), Amazon MediaStore, or other server from which CloudFront gets your files. This can also be an origin group, if you've created an origin group. You must specify at least one origin or origin group.</p> <p>For the current limit on the number of origins or origin groups that you can specify for a distribution, see <a href=\"https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_cloudfront\">Amazon CloudFront Limits</a> in the <i>AWS General Reference</i>.</p>"
+    },
+    "OriginCustomHeader": {
+      "type": "structure",
+      "required": [
+        "HeaderName",
+        "HeaderValue"
+      ],
+      "members": {
+        "HeaderName": {
+          "shape": "string",
+          "documentation": "<p>The name of a header that you want CloudFront to forward to your origin. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/forward-custom-headers.html\">Forwarding Custom Headers to Your Origin (Web Distributions Only)</a> in the <i> Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "HeaderValue": {
+          "shape": "string",
+          "documentation": "<p>The value for the header that you specified in the <code>HeaderName</code> field.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains <code>HeaderName</code> and <code>HeaderValue</code> elements, if any, for this distribution. </p>"
+    },
+    "OriginCustomHeadersList": {
+      "type": "list",
+      "member": {
+        "shape": "OriginCustomHeader",
+        "locationName": "OriginCustomHeader"
+      }
+    },
+    "OriginGroup": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "FailoverCriteria",
+        "Members"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The origin group's ID.</p>"
+        },
+        "FailoverCriteria": {
+          "shape": "OriginGroupFailoverCriteria",
+          "documentation": "<p>A complex type that contains information about the failover criteria for an origin group.</p>"
+        },
+        "Members": {
+          "shape": "OriginGroupMembers",
+          "documentation": "<p>A complex type that contains information about the origins in an origin group.</p>"
+        }
+      },
+      "documentation": "<p>An origin group includes two origins (a primary origin and a second origin to failover to) and a failover criteria that you specify. You create an origin group to support origin failover in CloudFront. When you create or update a distribution, you can specifiy the origin group instead of a single origin, and CloudFront will failover from the primary origin to the second origin under the failover conditions that you've chosen.</p>"
+    },
+    "OriginGroupFailoverCriteria": {
+      "type": "structure",
+      "required": [
+        "StatusCodes"
+      ],
+      "members": {
+        "StatusCodes": {
+          "shape": "StatusCodes",
+          "documentation": "<p>The status codes that, when returned from the primary origin, will trigger CloudFront to failover to the second origin.</p>"
+        }
+      },
+      "documentation": "<p>A complex data type that includes information about the failover criteria for an origin group, including the status codes for which CloudFront will failover from the primary origin to the second origin.</p>"
+    },
+    "OriginGroupList": {
+      "type": "list",
+      "member": {
+        "shape": "OriginGroup",
+        "locationName": "OriginGroup"
+      },
+      "documentation": "<p>List of origin groups for a distribution.</p>"
+    },
+    "OriginGroupMember": {
+      "type": "structure",
+      "required": [
+        "OriginId"
+      ],
+      "members": {
+        "OriginId": {
+          "shape": "string",
+          "documentation": "<p>The ID for an origin in an origin group.</p>"
+        }
+      },
+      "documentation": "<p>An origin in an origin group.</p>"
+    },
+    "OriginGroupMemberList": {
+      "type": "list",
+      "member": {
+        "shape": "OriginGroupMember",
+        "locationName": "OriginGroupMember"
+      },
+      "documentation": "<p>List of origins in an origin group.</p>",
+      "max": 2,
+      "min": 2
+    },
+    "OriginGroupMembers": {
+      "type": "structure",
+      "required": [
+        "Quantity",
+        "Items"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of origins in an origin group.</p>"
+        },
+        "Items": {
+          "shape": "OriginGroupMemberList",
+          "documentation": "<p>Items (origins) in an origin group.</p>"
+        }
+      },
+      "documentation": "<p>A complex data type for the origins included in an origin group.</p>"
+    },
+    "OriginGroups": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of origin groups.</p>"
+        },
+        "Items": {
+          "shape": "OriginGroupList",
+          "documentation": "<p>The items (origin groups) in a distribution.</p>"
+        }
+      },
+      "documentation": "<p>A complex data type for the origin groups specified for a distribution.</p>"
+    },
+    "OriginList": {
+      "type": "list",
+      "member": {
+        "shape": "Origin",
+        "locationName": "Origin"
+      },
+      "min": 1
+    },
+    "OriginProtocolPolicy": {
+      "type": "string",
+      "enum": [
+        "http-only",
+        "match-viewer",
+        "https-only"
+      ]
+    },
+    "OriginSslProtocols": {
+      "type": "structure",
+      "required": [
+        "Quantity",
+        "Items"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of SSL/TLS protocols that you want to allow CloudFront to use when establishing an HTTPS connection with this origin. </p>"
+        },
+        "Items": {
+          "shape": "SslProtocolsList",
+          "documentation": "<p>A list that contains allowed SSL/TLS protocols for this distribution.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains information about the SSL/TLS protocols that CloudFront can use when establishing an HTTPS connection with your origin. </p>"
+    },
+    "Origins": {
+      "type": "structure",
+      "required": [
+        "Quantity",
+        "Items"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of origins or origin groups for this distribution.</p>"
+        },
+        "Items": {
+          "shape": "OriginList",
+          "documentation": "<p>A complex type that contains origins or origin groups for this distribution.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains information about origins and origin groups for this distribution. </p>"
+    },
+    "PathList": {
+      "type": "list",
+      "member": {
+        "shape": "string",
+        "locationName": "Path"
+      }
+    },
+    "Paths": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of invalidation paths specified for the objects that you want to invalidate.</p>"
+        },
+        "Items": {
+          "shape": "PathList",
+          "documentation": "<p>A complex type that contains a list of the paths that you want to invalidate.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains information about the objects that you want to invalidate. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Invalidation.html#invalidation-specifying-objects\">Specifying the Objects to Invalidate</a> in the <i>Amazon CloudFront Developer Guide</i>. </p>"
+    },
+    "PriceClass": {
+      "type": "string",
+      "enum": [
+        "PriceClass_100",
+        "PriceClass_200",
+        "PriceClass_All"
+      ]
+    },
+    "PublicKey": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "CreatedTime",
+        "PublicKeyConfig"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>A unique ID assigned to a public key you've added to CloudFront.</p>"
+        },
+        "CreatedTime": {
+          "shape": "timestamp",
+          "documentation": "<p>A time you added a public key to CloudFront.</p>"
+        },
+        "PublicKeyConfig": {
+          "shape": "PublicKeyConfig",
+          "documentation": "<p>A complex data type for a public key you add to CloudFront to use with features like field-level encryption.</p>"
+        }
+      },
+      "documentation": "<p>A complex data type of public keys you add to CloudFront to use with features like field-level encryption.</p>"
+    },
+    "PublicKeyConfig": {
+      "type": "structure",
+      "required": [
+        "CallerReference",
+        "Name",
+        "EncodedKey"
+      ],
+      "members": {
+        "CallerReference": {
+          "shape": "string",
+          "documentation": "<p>A unique number that ensures that the request can't be replayed.</p>"
+        },
+        "Name": {
+          "shape": "string",
+          "documentation": "<p>The name for a public key you add to CloudFront to use with features like field-level encryption.</p>"
+        },
+        "EncodedKey": {
+          "shape": "string",
+          "documentation": "<p>The encoded public key that you want to add to CloudFront to use with features like field-level encryption.</p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>An optional comment about a public key.</p>"
+        }
+      },
+      "documentation": "<p>Information about a public key you add to CloudFront to use with features like field-level encryption.</p>"
+    },
+    "PublicKeyList": {
+      "type": "structure",
+      "required": [
+        "MaxItems",
+        "Quantity"
+      ],
+      "members": {
+        "NextMarker": {
+          "shape": "string",
+          "documentation": "<p>If there are more elements to be listed, this element is present and contains the value that you can use for the <code>Marker</code> request parameter to continue listing your public keys where you left off.</p>"
+        },
+        "MaxItems": {
+          "shape": "integer",
+          "documentation": "<p>The maximum number of public keys you want in the response body. </p>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of public keys you added to CloudFront to use with features like field-level encryption.</p>"
+        },
+        "Items": {
+          "shape": "PublicKeySummaryList",
+          "documentation": "<p>An array of information about a public key you add to CloudFront to use with features like field-level encryption.</p>"
+        }
+      },
+      "documentation": "<p>A list of public keys you've added to CloudFront to use with features like field-level encryption.</p>"
+    },
+    "PublicKeySummary": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "Name",
+        "CreatedTime",
+        "EncodedKey"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p> ID for public key information summary. </p>"
+        },
+        "Name": {
+          "shape": "string",
+          "documentation": "<p> Name for public key information summary. </p>"
+        },
+        "CreatedTime": {
+          "shape": "timestamp",
+          "documentation": "<p> Creation time for public key information summary. </p>"
+        },
+        "EncodedKey": {
+          "shape": "string",
+          "documentation": "<p> Encoded key for public key information summary. </p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p> Comment for public key information summary. </p>"
+        }
+      },
+      "documentation": "<p>A complex data type for public key information. </p>"
+    },
+    "PublicKeySummaryList": {
+      "type": "list",
+      "member": {
+        "shape": "PublicKeySummary",
+        "locationName": "PublicKeySummary"
+      }
+    },
+    "QueryArgProfile": {
+      "type": "structure",
+      "required": [
+        "QueryArg",
+        "ProfileId"
+      ],
+      "members": {
+        "QueryArg": {
+          "shape": "string",
+          "documentation": "<p>Query argument for field-level encryption query argument-profile mapping.</p>"
+        },
+        "ProfileId": {
+          "shape": "string",
+          "documentation": "<p>ID of profile to use for field-level encryption query argument-profile mapping</p>"
+        }
+      },
+      "documentation": "<p>Query argument-profile mapping for field-level encryption.</p>"
+    },
+    "QueryArgProfileConfig": {
+      "type": "structure",
+      "required": [
+        "ForwardWhenQueryArgProfileIsUnknown"
+      ],
+      "members": {
+        "ForwardWhenQueryArgProfileIsUnknown": {
+          "shape": "boolean",
+          "documentation": "<p>Flag to set if you want a request to be forwarded to the origin even if the profile specified by the field-level encryption query argument, fle-profile, is unknown.</p>"
+        },
+        "QueryArgProfiles": {
+          "shape": "QueryArgProfiles",
+          "documentation": "<p>Profiles specified for query argument-profile mapping for field-level encryption.</p>"
+        }
+      },
+      "documentation": "<p>Configuration for query argument-profile mapping for field-level encryption.</p>"
+    },
+    "QueryArgProfileList": {
+      "type": "list",
+      "member": {
+        "shape": "QueryArgProfile",
+        "locationName": "QueryArgProfile"
+      }
+    },
+    "QueryArgProfiles": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>Number of profiles for query argument-profile mapping for field-level encryption.</p>"
+        },
+        "Items": {
+          "shape": "QueryArgProfileList",
+          "documentation": "<p>Number of items for query argument-profile mapping for field-level encryption.</p>"
+        }
+      },
+      "documentation": "<p>Query argument-profile mapping for field-level encryption.</p>"
+    },
+    "QueryStringCacheKeys": {
+      "type": "structure",
+      "required": [
+        "Quantity"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of <code>whitelisted</code> query string parameters for a cache behavior.</p>"
+        },
+        "Items": {
+          "shape": "QueryStringCacheKeysList",
+          "documentation": "<p>A list that contains the query string parameters that you want CloudFront to use as a basis for caching for a cache behavior. If <code>Quantity</code> is 0, you can omit <code>Items</code>. </p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains information about the query string parameters that you want CloudFront to use for caching for a cache behavior. </p>"
+    },
+    "QueryStringCacheKeysList": {
+      "type": "list",
+      "member": {
+        "shape": "string",
+        "locationName": "Name"
+      }
+    },
+    "ResourceARN": {
+      "type": "string",
+      "pattern": "arn:aws(-cn)?:cloudfront::[0-9]+:.*"
+    },
+    "Restrictions": {
+      "type": "structure",
+      "required": [
+        "GeoRestriction"
+      ],
+      "members": {
+        "GeoRestriction": {
+          "shape": "GeoRestriction",
+          "documentation": "<p>A complex type that controls the countries in which your content is distributed. CloudFront determines the location of your users using <code>MaxMind</code> GeoIP databases.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that identifies ways in which you want to restrict distribution of your content.</p>"
+    },
+    "S3Origin": {
+      "type": "structure",
+      "required": [
+        "DomainName",
+        "OriginAccessIdentity"
+      ],
+      "members": {
+        "DomainName": {
+          "shape": "string",
+          "documentation": "<p>The DNS name of the Amazon S3 origin. </p>"
+        },
+        "OriginAccessIdentity": {
+          "shape": "string",
+          "documentation": "<p>The CloudFront origin access identity to associate with the distribution. Use an origin access identity to configure the distribution so that end users can only access objects in an Amazon S3 bucket through CloudFront.</p> <p>If you want end users to be able to access objects using either the CloudFront URL or the Amazon S3 URL, specify an empty <code>OriginAccessIdentity</code> element.</p> <p>To delete the origin access identity from an existing distribution, update the distribution configuration and include an empty <code>OriginAccessIdentity</code> element.</p> <p>To replace the origin access identity, update the distribution configuration and specify the new origin access identity.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html\">Using an Origin Access Identity to Restrict Access to Your Amazon S3 Content</a> in the <i> Amazon CloudFront Developer Guide</i>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains information about the Amazon S3 bucket from which you want CloudFront to get your media files for distribution.</p>"
+    },
+    "S3OriginConfig": {
+      "type": "structure",
+      "required": [
+        "OriginAccessIdentity"
+      ],
+      "members": {
+        "OriginAccessIdentity": {
+          "shape": "string",
+          "documentation": "<p>The CloudFront origin access identity to associate with the origin. Use an origin access identity to configure the origin so that viewers can <i>only</i> access objects in an Amazon S3 bucket through CloudFront. The format of the value is:</p> <p>origin-access-identity/cloudfront/<i>ID-of-origin-access-identity</i> </p> <p>where <code> <i>ID-of-origin-access-identity</i> </code> is the value that CloudFront returned in the <code>ID</code> element when you created the origin access identity.</p> <p>If you want viewers to be able to access objects using either the CloudFront URL or the Amazon S3 URL, specify an empty <code>OriginAccessIdentity</code> element.</p> <p>To delete the origin access identity from an existing distribution, update the distribution configuration and include an empty <code>OriginAccessIdentity</code> element.</p> <p>To replace the origin access identity, update the distribution configuration and specify the new origin access identity.</p> <p>For more information about the origin access identity, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that contains information about the Amazon S3 origin. If the origin is a custom origin, use the <code>CustomOriginConfig</code> element instead.</p>"
+    },
+    "SSLSupportMethod": {
+      "type": "string",
+      "enum": [
+        "sni-only",
+        "vip"
+      ]
+    },
+    "Signer": {
+      "type": "structure",
+      "members": {
+        "AwsAccountNumber": {
+          "shape": "string",
+          "documentation": "<p>An AWS account that is included in the <code>TrustedSigners</code> complex type for this distribution. Valid values include:</p> <ul> <li> <p> <code>self</code>, which is the AWS account used to create the distribution.</p> </li> <li> <p>An AWS account number.</p> </li> </ul>"
+        },
+        "KeyPairIds": {
+          "shape": "KeyPairIds",
+          "documentation": "<p>A complex type that lists the active CloudFront key pairs, if any, that are associated with <code>AwsAccountNumber</code>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that lists the AWS accounts that were included in the <code>TrustedSigners</code> complex type, as well as their active CloudFront key pair IDs, if any. </p>"
+    },
+    "SignerList": {
+      "type": "list",
+      "member": {
+        "shape": "Signer",
+        "locationName": "Signer"
+      }
+    },
+    "SslProtocol": {
+      "type": "string",
+      "enum": [
+        "SSLv3",
+        "TLSv1",
+        "TLSv1.1",
+        "TLSv1.2"
+      ]
+    },
+    "SslProtocolsList": {
+      "type": "list",
+      "member": {
+        "shape": "SslProtocol",
+        "locationName": "SslProtocol"
+      }
+    },
+    "StatusCodeList": {
+      "type": "list",
+      "member": {
+        "shape": "integer",
+        "locationName": "StatusCode"
+      },
+      "documentation": "<p>List of status codes for origin failover.</p>",
+      "min": 1
+    },
+    "StatusCodes": {
+      "type": "structure",
+      "required": [
+        "Quantity",
+        "Items"
+      ],
+      "members": {
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of status codes.</p>"
+        },
+        "Items": {
+          "shape": "StatusCodeList",
+          "documentation": "<p>The items (status codes) for an origin group.</p>"
+        }
+      },
+      "documentation": "<p>A complex data type for the status codes that you specify that, when returned by a primary origin, trigger CloudFront to failover to a second origin.</p>"
+    },
+    "StreamingDistribution": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "ARN",
+        "Status",
+        "DomainName",
+        "ActiveTrustedSigners",
+        "StreamingDistributionConfig"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The identifier for the RTMP distribution. For example: <code>EGTXBD79EXAMPLE</code>.</p>"
+        },
+        "ARN": {
+          "shape": "string",
+          "documentation": "<p>The ARN (Amazon Resource Name) for the distribution. For example: <code>arn:aws:cloudfront::123456789012:distribution/EDFDVBD632BHDS5</code>, where <code>123456789012</code> is your AWS account ID.</p>"
+        },
+        "Status": {
+          "shape": "string",
+          "documentation": "<p>The current status of the RTMP distribution. When the status is <code>Deployed</code>, the distribution's information is propagated to all CloudFront edge locations.</p>"
+        },
+        "LastModifiedTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The date and time that the distribution was last modified. </p>"
+        },
+        "DomainName": {
+          "shape": "string",
+          "documentation": "<p>The domain name that corresponds to the streaming distribution, for example, <code>s5c39gqb8ow64r.cloudfront.net</code>. </p>"
+        },
+        "ActiveTrustedSigners": {
+          "shape": "ActiveTrustedSigners",
+          "documentation": "<p>A complex type that lists the AWS accounts, if any, that you included in the <code>TrustedSigners</code> complex type for this distribution. These are the accounts that you want to allow to create signed URLs for private content.</p> <p>The <code>Signer</code> complex type lists the AWS account number of the trusted signer or <code>self</code> if the signer is the AWS account that created the distribution. The <code>Signer</code> element also includes the IDs of any active CloudFront key pairs that are associated with the trusted signer's AWS account. If no <code>KeyPairId</code> element appears for a <code>Signer</code>, that signer can't create signed URLs.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>. </p>"
+        },
+        "StreamingDistributionConfig": {
+          "shape": "StreamingDistributionConfig",
+          "documentation": "<p>The current configuration information for the RTMP distribution.</p>"
+        }
+      },
+      "documentation": "<p>A streaming distribution tells CloudFront where you want RTMP content to be delivered from, and the details about how to track and manage content delivery.</p>"
+    },
+    "StreamingDistributionConfig": {
+      "type": "structure",
+      "required": [
+        "CallerReference",
+        "S3Origin",
+        "Comment",
+        "TrustedSigners",
+        "Enabled"
+      ],
+      "members": {
+        "CallerReference": {
+          "shape": "string",
+          "documentation": "<p>A unique value (for example, a date-time stamp) that ensures that the request can't be replayed.</p> <p>If the value of <code>CallerReference</code> is new (regardless of the content of the <code>StreamingDistributionConfig</code> object), CloudFront creates a new distribution.</p> <p>If <code>CallerReference</code> is a value that you already sent in a previous request to create a distribution, CloudFront returns a <code>DistributionAlreadyExists</code> error.</p>"
+        },
+        "S3Origin": {
+          "shape": "S3Origin",
+          "documentation": "<p>A complex type that contains information about the Amazon S3 bucket from which you want CloudFront to get your media files for distribution. </p>"
+        },
+        "Aliases": {
+          "shape": "Aliases",
+          "documentation": "<p>A complex type that contains information about CNAMEs (alternate domain names), if any, for this streaming distribution. </p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>Any comments you want to include about the streaming distribution. </p>"
+        },
+        "Logging": {
+          "shape": "StreamingLoggingConfig",
+          "documentation": "<p>A complex type that controls whether access logs are written for the streaming distribution. </p>"
+        },
+        "TrustedSigners": {
+          "shape": "TrustedSigners",
+          "documentation": "<p>A complex type that specifies any AWS accounts that you want to permit to create signed URLs for private content. If you want the distribution to use signed URLs, include this element; if you want the distribution to use public URLs, remove this element. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>. </p>"
+        },
+        "PriceClass": {
+          "shape": "PriceClass",
+          "documentation": "<p>A complex type that contains information about price class for this streaming distribution. </p>"
+        },
+        "Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>Whether the streaming distribution is enabled to accept user requests for content.</p>"
+        }
+      },
+      "documentation": "<p>The RTMP distribution's configuration information.</p>"
+    },
+    "StreamingDistributionConfigWithTags": {
+      "type": "structure",
+      "required": [
+        "StreamingDistributionConfig",
+        "Tags"
+      ],
+      "members": {
+        "StreamingDistributionConfig": {
+          "shape": "StreamingDistributionConfig",
+          "documentation": "<p>A streaming distribution Configuration.</p>"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "documentation": "<p>A complex type that contains zero or more <code>Tag</code> elements.</p>"
+        }
+      },
+      "documentation": "<p>A streaming distribution Configuration and a list of tags to be associated with the streaming distribution.</p>"
+    },
+    "StreamingDistributionList": {
+      "type": "structure",
+      "required": [
+        "Marker",
+        "MaxItems",
+        "IsTruncated",
+        "Quantity"
+      ],
+      "members": {
+        "Marker": {
+          "shape": "string",
+          "documentation": "<p>The value you provided for the <code>Marker</code> request parameter. </p>"
+        },
+        "NextMarker": {
+          "shape": "string",
+          "documentation": "<p>If <code>IsTruncated</code> is <code>true</code>, this element is present and contains the value you can use for the <code>Marker</code> request parameter to continue listing your RTMP distributions where they left off. </p>"
+        },
+        "MaxItems": {
+          "shape": "integer",
+          "documentation": "<p>The value you provided for the <code>MaxItems</code> request parameter. </p>"
+        },
+        "IsTruncated": {
+          "shape": "boolean",
+          "documentation": "<p>A flag that indicates whether more streaming distributions remain to be listed. If your results were truncated, you can make a follow-up pagination request using the <code>Marker</code> request parameter to retrieve more distributions in the list. </p>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of streaming distributions that were created by the current AWS account. </p>"
+        },
+        "Items": {
+          "shape": "StreamingDistributionSummaryList",
+          "documentation": "<p>A complex type that contains one <code>StreamingDistributionSummary</code> element for each distribution that was created by the current AWS account.</p>"
+        }
+      },
+      "documentation": "<p>A streaming distribution list. </p>"
+    },
+    "StreamingDistributionSummary": {
+      "type": "structure",
+      "required": [
+        "Id",
+        "ARN",
+        "Status",
+        "LastModifiedTime",
+        "DomainName",
+        "S3Origin",
+        "Aliases",
+        "TrustedSigners",
+        "Comment",
+        "PriceClass",
+        "Enabled"
+      ],
+      "members": {
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The identifier for the distribution, for example, <code>EDFDVBD632BHDS5</code>.</p>"
+        },
+        "ARN": {
+          "shape": "string",
+          "documentation": "<p> The ARN (Amazon Resource Name) for the streaming distribution. For example: <code>arn:aws:cloudfront::123456789012:streaming-distribution/EDFDVBD632BHDS5</code>, where <code>123456789012</code> is your AWS account ID.</p>"
+        },
+        "Status": {
+          "shape": "string",
+          "documentation": "<p> Indicates the current status of the distribution. When the status is <code>Deployed</code>, the distribution's information is fully propagated throughout the Amazon CloudFront system.</p>"
+        },
+        "LastModifiedTime": {
+          "shape": "timestamp",
+          "documentation": "<p>The date and time the distribution was last modified.</p>"
+        },
+        "DomainName": {
+          "shape": "string",
+          "documentation": "<p>The domain name corresponding to the distribution, for example, <code>d111111abcdef8.cloudfront.net</code>.</p>"
+        },
+        "S3Origin": {
+          "shape": "S3Origin",
+          "documentation": "<p>A complex type that contains information about the Amazon S3 bucket from which you want CloudFront to get your media files for distribution.</p>"
+        },
+        "Aliases": {
+          "shape": "Aliases",
+          "documentation": "<p>A complex type that contains information about CNAMEs (alternate domain names), if any, for this streaming distribution.</p>"
+        },
+        "TrustedSigners": {
+          "shape": "TrustedSigners",
+          "documentation": "<p>A complex type that specifies the AWS accounts, if any, that you want to allow to create signed URLs for private content. If you want to require signed URLs in requests for objects in the target origin that match the <code>PathPattern</code> for this cache behavior, specify <code>true</code> for <code>Enabled</code>, and specify the applicable values for <code>Quantity</code> and <code>Items</code>.If you don't want to require signed URLs in requests for objects that match <code>PathPattern</code>, specify <code>false</code> for <code>Enabled</code> and <code>0</code> for <code>Quantity</code>. Omit <code>Items</code>. To add, change, or remove one or more trusted signers, change <code>Enabled</code> to <code>true</code> (if it's currently <code>false</code>), change <code>Quantity</code> as applicable, and specify all of the trusted signers that you want to include in the updated distribution.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>. </p>"
+        },
+        "Comment": {
+          "shape": "string",
+          "documentation": "<p>The comment originally specified when this distribution was created.</p>"
+        },
+        "PriceClass": {
+          "shape": "PriceClass",
+          "documentation": "<p>A complex type that contains information about price class for this streaming distribution. </p>"
+        },
+        "Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>Whether the distribution is enabled to accept end user requests for content.</p>"
+        }
+      },
+      "documentation": "<p> A summary of the information for a CloudFront streaming distribution.</p>"
+    },
+    "StreamingDistributionSummaryList": {
+      "type": "list",
+      "member": {
+        "shape": "StreamingDistributionSummary",
+        "locationName": "StreamingDistributionSummary"
+      }
+    },
+    "StreamingLoggingConfig": {
+      "type": "structure",
+      "required": [
+        "Enabled",
+        "Bucket",
+        "Prefix"
+      ],
+      "members": {
+        "Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>Specifies whether you want CloudFront to save access logs to an Amazon S3 bucket. If you don't want to enable logging when you create a streaming distribution or if you want to disable logging for an existing streaming distribution, specify <code>false</code> for <code>Enabled</code>, and specify <code>empty Bucket</code> and <code>Prefix</code> elements. If you specify <code>false</code> for <code>Enabled</code> but you specify values for <code>Bucket</code> and <code>Prefix</code>, the values are automatically deleted. </p>"
+        },
+        "Bucket": {
+          "shape": "string",
+          "documentation": "<p>The Amazon S3 bucket to store the access logs in, for example, <code>myawslogbucket.s3.amazonaws.com</code>.</p>"
+        },
+        "Prefix": {
+          "shape": "string",
+          "documentation": "<p>An optional string that you want CloudFront to prefix to the access log filenames for this streaming distribution, for example, <code>myprefix/</code>. If you want to enable logging, but you don't want to specify a prefix, you still must include an empty <code>Prefix</code> element in the <code>Logging</code> element.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that controls whether access logs are written for this streaming distribution.</p>"
+    },
+    "Tag": {
+      "type": "structure",
+      "required": [
+        "Key"
+      ],
+      "members": {
+        "Key": {
+          "shape": "TagKey",
+          "documentation": "<p> A string that contains <code>Tag</code> key.</p> <p>The string length should be between 1 and 128 characters. Valid characters include <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, space, and the special characters <code>_ - . : / = + @</code>.</p>"
+        },
+        "Value": {
+          "shape": "TagValue",
+          "documentation": "<p> A string that contains an optional <code>Tag</code> value.</p> <p>The string length should be between 0 and 256 characters. Valid characters include <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, space, and the special characters <code>_ - . : / = + @</code>.</p>"
+        }
+      },
+      "documentation": "<p> A complex type that contains <code>Tag</code> key and <code>Tag</code> value.</p>"
+    },
+    "TagKey": {
+      "type": "string",
+      "documentation": "<p> A string that contains <code>Tag</code> key.</p> <p>The string length should be between 1 and 128 characters. Valid characters include <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, space, and the special characters <code>_ - . : / = + @</code>.</p>",
+      "max": 128,
+      "min": 1,
+      "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+    },
+    "TagKeyList": {
+      "type": "list",
+      "member": {
+        "shape": "TagKey",
+        "locationName": "Key"
+      }
+    },
+    "TagKeys": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "TagKeyList",
+          "documentation": "<p> A complex type that contains <code>Tag</code> key elements.</p>"
+        }
+      },
+      "documentation": "<p> A complex type that contains zero or more <code>Tag</code> elements.</p>"
+    },
+    "TagList": {
+      "type": "list",
+      "member": {
+        "shape": "Tag",
+        "locationName": "Tag"
+      }
+    },
+    "TagResourceRequest": {
+      "type": "structure",
+      "required": [
+        "Resource",
+        "Tags"
+      ],
+      "members": {
+        "Resource": {
+          "shape": "ResourceARN",
+          "documentation": "<p> An ARN of a CloudFront resource.</p>",
+          "location": "querystring",
+          "locationName": "Resource"
+        },
+        "Tags": {
+          "shape": "Tags",
+          "documentation": "<p> A complex type that contains zero or more <code>Tag</code> elements.</p>",
+          "locationName": "Tags",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "documentation": "<p> The request to add tags to a CloudFront resource.</p>",
+      "payload": "Tags"
+    },
+    "TagValue": {
+      "type": "string",
+      "max": 256,
+      "min": 0,
+      "pattern": "^([\\p{L}\\p{Z}\\p{N}_.:/=+\\-@]*)$"
+    },
+    "Tags": {
+      "type": "structure",
+      "members": {
+        "Items": {
+          "shape": "TagList",
+          "documentation": "<p> A complex type that contains <code>Tag</code> elements.</p>"
+        }
+      },
+      "documentation": "<p> A complex type that contains zero or more <code>Tag</code> elements.</p>"
+    },
+    "TrustedSigners": {
+      "type": "structure",
+      "required": [
+        "Enabled",
+        "Quantity"
+      ],
+      "members": {
+        "Enabled": {
+          "shape": "boolean",
+          "documentation": "<p>Specifies whether you want to require viewers to use signed URLs to access the files specified by <code>PathPattern</code> and <code>TargetOriginId</code>.</p>"
+        },
+        "Quantity": {
+          "shape": "integer",
+          "documentation": "<p>The number of trusted signers for this cache behavior.</p>"
+        },
+        "Items": {
+          "shape": "AwsAccountNumberList",
+          "documentation": "<p> <b>Optional</b>: A complex type that contains trusted signers for this cache behavior. If <code>Quantity</code> is <code>0</code>, you can omit <code>Items</code>.</p>"
+        }
+      },
+      "documentation": "<p>A complex type that specifies the AWS accounts, if any, that you want to allow to create signed URLs for private content.</p> <p>If you want to require signed URLs in requests for objects in the target origin that match the <code>PathPattern</code> for this cache behavior, specify <code>true</code> for <code>Enabled</code>, and specify the applicable values for <code>Quantity</code> and <code>Items</code>. For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html\">Serving Private Content through CloudFront</a> in the <i> Amazon CloudFront Developer Guide</i>.</p> <p>If you don't want to require signed URLs in requests for objects that match <code>PathPattern</code>, specify <code>false</code> for <code>Enabled</code> and <code>0</code> for <code>Quantity</code>. Omit <code>Items</code>.</p> <p>To add, change, or remove one or more trusted signers, change <code>Enabled</code> to <code>true</code> (if it's currently <code>false</code>), change <code>Quantity</code> as applicable, and specify all of the trusted signers that you want to include in the updated distribution.</p> <p>For more information about updating the distribution configuration, see <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/DistributionConfig.html\">DistributionConfig</a> in the <i>Amazon CloudFront API Reference</i>.</p>"
+    },
+    "UntagResourceRequest": {
+      "type": "structure",
+      "required": [
+        "Resource",
+        "TagKeys"
+      ],
+      "members": {
+        "Resource": {
+          "shape": "ResourceARN",
+          "documentation": "<p> An ARN of a CloudFront resource.</p>",
+          "location": "querystring",
+          "locationName": "Resource"
+        },
+        "TagKeys": {
+          "shape": "TagKeys",
+          "documentation": "<p> A complex type that contains zero or more <code>Tag</code> key elements.</p>",
+          "locationName": "TagKeys",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        }
+      },
+      "documentation": "<p> The request to remove tags from a CloudFront resource.</p>",
+      "payload": "TagKeys"
+    },
+    "UpdateCloudFrontOriginAccessIdentityRequest": {
+      "type": "structure",
+      "required": [
+        "CloudFrontOriginAccessIdentityConfig",
+        "Id"
+      ],
+      "members": {
+        "CloudFrontOriginAccessIdentityConfig": {
+          "shape": "CloudFrontOriginAccessIdentityConfig",
+          "documentation": "<p>The identity's configuration information.</p>",
+          "locationName": "CloudFrontOriginAccessIdentityConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        },
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The identity's id.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when retrieving the identity's configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      },
+      "documentation": "<p>The request to update an origin access identity.</p>",
+      "payload": "CloudFrontOriginAccessIdentityConfig"
+    },
+    "UpdateCloudFrontOriginAccessIdentityResult": {
+      "type": "structure",
+      "members": {
+        "CloudFrontOriginAccessIdentity": {
+          "shape": "CloudFrontOriginAccessIdentity",
+          "documentation": "<p>The origin access identity's information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "CloudFrontOriginAccessIdentity"
+    },
+    "UpdateDistributionRequest": {
+      "type": "structure",
+      "required": [
+        "DistributionConfig",
+        "Id"
+      ],
+      "members": {
+        "DistributionConfig": {
+          "shape": "DistributionConfig",
+          "documentation": "<p>The distribution's configuration information.</p>",
+          "locationName": "DistributionConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        },
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The distribution's id.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when retrieving the distribution's configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      },
+      "documentation": "<p>The request to update a distribution.</p>",
+      "payload": "DistributionConfig"
+    },
+    "UpdateDistributionResult": {
+      "type": "structure",
+      "members": {
+        "Distribution": {
+          "shape": "Distribution",
+          "documentation": "<p>The distribution's information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "Distribution"
+    },
+    "UpdateFieldLevelEncryptionConfigRequest": {
+      "type": "structure",
+      "required": [
+        "FieldLevelEncryptionConfig",
+        "Id"
+      ],
+      "members": {
+        "FieldLevelEncryptionConfig": {
+          "shape": "FieldLevelEncryptionConfig",
+          "documentation": "<p>Request to update a field-level encryption configuration. </p>",
+          "locationName": "FieldLevelEncryptionConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        },
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The ID of the configuration you want to update.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when retrieving the configuration identity to update. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      },
+      "payload": "FieldLevelEncryptionConfig"
+    },
+    "UpdateFieldLevelEncryptionConfigResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryption": {
+          "shape": "FieldLevelEncryption",
+          "documentation": "<p>Return the results of updating the configuration.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when updating the configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "FieldLevelEncryption"
+    },
+    "UpdateFieldLevelEncryptionProfileRequest": {
+      "type": "structure",
+      "required": [
+        "FieldLevelEncryptionProfileConfig",
+        "Id"
+      ],
+      "members": {
+        "FieldLevelEncryptionProfileConfig": {
+          "shape": "FieldLevelEncryptionProfileConfig",
+          "documentation": "<p>Request to update a field-level encryption profile. </p>",
+          "locationName": "FieldLevelEncryptionProfileConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        },
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The ID of the field-level encryption profile request. </p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when retrieving the profile identity to update. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      },
+      "payload": "FieldLevelEncryptionProfileConfig"
+    },
+    "UpdateFieldLevelEncryptionProfileResult": {
+      "type": "structure",
+      "members": {
+        "FieldLevelEncryptionProfile": {
+          "shape": "FieldLevelEncryptionProfile",
+          "documentation": "<p>Return the results of updating the profile.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The result of the field-level encryption profile request. </p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "FieldLevelEncryptionProfile"
+    },
+    "UpdatePublicKeyRequest": {
+      "type": "structure",
+      "required": [
+        "PublicKeyConfig",
+        "Id"
+      ],
+      "members": {
+        "PublicKeyConfig": {
+          "shape": "PublicKeyConfig",
+          "documentation": "<p>Request to update public key information.</p>",
+          "locationName": "PublicKeyConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        },
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>ID of the public key to be updated.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when retrieving the public key to update. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      },
+      "payload": "PublicKeyConfig"
+    },
+    "UpdatePublicKeyResult": {
+      "type": "structure",
+      "members": {
+        "PublicKey": {
+          "shape": "PublicKey",
+          "documentation": "<p>Return the results of updating the public key.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the update public key result. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "payload": "PublicKey"
+    },
+    "UpdateStreamingDistributionRequest": {
+      "type": "structure",
+      "required": [
+        "StreamingDistributionConfig",
+        "Id"
+      ],
+      "members": {
+        "StreamingDistributionConfig": {
+          "shape": "StreamingDistributionConfig",
+          "documentation": "<p>The streaming distribution's configuration information.</p>",
+          "locationName": "StreamingDistributionConfig",
+          "xmlNamespace": {
+            "uri": "http://cloudfront.amazonaws.com/doc/2019-03-26/"
+          }
+        },
+        "Id": {
+          "shape": "string",
+          "documentation": "<p>The streaming distribution's id.</p>",
+          "location": "uri",
+          "locationName": "Id"
+        },
+        "IfMatch": {
+          "shape": "string",
+          "documentation": "<p>The value of the <code>ETag</code> header that you received when retrieving the streaming distribution's configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "If-Match"
+        }
+      },
+      "documentation": "<p>The request to update a streaming distribution.</p>",
+      "payload": "StreamingDistributionConfig"
+    },
+    "UpdateStreamingDistributionResult": {
+      "type": "structure",
+      "members": {
+        "StreamingDistribution": {
+          "shape": "StreamingDistribution",
+          "documentation": "<p>The streaming distribution's information.</p>"
+        },
+        "ETag": {
+          "shape": "string",
+          "documentation": "<p>The current version of the configuration. For example: <code>E2QWRUHAPOMQZL</code>.</p>",
+          "location": "header",
+          "locationName": "ETag"
+        }
+      },
+      "documentation": "<p>The returned result of the corresponding request.</p>",
+      "payload": "StreamingDistribution"
+    },
+    "ViewerCertificate": {
+      "type": "structure",
+      "members": {
+        "CloudFrontDefaultCertificate": {
+          "shape": "boolean",
+          "documentation": "<p>If you're using the CloudFront domain name for your distribution, such as <code>d111111abcdef8.cloudfront.net</code>, specify the following value:</p> <ul> <li> <p> <code>&lt;CloudFrontDefaultCertificate&gt;true&lt;CloudFrontDefaultCertificate&gt; </code> </p> </li> </ul>"
+        },
+        "IAMCertificateId": {
+          "shape": "string",
+          "documentation": "<p>If you want viewers to use HTTPS to request your objects and you're using an alternate domain name, you must choose the type of certificate that you want to use. Specify the following value if you purchased your certificate from a third-party certificate authority:</p> <ul> <li> <p> <code>&lt;IAMCertificateId&gt;<i>IAM certificate ID</i>&lt;IAMCertificateId&gt;</code> where <code> <i>IAM certificate ID</i> </code> is the ID that IAM returned when you added the certificate to the IAM certificate store.</p> </li> </ul> <p>If you specify <code>IAMCertificateId</code>, you must also specify a value for <code>SSLSupportMethod</code>.</p>"
+        },
+        "ACMCertificateArn": {
+          "shape": "string",
+          "documentation": "<p>If you want viewers to use HTTPS to request your objects and you're using an alternate domain name, you must choose the type of certificate that you want to use. Specify the following value if ACM provided your certificate:</p> <ul> <li> <p> <code>&lt;ACMCertificateArn&gt;<i>ARN for ACM SSL/TLS certificate</i>&lt;ACMCertificateArn&gt;</code> where <code> <i>ARN for ACM SSL/TLS certificate</i> </code> is the ARN for the ACM SSL/TLS certificate that you want to use for this distribution.</p> </li> </ul> <p>If you specify <code>ACMCertificateArn</code>, you must also specify a value for <code>SSLSupportMethod</code>.</p>"
+        },
+        "SSLSupportMethod": {
+          "shape": "SSLSupportMethod",
+          "documentation": "<p>If you specify a value for <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-ACMCertificateArn\">ACMCertificateArn</a> or for <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-IAMCertificateId\">IAMCertificateId</a>, you must also specify how you want CloudFront to serve HTTPS requests: using a method that works for browsers and clients released after 2010 or one that works for all clients.</p> <ul> <li> <p> <code>sni-only</code>: CloudFront can respond to HTTPS requests from viewers that support Server Name Indication (SNI). All modern browsers support SNI, but there are a few that don't. For a current list of the browsers that support SNI, see the <a href=\"http://en.wikipedia.org/wiki/Server_Name_Indication\">Wikipedia entry Server Name Indication</a>. To learn about options to explore if you have users with browsers that don't include SNI support, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cnames-https-dedicated-ip-or-sni.html\">Choosing How CloudFront Serves HTTPS Requests</a> in the <i>Amazon CloudFront Developer Guide</i>.</p> </li> <li> <p> <code>vip</code>: CloudFront uses dedicated IP addresses for your content and can respond to HTTPS requests from any viewer. However, there are additional monthly charges. For details, including specific pricing information, see <a href=\"http://aws.amazon.com/cloudfront/custom-ssl-domains/\">Custom SSL options for Amazon CloudFront</a> on the AWS marketing site.</p> </li> </ul> <p>Don't specify a value for <code>SSLSupportMethod</code> if you specified <code>&lt;CloudFrontDefaultCertificate&gt;true&lt;CloudFrontDefaultCertificate&gt;</code>.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cnames-https-dedicated-ip-or-sni.html\">Choosing How CloudFront Serves HTTPS Requests</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "MinimumProtocolVersion": {
+          "shape": "MinimumProtocolVersion",
+          "documentation": "<p>Specify the security policy that you want CloudFront to use for HTTPS connections. A security policy determines two settings:</p> <ul> <li> <p>The minimum SSL/TLS protocol that CloudFront uses to communicate with viewers</p> </li> <li> <p>The cipher that CloudFront uses to encrypt the content that it returns to viewers</p> </li> </ul> <note> <p>On the CloudFront console, this setting is called <b>Security policy</b>.</p> </note> <p>We recommend that you specify <code>TLSv1.1_2016</code> unless your users are using browsers or devices that do not support TLSv1.1 or later.</p> <p>When both of the following are true, you must specify <code>TLSv1</code> or later for the security policy: </p> <ul> <li> <p>You're using a custom certificate: you specified a value for <code>ACMCertificateArn</code> or for <code>IAMCertificateId</code> </p> </li> <li> <p>You're using SNI: you specified <code>sni-only</code> for <code>SSLSupportMethod</code> </p> </li> </ul> <p>If you specify <code>true</code> for <code>CloudFrontDefaultCertificate</code>, CloudFront automatically sets the security policy to <code>TLSv1</code> regardless of the value that you specify for <code>MinimumProtocolVersion</code>.</p> <p>For information about the relationship between the security policy that you choose and the protocols and ciphers that CloudFront uses to communicate with viewers, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/secure-connections-supported-viewer-protocols-ciphers.html#secure-connections-supported-ciphers\"> Supported SSL/TLS Protocols and Ciphers for Communication Between Viewers and CloudFront</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+        },
+        "Certificate": {
+          "shape": "string",
+          "documentation": "<p>This field is no longer used. Use one of the following fields instead:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-ACMCertificateArn\">ACMCertificateArn</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-IAMCertificateId\">IAMCertificateId</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-CloudFrontDefaultCertificate\">CloudFrontDefaultCertificate</a> </p> </li> </ul>",
+          "deprecated": true
+        },
+        "CertificateSource": {
+          "shape": "CertificateSource",
+          "documentation": "<p>This field is no longer used. Use one of the following fields instead:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-ACMCertificateArn\">ACMCertificateArn</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-IAMCertificateId\">IAMCertificateId</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-CloudFrontDefaultCertificate\">CloudFrontDefaultCertificate</a> </p> </li> </ul>",
+          "deprecated": true
+        }
+      },
+      "documentation": "<p>A complex type that specifies the following:</p> <ul> <li> <p>Whether you want viewers to use HTTP or HTTPS to request your objects.</p> </li> <li> <p>If you want viewers to use HTTPS, whether you're using an alternate domain name such as <code>example.com</code> or the CloudFront domain name for your distribution, such as <code>d111111abcdef8.cloudfront.net</code>.</p> </li> <li> <p>If you're using an alternate domain name, whether AWS Certificate Manager (ACM) provided the certificate, or you purchased a certificate from a third-party certificate authority and imported it into ACM or uploaded it to the IAM certificate store.</p> </li> </ul> <p>Specify only one of the following values: </p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-ACMCertificateArn\">ACMCertificateArn</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-IAMCertificateId\">IAMCertificateId</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ViewerCertificate.html#cloudfront-Type-ViewerCertificate-CloudFrontDefaultCertificate\">CloudFrontDefaultCertificate</a> </p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/SecureConnections.html#CNAMEsAndHTTPS\"> Using Alternate Domain Names and HTTPS</a> in the <i>Amazon CloudFront Developer Guide</i>.</p>"
+    },
+    "ViewerProtocolPolicy": {
+      "type": "string",
+      "enum": [
+        "allow-all",
+        "https-only",
+        "redirect-to-https"
+      ]
+    },
+    "boolean": {
+      "type": "boolean"
+    },
+    "integer": {
+      "type": "integer"
+    },
+    "long": {
+      "type": "long"
+    },
+    "string": {
+      "type": "string"
+    },
+    "timestamp": {
+      "type": "timestamp"
+    }
+  },
+  "documentation": "<fullname>Amazon CloudFront</fullname> <p>This is the <i>Amazon CloudFront API Reference</i>. This guide is for developers who need detailed information about CloudFront API actions, data types, and errors. For detailed information about CloudFront features, see the <i>Amazon CloudFront Developer Guide</i>.</p>"
+}
\ No newline at end of file
diff --git a/aws/api/ec2-2016-11-15.normal.json b/aws/api/ec2-2016-11-15.normal.json
new file mode 100644 (file)
index 0000000..cc0d566
--- /dev/null
@@ -0,0 +1,32928 @@
+{
+  "version": "2.0",
+  "metadata": {
+    "apiVersion": "2016-11-15",
+    "endpointPrefix": "ec2",
+    "protocol": "ec2",
+    "serviceAbbreviation": "Amazon EC2",
+    "serviceFullName": "Amazon Elastic Compute Cloud",
+    "serviceId": "EC2",
+    "signatureVersion": "v4",
+    "uid": "ec2-2016-11-15",
+    "xmlNamespace": "http://ec2.amazonaws.com/doc/2016-11-15"
+  },
+  "operations": {
+    "AcceptReservedInstancesExchangeQuote": {
+      "name": "AcceptReservedInstancesExchangeQuote",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AcceptReservedInstancesExchangeQuoteRequest"
+      },
+      "output": {
+        "shape": "AcceptReservedInstancesExchangeQuoteResult"
+      },
+      "documentation": "<p>Accepts the Convertible Reserved Instance exchange quote described in the <a>GetReservedInstancesExchangeQuote</a> call.</p>"
+    },
+    "AcceptTransitGatewayVpcAttachment": {
+      "name": "AcceptTransitGatewayVpcAttachment",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AcceptTransitGatewayVpcAttachmentRequest"
+      },
+      "output": {
+        "shape": "AcceptTransitGatewayVpcAttachmentResult"
+      },
+      "documentation": "<p>Accepts a request to attach a VPC to a transit gateway.</p> <p>The VPC attachment must be in the <code>pendingAcceptance</code> state. Use <a>DescribeTransitGatewayVpcAttachments</a> to view your pending VPC attachment requests. Use <a>RejectTransitGatewayVpcAttachment</a> to reject a VPC attachment request.</p>"
+    },
+    "AcceptVpcEndpointConnections": {
+      "name": "AcceptVpcEndpointConnections",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AcceptVpcEndpointConnectionsRequest"
+      },
+      "output": {
+        "shape": "AcceptVpcEndpointConnectionsResult"
+      },
+      "documentation": "<p>Accepts one or more interface VPC endpoint connection requests to your VPC endpoint service.</p>"
+    },
+    "AcceptVpcPeeringConnection": {
+      "name": "AcceptVpcPeeringConnection",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AcceptVpcPeeringConnectionRequest"
+      },
+      "output": {
+        "shape": "AcceptVpcPeeringConnectionResult"
+      },
+      "documentation": "<p>Accept a VPC peering connection request. To accept a request, the VPC peering connection must be in the <code>pending-acceptance</code> state, and you must be the owner of the peer VPC. Use <a>DescribeVpcPeeringConnections</a> to view your outstanding VPC peering connection requests.</p> <p>For an inter-Region VPC peering connection request, you must accept the VPC peering connection in the Region of the accepter VPC.</p>"
+    },
+    "AdvertiseByoipCidr": {
+      "name": "AdvertiseByoipCidr",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AdvertiseByoipCidrRequest"
+      },
+      "output": {
+        "shape": "AdvertiseByoipCidrResult"
+      },
+      "documentation": "<p>Advertises an IPv4 address range that is provisioned for use with your AWS resources through bring your own IP addresses (BYOIP).</p> <p>You can perform this operation at most once every 10 seconds, even if you specify different address ranges each time.</p> <p>We recommend that you stop advertising the BYOIP CIDR from other locations when you advertise it from AWS. To minimize down time, you can configure your AWS resources to use an address from a BYOIP CIDR before it is advertised, and then simultaneously stop advertising it from the current location and start advertising it through AWS.</p> <p>It can take a few minutes before traffic to the specified addresses starts routing to AWS because of BGP propagation delays.</p> <p>To stop advertising the BYOIP CIDR, use <a>WithdrawByoipCidr</a>.</p>"
+    },
+    "AllocateAddress": {
+      "name": "AllocateAddress",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AllocateAddressRequest"
+      },
+      "output": {
+        "shape": "AllocateAddressResult"
+      },
+      "documentation": "<p>Allocates an Elastic IP address to your AWS account. After you allocate the Elastic IP address you can associate it with an instance or network interface. After you release an Elastic IP address, it is released to the IP address pool and can be allocated to a different AWS account.</p> <p>You can allocate an Elastic IP address from an address pool owned by AWS or from an address pool created from a public IPv4 address range that you have brought to AWS for use with your AWS resources using bring your own IP addresses (BYOIP). For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html\">Bring Your Own IP Addresses (BYOIP)</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>[EC2-VPC] If you release an Elastic IP address, you might be able to recover it. You cannot recover an Elastic IP address that you released after it is allocated to another AWS account. You cannot recover an Elastic IP address for EC2-Classic. To attempt to recover an Elastic IP address that you released, specify it in this operation.</p> <p>An Elastic IP address is for use either in the EC2-Classic platform or in a VPC. By default, you can allocate 5 Elastic IP addresses for EC2-Classic per Region and 5 Elastic IP addresses for EC2-VPC per Region.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP Addresses</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+    },
+    "AllocateHosts": {
+      "name": "AllocateHosts",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AllocateHostsRequest"
+      },
+      "output": {
+        "shape": "AllocateHostsResult"
+      },
+      "documentation": "<p>Allocates a Dedicated Host to your account. At a minimum, specify the instance size type, Availability Zone, and quantity of hosts to allocate.</p>"
+    },
+    "ApplySecurityGroupsToClientVpnTargetNetwork": {
+      "name": "ApplySecurityGroupsToClientVpnTargetNetwork",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "ApplySecurityGroupsToClientVpnTargetNetworkRequest"
+      },
+      "output": {
+        "shape": "ApplySecurityGroupsToClientVpnTargetNetworkResult"
+      },
+      "documentation": "<p>Applies a security group to the association between the target network and the Client VPN endpoint. This action replaces the existing security groups with the specified security groups.</p>"
+    },
+    "AssignIpv6Addresses": {
+      "name": "AssignIpv6Addresses",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssignIpv6AddressesRequest"
+      },
+      "output": {
+        "shape": "AssignIpv6AddressesResult"
+      },
+      "documentation": "<p>Assigns one or more IPv6 addresses to the specified network interface. You can specify one or more specific IPv6 addresses, or you can specify the number of IPv6 addresses to be automatically assigned from within the subnet's IPv6 CIDR block range. You can assign as many IPv6 addresses to a network interface as you can assign private IPv4 addresses, and the limit varies per instance type. For information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI\">IP Addresses Per Network Interface Per Instance Type</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+    },
+    "AssignPrivateIpAddresses": {
+      "name": "AssignPrivateIpAddresses",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssignPrivateIpAddressesRequest"
+      },
+      "documentation": "<p>Assigns one or more secondary private IP addresses to the specified network interface.</p> <p>You can specify one or more specific secondary IP addresses, or you can specify the number of secondary IP addresses to be automatically assigned within the subnet's CIDR block range. The number of secondary IP addresses that you can assign to an instance varies by instance type. For information about instance types, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html\">Instance Types</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>. For more information about Elastic IP addresses, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP Addresses</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>When you move a secondary private IP address to another network interface, any Elastic IP address that is associated with the IP address is also moved.</p> <p>Remapping an IP address is an asynchronous operation. When you move an IP address from one network interface to another, check <code>network/interfaces/macs/mac/local-ipv4s</code> in the instance metadata to confirm that the remapping is complete.</p>"
+    },
+    "AssociateAddress": {
+      "name": "AssociateAddress",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssociateAddressRequest"
+      },
+      "output": {
+        "shape": "AssociateAddressResult"
+      },
+      "documentation": "<p>Associates an Elastic IP address with an instance or a network interface. Before you can use an Elastic IP address, you must allocate it to your account.</p> <p>An Elastic IP address is for use in either the EC2-Classic platform or in a VPC. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html\">Elastic IP Addresses</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>[EC2-Classic, VPC in an EC2-VPC-only account] If the Elastic IP address is already associated with a different instance, it is disassociated from that instance and associated with the specified instance. If you associate an Elastic IP address with an instance that has an existing Elastic IP address, the existing address is disassociated from the instance, but remains allocated to your account.</p> <p>[VPC in an EC2-Classic account] If you don't specify a private IP address, the Elastic IP address is associated with the primary IP address. If the Elastic IP address is already associated with a different instance or a network interface, you get an error unless you allow reassociation. You cannot associate an Elastic IP address with an instance or network interface that has an existing Elastic IP address.</p> <important> <p>This is an idempotent operation. If you perform the operation more than once, Amazon EC2 doesn't return an error, and you may be charged for each time the Elastic IP address is remapped to the same instance. For more information, see the <i>Elastic IP Addresses</i> section of <a href=\"http://aws.amazon.com/ec2/pricing/\">Amazon EC2 Pricing</a>.</p> </important>"
+    },
+    "AssociateClientVpnTargetNetwork": {
+      "name": "AssociateClientVpnTargetNetwork",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssociateClientVpnTargetNetworkRequest"
+      },
+      "output": {
+        "shape": "AssociateClientVpnTargetNetworkResult"
+      },
+      "documentation": "<p>Associates a target network with a Client VPN endpoint. A target network is a subnet in a VPC. You can associate multiple subnets from the same VPC with a Client VPN endpoint. You can associate only one subnet in each Availability Zone. We recommend that you associate at least two subnets to provide Availability Zone redundancy.</p>"
+    },
+    "AssociateDhcpOptions": {
+      "name": "AssociateDhcpOptions",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssociateDhcpOptionsRequest"
+      },
+      "documentation": "<p>Associates a set of DHCP options (that you've previously created) with the specified VPC, or associates no DHCP options with the VPC.</p> <p>After you associate the options with the VPC, any existing instances and all new instances that you launch in that VPC use the options. You don't need to restart or relaunch the instances. They automatically pick up the changes within a few hours, depending on how frequently the instance renews its DHCP lease. You can explicitly renew the lease using the operating system on the instance.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html\">DHCP Options Sets</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>"
+    },
+    "AssociateIamInstanceProfile": {
+      "name": "AssociateIamInstanceProfile",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssociateIamInstanceProfileRequest"
+      },
+      "output": {
+        "shape": "AssociateIamInstanceProfileResult"
+      },
+      "documentation": "<p>Associates an IAM instance profile with a running or stopped instance. You cannot associate more than one IAM instance profile with an instance.</p>"
+    },
+    "AssociateRouteTable": {
+      "name": "AssociateRouteTable",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssociateRouteTableRequest"
+      },
+      "output": {
+        "shape": "AssociateRouteTableResult"
+      },
+      "documentation": "<p>Associates a subnet with a route table. The subnet and route table must be in the same VPC. This association causes traffic originating from the subnet to be routed according to the routes in the route table. The action returns an association ID, which you need in order to disassociate the route table from the subnet later. A route table can be associated with multiple subnets.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Route_Tables.html\">Route Tables</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>"
+    },
+    "AssociateSubnetCidrBlock": {
+      "name": "AssociateSubnetCidrBlock",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssociateSubnetCidrBlockRequest"
+      },
+      "output": {
+        "shape": "AssociateSubnetCidrBlockResult"
+      },
+      "documentation": "<p>Associates a CIDR block with your subnet. You can only associate a single IPv6 CIDR block with your subnet. An IPv6 CIDR block must have a prefix length of /64.</p>"
+    },
+    "AssociateTransitGatewayRouteTable": {
+      "name": "AssociateTransitGatewayRouteTable",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssociateTransitGatewayRouteTableRequest"
+      },
+      "output": {
+        "shape": "AssociateTransitGatewayRouteTableResult"
+      },
+      "documentation": "<p>Associates the specified attachment with the specified transit gateway route table. You can associate only one route table with an attachment.</p>"
+    },
+    "AssociateVpcCidrBlock": {
+      "name": "AssociateVpcCidrBlock",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AssociateVpcCidrBlockRequest"
+      },
+      "output": {
+        "shape": "AssociateVpcCidrBlockResult"
+      },
+      "documentation": "<p>Associates a CIDR block with your VPC. You can associate a secondary IPv4 CIDR block, or you can associate an Amazon-provided IPv6 CIDR block. The IPv6 CIDR block size is fixed at /56.</p> <p>For more information about associating CIDR blocks with your VPC and applicable restrictions, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html#VPC_Sizing\">VPC and Subnet Sizing</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>"
+    },
+    "AttachClassicLinkVpc": {
+      "name": "AttachClassicLinkVpc",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AttachClassicLinkVpcRequest"
+      },
+      "output": {
+        "shape": "AttachClassicLinkVpcResult"
+      },
+      "documentation": "<p>Links an EC2-Classic instance to a ClassicLink-enabled VPC through one or more of the VPC's security groups. You cannot link an EC2-Classic instance to more than one VPC at a time. You can only link an instance that's in the <code>running</code> state. An instance is automatically unlinked from a VPC when it's stopped - you can link it to the VPC again when you restart it.</p> <p>After you've linked an instance, you cannot change the VPC security groups that are associated with it. To change the security groups, you must first unlink the instance, and then link it again.</p> <p>Linking your instance to a VPC is sometimes referred to as <i>attaching</i> your instance.</p>"
+    },
+    "AttachInternetGateway": {
+      "name": "AttachInternetGateway",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AttachInternetGatewayRequest"
+      },
+      "documentation": "<p>Attaches an internet gateway to a VPC, enabling connectivity between the internet and the VPC. For more information about your VPC and internet gateway, see the <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/\">Amazon Virtual Private Cloud User Guide</a>.</p>"
+    },
+    "AttachNetworkInterface": {
+      "name": "AttachNetworkInterface",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AttachNetworkInterfaceRequest"
+      },
+      "output": {
+        "shape": "AttachNetworkInterfaceResult"
+      },
+      "documentation": "<p>Attaches a network interface to an instance.</p>"
+    },
+    "AttachVolume": {
+      "name": "AttachVolume",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AttachVolumeRequest"
+      },
+      "output": {
+        "shape": "VolumeAttachment"
+      },
+      "documentation": "<p>Attaches an EBS volume to a running or stopped instance and exposes it to the instance with the specified device name.</p> <p>Encrypted EBS volumes must be attached to instances that support Amazon EBS encryption. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html\">Amazon EBS Encryption</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>After you attach an EBS volume, you must make it available. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html\">Making an EBS Volume Available For Use</a>.</p> <p>If a volume has an AWS Marketplace product code:</p> <ul> <li> <p>The volume can be attached only to a stopped instance.</p> </li> <li> <p>AWS Marketplace product codes are copied from the volume to the instance.</p> </li> <li> <p>You must be subscribed to the product.</p> </li> <li> <p>The instance type and operating system of the instance must support the product. For example, you can't detach a volume from a Windows instance and attach it to a Linux instance.</p> </li> </ul> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html\">Attaching Amazon EBS Volumes</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+    },
+    "AttachVpnGateway": {
+      "name": "AttachVpnGateway",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AttachVpnGatewayRequest"
+      },
+      "output": {
+        "shape": "AttachVpnGatewayResult"
+      },
+      "documentation": "<p>Attaches a virtual private gateway to a VPC. You can attach one virtual private gateway to one VPC at a time.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html\">AWS Site-to-Site VPN</a> in the <i>AWS Site-to-Site VPN User Guide</i>.</p>"
+    },
+    "AuthorizeClientVpnIngress": {
+      "name": "AuthorizeClientVpnIngress",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AuthorizeClientVpnIngressRequest"
+      },
+      "output": {
+        "shape": "AuthorizeClientVpnIngressResult"
+      },
+      "documentation": "<p>Adds an ingress authorization rule to a Client VPN endpoint. Ingress authorization rules act as firewall rules that grant access to networks. You must configure ingress authorization rules to enable clients to access resources in AWS or on-premises networks.</p>"
+    },
+    "AuthorizeSecurityGroupEgress": {
+      "name": "AuthorizeSecurityGroupEgress",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AuthorizeSecurityGroupEgressRequest"
+      },
+      "documentation": "<p>[VPC only] Adds the specified egress rules to a security group for use with a VPC.</p> <p>An outbound rule permits instances to send traffic to the specified IPv4 or IPv6 CIDR address ranges, or to the instances associated with the specified destination security groups.</p> <p>You specify a protocol for each rule (for example, TCP). For the TCP and UDP protocols, you must also specify the destination port or port range. For the ICMP protocol, you must also specify the ICMP type and code. You can use -1 for the type or code to mean all types or all codes.</p> <p>Rule changes are propagated to affected instances as quickly as possible. However, a small delay might occur.</p> <p>For more information about VPC security group limits, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html\">Amazon VPC Limits</a>.</p>"
+    },
+    "AuthorizeSecurityGroupIngress": {
+      "name": "AuthorizeSecurityGroupIngress",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "AuthorizeSecurityGroupIngressRequest"
+      },
+      "documentation": "<p>Adds the specified ingress rules to a security group.</p> <p>An inbound rule permits instances to receive traffic from the specified IPv4 or IPv6 CIDR address ranges, or from the instances associated with the specified destination security groups.</p> <p>You specify a protocol for each rule (for example, TCP). For TCP and UDP, you must also specify the destination port or port range. For ICMP/ICMPv6, you must also specify the ICMP/ICMPv6 type and code. You can use -1 to mean all types or all codes.</p> <p>Rule changes are propagated to instances within the security group as quickly as possible. However, a small delay might occur.</p> <p>For more information about VPC security group limits, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/amazon-vpc-limits.html\">Amazon VPC Limits</a>.</p>"
+    },
+    "BundleInstance": {
+      "name": "BundleInstance",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "BundleInstanceRequest"
+      },
+      "output": {
+        "shape": "BundleInstanceResult"
+      },
+      "documentation": "<p>Bundles an Amazon instance store-backed Windows instance.</p> <p>During bundling, only the root device volume (C:\\) is bundled. Data on other instance store volumes is not preserved.</p> <note> <p>This action is not applicable for Linux/Unix instances or Windows instances that are backed by Amazon EBS.</p> </note>"
+    },
+    "CancelBundleTask": {
+      "name": "CancelBundleTask",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CancelBundleTaskRequest"
+      },
+      "output": {
+        "shape": "CancelBundleTaskResult"
+      },
+      "documentation": "<p>Cancels a bundling operation for an instance store-backed Windows instance.</p>"
+    },
+    "CancelCapacityReservation": {
+      "name": "CancelCapacityReservation",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CancelCapacityReservationRequest"
+      },
+      "output": {
+        "shape": "CancelCapacityReservationResult"
+      },
+      "documentation": "<p>Cancels the specified Capacity Reservation, releases the reserved capacity, and changes the Capacity Reservation's state to <code>cancelled</code>.</p> <p>Instances running in the reserved capacity continue running until you stop them. Stopped instances that target the Capacity Reservation can no longer launch. Modify these instances to either target a different Capacity Reservation, launch On-Demand Instance capacity, or run in any open Capacity Reservation that has matching attributes and sufficient capacity.</p>"
+    },
+    "CancelConversionTask": {
+      "name": "CancelConversionTask",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CancelConversionRequest"
+      },
+      "documentation": "<p>Cancels an active conversion task. The task can be the import of an instance or volume. The action removes all artifacts of the conversion, including a partially uploaded volume or instance. If the conversion is complete or is in the process of transferring the final disk image, the command fails and returns an exception.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-cli-vmimport-export.html\">Importing a Virtual Machine Using the Amazon EC2 CLI</a>.</p>"
+    },
+    "CancelExportTask": {
+      "name": "CancelExportTask",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CancelExportTaskRequest"
+      },
+      "documentation": "<p>Cancels an active export task. The request removes all artifacts of the export, including any partially-created Amazon S3 objects. If the export task is complete or is in the process of transferring the final disk image, the command fails and returns an error.</p>"
+    },
+    "CancelImportTask": {
+      "name": "CancelImportTask",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CancelImportTaskRequest"
+      },
+      "output": {
+        "shape": "CancelImportTaskResult"
+      },
+      "documentation": "<p>Cancels an in-process import virtual machine or import snapshot task.</p>"
+    },
+    "CancelReservedInstancesListing": {
+      "name": "CancelReservedInstancesListing",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CancelReservedInstancesListingRequest"
+      },
+      "output": {
+        "shape": "CancelReservedInstancesListingResult"
+      },
+      "documentation": "<p>Cancels the specified Reserved Instance listing in the Reserved Instance Marketplace.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html\">Reserved Instance Marketplace</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+    },
+    "CancelSpotFleetRequests": {
+      "name": "CancelSpotFleetRequests",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CancelSpotFleetRequestsRequest"
+      },
+      "output": {
+        "shape": "CancelSpotFleetRequestsResponse"
+      },
+      "documentation": "<p>Cancels the specified Spot Fleet requests.</p> <p>After you cancel a Spot Fleet request, the Spot Fleet launches no new Spot Instances. You must specify whether the Spot Fleet should also terminate its Spot Instances. If you terminate the instances, the Spot Fleet request enters the <code>cancelled_terminating</code> state. Otherwise, the Spot Fleet request enters the <code>cancelled_running</code> state and the instances continue to run until they are interrupted or you terminate them manually.</p>"
+    },
+    "CancelSpotInstanceRequests": {
+      "name": "CancelSpotInstanceRequests",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CancelSpotInstanceRequestsRequest"
+      },
+      "output": {
+        "shape": "CancelSpotInstanceRequestsResult"
+      },
+      "documentation": "<p>Cancels one or more Spot Instance requests.</p> <important> <p>Canceling a Spot Instance request does not terminate running Spot Instances associated with the request.</p> </important>"
+    },
+    "ConfirmProductInstance": {
+      "name": "ConfirmProductInstance",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "ConfirmProductInstanceRequest"
+      },
+      "output": {
+        "shape": "ConfirmProductInstanceResult"
+      },
+      "documentation": "<p>Determines whether a product code is associated with an instance. This action can only be used by the owner of the product code. It is useful when a product code owner must verify whether another user's instance is eligible for support.</p>"
+    },
+    "CopyFpgaImage": {
+      "name": "CopyFpgaImage",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CopyFpgaImageRequest"
+      },
+      "output": {
+        "shape": "CopyFpgaImageResult"
+      },
+      "documentation": "<p>Copies the specified Amazon FPGA Image (AFI) to the current Region.</p>"
+    },
+    "CopyImage": {
+      "name": "CopyImage",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CopyImageRequest"
+      },
+      "output": {
+        "shape": "CopyImageResult"
+      },
+      "documentation": "<p>Initiates the copy of an AMI from the specified source Region to the current Region. You specify the destination Region by using its endpoint when making the request.</p> <p>Copies of encrypted backing snapshots for the AMI are encrypted. Copies of unencrypted backing snapshots remain unencrypted, unless you set <code>Encrypted</code> during the copy operation. You cannot create an unencrypted copy of an encrypted backing snapshot.</p> <p>For more information about the prerequisites and limits when copying an AMI, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html\">Copying an AMI</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+    },
+    "CopySnapshot": {
+      "name": "CopySnapshot",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CopySnapshotRequest"
+      },
+      "output": {
+        "shape": "CopySnapshotResult"
+      },
+      "documentation": "<p>Copies a point-in-time snapshot of an EBS volume and stores it in Amazon S3. You can copy the snapshot within the same Region or from one Region to another. You can use the snapshot to create EBS volumes or Amazon Machine Images (AMIs).</p> <p>Copies of encrypted EBS snapshots remain encrypted. Copies of unencrypted snapshots remain unencrypted, unless you enable encryption for the snapshot copy operation. By default, encrypted snapshot copies use the default AWS Key Management Service (AWS KMS) customer master key (CMK); however, you can specify a different CMK.</p> <p>To copy an encrypted snapshot that has been shared from another account, you must have permissions for the CMK used to encrypt the snapshot.</p> <p>Snapshots created by copying another snapshot have an arbitrary volume ID that should not be used for any purpose.</p> <p>For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html\">Copying an Amazon EBS Snapshot</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+    },
+    "CreateCapacityReservation": {
+      "name": "CreateCapacityReservation",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CreateCapacityReservationRequest"
+      },
+      "output": {
+        "shape": "CreateCapacityReservationResult"
+      },
+      "documentation": "<p>Creates a new Capacity Reservation with the specified attributes.</p> <p>Capacity Reservations enable you to reserve capacity for your Amazon EC2 instances in a specific Availability Zone for any duration. This gives you the flexibility to selectively add capacity reservations and still get the Regional RI discounts for that usage. By creating Capacity Reservations, you ensure that you always have access to Amazon EC2 capacity when you need it, for as long as you need it. For more information, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html\">Capacity Reservations</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p> <p>Your request to create a Capacity Reservation could fail if Amazon EC2 does not have sufficient capacity to fulfill the request. If your request fails due to Amazon EC2 capacity constraints, either try again at a later time, try in a different Availability Zone, or request a smaller capacity reservation. If your application is flexible across instance types and sizes, try to create a Capacity Reservation with different instance attributes.</p> <p>Your request could also fail if the requested quantity exceeds your On-Demand Instance limit for the selected instance type. If your request fails due to limit constraints, increase your On-Demand Instance limit for the required instance type and try again. For more information about increasing your instance limits, see <a href=\"https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html\">Amazon EC2 Service Limits</a> in the <i>Amazon Elastic Compute Cloud User Guide</i>.</p>"
+    },
+    "CreateClientVpnEndpoint": {
+      "name": "CreateClientVpnEndpoint",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CreateClientVpnEndpointRequest"
+      },
+      "output": {
+        "shape": "CreateClientVpnEndpointResult"
+      },
+      "documentation": "<p>Creates a Client VPN endpoint. A Client VPN endpoint is the resource you create and configure to enable and manage client VPN sessions. It is the destination endpoint at which all client VPN sessions are terminated.</p>"
+    },
+    "CreateClientVpnRoute": {
+      "name": "CreateClientVpnRoute",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CreateClientVpnRouteRequest"
+      },
+      "output": {
+        "shape": "CreateClientVpnRouteResult"
+      },
+      "documentation": "<p>Adds a route to a network to a Client VPN endpoint. Each Client VPN endpoint has a route table that describes the available destination network routes. Each route in the route table specifies the path for traffic to specific resources or networks.</p>"
+    },
+    "CreateCustomerGateway": {
+      "name": "CreateCustomerGateway",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CreateCustomerGatewayRequest"
+      },
+      "output": {
+        "shape": "CreateCustomerGatewayResult"
+      },
+      "documentation": "<p>Provides information to AWS about your VPN customer gateway device. The customer gateway is the appliance at your end of the VPN connection. (The device on the AWS side of the VPN connection is the virtual private gateway.) You must provide the Internet-routable IP address of the customer gateway's external interface. The IP address must be static and may be behind a device performing network address translation (NAT).</p> <p>For devices that use Border Gateway Protocol (BGP), you can also provide the device's BGP Autonomous System Number (ASN). You can use an existing ASN assigned to your network. If you don't have an ASN already, you can use a private ASN (in the 64512 - 65534 range).</p> <note> <p>Amazon EC2 supports all 2-byte ASN numbers in the range of 1 - 65534, with the exception of 7224, which is reserved in the <code>us-east-1</code> Region, and 9059, which is reserved in the <code>eu-west-1</code> Region.</p> </note> <p>For more information, see <a href=\"https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html\">AWS Site-to-Site VPN</a> in the <i>AWS Site-to-Site VPN User Guide</i>.</p> <important> <p>You cannot create more than one customer gateway with the same VPN type, IP address, and BGP ASN parameter values. If you run an identical request more than one time, the first request creates the customer gateway, and subsequent requests return information about the existing customer gateway. The subsequent requests do not create new customer gateway resources.</p> </important>"
+    },
+    "CreateDefaultSubnet": {
+      "name": "CreateDefaultSubnet",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CreateDefaultSubnetRequest"
+      },
+      "output": {
+        "shape": "CreateDefaultSubnetResult"
+      },
+      "documentation": "<p>Creates a default subnet with a size <code>/20</code> IPv4 CIDR block in the specified Availability Zone in your default VPC. You can have only one default subnet per Availability Zone. For more information, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html#create-default-subnet\">Creating a Default Subnet</a> in the <i>Amazon Virtual Private Cloud User Guide</i>.</p>"
+    },
+    "CreateDefaultVpc": {
+      "name": "CreateDefaultVpc",
+      "http": {
+        "method": "POST",
+        "requestUri": "/"
+      },
+      "input": {
+        "shape": "CreateDefaultVpcRequest"
+      },
+      "output": {
+        "shape": "CreateDefaultVpcResult"
+      },
+      "documentation": "<p>Creates a default VPC with a size <code>/16</code> IPv4 CIDR block and a default subnet in each Availability Zone. For more information about the components of a default VPC, see <a href=\"https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html\">Default VPC and Default Subnets</a> in the <i>Amazon Virtual Private Cloud User Guide</i>. You cannot specify the components of the default VPC yourself.</p> <p>If you deleted your previous default VPC, you can create a default VPC. You cannot have more than one default VPC per Region.</p> <p>If your account supports EC2-Classic, you cannot use this action to create a default VPC in a Region that supports EC2-Classic. If you want a default VPC in a Region that support