diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
 
 ## Version
 
-`1.3.7`
+`1.4.0`
 
 
 ## Description
@@ -21,7 +21,7 @@
 and deploy applications faster.
 
 Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-ec2)
-and the [AWS API Reference](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html).
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
 
 The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
 which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
diff --git a/amazonka-ec2.cabal b/amazonka-ec2.cabal
--- a/amazonka-ec2.cabal
+++ b/amazonka-ec2.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-ec2
-version:               1.3.7
+version:               1.4.0
 synopsis:              Amazon Elastic Compute Cloud SDK.
 homepage:              https://github.com/brendanhay/amazonka
 bug-reports:           https://github.com/brendanhay/amazonka/issues
@@ -7,7 +7,7 @@
 license-file:          LICENSE
 author:                Brendan Hay
 maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
-copyright:             Copyright (c) 2013-2015 Brendan Hay
+copyright:             Copyright (c) 2013-2016 Brendan Hay
 category:              Network, AWS, Cloud, Distributed Computing
 build-type:            Simple
 cabal-version:         >= 1.10
@@ -31,7 +31,7 @@
     such as <http://hackage.haskell.org/package/lens lens> or
     <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
     .
-    See "Network.AWS.EC2" and the <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html AWS API Reference>
+    See "Network.AWS.EC2" or <https://aws.amazon.com/documentation/ the AWS Documentation>
     to get started.
 
 source-repository head
@@ -157,6 +157,8 @@
         , Network.AWS.EC2.DescribeReservedInstancesModifications
         , Network.AWS.EC2.DescribeReservedInstancesOfferings
         , Network.AWS.EC2.DescribeRouteTables
+        , Network.AWS.EC2.DescribeScheduledInstanceAvailability
+        , Network.AWS.EC2.DescribeScheduledInstances
         , Network.AWS.EC2.DescribeSecurityGroups
         , Network.AWS.EC2.DescribeSnapshotAttribute
         , Network.AWS.EC2.DescribeSnapshots
@@ -170,6 +172,7 @@
         , Network.AWS.EC2.DescribeTags
         , Network.AWS.EC2.DescribeVPCAttribute
         , Network.AWS.EC2.DescribeVPCClassicLink
+        , Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
         , Network.AWS.EC2.DescribeVPCEndpointServices
         , Network.AWS.EC2.DescribeVPCEndpoints
         , Network.AWS.EC2.DescribeVPCPeeringConnections
@@ -186,10 +189,12 @@
         , Network.AWS.EC2.DetachVolume
         , Network.AWS.EC2.DisableVGWRoutePropagation
         , Network.AWS.EC2.DisableVPCClassicLink
+        , Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
         , Network.AWS.EC2.DisassociateAddress
         , Network.AWS.EC2.DisassociateRouteTable
         , Network.AWS.EC2.EnableVGWRoutePropagation
         , Network.AWS.EC2.EnableVPCClassicLink
+        , Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
         , Network.AWS.EC2.EnableVolumeIO
         , Network.AWS.EC2.GetConsoleOutput
         , Network.AWS.EC2.GetPasswordData
@@ -214,6 +219,7 @@
         , Network.AWS.EC2.MonitorInstances
         , Network.AWS.EC2.MoveAddressToVPC
         , Network.AWS.EC2.PurchaseReservedInstancesOffering
+        , Network.AWS.EC2.PurchaseScheduledInstances
         , Network.AWS.EC2.RebootInstances
         , Network.AWS.EC2.RegisterImage
         , Network.AWS.EC2.RejectVPCPeeringConnection
@@ -234,6 +240,7 @@
         , Network.AWS.EC2.RevokeSecurityGroupEgress
         , Network.AWS.EC2.RevokeSecurityGroupIngress
         , Network.AWS.EC2.RunInstances
+        , Network.AWS.EC2.RunScheduledInstances
         , Network.AWS.EC2.StartInstances
         , Network.AWS.EC2.StopInstances
         , Network.AWS.EC2.TerminateInstances
@@ -243,11 +250,12 @@
         , Network.AWS.EC2.Waiters
 
     other-modules:
-          Network.AWS.EC2.Types.Product
+          Network.AWS.EC2.Internal
+        , Network.AWS.EC2.Types.Product
         , Network.AWS.EC2.Types.Sum
 
     build-depends:
-          amazonka-core == 1.3.7.*
+          amazonka-core == 1.4.0.*
         , base          >= 4.7     && < 5
 
 test-suite amazonka-ec2-test
@@ -267,9 +275,9 @@
         , Test.AWS.EC2.Internal
 
     build-depends:
-          amazonka-core == 1.3.7.*
-        , amazonka-test == 1.3.7.*
-        , amazonka-ec2 == 1.3.7.*
+          amazonka-core == 1.4.0.*
+        , amazonka-test == 1.4.0.*
+        , amazonka-ec2 == 1.4.0.*
         , base
         , bytestring
         , tasty
diff --git a/fixture/DescribeScheduledInstanceAvailability.yaml b/fixture/DescribeScheduledInstanceAvailability.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeScheduledInstanceAvailability.yaml
diff --git a/fixture/DescribeScheduledInstanceAvailabilityResponse.proto b/fixture/DescribeScheduledInstanceAvailabilityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeScheduledInstanceAvailabilityResponse.proto
diff --git a/fixture/DescribeScheduledInstances.yaml b/fixture/DescribeScheduledInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeScheduledInstances.yaml
diff --git a/fixture/DescribeScheduledInstancesResponse.proto b/fixture/DescribeScheduledInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeScheduledInstancesResponse.proto
diff --git a/fixture/DescribeVPCClassicLinkDNSSupport.yaml b/fixture/DescribeVPCClassicLinkDNSSupport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVPCClassicLinkDNSSupport.yaml
diff --git a/fixture/DescribeVPCClassicLinkDNSSupportResponse.proto b/fixture/DescribeVPCClassicLinkDNSSupportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeVPCClassicLinkDNSSupportResponse.proto
diff --git a/fixture/DisableVPCClassicLinkDNSSupport.yaml b/fixture/DisableVPCClassicLinkDNSSupport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableVPCClassicLinkDNSSupport.yaml
diff --git a/fixture/DisableVPCClassicLinkDNSSupportResponse.proto b/fixture/DisableVPCClassicLinkDNSSupportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableVPCClassicLinkDNSSupportResponse.proto
diff --git a/fixture/EnableVPCClassicLinkDNSSupport.yaml b/fixture/EnableVPCClassicLinkDNSSupport.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableVPCClassicLinkDNSSupport.yaml
diff --git a/fixture/EnableVPCClassicLinkDNSSupportResponse.proto b/fixture/EnableVPCClassicLinkDNSSupportResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableVPCClassicLinkDNSSupportResponse.proto
diff --git a/fixture/PurchaseScheduledInstances.yaml b/fixture/PurchaseScheduledInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PurchaseScheduledInstances.yaml
diff --git a/fixture/PurchaseScheduledInstancesResponse.proto b/fixture/PurchaseScheduledInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PurchaseScheduledInstancesResponse.proto
diff --git a/fixture/RunScheduledInstances.yaml b/fixture/RunScheduledInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RunScheduledInstances.yaml
diff --git a/fixture/RunScheduledInstancesResponse.proto b/fixture/RunScheduledInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RunScheduledInstancesResponse.proto
diff --git a/gen/Network/AWS/EC2.hs b/gen/Network/AWS/EC2.hs
--- a/gen/Network/AWS/EC2.hs
+++ b/gen/Network/AWS/EC2.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -17,12 +17,10 @@
 -- capacity in the Amazon Web Services (AWS) cloud. Using Amazon EC2
 -- eliminates your need to invest in hardware up front, so you can develop
 -- and deploy applications faster.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html AWS API Reference>
 module Network.AWS.EC2
     (
     -- * Service Configuration
-      eC2
+      ec2
 
     -- * Errors
     -- $errors
@@ -36,9 +34,15 @@
     -- ** VolumeInUse
     , volumeInUse
 
+    -- ** NatGatewayAvailable
+    , natGatewayAvailable
+
     -- ** SubnetAvailable
     , subnetAvailable
 
+    -- ** NetworkInterfaceAvailable
+    , networkInterfaceAvailable
+
     -- ** SystemStatusOK
     , systemStatusOK
 
@@ -90,6 +94,9 @@
     -- ** ImageAvailable
     , imageAvailable
 
+    -- ** VPCPeeringConnectionExists
+    , vpcPeeringConnectionExists
+
     -- ** SnapshotCompleted
     , snapshotCompleted
 
@@ -174,6 +181,12 @@
     -- ** AttachClassicLinkVPC
     , module Network.AWS.EC2.AttachClassicLinkVPC
 
+    -- ** DescribeVPCClassicLinkDNSSupport
+    , module Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
+
+    -- ** RunScheduledInstances
+    , module Network.AWS.EC2.RunScheduledInstances
+
     -- ** CancelSpotFleetRequests
     , module Network.AWS.EC2.CancelSpotFleetRequests
 
@@ -312,6 +325,9 @@
     -- ** DescribeConversionTasks
     , module Network.AWS.EC2.DescribeConversionTasks
 
+    -- ** DisableVPCClassicLinkDNSSupport
+    , module Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
+
     -- ** AllocateAddress
     , module Network.AWS.EC2.AllocateAddress
 
@@ -354,9 +370,15 @@
     -- ** RevokeSecurityGroupIngress
     , module Network.AWS.EC2.RevokeSecurityGroupIngress
 
+    -- ** EnableVPCClassicLinkDNSSupport
+    , module Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
+
     -- ** ModifyReservedInstances
     , module Network.AWS.EC2.ModifyReservedInstances
 
+    -- ** DescribeScheduledInstances
+    , module Network.AWS.EC2.DescribeScheduledInstances
+
     -- ** CreateFlowLogs
     , module Network.AWS.EC2.CreateFlowLogs
 
@@ -405,6 +427,9 @@
     -- ** CreateVolume
     , module Network.AWS.EC2.CreateVolume
 
+    -- ** DescribeScheduledInstanceAvailability
+    , module Network.AWS.EC2.DescribeScheduledInstanceAvailability
+
     -- ** ModifyVolumeAttribute
     , module Network.AWS.EC2.ModifyVolumeAttribute
 
@@ -552,6 +577,9 @@
     -- ** DescribePlacementGroups
     , module Network.AWS.EC2.DescribePlacementGroups
 
+    -- ** PurchaseScheduledInstances
+    , module Network.AWS.EC2.PurchaseScheduledInstances
+
     -- ** EnableVGWRoutePropagation
     , module Network.AWS.EC2.EnableVGWRoutePropagation
 
@@ -686,6 +714,9 @@
 
     -- * Types
 
+    -- ** Re-exported Types
+    , module Network.AWS.EC2.Internal
+
     -- ** AccountAttributeName
     , AccountAttributeName (..)
 
@@ -1059,6 +1090,12 @@
     , csirState
     , csirSpotInstanceRequestId
 
+    -- ** ClassicLinkDNSSupport
+    , ClassicLinkDNSSupport
+    , classicLinkDNSSupport
+    , cldsVPCId
+    , cldsClassicLinkDNSSupported
+
     -- ** ClassicLinkInstance
     , ClassicLinkInstance
     , classicLinkInstance
@@ -1832,6 +1869,12 @@
     , propagatingVGW
     , pvGatewayId
 
+    -- ** PurchaseRequest
+    , PurchaseRequest
+    , purchaseRequest
+    , prPurchaseToken
+    , prInstanceCount
+
     -- ** RecurringCharge
     , RecurringCharge
     , recurringCharge
@@ -2008,6 +2051,133 @@
     , ssUploadPolicySignature
     , ssAWSAccessKeyId
 
+    -- ** ScheduledInstance
+    , ScheduledInstance
+    , scheduledInstance
+    , siPreviousSlotEndTime
+    , siPlatform
+    , siTermStartDate
+    , siInstanceCount
+    , siScheduledInstanceId
+    , siHourlyPrice
+    , siCreateDate
+    , siSlotDurationInHours
+    , siTotalScheduledInstanceHours
+    , siInstanceType
+    , siRecurrence
+    , siAvailabilityZone
+    , siTermEndDate
+    , siNextSlotStartTime
+    , siNetworkPlatform
+
+    -- ** ScheduledInstanceAvailability
+    , ScheduledInstanceAvailability
+    , scheduledInstanceAvailability
+    , siaMaxTermDurationInDays
+    , siaPlatform
+    , siaPurchaseToken
+    , siaHourlyPrice
+    , siaAvailableInstanceCount
+    , siaSlotDurationInHours
+    , siaTotalScheduledInstanceHours
+    , siaInstanceType
+    , siaRecurrence
+    , siaAvailabilityZone
+    , siaMinTermDurationInDays
+    , siaFirstSlotStartTime
+    , siaNetworkPlatform
+
+    -- ** ScheduledInstanceRecurrence
+    , ScheduledInstanceRecurrence
+    , scheduledInstanceRecurrence
+    , sirFrequency
+    , sirOccurrenceRelativeToEnd
+    , sirOccurrenceUnit
+    , sirInterval
+    , sirOccurrenceDaySet
+
+    -- ** ScheduledInstanceRecurrenceRequest
+    , ScheduledInstanceRecurrenceRequest
+    , scheduledInstanceRecurrenceRequest
+    , sirrFrequency
+    , sirrOccurrenceRelativeToEnd
+    , sirrOccurrenceDays
+    , sirrOccurrenceUnit
+    , sirrInterval
+
+    -- ** ScheduledInstancesBlockDeviceMapping
+    , ScheduledInstancesBlockDeviceMapping
+    , scheduledInstancesBlockDeviceMapping
+    , sibdmVirtualName
+    , sibdmNoDevice
+    , sibdmEBS
+    , sibdmDeviceName
+
+    -- ** ScheduledInstancesEBS
+    , ScheduledInstancesEBS
+    , scheduledInstancesEBS
+    , sieDeleteOnTermination
+    , sieVolumeSize
+    , sieIOPS
+    , sieEncrypted
+    , sieVolumeType
+    , sieSnapshotId
+
+    -- ** ScheduledInstancesIAMInstanceProfile
+    , ScheduledInstancesIAMInstanceProfile
+    , scheduledInstancesIAMInstanceProfile
+    , siiapARN
+    , siiapName
+
+    -- ** ScheduledInstancesLaunchSpecification
+    , ScheduledInstancesLaunchSpecification
+    , scheduledInstancesLaunchSpecification
+    , silsSecurityGroupIds
+    , silsKeyName
+    , silsNetworkInterfaces
+    , silsRAMDiskId
+    , silsSubnetId
+    , silsKernelId
+    , silsInstanceType
+    , silsEBSOptimized
+    , silsUserData
+    , silsMonitoring
+    , silsIAMInstanceProfile
+    , silsBlockDeviceMappings
+    , silsPlacement
+    , silsImageId
+
+    -- ** ScheduledInstancesMonitoring
+    , ScheduledInstancesMonitoring
+    , scheduledInstancesMonitoring
+    , simEnabled
+
+    -- ** ScheduledInstancesNetworkInterface
+    , ScheduledInstancesNetworkInterface
+    , scheduledInstancesNetworkInterface
+    , siniGroups
+    , siniDeleteOnTermination
+    , siniAssociatePublicIPAddress
+    , siniPrivateIPAddressConfigs
+    , siniNetworkInterfaceId
+    , siniSubnetId
+    , siniPrivateIPAddress
+    , siniSecondaryPrivateIPAddressCount
+    , siniDescription
+    , siniDeviceIndex
+
+    -- ** ScheduledInstancesPlacement
+    , ScheduledInstancesPlacement
+    , scheduledInstancesPlacement
+    , sipAvailabilityZone
+    , sipGroupName
+
+    -- ** ScheduledInstancesPrivateIPAddressConfig
+    , ScheduledInstancesPrivateIPAddressConfig
+    , scheduledInstancesPrivateIPAddressConfig
+    , sipiacPrimary
+    , sipiacPrivateIPAddress
+
     -- ** SecurityGroup
     , SecurityGroup
     , securityGroup
@@ -2020,6 +2190,18 @@
     , sgGroupName
     , sgDescription
 
+    -- ** SlotDateTimeRangeRequest
+    , SlotDateTimeRangeRequest
+    , slotDateTimeRangeRequest
+    , sdtrrEarliestTime
+    , sdtrrLatestTime
+
+    -- ** SlotStartTimeRangeRequest
+    , SlotStartTimeRangeRequest
+    , slotStartTimeRangeRequest
+    , sstrrLatestTime
+    , sstrrEarliestTime
+
     -- ** Snapshot
     , Snapshot
     , snapshot
@@ -2250,9 +2432,12 @@
     -- ** UserIdGroupPair
     , UserIdGroupPair
     , userIdGroupPair
+    , uigpVPCPeeringConnectionId
+    , uigpVPCId
     , uigpUserId
     , uigpGroupId
     , uigpGroupName
+    , uigpPeeringStatus
 
     -- ** VGWTelemetry
     , VGWTelemetry
@@ -2543,6 +2728,8 @@
 import           Network.AWS.EC2.DescribeReservedInstancesModifications
 import           Network.AWS.EC2.DescribeReservedInstancesOfferings
 import           Network.AWS.EC2.DescribeRouteTables
+import           Network.AWS.EC2.DescribeScheduledInstanceAvailability
+import           Network.AWS.EC2.DescribeScheduledInstances
 import           Network.AWS.EC2.DescribeSecurityGroups
 import           Network.AWS.EC2.DescribeSnapshotAttribute
 import           Network.AWS.EC2.DescribeSnapshots
@@ -2559,6 +2746,7 @@
 import           Network.AWS.EC2.DescribeVolumeStatus
 import           Network.AWS.EC2.DescribeVPCAttribute
 import           Network.AWS.EC2.DescribeVPCClassicLink
+import           Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
 import           Network.AWS.EC2.DescribeVPCEndpoints
 import           Network.AWS.EC2.DescribeVPCEndpointServices
 import           Network.AWS.EC2.DescribeVPCPeeringConnections
@@ -2572,11 +2760,13 @@
 import           Network.AWS.EC2.DetachVPNGateway
 import           Network.AWS.EC2.DisableVGWRoutePropagation
 import           Network.AWS.EC2.DisableVPCClassicLink
+import           Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
 import           Network.AWS.EC2.DisassociateAddress
 import           Network.AWS.EC2.DisassociateRouteTable
 import           Network.AWS.EC2.EnableVGWRoutePropagation
 import           Network.AWS.EC2.EnableVolumeIO
 import           Network.AWS.EC2.EnableVPCClassicLink
+import           Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
 import           Network.AWS.EC2.GetConsoleOutput
 import           Network.AWS.EC2.GetPasswordData
 import           Network.AWS.EC2.ImportImage
@@ -2584,6 +2774,7 @@
 import           Network.AWS.EC2.ImportKeyPair
 import           Network.AWS.EC2.ImportSnapshot
 import           Network.AWS.EC2.ImportVolume
+import           Network.AWS.EC2.Internal
 import           Network.AWS.EC2.ModifyHosts
 import           Network.AWS.EC2.ModifyIdFormat
 import           Network.AWS.EC2.ModifyImageAttribute
@@ -2600,6 +2791,7 @@
 import           Network.AWS.EC2.MonitorInstances
 import           Network.AWS.EC2.MoveAddressToVPC
 import           Network.AWS.EC2.PurchaseReservedInstancesOffering
+import           Network.AWS.EC2.PurchaseScheduledInstances
 import           Network.AWS.EC2.RebootInstances
 import           Network.AWS.EC2.RegisterImage
 import           Network.AWS.EC2.RejectVPCPeeringConnection
@@ -2620,6 +2812,7 @@
 import           Network.AWS.EC2.RevokeSecurityGroupEgress
 import           Network.AWS.EC2.RevokeSecurityGroupIngress
 import           Network.AWS.EC2.RunInstances
+import           Network.AWS.EC2.RunScheduledInstances
 import           Network.AWS.EC2.StartInstances
 import           Network.AWS.EC2.StopInstances
 import           Network.AWS.EC2.TerminateInstances
diff --git a/gen/Network/AWS/EC2/AcceptVPCPeeringConnection.hs b/gen/Network/AWS/EC2/AcceptVPCPeeringConnection.hs
--- a/gen/Network/AWS/EC2/AcceptVPCPeeringConnection.hs
+++ b/gen/Network/AWS/EC2/AcceptVPCPeeringConnection.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AcceptVPCPeeringConnection
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- must be the owner of the peer VPC. Use the
 -- 'DescribeVpcPeeringConnections' request to view your outstanding VPC
 -- peering connection requests.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AcceptVPCPeeringConnection.html AWS API Reference> for AcceptVPCPeeringConnection.
 module Network.AWS.EC2.AcceptVPCPeeringConnection
     (
     -- * Creating a Request
@@ -84,13 +82,15 @@
 instance AWSRequest AcceptVPCPeeringConnection where
         type Rs AcceptVPCPeeringConnection =
              AcceptVPCPeeringConnectionResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  AcceptVPCPeeringConnectionResponse' <$>
                    (x .@? "vpcPeeringConnection") <*>
                      (pure (fromEnum s)))
+
+instance Hashable AcceptVPCPeeringConnection
 
 instance ToHeaders AcceptVPCPeeringConnection where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AllocateAddress.hs b/gen/Network/AWS/EC2/AllocateAddress.hs
--- a/gen/Network/AWS/EC2/AllocateAddress.hs
+++ b/gen/Network/AWS/EC2/AllocateAddress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AllocateAddress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- in a VPC. For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AllocateAddress.html AWS API Reference> for AllocateAddress.
 module Network.AWS.EC2.AllocateAddress
     (
     -- * Creating a Request
@@ -88,7 +86,7 @@
 
 instance AWSRequest AllocateAddress where
         type Rs AllocateAddress = AllocateAddressResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -96,6 +94,8 @@
                    (x .@? "allocationId") <*> (x .@? "domain") <*>
                      (x .@? "publicIp")
                      <*> (pure (fromEnum s)))
+
+instance Hashable AllocateAddress
 
 instance ToHeaders AllocateAddress where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AllocateHosts.hs b/gen/Network/AWS/EC2/AllocateHosts.hs
--- a/gen/Network/AWS/EC2/AllocateHosts.hs
+++ b/gen/Network/AWS/EC2/AllocateHosts.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AllocateHosts
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Allocates a Dedicated host to your account. At minimum you need to
 -- specify the instance size type, Availability Zone, and quantity of hosts
 -- you want to allocate.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AllocateHosts.html AWS API Reference> for AllocateHosts.
 module Network.AWS.EC2.AllocateHosts
     (
     -- * Creating a Request
@@ -118,7 +116,7 @@
 
 instance AWSRequest AllocateHosts where
         type Rs AllocateHosts = AllocateHostsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -126,6 +124,8 @@
                    (x .@? "hostIdSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable AllocateHosts
 
 instance ToHeaders AllocateHosts where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AssignPrivateIPAddresses.hs b/gen/Network/AWS/EC2/AssignPrivateIPAddresses.hs
--- a/gen/Network/AWS/EC2/AssignPrivateIPAddresses.hs
+++ b/gen/Network/AWS/EC2/AssignPrivateIPAddresses.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AssignPrivateIPAddresses
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -31,8 +31,6 @@
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
 -- AssignPrivateIpAddresses is available only in EC2-VPC.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AssignPrivateIPAddresses.html AWS API Reference> for AssignPrivateIPAddresses.
 module Network.AWS.EC2.AssignPrivateIPAddresses
     (
     -- * Creating a Request
@@ -114,9 +112,11 @@
 instance AWSRequest AssignPrivateIPAddresses where
         type Rs AssignPrivateIPAddresses =
              AssignPrivateIPAddressesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull AssignPrivateIPAddressesResponse'
+
+instance Hashable AssignPrivateIPAddresses
 
 instance ToHeaders AssignPrivateIPAddresses where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AssociateAddress.hs b/gen/Network/AWS/EC2/AssociateAddress.hs
--- a/gen/Network/AWS/EC2/AssociateAddress.hs
+++ b/gen/Network/AWS/EC2/AssociateAddress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AssociateAddress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -38,8 +38,6 @@
 --
 -- This is an idempotent operation. If you perform the operation more than
 -- once, Amazon EC2 doesn\'t return an error.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AssociateAddress.html AWS API Reference> for AssociateAddress.
 module Network.AWS.EC2.AssociateAddress
     (
     -- * Creating a Request
@@ -155,12 +153,14 @@
 
 instance AWSRequest AssociateAddress where
         type Rs AssociateAddress = AssociateAddressResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  AssociateAddressResponse' <$>
                    (x .@? "associationId") <*> (pure (fromEnum s)))
+
+instance Hashable AssociateAddress
 
 instance ToHeaders AssociateAddress where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AssociateDHCPOptions.hs b/gen/Network/AWS/EC2/AssociateDHCPOptions.hs
--- a/gen/Network/AWS/EC2/AssociateDHCPOptions.hs
+++ b/gen/Network/AWS/EC2/AssociateDHCPOptions.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AssociateDHCPOptions
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -31,8 +31,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html DHCP Options Sets>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AssociateDHCPOptions.html AWS API Reference> for AssociateDHCPOptions.
 module Network.AWS.EC2.AssociateDHCPOptions
     (
     -- * Creating a Request
@@ -101,8 +99,10 @@
 instance AWSRequest AssociateDHCPOptions where
         type Rs AssociateDHCPOptions =
              AssociateDHCPOptionsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull AssociateDHCPOptionsResponse'
+
+instance Hashable AssociateDHCPOptions
 
 instance ToHeaders AssociateDHCPOptions where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AssociateRouteTable.hs b/gen/Network/AWS/EC2/AssociateRouteTable.hs
--- a/gen/Network/AWS/EC2/AssociateRouteTable.hs
+++ b/gen/Network/AWS/EC2/AssociateRouteTable.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AssociateRouteTable
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,8 +28,6 @@
 -- For more information about route tables, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AssociateRouteTable.html AWS API Reference> for AssociateRouteTable.
 module Network.AWS.EC2.AssociateRouteTable
     (
     -- * Creating a Request
@@ -100,12 +98,14 @@
 instance AWSRequest AssociateRouteTable where
         type Rs AssociateRouteTable =
              AssociateRouteTableResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  AssociateRouteTableResponse' <$>
                    (x .@? "associationId") <*> (pure (fromEnum s)))
+
+instance Hashable AssociateRouteTable
 
 instance ToHeaders AssociateRouteTable where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AttachClassicLinkVPC.hs b/gen/Network/AWS/EC2/AttachClassicLinkVPC.hs
--- a/gen/Network/AWS/EC2/AttachClassicLinkVPC.hs
+++ b/gen/Network/AWS/EC2/AttachClassicLinkVPC.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AttachClassicLinkVPC
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -31,8 +31,6 @@
 --
 -- Linking your instance to a VPC is sometimes referred to as /attaching/
 -- your instance.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AttachClassicLinkVPC.html AWS API Reference> for AttachClassicLinkVPC.
 module Network.AWS.EC2.AttachClassicLinkVPC
     (
     -- * Creating a Request
@@ -114,12 +112,14 @@
 instance AWSRequest AttachClassicLinkVPC where
         type Rs AttachClassicLinkVPC =
              AttachClassicLinkVPCResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  AttachClassicLinkVPCResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable AttachClassicLinkVPC
 
 instance ToHeaders AttachClassicLinkVPC where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AttachInternetGateway.hs b/gen/Network/AWS/EC2/AttachInternetGateway.hs
--- a/gen/Network/AWS/EC2/AttachInternetGateway.hs
+++ b/gen/Network/AWS/EC2/AttachInternetGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AttachInternetGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- Internet and the VPC. For more information about your VPC and Internet
 -- gateway, see the
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/ Amazon Virtual Private Cloud User Guide>.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AttachInternetGateway.html AWS API Reference> for AttachInternetGateway.
 module Network.AWS.EC2.AttachInternetGateway
     (
     -- * Creating a Request
@@ -91,8 +89,10 @@
 instance AWSRequest AttachInternetGateway where
         type Rs AttachInternetGateway =
              AttachInternetGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull AttachInternetGatewayResponse'
+
+instance Hashable AttachInternetGateway
 
 instance ToHeaders AttachInternetGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AttachNetworkInterface.hs b/gen/Network/AWS/EC2/AttachNetworkInterface.hs
--- a/gen/Network/AWS/EC2/AttachNetworkInterface.hs
+++ b/gen/Network/AWS/EC2/AttachNetworkInterface.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AttachNetworkInterface
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Attaches a network interface to an instance.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AttachNetworkInterface.html AWS API Reference> for AttachNetworkInterface.
 module Network.AWS.EC2.AttachNetworkInterface
     (
     -- * Creating a Request
@@ -101,12 +99,14 @@
 instance AWSRequest AttachNetworkInterface where
         type Rs AttachNetworkInterface =
              AttachNetworkInterfaceResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  AttachNetworkInterfaceResponse' <$>
                    (x .@? "attachmentId") <*> (pure (fromEnum s)))
+
+instance Hashable AttachNetworkInterface
 
 instance ToHeaders AttachNetworkInterface where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AttachVPNGateway.hs b/gen/Network/AWS/EC2/AttachVPNGateway.hs
--- a/gen/Network/AWS/EC2/AttachVPNGateway.hs
+++ b/gen/Network/AWS/EC2/AttachVPNGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AttachVPNGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Attaches a virtual private gateway to a VPC. For more information, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AttachVPNGateway.html AWS API Reference> for AttachVPNGateway.
 module Network.AWS.EC2.AttachVPNGateway
     (
     -- * Creating a Request
@@ -92,12 +90,14 @@
 
 instance AWSRequest AttachVPNGateway where
         type Rs AttachVPNGateway = AttachVPNGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  AttachVPNGatewayResponse' <$>
                    (x .@? "attachment") <*> (pure (fromEnum s)))
+
+instance Hashable AttachVPNGateway
 
 instance ToHeaders AttachVPNGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AttachVolume.hs b/gen/Network/AWS/EC2/AttachVolume.hs
--- a/gen/Network/AWS/EC2/AttachVolume.hs
+++ b/gen/Network/AWS/EC2/AttachVolume.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AttachVolume
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -49,8 +49,6 @@
 -- For more information about EBS volumes, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html Attaching Amazon EBS Volumes>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AttachVolume.html AWS API Reference> for AttachVolume.
 module Network.AWS.EC2.AttachVolume
     (
     -- * Creating a Request
@@ -136,8 +134,10 @@
 
 instance AWSRequest AttachVolume where
         type Rs AttachVolume = VolumeAttachment
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveXML (\ s h x -> parseXML x)
+
+instance Hashable AttachVolume
 
 instance ToHeaders AttachVolume where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AuthorizeSecurityGroupEgress.hs b/gen/Network/AWS/EC2/AuthorizeSecurityGroupEgress.hs
--- a/gen/Network/AWS/EC2/AuthorizeSecurityGroupEgress.hs
+++ b/gen/Network/AWS/EC2/AuthorizeSecurityGroupEgress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AuthorizeSecurityGroupEgress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -37,8 +37,6 @@
 --
 -- Rule changes are propagated to affected instances as quickly as
 -- possible. However, a small delay might occur.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AuthorizeSecurityGroupEgress.html AWS API Reference> for AuthorizeSecurityGroupEgress.
 module Network.AWS.EC2.AuthorizeSecurityGroupEgress
     (
     -- * Creating a Request
@@ -171,9 +169,11 @@
          where
         type Rs AuthorizeSecurityGroupEgress =
              AuthorizeSecurityGroupEgressResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull AuthorizeSecurityGroupEgressResponse'
+
+instance Hashable AuthorizeSecurityGroupEgress
 
 instance ToHeaders AuthorizeSecurityGroupEgress where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/AuthorizeSecurityGroupIngress.hs b/gen/Network/AWS/EC2/AuthorizeSecurityGroupIngress.hs
--- a/gen/Network/AWS/EC2/AuthorizeSecurityGroupIngress.hs
+++ b/gen/Network/AWS/EC2/AuthorizeSecurityGroupIngress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.AuthorizeSecurityGroupIngress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -39,8 +39,6 @@
 -- other security groups (called the /source groups/) permission to access
 -- a security group for your VPC. The security groups must all be for the
 -- same VPC.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-AuthorizeSecurityGroupIngress.html AWS API Reference> for AuthorizeSecurityGroupIngress.
 module Network.AWS.EC2.AuthorizeSecurityGroupIngress
     (
     -- * Creating a Request
@@ -188,9 +186,11 @@
          where
         type Rs AuthorizeSecurityGroupIngress =
              AuthorizeSecurityGroupIngressResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull AuthorizeSecurityGroupIngressResponse'
+
+instance Hashable AuthorizeSecurityGroupIngress
 
 instance ToHeaders AuthorizeSecurityGroupIngress
          where
diff --git a/gen/Network/AWS/EC2/BundleInstance.hs b/gen/Network/AWS/EC2/BundleInstance.hs
--- a/gen/Network/AWS/EC2/BundleInstance.hs
+++ b/gen/Network/AWS/EC2/BundleInstance.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.BundleInstance
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,8 +28,6 @@
 --
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Creating_InstanceStoreBacked_WinAMI.html Creating an Instance Store-Backed Windows AMI>.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-BundleInstance.html AWS API Reference> for BundleInstance.
 module Network.AWS.EC2.BundleInstance
     (
     -- * Creating a Request
@@ -108,12 +106,14 @@
 
 instance AWSRequest BundleInstance where
         type Rs BundleInstance = BundleInstanceResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  BundleInstanceResponse' <$>
                    (x .@? "bundleInstanceTask") <*> (pure (fromEnum s)))
+
+instance Hashable BundleInstance
 
 instance ToHeaders BundleInstance where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CancelBundleTask.hs b/gen/Network/AWS/EC2/CancelBundleTask.hs
--- a/gen/Network/AWS/EC2/CancelBundleTask.hs
+++ b/gen/Network/AWS/EC2/CancelBundleTask.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CancelBundleTask
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Cancels a bundling operation for an instance store-backed Windows
 -- instance.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CancelBundleTask.html AWS API Reference> for CancelBundleTask.
 module Network.AWS.EC2.CancelBundleTask
     (
     -- * Creating a Request
@@ -81,12 +79,14 @@
 
 instance AWSRequest CancelBundleTask where
         type Rs CancelBundleTask = CancelBundleTaskResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CancelBundleTaskResponse' <$>
                    (x .@? "bundleInstanceTask") <*> (pure (fromEnum s)))
+
+instance Hashable CancelBundleTask
 
 instance ToHeaders CancelBundleTask where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CancelConversionTask.hs b/gen/Network/AWS/EC2/CancelConversionTask.hs
--- a/gen/Network/AWS/EC2/CancelConversionTask.hs
+++ b/gen/Network/AWS/EC2/CancelConversionTask.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CancelConversionTask
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -27,8 +27,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UploadingYourInstancesandVolumes.html Using the Command Line Tools to Import Your Virtual Machine to Amazon EC2>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CancelConversionTask.html AWS API Reference> for CancelConversionTask.
 module Network.AWS.EC2.CancelConversionTask
     (
     -- * Creating a Request
@@ -95,8 +93,10 @@
 instance AWSRequest CancelConversionTask where
         type Rs CancelConversionTask =
              CancelConversionTaskResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull CancelConversionTaskResponse'
+
+instance Hashable CancelConversionTask
 
 instance ToHeaders CancelConversionTask where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CancelExportTask.hs b/gen/Network/AWS/EC2/CancelExportTask.hs
--- a/gen/Network/AWS/EC2/CancelExportTask.hs
+++ b/gen/Network/AWS/EC2/CancelExportTask.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CancelExportTask
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- 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.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CancelExportTask.html AWS API Reference> for CancelExportTask.
 module Network.AWS.EC2.CancelExportTask
     (
     -- * Creating a Request
@@ -69,8 +67,10 @@
 
 instance AWSRequest CancelExportTask where
         type Rs CancelExportTask = CancelExportTaskResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull CancelExportTaskResponse'
+
+instance Hashable CancelExportTask
 
 instance ToHeaders CancelExportTask where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CancelImportTask.hs b/gen/Network/AWS/EC2/CancelImportTask.hs
--- a/gen/Network/AWS/EC2/CancelImportTask.hs
+++ b/gen/Network/AWS/EC2/CancelImportTask.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CancelImportTask
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Cancels an in-process import virtual machine or import snapshot task.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CancelImportTask.html AWS API Reference> for CancelImportTask.
 module Network.AWS.EC2.CancelImportTask
     (
     -- * Creating a Request
@@ -90,7 +88,7 @@
 
 instance AWSRequest CancelImportTask where
         type Rs CancelImportTask = CancelImportTaskResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -98,6 +96,8 @@
                    (x .@? "state") <*> (x .@? "importTaskId") <*>
                      (x .@? "previousState")
                      <*> (pure (fromEnum s)))
+
+instance Hashable CancelImportTask
 
 instance ToHeaders CancelImportTask where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CancelReservedInstancesListing.hs b/gen/Network/AWS/EC2/CancelReservedInstancesListing.hs
--- a/gen/Network/AWS/EC2/CancelReservedInstancesListing.hs
+++ b/gen/Network/AWS/EC2/CancelReservedInstancesListing.hs
@@ -12,20 +12,18 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CancelReservedInstancesListing
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Cancels the specified Reserved instance listing in the Reserved Instance
+-- Cancels the specified Reserved Instance listing in the Reserved Instance
 -- Marketplace.
 --
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CancelReservedInstancesListing.html AWS API Reference> for CancelReservedInstancesListing.
 module Network.AWS.EC2.CancelReservedInstancesListing
     (
     -- * Creating a Request
@@ -67,7 +65,7 @@
     { _crilReservedInstancesListingId = pReservedInstancesListingId_
     }
 
--- | The ID of the Reserved instance listing.
+-- | The ID of the Reserved Instance listing.
 crilReservedInstancesListingId :: Lens' CancelReservedInstancesListing Text
 crilReservedInstancesListingId = lens _crilReservedInstancesListingId (\ s a -> s{_crilReservedInstancesListingId = a});
 
@@ -75,7 +73,7 @@
          where
         type Rs CancelReservedInstancesListing =
              CancelReservedInstancesListingResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -84,6 +82,8 @@
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable CancelReservedInstancesListing
+
 instance ToHeaders CancelReservedInstancesListing
          where
         toHeaders = const mempty
@@ -122,7 +122,7 @@
     , _crilrsResponseStatus = pResponseStatus_
     }
 
--- | The Reserved instance listing.
+-- | The Reserved Instance listing.
 crilrsReservedInstancesListings :: Lens' CancelReservedInstancesListingResponse [ReservedInstancesListing]
 crilrsReservedInstancesListings = lens _crilrsReservedInstancesListings (\ s a -> s{_crilrsReservedInstancesListings = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/EC2/CancelSpotFleetRequests.hs b/gen/Network/AWS/EC2/CancelSpotFleetRequests.hs
--- a/gen/Network/AWS/EC2/CancelSpotFleetRequests.hs
+++ b/gen/Network/AWS/EC2/CancelSpotFleetRequests.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CancelSpotFleetRequests
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -27,8 +27,6 @@
 -- Spot fleet request enters the 'cancelled_running' state and the
 -- instances continue to run until they are interrupted or you terminate
 -- them manually.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CancelSpotFleetRequests.html AWS API Reference> for CancelSpotFleetRequests.
 module Network.AWS.EC2.CancelSpotFleetRequests
     (
     -- * Creating a Request
@@ -102,7 +100,7 @@
 instance AWSRequest CancelSpotFleetRequests where
         type Rs CancelSpotFleetRequests =
              CancelSpotFleetRequestsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -113,6 +111,8 @@
                      (x .@? "unsuccessfulFleetRequestSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable CancelSpotFleetRequests
 
 instance ToHeaders CancelSpotFleetRequests where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CancelSpotInstanceRequests.hs b/gen/Network/AWS/EC2/CancelSpotInstanceRequests.hs
--- a/gen/Network/AWS/EC2/CancelSpotInstanceRequests.hs
+++ b/gen/Network/AWS/EC2/CancelSpotInstanceRequests.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CancelSpotInstanceRequests
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,8 +28,6 @@
 --
 -- Canceling a Spot instance request does not terminate running Spot
 -- instances associated with the request.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CancelSpotInstanceRequests.html AWS API Reference> for CancelSpotInstanceRequests.
 module Network.AWS.EC2.CancelSpotInstanceRequests
     (
     -- * Creating a Request
@@ -91,7 +89,7 @@
 instance AWSRequest CancelSpotInstanceRequests where
         type Rs CancelSpotInstanceRequests =
              CancelSpotInstanceRequestsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -99,6 +97,8 @@
                    (x .@? "spotInstanceRequestSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable CancelSpotInstanceRequests
 
 instance ToHeaders CancelSpotInstanceRequests where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ConfirmProductInstance.hs b/gen/Network/AWS/EC2/ConfirmProductInstance.hs
--- a/gen/Network/AWS/EC2/ConfirmProductInstance.hs
+++ b/gen/Network/AWS/EC2/ConfirmProductInstance.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ConfirmProductInstance
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- action can only be used by the owner of the product code. It is useful
 -- when a product code owner needs to verify whether another user\'s
 -- instance is eligible for support.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ConfirmProductInstance.html AWS API Reference> for ConfirmProductInstance.
 module Network.AWS.EC2.ConfirmProductInstance
     (
     -- * Creating a Request
@@ -95,13 +93,15 @@
 instance AWSRequest ConfirmProductInstance where
         type Rs ConfirmProductInstance =
              ConfirmProductInstanceResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ConfirmProductInstanceResponse' <$>
                    (x .@? "return") <*> (x .@? "ownerId") <*>
                      (pure (fromEnum s)))
+
+instance Hashable ConfirmProductInstance
 
 instance ToHeaders ConfirmProductInstance where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CopyImage.hs b/gen/Network/AWS/EC2/CopyImage.hs
--- a/gen/Network/AWS/EC2/CopyImage.hs
+++ b/gen/Network/AWS/EC2/CopyImage.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CopyImage
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html Copying AMIs>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CopyImage.html AWS API Reference> for CopyImage.
 module Network.AWS.EC2.CopyImage
     (
     -- * Creating a Request
@@ -160,12 +158,14 @@
 
 instance AWSRequest CopyImage where
         type Rs CopyImage = CopyImageResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CopyImageResponse' <$>
                    (x .@? "imageId") <*> (pure (fromEnum s)))
+
+instance Hashable CopyImage
 
 instance ToHeaders CopyImage where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CopySnapshot.hs b/gen/Network/AWS/EC2/CopySnapshot.hs
--- a/gen/Network/AWS/EC2/CopySnapshot.hs
+++ b/gen/Network/AWS/EC2/CopySnapshot.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CopySnapshot
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -34,8 +34,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-copy-snapshot.html Copying an Amazon EBS Snapshot>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CopySnapshot.html AWS API Reference> for CopySnapshot.
 module Network.AWS.EC2.CopySnapshot
     (
     -- * Creating a Request
@@ -185,12 +183,14 @@
 
 instance AWSRequest CopySnapshot where
         type Rs CopySnapshot = CopySnapshotResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CopySnapshotResponse' <$>
                    (x .@? "snapshotId") <*> (pure (fromEnum s)))
+
+instance Hashable CopySnapshot
 
 instance ToHeaders CopySnapshot where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateCustomerGateway.hs b/gen/Network/AWS/EC2/CreateCustomerGateway.hs
--- a/gen/Network/AWS/EC2/CreateCustomerGateway.hs
+++ b/gen/Network/AWS/EC2/CreateCustomerGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateCustomerGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -44,8 +44,6 @@
 -- gateway, and subsequent requests return information about the existing
 -- customer gateway. The subsequent requests do not create new customer
 -- gateway resources.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateCustomerGateway.html AWS API Reference> for CreateCustomerGateway.
 module Network.AWS.EC2.CreateCustomerGateway
     (
     -- * Creating a Request
@@ -130,12 +128,14 @@
 instance AWSRequest CreateCustomerGateway where
         type Rs CreateCustomerGateway =
              CreateCustomerGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateCustomerGatewayResponse' <$>
                    (x .@? "customerGateway") <*> (pure (fromEnum s)))
+
+instance Hashable CreateCustomerGateway
 
 instance ToHeaders CreateCustomerGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateDHCPOptions.hs b/gen/Network/AWS/EC2/CreateDHCPOptions.hs
--- a/gen/Network/AWS/EC2/CreateDHCPOptions.hs
+++ b/gen/Network/AWS/EC2/CreateDHCPOptions.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateDHCPOptions
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -57,8 +57,6 @@
 -- information about DHCP options, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html DHCP Options Sets>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateDHCPOptions.html AWS API Reference> for CreateDHCPOptions.
 module Network.AWS.EC2.CreateDHCPOptions
     (
     -- * Creating a Request
@@ -117,12 +115,14 @@
 
 instance AWSRequest CreateDHCPOptions where
         type Rs CreateDHCPOptions = CreateDHCPOptionsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateDHCPOptionsResponse' <$>
                    (x .@? "dhcpOptions") <*> (pure (fromEnum s)))
+
+instance Hashable CreateDHCPOptions
 
 instance ToHeaders CreateDHCPOptions where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateFlowLogs.hs b/gen/Network/AWS/EC2/CreateFlowLogs.hs
--- a/gen/Network/AWS/EC2/CreateFlowLogs.hs
+++ b/gen/Network/AWS/EC2/CreateFlowLogs.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateFlowLogs
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,8 +28,6 @@
 --
 -- In your request, you must also specify an IAM role that has permission
 -- to publish logs to CloudWatch Logs.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateFlowLogs.html AWS API Reference> for CreateFlowLogs.
 module Network.AWS.EC2.CreateFlowLogs
     (
     -- * Creating a Request
@@ -130,7 +128,7 @@
 
 instance AWSRequest CreateFlowLogs where
         type Rs CreateFlowLogs = CreateFlowLogsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -142,6 +140,8 @@
                      (x .@? "flowLogIdSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable CreateFlowLogs
 
 instance ToHeaders CreateFlowLogs where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateImage.hs b/gen/Network/AWS/EC2/CreateImage.hs
--- a/gen/Network/AWS/EC2/CreateImage.hs
+++ b/gen/Network/AWS/EC2/CreateImage.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateImage
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -30,8 +30,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html Creating Amazon EBS-Backed Linux AMIs>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateImage.html AWS API Reference> for CreateImage.
 module Network.AWS.EC2.CreateImage
     (
     -- * Creating a Request
@@ -137,12 +135,14 @@
 
 instance AWSRequest CreateImage where
         type Rs CreateImage = CreateImageResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateImageResponse' <$>
                    (x .@? "imageId") <*> (pure (fromEnum s)))
+
+instance Hashable CreateImage
 
 instance ToHeaders CreateImage where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateInstanceExportTask.hs b/gen/Network/AWS/EC2/CreateInstanceExportTask.hs
--- a/gen/Network/AWS/EC2/CreateInstanceExportTask.hs
+++ b/gen/Network/AWS/EC2/CreateInstanceExportTask.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateInstanceExportTask
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- and known limitations for the types of instances you can export, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ExportingEC2Instances.html Exporting EC2 Instances>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateInstanceExportTask.html AWS API Reference> for CreateInstanceExportTask.
 module Network.AWS.EC2.CreateInstanceExportTask
     (
     -- * Creating a Request
@@ -102,12 +100,14 @@
 instance AWSRequest CreateInstanceExportTask where
         type Rs CreateInstanceExportTask =
              CreateInstanceExportTaskResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateInstanceExportTaskResponse' <$>
                    (x .@? "exportTask") <*> (pure (fromEnum s)))
+
+instance Hashable CreateInstanceExportTask
 
 instance ToHeaders CreateInstanceExportTask where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateInternetGateway.hs b/gen/Network/AWS/EC2/CreateInternetGateway.hs
--- a/gen/Network/AWS/EC2/CreateInternetGateway.hs
+++ b/gen/Network/AWS/EC2/CreateInternetGateway.hs
@@ -12,19 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateInternetGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Creates an Internet gateway for use with a VPC. After creating the
--- Internet gateway, you attach it to a VPC using AttachInternetGateway.
+-- Internet gateway, you attach it to a VPC using < AttachInternetGateway>.
 --
 -- For more information about your VPC and Internet gateway, see the
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/ Amazon Virtual Private Cloud User Guide>.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateInternetGateway.html AWS API Reference> for CreateInternetGateway.
 module Network.AWS.EC2.CreateInternetGateway
     (
     -- * Creating a Request
@@ -75,12 +73,14 @@
 instance AWSRequest CreateInternetGateway where
         type Rs CreateInternetGateway =
              CreateInternetGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateInternetGatewayResponse' <$>
                    (x .@? "internetGateway") <*> (pure (fromEnum s)))
+
+instance Hashable CreateInternetGateway
 
 instance ToHeaders CreateInternetGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateKeyPair.hs b/gen/Network/AWS/EC2/CreateKeyPair.hs
--- a/gen/Network/AWS/EC2/CreateKeyPair.hs
+++ b/gen/Network/AWS/EC2/CreateKeyPair.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateKeyPair
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,13 +28,11 @@
 --
 -- The key pair returned to you is available only in the region in which
 -- you create it. To create a key pair that is available in all regions,
--- use ImportKeyPair.
+-- use < ImportKeyPair>.
 --
 -- For more information about key pairs, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Key Pairs>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateKeyPair.html AWS API Reference> for CreateKeyPair.
 module Network.AWS.EC2.CreateKeyPair
     (
     -- * Creating a Request
@@ -98,7 +96,7 @@
 
 instance AWSRequest CreateKeyPair where
         type Rs CreateKeyPair = CreateKeyPairResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -106,6 +104,8 @@
                    (pure (fromEnum s)) <*> (x .@ "keyName") <*>
                      (x .@ "keyFingerprint")
                      <*> (x .@ "keyMaterial"))
+
+instance Hashable CreateKeyPair
 
 instance ToHeaders CreateKeyPair where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateNatGateway.hs b/gen/Network/AWS/EC2/CreateNatGateway.hs
--- a/gen/Network/AWS/EC2/CreateNatGateway.hs
+++ b/gen/Network/AWS/EC2/CreateNatGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateNatGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- information, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html NAT Gateways>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateNatGateway.html AWS API Reference> for CreateNatGateway.
 module Network.AWS.EC2.CreateNatGateway
     (
     -- * Creating a Request
@@ -100,13 +98,15 @@
 
 instance AWSRequest CreateNatGateway where
         type Rs CreateNatGateway = CreateNatGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateNatGatewayResponse' <$>
                    (x .@? "clientToken") <*> (x .@? "natGateway") <*>
                      (pure (fromEnum s)))
+
+instance Hashable CreateNatGateway
 
 instance ToHeaders CreateNatGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateNetworkACL.hs b/gen/Network/AWS/EC2/CreateNetworkACL.hs
--- a/gen/Network/AWS/EC2/CreateNetworkACL.hs
+++ b/gen/Network/AWS/EC2/CreateNetworkACL.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateNetworkACL
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- For more information about network ACLs, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateNetworkACL.html AWS API Reference> for CreateNetworkACL.
 module Network.AWS.EC2.CreateNetworkACL
     (
     -- * Creating a Request
@@ -86,12 +84,14 @@
 
 instance AWSRequest CreateNetworkACL where
         type Rs CreateNetworkACL = CreateNetworkACLResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateNetworkACLResponse' <$>
                    (x .@? "networkAcl") <*> (pure (fromEnum s)))
+
+instance Hashable CreateNetworkACL
 
 instance ToHeaders CreateNetworkACL where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateNetworkACLEntry.hs b/gen/Network/AWS/EC2/CreateNetworkACLEntry.hs
--- a/gen/Network/AWS/EC2/CreateNetworkACLEntry.hs
+++ b/gen/Network/AWS/EC2/CreateNetworkACLEntry.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateNetworkACLEntry
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -37,8 +37,6 @@
 -- For more information about network ACLs, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateNetworkACLEntry.html AWS API Reference> for CreateNetworkACLEntry.
 module Network.AWS.EC2.CreateNetworkACLEntry
     (
     -- * Creating a Request
@@ -170,8 +168,10 @@
 instance AWSRequest CreateNetworkACLEntry where
         type Rs CreateNetworkACLEntry =
              CreateNetworkACLEntryResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull CreateNetworkACLEntryResponse'
+
+instance Hashable CreateNetworkACLEntry
 
 instance ToHeaders CreateNetworkACLEntry where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateNetworkInterface.hs b/gen/Network/AWS/EC2/CreateNetworkInterface.hs
--- a/gen/Network/AWS/EC2/CreateNetworkInterface.hs
+++ b/gen/Network/AWS/EC2/CreateNetworkInterface.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateNetworkInterface
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information about network interfaces, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html Elastic Network Interfaces>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateNetworkInterface.html AWS API Reference> for CreateNetworkInterface.
 module Network.AWS.EC2.CreateNetworkInterface
     (
     -- * Creating a Request
@@ -143,12 +141,14 @@
 instance AWSRequest CreateNetworkInterface where
         type Rs CreateNetworkInterface =
              CreateNetworkInterfaceResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateNetworkInterfaceResponse' <$>
                    (x .@? "networkInterface") <*> (pure (fromEnum s)))
+
+instance Hashable CreateNetworkInterface
 
 instance ToHeaders CreateNetworkInterface where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreatePlacementGroup.hs b/gen/Network/AWS/EC2/CreatePlacementGroup.hs
--- a/gen/Network/AWS/EC2/CreatePlacementGroup.hs
+++ b/gen/Network/AWS/EC2/CreatePlacementGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreatePlacementGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- For more information about placement groups and cluster instances, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cluster_computing.html Cluster Instances>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreatePlacementGroup.html AWS API Reference> for CreatePlacementGroup.
 module Network.AWS.EC2.CreatePlacementGroup
     (
     -- * Creating a Request
@@ -96,8 +94,10 @@
 instance AWSRequest CreatePlacementGroup where
         type Rs CreatePlacementGroup =
              CreatePlacementGroupResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull CreatePlacementGroupResponse'
+
+instance Hashable CreatePlacementGroup
 
 instance ToHeaders CreatePlacementGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateReservedInstancesListing.hs b/gen/Network/AWS/EC2/CreateReservedInstancesListing.hs
--- a/gen/Network/AWS/EC2/CreateReservedInstancesListing.hs
+++ b/gen/Network/AWS/EC2/CreateReservedInstancesListing.hs
@@ -12,36 +12,34 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateReservedInstancesListing
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Creates a listing for Amazon EC2 Reserved instances to be sold in the
--- Reserved Instance Marketplace. You can submit one Reserved instance
--- listing at a time. To get a list of your Reserved instances, you can use
--- the DescribeReservedInstances operation.
+-- Creates a listing for Amazon EC2 Reserved Instances to be sold in the
+-- Reserved Instance Marketplace. You can submit one Reserved Instance
+-- listing at a time. To get a list of your Reserved Instances, you can use
+-- the < DescribeReservedInstances> operation.
 --
 -- The Reserved Instance Marketplace matches sellers who want to resell
--- Reserved instance capacity that they no longer need with buyers who want
--- to purchase additional capacity. Reserved instances bought and sold
+-- Reserved Instance capacity that they no longer need with buyers who want
+-- to purchase additional capacity. Reserved Instances bought and sold
 -- through the Reserved Instance Marketplace work like any other Reserved
--- instances.
+-- Instances.
 --
--- To sell your Reserved instances, you must first register as a seller in
+-- To sell your Reserved Instances, you must first register as a seller in
 -- the Reserved Instance Marketplace. After completing the registration
 -- process, you can create a Reserved Instance Marketplace listing of some
--- or all of your Reserved instances, and specify the upfront price to
--- receive for them. Your Reserved instance listings then become available
--- for purchase. To view the details of your Reserved instance listing, you
--- can use the DescribeReservedInstancesListings operation.
+-- or all of your Reserved Instances, and specify the upfront price to
+-- receive for them. Your Reserved Instance listings then become available
+-- for purchase. To view the details of your Reserved Instance listing, you
+-- can use the < DescribeReservedInstancesListings> operation.
 --
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateReservedInstancesListing.html AWS API Reference> for CreateReservedInstancesListing.
 module Network.AWS.EC2.CreateReservedInstancesListing
     (
     -- * Creating a Request
@@ -100,19 +98,19 @@
     , _crilClientToken = pClientToken_
     }
 
--- | The ID of the active Reserved instance.
+-- | The ID of the active Reserved Instance.
 crilReservedInstancesId :: Lens' CreateReservedInstancesListing Text
 crilReservedInstancesId = lens _crilReservedInstancesId (\ s a -> s{_crilReservedInstancesId = a});
 
--- | The number of instances that are a part of a Reserved instance account
+-- | The number of instances that are a part of a Reserved Instance account
 -- to be listed in the Reserved Instance Marketplace. This number should be
 -- less than or equal to the instance count associated with the Reserved
--- instance ID specified in this call.
+-- Instance ID specified in this call.
 crilInstanceCount :: Lens' CreateReservedInstancesListing Int
 crilInstanceCount = lens _crilInstanceCount (\ s a -> s{_crilInstanceCount = a});
 
--- | A list specifying the price of the Reserved instance for each month
--- remaining in the Reserved instance term.
+-- | A list specifying the price of the Reserved Instance for each month
+-- remaining in the Reserved Instance term.
 crilPriceSchedules :: Lens' CreateReservedInstancesListing [PriceScheduleSpecification]
 crilPriceSchedules = lens _crilPriceSchedules (\ s a -> s{_crilPriceSchedules = a}) . _Coerce;
 
@@ -127,7 +125,7 @@
          where
         type Rs CreateReservedInstancesListing =
              CreateReservedInstancesListingResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -136,6 +134,8 @@
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable CreateReservedInstancesListing
+
 instance ToHeaders CreateReservedInstancesListing
          where
         toHeaders = const mempty
@@ -176,7 +176,7 @@
     , _crersResponseStatus = pResponseStatus_
     }
 
--- | Information about the Reserved instance listing.
+-- | Information about the Reserved Instance listing.
 crersReservedInstancesListings :: Lens' CreateReservedInstancesListingResponse [ReservedInstancesListing]
 crersReservedInstancesListings = lens _crersReservedInstancesListings (\ s a -> s{_crersReservedInstancesListings = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/EC2/CreateRoute.hs b/gen/Network/AWS/EC2/CreateRoute.hs
--- a/gen/Network/AWS/EC2/CreateRoute.hs
+++ b/gen/Network/AWS/EC2/CreateRoute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateRoute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -40,8 +40,6 @@
 -- For more information about route tables, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateRoute.html AWS API Reference> for CreateRoute.
 module Network.AWS.EC2.CreateRoute
     (
     -- * Creating a Request
@@ -159,12 +157,14 @@
 
 instance AWSRequest CreateRoute where
         type Rs CreateRoute = CreateRouteResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateRouteResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable CreateRoute
 
 instance ToHeaders CreateRoute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateRouteTable.hs b/gen/Network/AWS/EC2/CreateRouteTable.hs
--- a/gen/Network/AWS/EC2/CreateRouteTable.hs
+++ b/gen/Network/AWS/EC2/CreateRouteTable.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateRouteTable
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- For more information about route tables, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateRouteTable.html AWS API Reference> for CreateRouteTable.
 module Network.AWS.EC2.CreateRouteTable
     (
     -- * Creating a Request
@@ -85,12 +83,14 @@
 
 instance AWSRequest CreateRouteTable where
         type Rs CreateRouteTable = CreateRouteTableResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateRouteTableResponse' <$>
                    (x .@? "routeTable") <*> (pure (fromEnum s)))
+
+instance Hashable CreateRouteTable
 
 instance ToHeaders CreateRouteTable where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateSecurityGroup.hs b/gen/Network/AWS/EC2/CreateSecurityGroup.hs
--- a/gen/Network/AWS/EC2/CreateSecurityGroup.hs
+++ b/gen/Network/AWS/EC2/CreateSecurityGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateSecurityGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,7 +29,7 @@
 --
 -- EC2-Classic: You can have up to 500 security groups.
 --
--- EC2-VPC: You can create up to 100 security groups per VPC.
+-- EC2-VPC: You can create up to 500 security groups per VPC.
 --
 -- When you create a security group, you specify a friendly name of your
 -- choice. You can have a security group for use in EC2-Classic with the
@@ -45,10 +45,8 @@
 -- other.
 --
 -- You can add or remove rules from your security groups using
--- AuthorizeSecurityGroupIngress, AuthorizeSecurityGroupEgress,
--- RevokeSecurityGroupIngress, and RevokeSecurityGroupEgress.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateSecurityGroup.html AWS API Reference> for CreateSecurityGroup.
+-- < AuthorizeSecurityGroupIngress>, < AuthorizeSecurityGroupEgress>,
+-- < RevokeSecurityGroupIngress>, and < RevokeSecurityGroupEgress>.
 module Network.AWS.EC2.CreateSecurityGroup
     (
     -- * Creating a Request
@@ -142,12 +140,14 @@
 instance AWSRequest CreateSecurityGroup where
         type Rs CreateSecurityGroup =
              CreateSecurityGroupResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateSecurityGroupResponse' <$>
                    (pure (fromEnum s)) <*> (x .@ "groupId"))
+
+instance Hashable CreateSecurityGroup
 
 instance ToHeaders CreateSecurityGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateSnapshot.hs b/gen/Network/AWS/EC2/CreateSnapshot.hs
--- a/gen/Network/AWS/EC2/CreateSnapshot.hs
+++ b/gen/Network/AWS/EC2/CreateSnapshot.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateSnapshot
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -49,8 +49,6 @@
 -- and
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html Amazon EBS Encryption>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateSnapshot.html AWS API Reference> for CreateSnapshot.
 module Network.AWS.EC2.CreateSnapshot
     (
     -- * Creating a Request
@@ -131,8 +129,10 @@
 
 instance AWSRequest CreateSnapshot where
         type Rs CreateSnapshot = Snapshot
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveXML (\ s h x -> parseXML x)
+
+instance Hashable CreateSnapshot
 
 instance ToHeaders CreateSnapshot where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateSpotDatafeedSubscription.hs b/gen/Network/AWS/EC2/CreateSpotDatafeedSubscription.hs
--- a/gen/Network/AWS/EC2/CreateSpotDatafeedSubscription.hs
+++ b/gen/Network/AWS/EC2/CreateSpotDatafeedSubscription.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateSpotDatafeedSubscription
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html Spot Instance Data Feed>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateSpotDatafeedSubscription.html AWS API Reference> for CreateSpotDatafeedSubscription.
 module Network.AWS.EC2.CreateSpotDatafeedSubscription
     (
     -- * Creating a Request
@@ -97,13 +95,15 @@
          where
         type Rs CreateSpotDatafeedSubscription =
              CreateSpotDatafeedSubscriptionResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateSpotDatafeedSubscriptionResponse' <$>
                    (x .@? "spotDatafeedSubscription") <*>
                      (pure (fromEnum s)))
+
+instance Hashable CreateSpotDatafeedSubscription
 
 instance ToHeaders CreateSpotDatafeedSubscription
          where
diff --git a/gen/Network/AWS/EC2/CreateSubnet.hs b/gen/Network/AWS/EC2/CreateSubnet.hs
--- a/gen/Network/AWS/EC2/CreateSubnet.hs
+++ b/gen/Network/AWS/EC2/CreateSubnet.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateSubnet
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -45,8 +45,6 @@
 -- For more information about subnets, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html Your VPC and Subnets>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateSubnet.html AWS API Reference> for CreateSubnet.
 module Network.AWS.EC2.CreateSubnet
     (
     -- * Creating a Request
@@ -130,12 +128,14 @@
 
 instance AWSRequest CreateSubnet where
         type Rs CreateSubnet = CreateSubnetResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateSubnetResponse' <$>
                    (x .@? "subnet") <*> (pure (fromEnum s)))
+
+instance Hashable CreateSubnet
 
 instance ToHeaders CreateSubnet where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateTags.hs b/gen/Network/AWS/EC2/CreateTags.hs
--- a/gen/Network/AWS/EC2/CreateTags.hs
+++ b/gen/Network/AWS/EC2/CreateTags.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateTags
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -30,8 +30,6 @@
 -- based on tags, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-iam-actions-resources.html Supported Resource-Level Permissions for Amazon EC2 API Actions>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateTags.html AWS API Reference> for CreateTags.
 module Network.AWS.EC2.CreateTags
     (
     -- * Creating a Request
@@ -98,8 +96,10 @@
 
 instance AWSRequest CreateTags where
         type Rs CreateTags = CreateTagsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull CreateTagsResponse'
+
+instance Hashable CreateTags
 
 instance ToHeaders CreateTags where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateVPC.hs b/gen/Network/AWS/EC2/CreateVPC.hs
--- a/gen/Network/AWS/EC2/CreateVPC.hs
+++ b/gen/Network/AWS/EC2/CreateVPC.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateVPC
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -31,8 +31,6 @@
 -- (AmazonProvidedDNS). For more information about DHCP options, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html DHCP Options Sets>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVPC.html AWS API Reference> for CreateVPC.
 module Network.AWS.EC2.CreateVPC
     (
     -- * Creating a Request
@@ -112,12 +110,14 @@
 
 instance AWSRequest CreateVPC where
         type Rs CreateVPC = CreateVPCResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateVPCResponse' <$>
                    (x .@? "vpc") <*> (pure (fromEnum s)))
+
+instance Hashable CreateVPC
 
 instance ToHeaders CreateVPC where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateVPCEndpoint.hs b/gen/Network/AWS/EC2/CreateVPCEndpoint.hs
--- a/gen/Network/AWS/EC2/CreateVPCEndpoint.hs
+++ b/gen/Network/AWS/EC2/CreateVPCEndpoint.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateVPCEndpoint
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- can also specify the VPC route tables that use the endpoint.
 --
 -- Currently, only endpoints to Amazon S3 are supported.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVPCEndpoint.html AWS API Reference> for CreateVPCEndpoint.
 module Network.AWS.EC2.CreateVPCEndpoint
     (
     -- * Creating a Request
@@ -124,20 +122,22 @@
 cveVPCId = lens _cveVPCId (\ s a -> s{_cveVPCId = a});
 
 -- | The AWS service name, in the form 'com.amazonaws.region.service'. To get
--- a list of available services, use the DescribeVpcEndpointServices
+-- a list of available services, use the < DescribeVpcEndpointServices>
 -- request.
 cveServiceName :: Lens' CreateVPCEndpoint Text
 cveServiceName = lens _cveServiceName (\ s a -> s{_cveServiceName = a});
 
 instance AWSRequest CreateVPCEndpoint where
         type Rs CreateVPCEndpoint = CreateVPCEndpointResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateVPCEndpointResponse' <$>
                    (x .@? "clientToken") <*> (x .@? "vpcEndpoint") <*>
                      (pure (fromEnum s)))
+
+instance Hashable CreateVPCEndpoint
 
 instance ToHeaders CreateVPCEndpoint where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateVPCPeeringConnection.hs b/gen/Network/AWS/EC2/CreateVPCPeeringConnection.hs
--- a/gen/Network/AWS/EC2/CreateVPCPeeringConnection.hs
+++ b/gen/Network/AWS/EC2/CreateVPCPeeringConnection.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateVPCPeeringConnection
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -30,8 +30,6 @@
 -- A 'CreateVpcPeeringConnection' request between VPCs with overlapping
 -- CIDR blocks results in the VPC peering connection having a status of
 -- 'failed'.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVPCPeeringConnection.html AWS API Reference> for CreateVPCPeeringConnection.
 module Network.AWS.EC2.CreateVPCPeeringConnection
     (
     -- * Creating a Request
@@ -112,13 +110,15 @@
 instance AWSRequest CreateVPCPeeringConnection where
         type Rs CreateVPCPeeringConnection =
              CreateVPCPeeringConnectionResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateVPCPeeringConnectionResponse' <$>
                    (x .@? "vpcPeeringConnection") <*>
                      (pure (fromEnum s)))
+
+instance Hashable CreateVPCPeeringConnection
 
 instance ToHeaders CreateVPCPeeringConnection where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateVPNConnection.hs b/gen/Network/AWS/EC2/CreateVPNConnection.hs
--- a/gen/Network/AWS/EC2/CreateVPNConnection.hs
+++ b/gen/Network/AWS/EC2/CreateVPNConnection.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateVPNConnection
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -35,8 +35,6 @@
 -- For more information about VPN connections, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVPNConnection.html AWS API Reference> for CreateVPNConnection.
 module Network.AWS.EC2.CreateVPNConnection
     (
     -- * Creating a Request
@@ -130,12 +128,14 @@
 instance AWSRequest CreateVPNConnection where
         type Rs CreateVPNConnection =
              CreateVPNConnectionResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateVPNConnectionResponse' <$>
                    (x .@? "vpnConnection") <*> (pure (fromEnum s)))
+
+instance Hashable CreateVPNConnection
 
 instance ToHeaders CreateVPNConnection where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateVPNConnectionRoute.hs b/gen/Network/AWS/EC2/CreateVPNConnectionRoute.hs
--- a/gen/Network/AWS/EC2/CreateVPNConnectionRoute.hs
+++ b/gen/Network/AWS/EC2/CreateVPNConnectionRoute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateVPNConnectionRoute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,8 +26,6 @@
 -- For more information about VPN connections, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVPNConnectionRoute.html AWS API Reference> for CreateVPNConnectionRoute.
 module Network.AWS.EC2.CreateVPNConnectionRoute
     (
     -- * Creating a Request
@@ -83,9 +81,11 @@
 instance AWSRequest CreateVPNConnectionRoute where
         type Rs CreateVPNConnectionRoute =
              CreateVPNConnectionRouteResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull CreateVPNConnectionRouteResponse'
+
+instance Hashable CreateVPNConnectionRoute
 
 instance ToHeaders CreateVPNConnectionRoute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateVPNGateway.hs b/gen/Network/AWS/EC2/CreateVPNGateway.hs
--- a/gen/Network/AWS/EC2/CreateVPNGateway.hs
+++ b/gen/Network/AWS/EC2/CreateVPNGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateVPNGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- For more information about virtual private gateways, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVPNGateway.html AWS API Reference> for CreateVPNGateway.
 module Network.AWS.EC2.CreateVPNGateway
     (
     -- * Creating a Request
@@ -95,12 +93,14 @@
 
 instance AWSRequest CreateVPNGateway where
         type Rs CreateVPNGateway = CreateVPNGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  CreateVPNGatewayResponse' <$>
                    (x .@? "vpnGateway") <*> (pure (fromEnum s)))
+
+instance Hashable CreateVPNGateway
 
 instance ToHeaders CreateVPNGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/CreateVolume.hs b/gen/Network/AWS/EC2/CreateVolume.hs
--- a/gen/Network/AWS/EC2/CreateVolume.hs
+++ b/gen/Network/AWS/EC2/CreateVolume.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.CreateVolume
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -37,8 +37,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-creating-volume.html Creating or Restoring an Amazon EBS Volume>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html AWS API Reference> for CreateVolume.
 module Network.AWS.EC2.CreateVolume
     (
     -- * Creating a Request
@@ -188,15 +186,17 @@
 creSnapshotId = lens _creSnapshotId (\ s a -> s{_creSnapshotId = a});
 
 -- | The Availability Zone in which to create the volume. Use
--- DescribeAvailabilityZones to list the Availability Zones that are
+-- < DescribeAvailabilityZones> to list the Availability Zones that are
 -- currently available to you.
 creAvailabilityZone :: Lens' CreateVolume Text
 creAvailabilityZone = lens _creAvailabilityZone (\ s a -> s{_creAvailabilityZone = a});
 
 instance AWSRequest CreateVolume where
         type Rs CreateVolume = Volume
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveXML (\ s h x -> parseXML x)
+
+instance Hashable CreateVolume
 
 instance ToHeaders CreateVolume where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteCustomerGateway.hs b/gen/Network/AWS/EC2/DeleteCustomerGateway.hs
--- a/gen/Network/AWS/EC2/DeleteCustomerGateway.hs
+++ b/gen/Network/AWS/EC2/DeleteCustomerGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteCustomerGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Deletes the specified customer gateway. You must delete the VPN
 -- connection before you can delete the customer gateway.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteCustomerGateway.html AWS API Reference> for DeleteCustomerGateway.
 module Network.AWS.EC2.DeleteCustomerGateway
     (
     -- * Creating a Request
@@ -79,8 +77,10 @@
 instance AWSRequest DeleteCustomerGateway where
         type Rs DeleteCustomerGateway =
              DeleteCustomerGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteCustomerGatewayResponse'
+
+instance Hashable DeleteCustomerGateway
 
 instance ToHeaders DeleteCustomerGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteDHCPOptions.hs b/gen/Network/AWS/EC2/DeleteDHCPOptions.hs
--- a/gen/Network/AWS/EC2/DeleteDHCPOptions.hs
+++ b/gen/Network/AWS/EC2/DeleteDHCPOptions.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteDHCPOptions
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- of DHCP options before you can delete it. You can disassociate the set
 -- of DHCP options by associating either a new set of options or the
 -- default set of options with the VPC.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteDHCPOptions.html AWS API Reference> for DeleteDHCPOptions.
 module Network.AWS.EC2.DeleteDHCPOptions
     (
     -- * Creating a Request
@@ -80,8 +78,10 @@
 
 instance AWSRequest DeleteDHCPOptions where
         type Rs DeleteDHCPOptions = DeleteDHCPOptionsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteDHCPOptionsResponse'
+
+instance Hashable DeleteDHCPOptions
 
 instance ToHeaders DeleteDHCPOptions where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteFlowLogs.hs b/gen/Network/AWS/EC2/DeleteFlowLogs.hs
--- a/gen/Network/AWS/EC2/DeleteFlowLogs.hs
+++ b/gen/Network/AWS/EC2/DeleteFlowLogs.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteFlowLogs
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes one or more flow logs.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteFlowLogs.html AWS API Reference> for DeleteFlowLogs.
 module Network.AWS.EC2.DeleteFlowLogs
     (
     -- * Creating a Request
@@ -67,7 +65,7 @@
 
 instance AWSRequest DeleteFlowLogs where
         type Rs DeleteFlowLogs = DeleteFlowLogsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -75,6 +73,8 @@
                    (x .@? "unsuccessful" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DeleteFlowLogs
 
 instance ToHeaders DeleteFlowLogs where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteInternetGateway.hs b/gen/Network/AWS/EC2/DeleteInternetGateway.hs
--- a/gen/Network/AWS/EC2/DeleteInternetGateway.hs
+++ b/gen/Network/AWS/EC2/DeleteInternetGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteInternetGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Deletes the specified Internet gateway. You must detach the Internet
 -- gateway from the VPC before you can delete it.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteInternetGateway.html AWS API Reference> for DeleteInternetGateway.
 module Network.AWS.EC2.DeleteInternetGateway
     (
     -- * Creating a Request
@@ -79,8 +77,10 @@
 instance AWSRequest DeleteInternetGateway where
         type Rs DeleteInternetGateway =
              DeleteInternetGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteInternetGatewayResponse'
+
+instance Hashable DeleteInternetGateway
 
 instance ToHeaders DeleteInternetGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteKeyPair.hs b/gen/Network/AWS/EC2/DeleteKeyPair.hs
--- a/gen/Network/AWS/EC2/DeleteKeyPair.hs
+++ b/gen/Network/AWS/EC2/DeleteKeyPair.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteKeyPair
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Deletes the specified key pair, by removing the public key from Amazon
 -- EC2.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteKeyPair.html AWS API Reference> for DeleteKeyPair.
 module Network.AWS.EC2.DeleteKeyPair
     (
     -- * Creating a Request
@@ -78,8 +76,10 @@
 
 instance AWSRequest DeleteKeyPair where
         type Rs DeleteKeyPair = DeleteKeyPairResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteKeyPairResponse'
+
+instance Hashable DeleteKeyPair
 
 instance ToHeaders DeleteKeyPair where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteNatGateway.hs b/gen/Network/AWS/EC2/DeleteNatGateway.hs
--- a/gen/Network/AWS/EC2/DeleteNatGateway.hs
+++ b/gen/Network/AWS/EC2/DeleteNatGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteNatGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- its Elastic IP address, but does not release the address from your
 -- account. Deleting a NAT gateway does not delete any NAT gateway routes
 -- in your route tables.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteNatGateway.html AWS API Reference> for DeleteNatGateway.
 module Network.AWS.EC2.DeleteNatGateway
     (
     -- * Creating a Request
@@ -71,12 +69,14 @@
 
 instance AWSRequest DeleteNatGateway where
         type Rs DeleteNatGateway = DeleteNatGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  DeleteNatGatewayResponse' <$>
                    (x .@? "natGatewayId") <*> (pure (fromEnum s)))
+
+instance Hashable DeleteNatGateway
 
 instance ToHeaders DeleteNatGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteNetworkACL.hs b/gen/Network/AWS/EC2/DeleteNetworkACL.hs
--- a/gen/Network/AWS/EC2/DeleteNetworkACL.hs
+++ b/gen/Network/AWS/EC2/DeleteNetworkACL.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteNetworkACL
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Deletes the specified network ACL. You can\'t delete the ACL if it\'s
 -- associated with any subnets. You can\'t delete the default network ACL.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteNetworkACL.html AWS API Reference> for DeleteNetworkACL.
 module Network.AWS.EC2.DeleteNetworkACL
     (
     -- * Creating a Request
@@ -78,8 +76,10 @@
 
 instance AWSRequest DeleteNetworkACL where
         type Rs DeleteNetworkACL = DeleteNetworkACLResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteNetworkACLResponse'
+
+instance Hashable DeleteNetworkACL
 
 instance ToHeaders DeleteNetworkACL where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteNetworkACLEntry.hs b/gen/Network/AWS/EC2/DeleteNetworkACLEntry.hs
--- a/gen/Network/AWS/EC2/DeleteNetworkACLEntry.hs
+++ b/gen/Network/AWS/EC2/DeleteNetworkACLEntry.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteNetworkACLEntry
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Deletes the specified ingress or egress entry (rule) from the specified
 -- network ACL.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteNetworkACLEntry.html AWS API Reference> for DeleteNetworkACLEntry.
 module Network.AWS.EC2.DeleteNetworkACLEntry
     (
     -- * Creating a Request
@@ -99,8 +97,10 @@
 instance AWSRequest DeleteNetworkACLEntry where
         type Rs DeleteNetworkACLEntry =
              DeleteNetworkACLEntryResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteNetworkACLEntryResponse'
+
+instance Hashable DeleteNetworkACLEntry
 
 instance ToHeaders DeleteNetworkACLEntry where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteNetworkInterface.hs b/gen/Network/AWS/EC2/DeleteNetworkInterface.hs
--- a/gen/Network/AWS/EC2/DeleteNetworkInterface.hs
+++ b/gen/Network/AWS/EC2/DeleteNetworkInterface.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteNetworkInterface
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Deletes the specified network interface. You must detach the network
 -- interface before you can delete it.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteNetworkInterface.html AWS API Reference> for DeleteNetworkInterface.
 module Network.AWS.EC2.DeleteNetworkInterface
     (
     -- * Creating a Request
@@ -79,9 +77,11 @@
 instance AWSRequest DeleteNetworkInterface where
         type Rs DeleteNetworkInterface =
              DeleteNetworkInterfaceResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull DeleteNetworkInterfaceResponse'
+
+instance Hashable DeleteNetworkInterface
 
 instance ToHeaders DeleteNetworkInterface where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeletePlacementGroup.hs b/gen/Network/AWS/EC2/DeletePlacementGroup.hs
--- a/gen/Network/AWS/EC2/DeletePlacementGroup.hs
+++ b/gen/Network/AWS/EC2/DeletePlacementGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeletePlacementGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- more information about placement groups and cluster instances, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cluster_computing.html Cluster Instances>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeletePlacementGroup.html AWS API Reference> for DeletePlacementGroup.
 module Network.AWS.EC2.DeletePlacementGroup
     (
     -- * Creating a Request
@@ -82,8 +80,10 @@
 instance AWSRequest DeletePlacementGroup where
         type Rs DeletePlacementGroup =
              DeletePlacementGroupResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeletePlacementGroupResponse'
+
+instance Hashable DeletePlacementGroup
 
 instance ToHeaders DeletePlacementGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteRoute.hs b/gen/Network/AWS/EC2/DeleteRoute.hs
--- a/gen/Network/AWS/EC2/DeleteRoute.hs
+++ b/gen/Network/AWS/EC2/DeleteRoute.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteRoute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes the specified route from the specified route table.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteRoute.html AWS API Reference> for DeleteRoute.
 module Network.AWS.EC2.DeleteRoute
     (
     -- * Creating a Request
@@ -88,8 +86,10 @@
 
 instance AWSRequest DeleteRoute where
         type Rs DeleteRoute = DeleteRouteResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteRouteResponse'
+
+instance Hashable DeleteRoute
 
 instance ToHeaders DeleteRoute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteRouteTable.hs b/gen/Network/AWS/EC2/DeleteRouteTable.hs
--- a/gen/Network/AWS/EC2/DeleteRouteTable.hs
+++ b/gen/Network/AWS/EC2/DeleteRouteTable.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteRouteTable
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Deletes the specified route table. You must disassociate the route table
 -- from any subnets before you can delete it. You can\'t delete the main
 -- route table.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteRouteTable.html AWS API Reference> for DeleteRouteTable.
 module Network.AWS.EC2.DeleteRouteTable
     (
     -- * Creating a Request
@@ -79,8 +77,10 @@
 
 instance AWSRequest DeleteRouteTable where
         type Rs DeleteRouteTable = DeleteRouteTableResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteRouteTableResponse'
+
+instance Hashable DeleteRouteTable
 
 instance ToHeaders DeleteRouteTable where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteSecurityGroup.hs b/gen/Network/AWS/EC2/DeleteSecurityGroup.hs
--- a/gen/Network/AWS/EC2/DeleteSecurityGroup.hs
+++ b/gen/Network/AWS/EC2/DeleteSecurityGroup.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteSecurityGroup
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- instance, or is referenced by another security group, the operation
 -- fails with 'InvalidGroup.InUse' in EC2-Classic or 'DependencyViolation'
 -- in EC2-VPC.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteSecurityGroup.html AWS API Reference> for DeleteSecurityGroup.
 module Network.AWS.EC2.DeleteSecurityGroup
     (
     -- * Creating a Request
@@ -92,8 +90,10 @@
 instance AWSRequest DeleteSecurityGroup where
         type Rs DeleteSecurityGroup =
              DeleteSecurityGroupResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteSecurityGroupResponse'
+
+instance Hashable DeleteSecurityGroup
 
 instance ToHeaders DeleteSecurityGroup where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteSnapshot.hs b/gen/Network/AWS/EC2/DeleteSnapshot.hs
--- a/gen/Network/AWS/EC2/DeleteSnapshot.hs
+++ b/gen/Network/AWS/EC2/DeleteSnapshot.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteSnapshot
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -35,8 +35,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-snapshot.html Deleting an Amazon EBS Snapshot>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteSnapshot.html AWS API Reference> for DeleteSnapshot.
 module Network.AWS.EC2.DeleteSnapshot
     (
     -- * Creating a Request
@@ -93,8 +91,10 @@
 
 instance AWSRequest DeleteSnapshot where
         type Rs DeleteSnapshot = DeleteSnapshotResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteSnapshotResponse'
+
+instance Hashable DeleteSnapshot
 
 instance ToHeaders DeleteSnapshot where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteSpotDatafeedSubscription.hs b/gen/Network/AWS/EC2/DeleteSpotDatafeedSubscription.hs
--- a/gen/Network/AWS/EC2/DeleteSpotDatafeedSubscription.hs
+++ b/gen/Network/AWS/EC2/DeleteSpotDatafeedSubscription.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteSpotDatafeedSubscription
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Deletes the data feed for Spot instances.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteSpotDatafeedSubscription.html AWS API Reference> for DeleteSpotDatafeedSubscription.
 module Network.AWS.EC2.DeleteSpotDatafeedSubscription
     (
     -- * Creating a Request
@@ -71,9 +69,11 @@
          where
         type Rs DeleteSpotDatafeedSubscription =
              DeleteSpotDatafeedSubscriptionResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull DeleteSpotDatafeedSubscriptionResponse'
+
+instance Hashable DeleteSpotDatafeedSubscription
 
 instance ToHeaders DeleteSpotDatafeedSubscription
          where
diff --git a/gen/Network/AWS/EC2/DeleteSubnet.hs b/gen/Network/AWS/EC2/DeleteSubnet.hs
--- a/gen/Network/AWS/EC2/DeleteSubnet.hs
+++ b/gen/Network/AWS/EC2/DeleteSubnet.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteSubnet
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Deletes the specified subnet. You must terminate all running instances
 -- in the subnet before you can delete the subnet.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteSubnet.html AWS API Reference> for DeleteSubnet.
 module Network.AWS.EC2.DeleteSubnet
     (
     -- * Creating a Request
@@ -78,8 +76,10 @@
 
 instance AWSRequest DeleteSubnet where
         type Rs DeleteSubnet = DeleteSubnetResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteSubnetResponse'
+
+instance Hashable DeleteSubnet
 
 instance ToHeaders DeleteSubnet where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteTags.hs b/gen/Network/AWS/EC2/DeleteTags.hs
--- a/gen/Network/AWS/EC2/DeleteTags.hs
+++ b/gen/Network/AWS/EC2/DeleteTags.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteTags
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- For more information about tags, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tagging Your Resources>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteTags.html AWS API Reference> for DeleteTags.
 module Network.AWS.EC2.DeleteTags
     (
     -- * Creating a Request
@@ -94,8 +92,10 @@
 
 instance AWSRequest DeleteTags where
         type Rs DeleteTags = DeleteTagsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteTagsResponse'
+
+instance Hashable DeleteTags
 
 instance ToHeaders DeleteTags where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteVPC.hs b/gen/Network/AWS/EC2/DeleteVPC.hs
--- a/gen/Network/AWS/EC2/DeleteVPC.hs
+++ b/gen/Network/AWS/EC2/DeleteVPC.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteVPC
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- security groups associated with the VPC (except the default one), delete
 -- all route tables associated with the VPC (except the default one), and
 -- so on.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteVPC.html AWS API Reference> for DeleteVPC.
 module Network.AWS.EC2.DeleteVPC
     (
     -- * Creating a Request
@@ -82,8 +80,10 @@
 
 instance AWSRequest DeleteVPC where
         type Rs DeleteVPC = DeleteVPCResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteVPCResponse'
+
+instance Hashable DeleteVPC
 
 instance ToHeaders DeleteVPC where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteVPCEndpoints.hs b/gen/Network/AWS/EC2/DeleteVPCEndpoints.hs
--- a/gen/Network/AWS/EC2/DeleteVPCEndpoints.hs
+++ b/gen/Network/AWS/EC2/DeleteVPCEndpoints.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteVPCEndpoints
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Deletes one or more specified VPC endpoints. Deleting the endpoint also
 -- deletes the endpoint routes in the route tables that were associated
 -- with the endpoint.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteVPCEndpoints.html AWS API Reference> for DeleteVPCEndpoints.
 module Network.AWS.EC2.DeleteVPCEndpoints
     (
     -- * Creating a Request
@@ -82,7 +80,7 @@
 instance AWSRequest DeleteVPCEndpoints where
         type Rs DeleteVPCEndpoints =
              DeleteVPCEndpointsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -90,6 +88,8 @@
                    (x .@? "unsuccessful" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DeleteVPCEndpoints
 
 instance ToHeaders DeleteVPCEndpoints where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteVPCPeeringConnection.hs b/gen/Network/AWS/EC2/DeleteVPCPeeringConnection.hs
--- a/gen/Network/AWS/EC2/DeleteVPCPeeringConnection.hs
+++ b/gen/Network/AWS/EC2/DeleteVPCPeeringConnection.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteVPCPeeringConnection
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- or the owner of the peer VPC can delete the VPC peering connection if
 -- it\'s in the 'active' state. The owner of the requester VPC can delete a
 -- VPC peering connection in the 'pending-acceptance' state.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteVPCPeeringConnection.html AWS API Reference> for DeleteVPCPeeringConnection.
 module Network.AWS.EC2.DeleteVPCPeeringConnection
     (
     -- * Creating a Request
@@ -84,12 +82,14 @@
 instance AWSRequest DeleteVPCPeeringConnection where
         type Rs DeleteVPCPeeringConnection =
              DeleteVPCPeeringConnectionResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  DeleteVPCPeeringConnectionResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable DeleteVPCPeeringConnection
 
 instance ToHeaders DeleteVPCPeeringConnection where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteVPNConnection.hs b/gen/Network/AWS/EC2/DeleteVPNConnection.hs
--- a/gen/Network/AWS/EC2/DeleteVPNConnection.hs
+++ b/gen/Network/AWS/EC2/DeleteVPNConnection.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteVPNConnection
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,8 +29,6 @@
 -- create a new VPN connection, you must reconfigure the customer gateway
 -- using the new configuration information returned with the new VPN
 -- connection ID.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteVPNConnection.html AWS API Reference> for DeleteVPNConnection.
 module Network.AWS.EC2.DeleteVPNConnection
     (
     -- * Creating a Request
@@ -88,8 +86,10 @@
 instance AWSRequest DeleteVPNConnection where
         type Rs DeleteVPNConnection =
              DeleteVPNConnectionResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteVPNConnectionResponse'
+
+instance Hashable DeleteVPNConnection
 
 instance ToHeaders DeleteVPNConnection where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteVPNConnectionRoute.hs b/gen/Network/AWS/EC2/DeleteVPNConnectionRoute.hs
--- a/gen/Network/AWS/EC2/DeleteVPNConnectionRoute.hs
+++ b/gen/Network/AWS/EC2/DeleteVPNConnectionRoute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteVPNConnectionRoute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- between an existing virtual private gateway and a VPN customer gateway.
 -- The static route allows traffic to be routed from the virtual private
 -- gateway to the VPN customer gateway.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteVPNConnectionRoute.html AWS API Reference> for DeleteVPNConnectionRoute.
 module Network.AWS.EC2.DeleteVPNConnectionRoute
     (
     -- * Creating a Request
@@ -79,9 +77,11 @@
 instance AWSRequest DeleteVPNConnectionRoute where
         type Rs DeleteVPNConnectionRoute =
              DeleteVPNConnectionRouteResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull DeleteVPNConnectionRouteResponse'
+
+instance Hashable DeleteVPNConnectionRoute
 
 instance ToHeaders DeleteVPNConnectionRoute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteVPNGateway.hs b/gen/Network/AWS/EC2/DeleteVPNGateway.hs
--- a/gen/Network/AWS/EC2/DeleteVPNGateway.hs
+++ b/gen/Network/AWS/EC2/DeleteVPNGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteVPNGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- delete the VPN connection. Note that you don\'t need to delete the
 -- virtual private gateway if you plan to delete and recreate the VPN
 -- connection between your VPC and your network.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteVPNGateway.html AWS API Reference> for DeleteVPNGateway.
 module Network.AWS.EC2.DeleteVPNGateway
     (
     -- * Creating a Request
@@ -81,8 +79,10 @@
 
 instance AWSRequest DeleteVPNGateway where
         type Rs DeleteVPNGateway = DeleteVPNGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteVPNGatewayResponse'
+
+instance Hashable DeleteVPNGateway
 
 instance ToHeaders DeleteVPNGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeleteVolume.hs b/gen/Network/AWS/EC2/DeleteVolume.hs
--- a/gen/Network/AWS/EC2/DeleteVolume.hs
+++ b/gen/Network/AWS/EC2/DeleteVolume.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeleteVolume
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,8 +26,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-deleting-volume.html Deleting an Amazon EBS Volume>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteVolume.html AWS API Reference> for DeleteVolume.
 module Network.AWS.EC2.DeleteVolume
     (
     -- * Creating a Request
@@ -84,8 +82,10 @@
 
 instance AWSRequest DeleteVolume where
         type Rs DeleteVolume = DeleteVolumeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeleteVolumeResponse'
+
+instance Hashable DeleteVolume
 
 instance ToHeaders DeleteVolume where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DeregisterImage.hs b/gen/Network/AWS/EC2/DeregisterImage.hs
--- a/gen/Network/AWS/EC2/DeregisterImage.hs
+++ b/gen/Network/AWS/EC2/DeregisterImage.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DeregisterImage
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- used to launch new instances.
 --
 -- This command does not delete the AMI.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeregisterImage.html AWS API Reference> for DeregisterImage.
 module Network.AWS.EC2.DeregisterImage
     (
     -- * Creating a Request
@@ -80,8 +78,10 @@
 
 instance AWSRequest DeregisterImage where
         type Rs DeregisterImage = DeregisterImageResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DeregisterImageResponse'
+
+instance Hashable DeregisterImage
 
 instance ToHeaders DeregisterImage where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeAccountAttributes.hs b/gen/Network/AWS/EC2/DescribeAccountAttributes.hs
--- a/gen/Network/AWS/EC2/DescribeAccountAttributes.hs
+++ b/gen/Network/AWS/EC2/DescribeAccountAttributes.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeAccountAttributes
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -39,8 +39,6 @@
 -- -   'vpc-max-elastic-ips': The maximum number of Elastic IP addresses
 --     that you can allocate for use with EC2-VPC.
 --
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeAccountAttributes.html AWS API Reference> for DescribeAccountAttributes.
 module Network.AWS.EC2.DescribeAccountAttributes
     (
     -- * Creating a Request
@@ -100,7 +98,7 @@
 instance AWSRequest DescribeAccountAttributes where
         type Rs DescribeAccountAttributes =
              DescribeAccountAttributesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -108,6 +106,8 @@
                    (x .@? "accountAttributeSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeAccountAttributes
 
 instance ToHeaders DescribeAccountAttributes where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeAddresses.hs b/gen/Network/AWS/EC2/DescribeAddresses.hs
--- a/gen/Network/AWS/EC2/DescribeAddresses.hs
+++ b/gen/Network/AWS/EC2/DescribeAddresses.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeAddresses
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- in a VPC. For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html Elastic IP Addresses>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeAddresses.html AWS API Reference> for DescribeAddresses.
 module Network.AWS.EC2.DescribeAddresses
     (
     -- * Creating a Request
@@ -127,7 +125,7 @@
 
 instance AWSRequest DescribeAddresses where
         type Rs DescribeAddresses = DescribeAddressesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -135,6 +133,8 @@
                    (x .@? "addressesSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeAddresses
 
 instance ToHeaders DescribeAddresses where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeAvailabilityZones.hs b/gen/Network/AWS/EC2/DescribeAvailabilityZones.hs
--- a/gen/Network/AWS/EC2/DescribeAvailabilityZones.hs
+++ b/gen/Network/AWS/EC2/DescribeAvailabilityZones.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeAvailabilityZones
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -27,8 +27,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html Regions and Availability Zones>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeAvailabilityZones.html AWS API Reference> for DescribeAvailabilityZones.
 module Network.AWS.EC2.DescribeAvailabilityZones
     (
     -- * Creating a Request
@@ -109,7 +107,7 @@
 instance AWSRequest DescribeAvailabilityZones where
         type Rs DescribeAvailabilityZones =
              DescribeAvailabilityZonesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -117,6 +115,8 @@
                    (x .@? "availabilityZoneInfo" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeAvailabilityZones
 
 instance ToHeaders DescribeAvailabilityZones where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeBundleTasks.hs b/gen/Network/AWS/EC2/DescribeBundleTasks.hs
--- a/gen/Network/AWS/EC2/DescribeBundleTasks.hs
+++ b/gen/Network/AWS/EC2/DescribeBundleTasks.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeBundleTasks
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- bundle task is no longer in the list, you can still register an AMI from
 -- it. Just use 'RegisterImage' with the Amazon S3 bucket name and image
 -- manifest name you provided to the bundle task.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeBundleTasks.html AWS API Reference> for DescribeBundleTasks.
 module Network.AWS.EC2.DescribeBundleTasks
     (
     -- * Creating a Request
@@ -120,7 +118,7 @@
 instance AWSRequest DescribeBundleTasks where
         type Rs DescribeBundleTasks =
              DescribeBundleTasksResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -128,6 +126,8 @@
                    (x .@? "bundleInstanceTasksSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeBundleTasks
 
 instance ToHeaders DescribeBundleTasks where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeClassicLinkInstances.hs b/gen/Network/AWS/EC2/DescribeClassicLinkInstances.hs
--- a/gen/Network/AWS/EC2/DescribeClassicLinkInstances.hs
+++ b/gen/Network/AWS/EC2/DescribeClassicLinkInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeClassicLinkInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- only returns information about EC2-Classic instances linked to a VPC
 -- through ClassicLink; you cannot use this request to return information
 -- about other instances.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeClassicLinkInstances.html AWS API Reference> for DescribeClassicLinkInstances.
 module Network.AWS.EC2.DescribeClassicLinkInstances
     (
     -- * Creating a Request
@@ -143,7 +141,7 @@
          where
         type Rs DescribeClassicLinkInstances =
              DescribeClassicLinkInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -152,6 +150,8 @@
                      (x .@? "instancesSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeClassicLinkInstances
 
 instance ToHeaders DescribeClassicLinkInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeConversionTasks.hs b/gen/Network/AWS/EC2/DescribeConversionTasks.hs
--- a/gen/Network/AWS/EC2/DescribeConversionTasks.hs
+++ b/gen/Network/AWS/EC2/DescribeConversionTasks.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeConversionTasks
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,7 +23,9 @@
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UploadingYourInstancesandVolumes.html Using the Command Line Tools to Import Your Virtual Machine to Amazon EC2>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeConversionTasks.html AWS API Reference> for DescribeConversionTasks.
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
 module Network.AWS.EC2.DescribeConversionTasks
     (
     -- * Creating a Request
@@ -92,7 +94,7 @@
 instance AWSRequest DescribeConversionTasks where
         type Rs DescribeConversionTasks =
              DescribeConversionTasksResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -100,6 +102,8 @@
                    (x .@? "conversionTasks" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeConversionTasks
 
 instance ToHeaders DescribeConversionTasks where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeCustomerGateways.hs b/gen/Network/AWS/EC2/DescribeCustomerGateways.hs
--- a/gen/Network/AWS/EC2/DescribeCustomerGateways.hs
+++ b/gen/Network/AWS/EC2/DescribeCustomerGateways.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeCustomerGateways
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information about VPN customer gateways, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeCustomerGateways.html AWS API Reference> for DescribeCustomerGateways.
 module Network.AWS.EC2.DescribeCustomerGateways
     (
     -- * Creating a Request
@@ -124,7 +122,7 @@
 instance AWSRequest DescribeCustomerGateways where
         type Rs DescribeCustomerGateways =
              DescribeCustomerGatewaysResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -132,6 +130,8 @@
                    (x .@? "customerGatewaySet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeCustomerGateways
 
 instance ToHeaders DescribeCustomerGateways where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeDHCPOptions.hs b/gen/Network/AWS/EC2/DescribeDHCPOptions.hs
--- a/gen/Network/AWS/EC2/DescribeDHCPOptions.hs
+++ b/gen/Network/AWS/EC2/DescribeDHCPOptions.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeDHCPOptions
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information about DHCP options sets, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_DHCP_Options.html DHCP Options Sets>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeDHCPOptions.html AWS API Reference> for DescribeDHCPOptions.
 module Network.AWS.EC2.DescribeDHCPOptions
     (
     -- * Creating a Request
@@ -116,7 +114,7 @@
 instance AWSRequest DescribeDHCPOptions where
         type Rs DescribeDHCPOptions =
              DescribeDHCPOptionsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -124,6 +122,8 @@
                    (x .@? "dhcpOptionsSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeDHCPOptions
 
 instance ToHeaders DescribeDHCPOptions where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeExportTasks.hs b/gen/Network/AWS/EC2/DescribeExportTasks.hs
--- a/gen/Network/AWS/EC2/DescribeExportTasks.hs
+++ b/gen/Network/AWS/EC2/DescribeExportTasks.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeExportTasks
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes one or more of your export tasks.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeExportTasks.html AWS API Reference> for DescribeExportTasks.
 module Network.AWS.EC2.DescribeExportTasks
     (
     -- * Creating a Request
@@ -68,7 +66,7 @@
 instance AWSRequest DescribeExportTasks where
         type Rs DescribeExportTasks =
              DescribeExportTasksResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -76,6 +74,8 @@
                    (x .@? "exportTaskSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeExportTasks
 
 instance ToHeaders DescribeExportTasks where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeFlowLogs.hs b/gen/Network/AWS/EC2/DescribeFlowLogs.hs
--- a/gen/Network/AWS/EC2/DescribeFlowLogs.hs
+++ b/gen/Network/AWS/EC2/DescribeFlowLogs.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeFlowLogs
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Describes one or more flow logs. To view the information in your flow
 -- logs (the log streams for the network interfaces), you must use the
 -- CloudWatch Logs console or the CloudWatch Logs API.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeFlowLogs.html AWS API Reference> for DescribeFlowLogs.
 module Network.AWS.EC2.DescribeFlowLogs
     (
     -- * Creating a Request
@@ -114,7 +112,7 @@
 
 instance AWSRequest DescribeFlowLogs where
         type Rs DescribeFlowLogs = DescribeFlowLogsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -123,6 +121,8 @@
                      (x .@? "flowLogSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeFlowLogs
 
 instance ToHeaders DescribeFlowLogs where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeHosts.hs b/gen/Network/AWS/EC2/DescribeHosts.hs
--- a/gen/Network/AWS/EC2/DescribeHosts.hs
+++ b/gen/Network/AWS/EC2/DescribeHosts.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeHosts
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- currently using. All listed instances consume capacity on your Dedicated
 -- host. Dedicated hosts that have recently been released will be listed
 -- with the state 'released'.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeHosts.html AWS API Reference> for DescribeHosts.
 module Network.AWS.EC2.DescribeHosts
     (
     -- * Creating a Request
@@ -125,7 +123,7 @@
 
 instance AWSRequest DescribeHosts where
         type Rs DescribeHosts = DescribeHostsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -134,6 +132,8 @@
                       may (parseXMLList "item"))
                      <*> (x .@? "nextToken")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeHosts
 
 instance ToHeaders DescribeHosts where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeIdFormat.hs b/gen/Network/AWS/EC2/DescribeIdFormat.hs
--- a/gen/Network/AWS/EC2/DescribeIdFormat.hs
+++ b/gen/Network/AWS/EC2/DescribeIdFormat.hs
@@ -12,19 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeIdFormat
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- __Important: This command is reserved for future use, and is currently
--- not available for you to use.__
---
--- Describes the ID format settings for your resources, for example, to
--- view which resource types are enabled for longer IDs. This request only
--- returns information about resource types whose ID formats can be
--- modified; it does not return information about other resource types.
+-- Describes the ID format settings for your resources on a per-region
+-- basis, for example, to view which resource types are enabled for longer
+-- IDs. This request only returns information about resource types whose ID
+-- formats can be modified; it does not return information about other
+-- resource types.
 --
 -- The following resource types support longer IDs: 'instance' |
 -- 'reservation'.
@@ -32,10 +30,10 @@
 -- These settings apply to the IAM user who makes the request; they do not
 -- apply to the entire AWS account. By default, an IAM user defaults to the
 -- same settings as the root user, unless they explicitly override the
--- settings by running the ModifyIdFormat command. These settings are
--- applied on a per-region basis.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeIdFormat.html AWS API Reference> for DescribeIdFormat.
+-- settings by running the < ModifyIdFormat> command. Resources created
+-- with longer IDs are visible to all IAM users, regardless of these
+-- settings and provided that they have permission to use the relevant
+-- 'Describe' command for the resource type.
 module Network.AWS.EC2.DescribeIdFormat
     (
     -- * Creating a Request
@@ -82,7 +80,7 @@
 
 instance AWSRequest DescribeIdFormat where
         type Rs DescribeIdFormat = DescribeIdFormatResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -90,6 +88,8 @@
                    (x .@? "statusSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeIdFormat
 
 instance ToHeaders DescribeIdFormat where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeImageAttribute.hs b/gen/Network/AWS/EC2/DescribeImageAttribute.hs
--- a/gen/Network/AWS/EC2/DescribeImageAttribute.hs
+++ b/gen/Network/AWS/EC2/DescribeImageAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeImageAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Describes the specified attribute of the specified AMI. You can specify
 -- only one attribute at a time.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeImageAttribute.html AWS API Reference> for DescribeImageAttribute.
 module Network.AWS.EC2.DescribeImageAttribute
     (
     -- * Creating a Request
@@ -96,15 +94,15 @@
 --
 -- __Note__: Depending on your account privileges, the 'blockDeviceMapping'
 -- attribute may return a 'Client.AuthFailure' error. If this happens, use
--- DescribeImages to get information about the block device mapping for the
--- AMI.
+-- < DescribeImages> to get information about the block device mapping for
+-- the AMI.
 diaiAttribute :: Lens' DescribeImageAttribute ImageAttributeName
 diaiAttribute = lens _diaiAttribute (\ s a -> s{_diaiAttribute = a});
 
 instance AWSRequest DescribeImageAttribute where
         type Rs DescribeImageAttribute =
              DescribeImageAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -123,6 +121,8 @@
                      (x .@? "blockDeviceMapping" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeImageAttribute
 
 instance ToHeaders DescribeImageAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeImages.hs b/gen/Network/AWS/EC2/DescribeImages.hs
--- a/gen/Network/AWS/EC2/DescribeImages.hs
+++ b/gen/Network/AWS/EC2/DescribeImages.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeImages
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 --
 -- Deregistered images are included in the returned results for an
 -- unspecified interval after deregistration.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeImages.html AWS API Reference> for DescribeImages.
 module Network.AWS.EC2.DescribeImages
     (
     -- * Creating a Request
@@ -199,7 +197,7 @@
 
 instance AWSRequest DescribeImages where
         type Rs DescribeImages = DescribeImagesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -207,6 +205,8 @@
                    (x .@? "imagesSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeImages
 
 instance ToHeaders DescribeImages where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeImportImageTasks.hs b/gen/Network/AWS/EC2/DescribeImportImageTasks.hs
--- a/gen/Network/AWS/EC2/DescribeImportImageTasks.hs
+++ b/gen/Network/AWS/EC2/DescribeImportImageTasks.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeImportImageTasks
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Displays details about an import virtual machine or import snapshot
 -- tasks that are already created.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeImportImageTasks.html AWS API Reference> for DescribeImportImageTasks.
 module Network.AWS.EC2.DescribeImportImageTasks
     (
     -- * Creating a Request
@@ -109,7 +107,7 @@
 instance AWSRequest DescribeImportImageTasks where
         type Rs DescribeImportImageTasks =
              DescribeImportImageTasksResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -118,6 +116,8 @@
                      (x .@? "importImageTaskSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeImportImageTasks
 
 instance ToHeaders DescribeImportImageTasks where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeImportSnapshotTasks.hs b/gen/Network/AWS/EC2/DescribeImportSnapshotTasks.hs
--- a/gen/Network/AWS/EC2/DescribeImportSnapshotTasks.hs
+++ b/gen/Network/AWS/EC2/DescribeImportSnapshotTasks.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeImportSnapshotTasks
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes your import snapshot tasks.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeImportSnapshotTasks.html AWS API Reference> for DescribeImportSnapshotTasks.
 module Network.AWS.EC2.DescribeImportSnapshotTasks
     (
     -- * Creating a Request
@@ -108,7 +106,7 @@
 instance AWSRequest DescribeImportSnapshotTasks where
         type Rs DescribeImportSnapshotTasks =
              DescribeImportSnapshotTasksResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -117,6 +115,8 @@
                      (x .@? "importSnapshotTaskSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeImportSnapshotTasks
 
 instance ToHeaders DescribeImportSnapshotTasks where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeInstanceAttribute.hs b/gen/Network/AWS/EC2/DescribeInstanceAttribute.hs
--- a/gen/Network/AWS/EC2/DescribeInstanceAttribute.hs
+++ b/gen/Network/AWS/EC2/DescribeInstanceAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeInstanceAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- 'disableApiTermination' | 'instanceInitiatedShutdownBehavior' |
 -- 'rootDeviceName' | 'blockDeviceMapping' | 'productCodes' |
 -- 'sourceDestCheck' | 'groupSet' | 'ebsOptimized' | 'sriovNetSupport'
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstanceAttribute.html AWS API Reference> for DescribeInstanceAttribute.
 module Network.AWS.EC2.DescribeInstanceAttribute
     (
     -- * Creating a Request
@@ -109,7 +107,7 @@
 instance AWSRequest DescribeInstanceAttribute where
         type Rs DescribeInstanceAttribute =
              DescribeInstanceAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -134,6 +132,8 @@
                      (x .@? "blockDeviceMapping" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeInstanceAttribute
 
 instance ToHeaders DescribeInstanceAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeInstanceStatus.hs b/gen/Network/AWS/EC2/DescribeInstanceStatus.hs
--- a/gen/Network/AWS/EC2/DescribeInstanceStatus.hs
+++ b/gen/Network/AWS/EC2/DescribeInstanceStatus.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeInstanceStatus
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -43,8 +43,6 @@
 --     in the /Amazon Elastic Compute Cloud User Guide/.
 --
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstanceStatus.html AWS API Reference> for DescribeInstanceStatus.
---
 -- This operation returns paginated results.
 module Network.AWS.EC2.DescribeInstanceStatus
     (
@@ -203,7 +201,7 @@
 instance AWSRequest DescribeInstanceStatus where
         type Rs DescribeInstanceStatus =
              DescribeInstanceStatusResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -212,6 +210,8 @@
                       may (parseXMLList "item"))
                      <*> (x .@? "nextToken")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeInstanceStatus
 
 instance ToHeaders DescribeInstanceStatus where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeInstances.hs b/gen/Network/AWS/EC2/DescribeInstances.hs
--- a/gen/Network/AWS/EC2/DescribeInstances.hs
+++ b/gen/Network/AWS/EC2/DescribeInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -30,8 +30,6 @@
 -- Recently terminated instances might appear in the returned results. This
 -- interval is usually less than one hour.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstances.html AWS API Reference> for DescribeInstances.
---
 -- This operation returns paginated results.
 module Network.AWS.EC2.DescribeInstances
     (
@@ -142,8 +140,8 @@
 --
 -- -   'instance-id' - The ID of the instance.
 --
--- -   'instance-lifecycle' - Indicates whether this is a Spot Instance
---     ('spot').
+-- -   'instance-lifecycle' - Indicates whether this is a Spot Instance or
+--     a Scheduled Instance ('spot' | 'scheduled').
 --
 -- -   'instance-state-code' - The state of the instance, as a 16-bit
 --     unsigned integer. The high byte is an opaque internal value and
@@ -287,7 +285,7 @@
 -- -   'network-interface.mac-address' - The MAC address of the network
 --     interface.
 --
--- -   'network-interface-private-dns-name' - The private DNS name of the
+-- -   'network-interface.private-dns-name' - The private DNS name of the
 --     network interface.
 --
 -- -   'network-interface.source-dest-check' - Whether the network
@@ -385,7 +383,7 @@
 
 instance AWSRequest DescribeInstances where
         type Rs DescribeInstances = DescribeInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -394,6 +392,8 @@
                      (x .@? "reservationSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeInstances
 
 instance ToHeaders DescribeInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeInternetGateways.hs b/gen/Network/AWS/EC2/DescribeInternetGateways.hs
--- a/gen/Network/AWS/EC2/DescribeInternetGateways.hs
+++ b/gen/Network/AWS/EC2/DescribeInternetGateways.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeInternetGateways
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes one or more of your Internet gateways.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInternetGateways.html AWS API Reference> for DescribeInternetGateways.
 module Network.AWS.EC2.DescribeInternetGateways
     (
     -- * Creating a Request
@@ -114,7 +112,7 @@
 instance AWSRequest DescribeInternetGateways where
         type Rs DescribeInternetGateways =
              DescribeInternetGatewaysResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -122,6 +120,8 @@
                    (x .@? "internetGatewaySet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeInternetGateways
 
 instance ToHeaders DescribeInternetGateways where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeKeyPairs.hs b/gen/Network/AWS/EC2/DescribeKeyPairs.hs
--- a/gen/Network/AWS/EC2/DescribeKeyPairs.hs
+++ b/gen/Network/AWS/EC2/DescribeKeyPairs.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeKeyPairs
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information about key pairs, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Key Pairs>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeKeyPairs.html AWS API Reference> for DescribeKeyPairs.
 module Network.AWS.EC2.DescribeKeyPairs
     (
     -- * Creating a Request
@@ -99,7 +97,7 @@
 
 instance AWSRequest DescribeKeyPairs where
         type Rs DescribeKeyPairs = DescribeKeyPairsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -107,6 +105,8 @@
                    (x .@? "keySet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeKeyPairs
 
 instance ToHeaders DescribeKeyPairs where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeMovingAddresses.hs b/gen/Network/AWS/EC2/DescribeMovingAddresses.hs
--- a/gen/Network/AWS/EC2/DescribeMovingAddresses.hs
+++ b/gen/Network/AWS/EC2/DescribeMovingAddresses.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeMovingAddresses
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- platform, or that are being restored to the EC2-Classic platform. This
 -- request does not return information about any other Elastic IP addresses
 -- in your account.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeMovingAddresses.html AWS API Reference> for DescribeMovingAddresses.
 module Network.AWS.EC2.DescribeMovingAddresses
     (
     -- * Creating a Request
@@ -121,7 +119,7 @@
 instance AWSRequest DescribeMovingAddresses where
         type Rs DescribeMovingAddresses =
              DescribeMovingAddressesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -130,6 +128,8 @@
                       may (parseXMLList "item"))
                      <*> (x .@? "nextToken")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeMovingAddresses
 
 instance ToHeaders DescribeMovingAddresses where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeNatGateways.hs b/gen/Network/AWS/EC2/DescribeNatGateways.hs
--- a/gen/Network/AWS/EC2/DescribeNatGateways.hs
+++ b/gen/Network/AWS/EC2/DescribeNatGateways.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeNatGateways
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes one or more of the your NAT gateways.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeNatGateways.html AWS API Reference> for DescribeNatGateways.
 module Network.AWS.EC2.DescribeNatGateways
     (
     -- * Creating a Request
@@ -111,7 +109,7 @@
 instance AWSRequest DescribeNatGateways where
         type Rs DescribeNatGateways =
              DescribeNatGatewaysResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -120,6 +118,8 @@
                       may (parseXMLList "item"))
                      <*> (x .@? "nextToken")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeNatGateways
 
 instance ToHeaders DescribeNatGateways where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeNetworkACLs.hs b/gen/Network/AWS/EC2/DescribeNetworkACLs.hs
--- a/gen/Network/AWS/EC2/DescribeNetworkACLs.hs
+++ b/gen/Network/AWS/EC2/DescribeNetworkACLs.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeNetworkACLs
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information about network ACLs, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeNetworkACLs.html AWS API Reference> for DescribeNetworkACLs.
 module Network.AWS.EC2.DescribeNetworkACLs
     (
     -- * Creating a Request
@@ -150,7 +148,7 @@
 instance AWSRequest DescribeNetworkACLs where
         type Rs DescribeNetworkACLs =
              DescribeNetworkACLsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -158,6 +156,8 @@
                    (x .@? "networkAclSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeNetworkACLs
 
 instance ToHeaders DescribeNetworkACLs where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeNetworkInterfaceAttribute.hs b/gen/Network/AWS/EC2/DescribeNetworkInterfaceAttribute.hs
--- a/gen/Network/AWS/EC2/DescribeNetworkInterfaceAttribute.hs
+++ b/gen/Network/AWS/EC2/DescribeNetworkInterfaceAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeNetworkInterfaceAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Describes a network interface attribute. You can specify only one
 -- attribute at a time.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeNetworkInterfaceAttribute.html AWS API Reference> for DescribeNetworkInterfaceAttribute.
 module Network.AWS.EC2.DescribeNetworkInterfaceAttribute
     (
     -- * Creating a Request
@@ -96,7 +94,7 @@
          where
         type Rs DescribeNetworkInterfaceAttribute =
              DescribeNetworkInterfaceAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -108,6 +106,8 @@
                      <*> (x .@? "attachment")
                      <*> (x .@? "description")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeNetworkInterfaceAttribute
 
 instance ToHeaders DescribeNetworkInterfaceAttribute
          where
diff --git a/gen/Network/AWS/EC2/DescribeNetworkInterfaces.hs b/gen/Network/AWS/EC2/DescribeNetworkInterfaces.hs
--- a/gen/Network/AWS/EC2/DescribeNetworkInterfaces.hs
+++ b/gen/Network/AWS/EC2/DescribeNetworkInterfaces.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeNetworkInterfaces
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes one or more of your network interfaces.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeNetworkInterfaces.html AWS API Reference> for DescribeNetworkInterfaces.
 module Network.AWS.EC2.DescribeNetworkInterfaces
     (
     -- * Creating a Request
@@ -201,7 +199,7 @@
 instance AWSRequest DescribeNetworkInterfaces where
         type Rs DescribeNetworkInterfaces =
              DescribeNetworkInterfacesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -209,6 +207,8 @@
                    (x .@? "networkInterfaceSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeNetworkInterfaces
 
 instance ToHeaders DescribeNetworkInterfaces where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribePlacementGroups.hs b/gen/Network/AWS/EC2/DescribePlacementGroups.hs
--- a/gen/Network/AWS/EC2/DescribePlacementGroups.hs
+++ b/gen/Network/AWS/EC2/DescribePlacementGroups.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribePlacementGroups
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- about placement groups and cluster instances, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using_cluster_computing.html Cluster Instances>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribePlacementGroups.html AWS API Reference> for DescribePlacementGroups.
 module Network.AWS.EC2.DescribePlacementGroups
     (
     -- * Creating a Request
@@ -103,7 +101,7 @@
 instance AWSRequest DescribePlacementGroups where
         type Rs DescribePlacementGroups =
              DescribePlacementGroupsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -111,6 +109,8 @@
                    (x .@? "placementGroupSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribePlacementGroups
 
 instance ToHeaders DescribePlacementGroups where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribePrefixLists.hs b/gen/Network/AWS/EC2/DescribePrefixLists.hs
--- a/gen/Network/AWS/EC2/DescribePrefixLists.hs
+++ b/gen/Network/AWS/EC2/DescribePrefixLists.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribePrefixLists
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- address range for the service. A prefix list ID is required for creating
 -- an outbound security group rule that allows traffic from a VPC to access
 -- an AWS service through a VPC endpoint.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribePrefixLists.html AWS API Reference> for DescribePrefixLists.
 module Network.AWS.EC2.DescribePrefixLists
     (
     -- * Creating a Request
@@ -123,7 +121,7 @@
 instance AWSRequest DescribePrefixLists where
         type Rs DescribePrefixLists =
              DescribePrefixListsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -132,6 +130,8 @@
                      (x .@? "prefixListSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribePrefixLists
 
 instance ToHeaders DescribePrefixLists where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeRegions.hs b/gen/Network/AWS/EC2/DescribeRegions.hs
--- a/gen/Network/AWS/EC2/DescribeRegions.hs
+++ b/gen/Network/AWS/EC2/DescribeRegions.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeRegions
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 --
 -- For a list of the regions supported by Amazon EC2, see
 -- <http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region Regions and Endpoints>.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeRegions.html AWS API Reference> for DescribeRegions.
 module Network.AWS.EC2.DescribeRegions
     (
     -- * Creating a Request
@@ -97,7 +95,7 @@
 
 instance AWSRequest DescribeRegions where
         type Rs DescribeRegions = DescribeRegionsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -105,6 +103,8 @@
                    (x .@? "regionInfo" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeRegions
 
 instance ToHeaders DescribeRegions where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeReservedInstances.hs b/gen/Network/AWS/EC2/DescribeReservedInstances.hs
--- a/gen/Network/AWS/EC2/DescribeReservedInstances.hs
+++ b/gen/Network/AWS/EC2/DescribeReservedInstances.hs
@@ -12,19 +12,17 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeReservedInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes one or more of the Reserved instances that you purchased.
+-- Describes one or more of the Reserved Instances that you purchased.
 --
--- For more information about Reserved instances, see
+-- For more information about Reserved Instances, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html Reserved Instances>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeReservedInstances.html AWS API Reference> for DescribeReservedInstances.
 module Network.AWS.EC2.DescribeReservedInstances
     (
     -- * Creating a Request
@@ -83,21 +81,21 @@
 -- | One or more filters.
 --
 -- -   'availability-zone' - The Availability Zone where the Reserved
---     instance can be used.
+--     Instance can be used.
 --
--- -   'duration' - The duration of the Reserved instance (one year or
+-- -   'duration' - The duration of the Reserved Instance (one year or
 --     three years), in seconds ('31536000' | '94608000').
 --
--- -   'end' - The time when the Reserved instance expires (for example,
+-- -   'end' - The time when the Reserved Instance expires (for example,
 --     2015-08-07T11:54:42.000Z).
 --
--- -   'fixed-price' - The purchase price of the Reserved instance (for
+-- -   'fixed-price' - The purchase price of the Reserved Instance (for
 --     example, 9800.0).
 --
 -- -   'instance-type' - The instance type that is covered by the
 --     reservation.
 --
--- -   'product-description' - The Reserved instance product platform
+-- -   'product-description' - The Reserved Instance product platform
 --     description. Instances that include '(Amazon VPC)' in the product
 --     platform description will only be displayed to EC2-Classic account
 --     holders and are for use with Amazon VPC ('Linux\/UNIX' |
@@ -111,12 +109,12 @@
 --     'Windows with SQL Server Enterprise' |
 --     'Windows with SQL Server Enterprise (Amazon VPC)').
 --
--- -   'reserved-instances-id' - The ID of the Reserved instance.
+-- -   'reserved-instances-id' - The ID of the Reserved Instance.
 --
--- -   'start' - The time at which the Reserved instance purchase request
+-- -   'start' - The time at which the Reserved Instance purchase request
 --     was placed (for example, 2014-08-07T11:54:42.000Z).
 --
--- -   'state' - The state of the Reserved instance ('payment-pending' |
+-- -   'state' - The state of the Reserved Instance ('payment-pending' |
 --     'active' | 'payment-failed' | 'retired').
 --
 -- -   'tag':/key/=/value/ - The key\/value combination of a tag assigned
@@ -133,22 +131,22 @@
 -- -   'tag-value' - The value of a tag assigned to the resource. This
 --     filter is independent of the 'tag-key' filter.
 --
--- -   'usage-price' - The usage price of the Reserved instance, per hour
+-- -   'usage-price' - The usage price of the Reserved Instance, per hour
 --     (for example, 0.84).
 --
 driFilters :: Lens' DescribeReservedInstances [Filter]
 driFilters = lens _driFilters (\ s a -> s{_driFilters = a}) . _Default . _Coerce;
 
--- | One or more Reserved instance IDs.
+-- | One or more Reserved Instance IDs.
 --
--- Default: Describes all your Reserved instances, or only those otherwise
+-- Default: Describes all your Reserved Instances, or only those otherwise
 -- specified.
 driReservedInstancesIds :: Lens' DescribeReservedInstances [Text]
 driReservedInstancesIds = lens _driReservedInstancesIds (\ s a -> s{_driReservedInstancesIds = a}) . _Default . _Coerce;
 
--- | The Reserved instance offering type. If you are using tools that predate
+-- | The Reserved Instance offering type. If you are using tools that predate
 -- the 2011-11-01 API version, you only have access to the
--- 'Medium Utilization' Reserved instance offering type.
+-- 'Medium Utilization' Reserved Instance offering type.
 driOfferingType :: Lens' DescribeReservedInstances (Maybe OfferingTypeValues)
 driOfferingType = lens _driOfferingType (\ s a -> s{_driOfferingType = a});
 
@@ -162,7 +160,7 @@
 instance AWSRequest DescribeReservedInstances where
         type Rs DescribeReservedInstances =
              DescribeReservedInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -171,6 +169,8 @@
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeReservedInstances
+
 instance ToHeaders DescribeReservedInstances where
         toHeaders = const mempty
 
@@ -212,7 +212,7 @@
     , _drirsResponseStatus = pResponseStatus_
     }
 
--- | A list of Reserved instances.
+-- | A list of Reserved Instances.
 drirsReservedInstances :: Lens' DescribeReservedInstancesResponse [ReservedInstances]
 drirsReservedInstances = lens _drirsReservedInstances (\ s a -> s{_drirsReservedInstances = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/EC2/DescribeReservedInstancesListings.hs b/gen/Network/AWS/EC2/DescribeReservedInstancesListings.hs
--- a/gen/Network/AWS/EC2/DescribeReservedInstancesListings.hs
+++ b/gen/Network/AWS/EC2/DescribeReservedInstancesListings.hs
@@ -12,38 +12,36 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeReservedInstancesListings
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes your account\'s Reserved instance listings in the Reserved
+-- Describes your account\'s Reserved Instance listings in the Reserved
 -- Instance Marketplace.
 --
 -- The Reserved Instance Marketplace matches sellers who want to resell
--- Reserved instance capacity that they no longer need with buyers who want
--- to purchase additional capacity. Reserved instances bought and sold
+-- Reserved Instance capacity that they no longer need with buyers who want
+-- to purchase additional capacity. Reserved Instances bought and sold
 -- through the Reserved Instance Marketplace work like any other Reserved
 -- Instances.
 --
--- As a seller, you choose to list some or all of your Reserved instances,
+-- As a seller, you choose to list some or all of your Reserved Instances,
 -- and you specify the upfront price to receive for them. Your Reserved
--- instances are then listed in the Reserved Instance Marketplace and are
+-- Instances are then listed in the Reserved Instance Marketplace and are
 -- available for purchase.
 --
--- As a buyer, you specify the configuration of the Reserved instance to
+-- As a buyer, you specify the configuration of the Reserved Instance to
 -- purchase, and the Marketplace matches what you\'re searching for with
 -- what\'s available. The Marketplace first sells the lowest priced
--- Reserved instances to you, and continues to sell available Reserved
+-- Reserved Instances to you, and continues to sell available Reserved
 -- Instance listings to you until your demand is met. You are charged based
 -- on the total price of all of the listings that you purchase.
 --
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeReservedInstancesListings.html AWS API Reference> for DescribeReservedInstancesListings.
 module Network.AWS.EC2.DescribeReservedInstancesListings
     (
     -- * Creating a Request
@@ -96,12 +94,12 @@
 
 -- | One or more filters.
 --
--- -   'reserved-instances-id' - The ID of the Reserved instances.
+-- -   'reserved-instances-id' - The ID of the Reserved Instances.
 --
--- -   'reserved-instances-listing-id' - The ID of the Reserved instances
+-- -   'reserved-instances-listing-id' - The ID of the Reserved Instances
 --     listing.
 --
--- -   'status' - The status of the Reserved instance listing ('pending' |
+-- -   'status' - The status of the Reserved Instance listing ('pending' |
 --     'active' | 'cancelled' | 'closed').
 --
 -- -   'status-message' - The reason for the status.
@@ -109,11 +107,11 @@
 drilFilters :: Lens' DescribeReservedInstancesListings [Filter]
 drilFilters = lens _drilFilters (\ s a -> s{_drilFilters = a}) . _Default . _Coerce;
 
--- | One or more Reserved instance IDs.
+-- | One or more Reserved Instance IDs.
 drilReservedInstancesId :: Lens' DescribeReservedInstancesListings (Maybe Text)
 drilReservedInstancesId = lens _drilReservedInstancesId (\ s a -> s{_drilReservedInstancesId = a});
 
--- | One or more Reserved instance Listing IDs.
+-- | One or more Reserved Instance listing IDs.
 drilReservedInstancesListingId :: Lens' DescribeReservedInstancesListings (Maybe Text)
 drilReservedInstancesListingId = lens _drilReservedInstancesListingId (\ s a -> s{_drilReservedInstancesListingId = a});
 
@@ -121,7 +119,7 @@
          where
         type Rs DescribeReservedInstancesListings =
              DescribeReservedInstancesListingsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -130,6 +128,8 @@
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeReservedInstancesListings
+
 instance ToHeaders DescribeReservedInstancesListings
          where
         toHeaders = const mempty
@@ -172,7 +172,7 @@
     , _drilrsResponseStatus = pResponseStatus_
     }
 
--- | Information about the Reserved instance listing.
+-- | Information about the Reserved Instance listing.
 drilrsReservedInstancesListings :: Lens' DescribeReservedInstancesListingsResponse [ReservedInstancesListing]
 drilrsReservedInstancesListings = lens _drilrsReservedInstancesListings (\ s a -> s{_drilrsReservedInstancesListings = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/EC2/DescribeReservedInstancesModifications.hs b/gen/Network/AWS/EC2/DescribeReservedInstancesModifications.hs
--- a/gen/Network/AWS/EC2/DescribeReservedInstancesModifications.hs
+++ b/gen/Network/AWS/EC2/DescribeReservedInstancesModifications.hs
@@ -12,14 +12,14 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeReservedInstancesModifications
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes the modifications made to your Reserved instances. If no
--- parameter is specified, information about all your Reserved instances
+-- Describes the modifications made to your Reserved Instances. If no
+-- parameter is specified, information about all your Reserved Instances
 -- modification requests is returned. If a modification ID is specified,
 -- only information about the specific modification is returned.
 --
@@ -27,8 +27,6 @@
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html Modifying Reserved Instances>
 -- in the Amazon Elastic Compute Cloud User Guide.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeReservedInstancesModifications.html AWS API Reference> for DescribeReservedInstancesModifications.
---
 -- This operation returns paginated results.
 module Network.AWS.EC2.DescribeReservedInstancesModifications
     (
@@ -91,28 +89,28 @@
 -- -   'effective-date' - The time when the modification becomes effective.
 --
 -- -   'modification-result.reserved-instances-id' - The ID for the
---     Reserved instances created as part of the modification request. This
+--     Reserved Instances created as part of the modification request. This
 --     ID is only available when the status of the modification is
 --     'fulfilled'.
 --
 -- -   'modification-result.target-configuration.availability-zone' - The
---     Availability Zone for the new Reserved instances.
+--     Availability Zone for the new Reserved Instances.
 --
 -- -   'modification-result.target-configuration.instance-count ' - The
---     number of new Reserved instances.
+--     number of new Reserved Instances.
 --
 -- -   'modification-result.target-configuration.instance-type' - The
---     instance type of the new Reserved instances.
+--     instance type of the new Reserved Instances.
 --
 -- -   'modification-result.target-configuration.platform' - The network
---     platform of the new Reserved instances ('EC2-Classic' | 'EC2-VPC').
+--     platform of the new Reserved Instances ('EC2-Classic' | 'EC2-VPC').
 --
--- -   'reserved-instances-id' - The ID of the Reserved instances modified.
+-- -   'reserved-instances-id' - The ID of the Reserved Instances modified.
 --
 -- -   'reserved-instances-modification-id' - The ID of the modification
 --     request.
 --
--- -   'status' - The status of the Reserved instances modification request
+-- -   'status' - The status of the Reserved Instances modification request
 --     ('processing' | 'fulfilled' | 'failed').
 --
 -- -   'status-message' - The reason for the status.
@@ -144,7 +142,7 @@
          DescribeReservedInstancesModifications where
         type Rs DescribeReservedInstancesModifications =
              DescribeReservedInstancesModificationsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -154,6 +152,9 @@
                         >>= may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable
+         DescribeReservedInstancesModifications
+
 instance ToHeaders
          DescribeReservedInstancesModifications where
         toHeaders = const mempty
@@ -207,7 +208,7 @@
 drimrsNextToken :: Lens' DescribeReservedInstancesModificationsResponse (Maybe Text)
 drimrsNextToken = lens _drimrsNextToken (\ s a -> s{_drimrsNextToken = a});
 
--- | The Reserved instance modification information.
+-- | The Reserved Instance modification information.
 drimrsReservedInstancesModifications :: Lens' DescribeReservedInstancesModificationsResponse [ReservedInstancesModification]
 drimrsReservedInstancesModifications = lens _drimrsReservedInstancesModifications (\ s a -> s{_drimrsReservedInstancesModifications = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/EC2/DescribeReservedInstancesOfferings.hs b/gen/Network/AWS/EC2/DescribeReservedInstancesOfferings.hs
--- a/gen/Network/AWS/EC2/DescribeReservedInstancesOfferings.hs
+++ b/gen/Network/AWS/EC2/DescribeReservedInstancesOfferings.hs
@@ -12,28 +12,26 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeReservedInstancesOfferings
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Describes Reserved instance offerings that are available for purchase.
--- With Reserved instances, you purchase the right to launch instances for
+-- Describes Reserved Instance offerings that are available for purchase.
+-- With Reserved Instances, you purchase the right to launch instances for
 -- a period of time. During that time period, you do not receive
 -- insufficient capacity errors, and you pay a lower usage rate than the
 -- rate charged for On-Demand instances for the actual time used.
 --
--- If you have listed your own Reserved instances for sale in the Reserved
+-- If you have listed your own Reserved Instances for sale in the Reserved
 -- Instance Marketplace, they will be excluded from these results. This is
--- to ensure that you do not purchase your own Reserved instances.
+-- to ensure that you do not purchase your own Reserved Instances.
 --
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeReservedInstancesOfferings.html AWS API Reference> for DescribeReservedInstancesOfferings.
---
 -- This operation returns paginated results.
 module Network.AWS.EC2.DescribeReservedInstancesOfferings
     (
@@ -149,7 +147,7 @@
 drioMaxDuration :: Lens' DescribeReservedInstancesOfferings (Maybe Integer)
 drioMaxDuration = lens _drioMaxDuration (\ s a -> s{_drioMaxDuration = a});
 
--- | The Reserved instance product platform description. Instances that
+-- | The Reserved Instance product platform description. Instances that
 -- include '(Amazon VPC)' in the description are for use with Amazon VPC.
 drioProductDescription :: Lens' DescribeReservedInstancesOfferings (Maybe RIProductDescription)
 drioProductDescription = lens _drioProductDescription (\ s a -> s{_drioProductDescription = a});
@@ -157,12 +155,12 @@
 -- | One or more filters.
 --
 -- -   'availability-zone' - The Availability Zone where the Reserved
---     instance can be used.
+--     Instance can be used.
 --
--- -   'duration' - The duration of the Reserved instance (for example, one
+-- -   'duration' - The duration of the Reserved Instance (for example, one
 --     year or three years), in seconds ('31536000' | '94608000').
 --
--- -   'fixed-price' - The purchase price of the Reserved instance (for
+-- -   'fixed-price' - The purchase price of the Reserved Instance (for
 --     example, 9800.0).
 --
 -- -   'instance-type' - The instance type that is covered by the
@@ -173,7 +171,7 @@
 --     default behavior, all offerings from both AWS and the Reserved
 --     Instance Marketplace are listed.
 --
--- -   'product-description' - The Reserved instance product platform
+-- -   'product-description' - The Reserved Instance product platform
 --     description. Instances that include '(Amazon VPC)' in the product
 --     platform description will only be displayed to EC2-Classic account
 --     holders and are for use with Amazon VPC. ('Linux\/UNIX' |
@@ -187,10 +185,10 @@
 --     'Windows with SQL Server Enterprise' |
 --     'Windows with SQL Server Enterprise (Amazon VPC)')
 --
--- -   'reserved-instances-offering-id' - The Reserved instances\' offering
+-- -   'reserved-instances-offering-id' - The Reserved Instances offering
 --     ID.
 --
--- -   'usage-price' - The usage price of the Reserved instance, per hour
+-- -   'usage-price' - The usage price of the Reserved Instance, per hour
 --     (for example, 0.84).
 --
 drioFilters :: Lens' DescribeReservedInstancesOfferings [Filter]
@@ -218,23 +216,23 @@
 drioMinDuration :: Lens' DescribeReservedInstancesOfferings (Maybe Integer)
 drioMinDuration = lens _drioMinDuration (\ s a -> s{_drioMinDuration = a});
 
--- | The Availability Zone in which the Reserved instance can be used.
+-- | The Availability Zone in which the Reserved Instance can be used.
 drioAvailabilityZone :: Lens' DescribeReservedInstancesOfferings (Maybe Text)
 drioAvailabilityZone = lens _drioAvailabilityZone (\ s a -> s{_drioAvailabilityZone = a});
 
--- | The Reserved instance offering type. If you are using tools that predate
+-- | The Reserved Instance offering type. If you are using tools that predate
 -- the 2011-11-01 API version, you only have access to the
--- 'Medium Utilization' Reserved instance offering type.
+-- 'Medium Utilization' Reserved Instance offering type.
 drioOfferingType :: Lens' DescribeReservedInstancesOfferings (Maybe OfferingTypeValues)
 drioOfferingType = lens _drioOfferingType (\ s a -> s{_drioOfferingType = a});
 
--- | One or more Reserved instances offering IDs.
+-- | One or more Reserved Instances offering IDs.
 drioReservedInstancesOfferingIds :: Lens' DescribeReservedInstancesOfferings [Text]
 drioReservedInstancesOfferingIds = lens _drioReservedInstancesOfferingIds (\ s a -> s{_drioReservedInstancesOfferingIds = a}) . _Default . _Coerce;
 
 -- | The tenancy of the instances covered by the reservation. A Reserved
--- instance with a tenancy of 'dedicated' is applied to instances that run
--- in a VPC on single-tenant hardware (i.e., Dedicated instances).
+-- Instance with a tenancy of 'dedicated' is applied to instances that run
+-- in a VPC on single-tenant hardware (i.e., Dedicated Instances).
 --
 -- Default: 'default'
 drioInstanceTenancy :: Lens' DescribeReservedInstancesOfferings (Maybe Tenancy)
@@ -275,7 +273,7 @@
          DescribeReservedInstancesOfferings where
         type Rs DescribeReservedInstancesOfferings =
              DescribeReservedInstancesOfferingsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -285,6 +283,8 @@
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable DescribeReservedInstancesOfferings
+
 instance ToHeaders DescribeReservedInstancesOfferings
          where
         toHeaders = const mempty
@@ -348,7 +348,7 @@
 driorsNextToken :: Lens' DescribeReservedInstancesOfferingsResponse (Maybe Text)
 driorsNextToken = lens _driorsNextToken (\ s a -> s{_driorsNextToken = a});
 
--- | A list of Reserved instances offerings.
+-- | A list of Reserved Instances offerings.
 driorsReservedInstancesOfferings :: Lens' DescribeReservedInstancesOfferingsResponse [ReservedInstancesOffering]
 driorsReservedInstancesOfferings = lens _driorsReservedInstancesOfferings (\ s a -> s{_driorsReservedInstancesOfferings = a}) . _Default . _Coerce;
 
diff --git a/gen/Network/AWS/EC2/DescribeRouteTables.hs b/gen/Network/AWS/EC2/DescribeRouteTables.hs
--- a/gen/Network/AWS/EC2/DescribeRouteTables.hs
+++ b/gen/Network/AWS/EC2/DescribeRouteTables.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeRouteTables
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,8 +28,6 @@
 -- For more information about route tables, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeRouteTables.html AWS API Reference> for DescribeRouteTables.
 module Network.AWS.EC2.DescribeRouteTables
     (
     -- * Creating a Request
@@ -161,7 +159,7 @@
 instance AWSRequest DescribeRouteTables where
         type Rs DescribeRouteTables =
              DescribeRouteTablesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -169,6 +167,8 @@
                    (x .@? "routeTableSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeRouteTables
 
 instance ToHeaders DescribeRouteTables where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeScheduledInstanceAvailability.hs b/gen/Network/AWS/EC2/DescribeScheduledInstanceAvailability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/EC2/DescribeScheduledInstanceAvailability.hs
@@ -0,0 +1,249 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.EC2.DescribeScheduledInstanceAvailability
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Finds available schedules that meet the specified criteria.
+--
+-- You can search for an available schedule no more than 3 months in
+-- advance. You must meet the minimum required duration of 1,200 hours per
+-- year. For example, the minimum daily schedule is 4 hours, the minimum
+-- weekly schedule is 24 hours, and the minimum monthly schedule is 100
+-- hours.
+--
+-- After you find a schedule that meets your needs, call
+-- < PurchaseScheduledInstances> to purchase Scheduled Instances with that
+-- schedule.
+module Network.AWS.EC2.DescribeScheduledInstanceAvailability
+    (
+    -- * Creating a Request
+      describeScheduledInstanceAvailability
+    , DescribeScheduledInstanceAvailability
+    -- * Request Lenses
+    , dsiaMinSlotDurationInHours
+    , dsiaFilters
+    , dsiaNextToken
+    , dsiaMaxSlotDurationInHours
+    , dsiaDryRun
+    , dsiaMaxResults
+    , dsiaRecurrence
+    , dsiaFirstSlotStartTimeRange
+
+    -- * Destructuring the Response
+    , describeScheduledInstanceAvailabilityResponse
+    , DescribeScheduledInstanceAvailabilityResponse
+    -- * Response Lenses
+    , dsiarsScheduledInstanceAvailabilitySet
+    , dsiarsNextToken
+    , dsiarsResponseStatus
+    ) where
+
+import           Network.AWS.EC2.Types
+import           Network.AWS.EC2.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Contains the parameters for DescribeScheduledInstanceAvailability.
+--
+-- /See:/ 'describeScheduledInstanceAvailability' smart constructor.
+data DescribeScheduledInstanceAvailability = DescribeScheduledInstanceAvailability'
+    { _dsiaMinSlotDurationInHours  :: !(Maybe Int)
+    , _dsiaFilters                 :: !(Maybe [Filter])
+    , _dsiaNextToken               :: !(Maybe Text)
+    , _dsiaMaxSlotDurationInHours  :: !(Maybe Int)
+    , _dsiaDryRun                  :: !(Maybe Bool)
+    , _dsiaMaxResults              :: !(Maybe Int)
+    , _dsiaRecurrence              :: !ScheduledInstanceRecurrenceRequest
+    , _dsiaFirstSlotStartTimeRange :: !SlotDateTimeRangeRequest
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeScheduledInstanceAvailability' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsiaMinSlotDurationInHours'
+--
+-- * 'dsiaFilters'
+--
+-- * 'dsiaNextToken'
+--
+-- * 'dsiaMaxSlotDurationInHours'
+--
+-- * 'dsiaDryRun'
+--
+-- * 'dsiaMaxResults'
+--
+-- * 'dsiaRecurrence'
+--
+-- * 'dsiaFirstSlotStartTimeRange'
+describeScheduledInstanceAvailability
+    :: ScheduledInstanceRecurrenceRequest -- ^ 'dsiaRecurrence'
+    -> SlotDateTimeRangeRequest -- ^ 'dsiaFirstSlotStartTimeRange'
+    -> DescribeScheduledInstanceAvailability
+describeScheduledInstanceAvailability pRecurrence_ pFirstSlotStartTimeRange_ =
+    DescribeScheduledInstanceAvailability'
+    { _dsiaMinSlotDurationInHours = Nothing
+    , _dsiaFilters = Nothing
+    , _dsiaNextToken = Nothing
+    , _dsiaMaxSlotDurationInHours = Nothing
+    , _dsiaDryRun = Nothing
+    , _dsiaMaxResults = Nothing
+    , _dsiaRecurrence = pRecurrence_
+    , _dsiaFirstSlotStartTimeRange = pFirstSlotStartTimeRange_
+    }
+
+-- | The minimum available duration, in hours. The minimum required duration
+-- is 1,200 hours per year. For example, the minimum daily schedule is 4
+-- hours, the minimum weekly schedule is 24 hours, and the minimum monthly
+-- schedule is 100 hours.
+dsiaMinSlotDurationInHours :: Lens' DescribeScheduledInstanceAvailability (Maybe Int)
+dsiaMinSlotDurationInHours = lens _dsiaMinSlotDurationInHours (\ s a -> s{_dsiaMinSlotDurationInHours = a});
+
+-- | One or more filters.
+--
+-- -   'availability-zone' - The Availability Zone (for example,
+--     'us-west-2a').
+--
+-- -   'instance-type' - The instance type (for example, 'c4.large').
+--
+-- -   'network-platform' - The network platform ('EC2-Classic' or
+--     'EC2-VPC').
+--
+-- -   'platform' - The platform ('Linux\/UNIX' or 'Windows').
+--
+dsiaFilters :: Lens' DescribeScheduledInstanceAvailability [Filter]
+dsiaFilters = lens _dsiaFilters (\ s a -> s{_dsiaFilters = a}) . _Default . _Coerce;
+
+-- | The token for the next set of results.
+dsiaNextToken :: Lens' DescribeScheduledInstanceAvailability (Maybe Text)
+dsiaNextToken = lens _dsiaNextToken (\ s a -> s{_dsiaNextToken = a});
+
+-- | The maximum available duration, in hours. This value must be greater
+-- than 'MinSlotDurationInHours' and less than 1,720.
+dsiaMaxSlotDurationInHours :: Lens' DescribeScheduledInstanceAvailability (Maybe Int)
+dsiaMaxSlotDurationInHours = lens _dsiaMaxSlotDurationInHours (\ s a -> s{_dsiaMaxSlotDurationInHours = a});
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is 'DryRunOperation'.
+-- Otherwise, it is 'UnauthorizedOperation'.
+dsiaDryRun :: Lens' DescribeScheduledInstanceAvailability (Maybe Bool)
+dsiaDryRun = lens _dsiaDryRun (\ s a -> s{_dsiaDryRun = a});
+
+-- | The maximum number of results to return in a single call. This value can
+-- be between 5 and 300. The default value is 300. To retrieve the
+-- remaining results, make another call with the returned 'NextToken'
+-- value.
+dsiaMaxResults :: Lens' DescribeScheduledInstanceAvailability (Maybe Int)
+dsiaMaxResults = lens _dsiaMaxResults (\ s a -> s{_dsiaMaxResults = a});
+
+-- | The schedule recurrence.
+dsiaRecurrence :: Lens' DescribeScheduledInstanceAvailability ScheduledInstanceRecurrenceRequest
+dsiaRecurrence = lens _dsiaRecurrence (\ s a -> s{_dsiaRecurrence = a});
+
+-- | The time period for the first schedule to start.
+dsiaFirstSlotStartTimeRange :: Lens' DescribeScheduledInstanceAvailability SlotDateTimeRangeRequest
+dsiaFirstSlotStartTimeRange = lens _dsiaFirstSlotStartTimeRange (\ s a -> s{_dsiaFirstSlotStartTimeRange = a});
+
+instance AWSRequest
+         DescribeScheduledInstanceAvailability where
+        type Rs DescribeScheduledInstanceAvailability =
+             DescribeScheduledInstanceAvailabilityResponse
+        request = postQuery ec2
+        response
+          = receiveXML
+              (\ s h x ->
+                 DescribeScheduledInstanceAvailabilityResponse' <$>
+                   (x .@? "scheduledInstanceAvailabilitySet" .!@ mempty
+                      >>= may (parseXMLList "item"))
+                     <*> (x .@? "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable
+         DescribeScheduledInstanceAvailability
+
+instance ToHeaders
+         DescribeScheduledInstanceAvailability where
+        toHeaders = const mempty
+
+instance ToPath DescribeScheduledInstanceAvailability
+         where
+        toPath = const "/"
+
+instance ToQuery
+         DescribeScheduledInstanceAvailability where
+        toQuery DescribeScheduledInstanceAvailability'{..}
+          = mconcat
+              ["Action" =:
+                 ("DescribeScheduledInstanceAvailability" ::
+                    ByteString),
+               "Version" =: ("2015-10-01" :: ByteString),
+               "MinSlotDurationInHours" =:
+                 _dsiaMinSlotDurationInHours,
+               toQuery (toQueryList "Filter" <$> _dsiaFilters),
+               "NextToken" =: _dsiaNextToken,
+               "MaxSlotDurationInHours" =:
+                 _dsiaMaxSlotDurationInHours,
+               "DryRun" =: _dsiaDryRun,
+               "MaxResults" =: _dsiaMaxResults,
+               "Recurrence" =: _dsiaRecurrence,
+               "FirstSlotStartTimeRange" =:
+                 _dsiaFirstSlotStartTimeRange]
+
+-- | Contains the output of DescribeScheduledInstanceAvailability.
+--
+-- /See:/ 'describeScheduledInstanceAvailabilityResponse' smart constructor.
+data DescribeScheduledInstanceAvailabilityResponse = DescribeScheduledInstanceAvailabilityResponse'
+    { _dsiarsScheduledInstanceAvailabilitySet :: !(Maybe [ScheduledInstanceAvailability])
+    , _dsiarsNextToken                        :: !(Maybe Text)
+    , _dsiarsResponseStatus                   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeScheduledInstanceAvailabilityResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsiarsScheduledInstanceAvailabilitySet'
+--
+-- * 'dsiarsNextToken'
+--
+-- * 'dsiarsResponseStatus'
+describeScheduledInstanceAvailabilityResponse
+    :: Int -- ^ 'dsiarsResponseStatus'
+    -> DescribeScheduledInstanceAvailabilityResponse
+describeScheduledInstanceAvailabilityResponse pResponseStatus_ =
+    DescribeScheduledInstanceAvailabilityResponse'
+    { _dsiarsScheduledInstanceAvailabilitySet = Nothing
+    , _dsiarsNextToken = Nothing
+    , _dsiarsResponseStatus = pResponseStatus_
+    }
+
+-- | Information about the available Scheduled Instances.
+dsiarsScheduledInstanceAvailabilitySet :: Lens' DescribeScheduledInstanceAvailabilityResponse [ScheduledInstanceAvailability]
+dsiarsScheduledInstanceAvailabilitySet = lens _dsiarsScheduledInstanceAvailabilitySet (\ s a -> s{_dsiarsScheduledInstanceAvailabilitySet = a}) . _Default . _Coerce;
+
+-- | The token required to retrieve the next set of results. This value is
+-- 'null' when there are no more results to return.
+dsiarsNextToken :: Lens' DescribeScheduledInstanceAvailabilityResponse (Maybe Text)
+dsiarsNextToken = lens _dsiarsNextToken (\ s a -> s{_dsiarsNextToken = a});
+
+-- | The response status code.
+dsiarsResponseStatus :: Lens' DescribeScheduledInstanceAvailabilityResponse Int
+dsiarsResponseStatus = lens _dsiarsResponseStatus (\ s a -> s{_dsiarsResponseStatus = a});
diff --git a/gen/Network/AWS/EC2/DescribeScheduledInstances.hs b/gen/Network/AWS/EC2/DescribeScheduledInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/EC2/DescribeScheduledInstances.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.EC2.DescribeScheduledInstances
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes one or more of your Scheduled Instances.
+module Network.AWS.EC2.DescribeScheduledInstances
+    (
+    -- * Creating a Request
+      describeScheduledInstances
+    , DescribeScheduledInstances
+    -- * Request Lenses
+    , dsiFilters
+    , dsiSlotStartTimeRange
+    , dsiNextToken
+    , dsiScheduledInstanceIds
+    , dsiDryRun
+    , dsiMaxResults
+
+    -- * Destructuring the Response
+    , describeScheduledInstancesResponse
+    , DescribeScheduledInstancesResponse
+    -- * Response Lenses
+    , dsirsNextToken
+    , dsirsScheduledInstanceSet
+    , dsirsResponseStatus
+    ) where
+
+import           Network.AWS.EC2.Types
+import           Network.AWS.EC2.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Contains the parameters for DescribeScheduledInstances.
+--
+-- /See:/ 'describeScheduledInstances' smart constructor.
+data DescribeScheduledInstances = DescribeScheduledInstances'
+    { _dsiFilters              :: !(Maybe [Filter])
+    , _dsiSlotStartTimeRange   :: !(Maybe SlotStartTimeRangeRequest)
+    , _dsiNextToken            :: !(Maybe Text)
+    , _dsiScheduledInstanceIds :: !(Maybe [Text])
+    , _dsiDryRun               :: !(Maybe Bool)
+    , _dsiMaxResults           :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeScheduledInstances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsiFilters'
+--
+-- * 'dsiSlotStartTimeRange'
+--
+-- * 'dsiNextToken'
+--
+-- * 'dsiScheduledInstanceIds'
+--
+-- * 'dsiDryRun'
+--
+-- * 'dsiMaxResults'
+describeScheduledInstances
+    :: DescribeScheduledInstances
+describeScheduledInstances =
+    DescribeScheduledInstances'
+    { _dsiFilters = Nothing
+    , _dsiSlotStartTimeRange = Nothing
+    , _dsiNextToken = Nothing
+    , _dsiScheduledInstanceIds = Nothing
+    , _dsiDryRun = Nothing
+    , _dsiMaxResults = Nothing
+    }
+
+-- | One or more filters.
+--
+-- -   'availability-zone' - The Availability Zone (for example,
+--     'us-west-2a').
+--
+-- -   'instance-type' - The instance type (for example, 'c4.large').
+--
+-- -   'network-platform' - The network platform ('EC2-Classic' or
+--     'EC2-VPC').
+--
+-- -   'platform' - The platform ('Linux\/UNIX' or 'Windows').
+--
+dsiFilters :: Lens' DescribeScheduledInstances [Filter]
+dsiFilters = lens _dsiFilters (\ s a -> s{_dsiFilters = a}) . _Default . _Coerce;
+
+-- | The time period for the first schedule to start.
+dsiSlotStartTimeRange :: Lens' DescribeScheduledInstances (Maybe SlotStartTimeRangeRequest)
+dsiSlotStartTimeRange = lens _dsiSlotStartTimeRange (\ s a -> s{_dsiSlotStartTimeRange = a});
+
+-- | The token for the next set of results.
+dsiNextToken :: Lens' DescribeScheduledInstances (Maybe Text)
+dsiNextToken = lens _dsiNextToken (\ s a -> s{_dsiNextToken = a});
+
+-- | One or more Scheduled Instance IDs.
+dsiScheduledInstanceIds :: Lens' DescribeScheduledInstances [Text]
+dsiScheduledInstanceIds = lens _dsiScheduledInstanceIds (\ s a -> s{_dsiScheduledInstanceIds = a}) . _Default . _Coerce;
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is 'DryRunOperation'.
+-- Otherwise, it is 'UnauthorizedOperation'.
+dsiDryRun :: Lens' DescribeScheduledInstances (Maybe Bool)
+dsiDryRun = lens _dsiDryRun (\ s a -> s{_dsiDryRun = a});
+
+-- | The maximum number of results to return in a single call. This value can
+-- be between 5 and 300. The default value is 100. To retrieve the
+-- remaining results, make another call with the returned 'NextToken'
+-- value.
+dsiMaxResults :: Lens' DescribeScheduledInstances (Maybe Int)
+dsiMaxResults = lens _dsiMaxResults (\ s a -> s{_dsiMaxResults = a});
+
+instance AWSRequest DescribeScheduledInstances where
+        type Rs DescribeScheduledInstances =
+             DescribeScheduledInstancesResponse
+        request = postQuery ec2
+        response
+          = receiveXML
+              (\ s h x ->
+                 DescribeScheduledInstancesResponse' <$>
+                   (x .@? "nextToken") <*>
+                     (x .@? "scheduledInstanceSet" .!@ mempty >>=
+                        may (parseXMLList "item"))
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeScheduledInstances
+
+instance ToHeaders DescribeScheduledInstances where
+        toHeaders = const mempty
+
+instance ToPath DescribeScheduledInstances where
+        toPath = const "/"
+
+instance ToQuery DescribeScheduledInstances where
+        toQuery DescribeScheduledInstances'{..}
+          = mconcat
+              ["Action" =:
+                 ("DescribeScheduledInstances" :: ByteString),
+               "Version" =: ("2015-10-01" :: ByteString),
+               toQuery (toQueryList "Filter" <$> _dsiFilters),
+               "SlotStartTimeRange" =: _dsiSlotStartTimeRange,
+               "NextToken" =: _dsiNextToken,
+               toQuery
+                 (toQueryList "ScheduledInstanceId" <$>
+                    _dsiScheduledInstanceIds),
+               "DryRun" =: _dsiDryRun,
+               "MaxResults" =: _dsiMaxResults]
+
+-- | Contains the output of DescribeScheduledInstances.
+--
+-- /See:/ 'describeScheduledInstancesResponse' smart constructor.
+data DescribeScheduledInstancesResponse = DescribeScheduledInstancesResponse'
+    { _dsirsNextToken            :: !(Maybe Text)
+    , _dsirsScheduledInstanceSet :: !(Maybe [ScheduledInstance])
+    , _dsirsResponseStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeScheduledInstancesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsirsNextToken'
+--
+-- * 'dsirsScheduledInstanceSet'
+--
+-- * 'dsirsResponseStatus'
+describeScheduledInstancesResponse
+    :: Int -- ^ 'dsirsResponseStatus'
+    -> DescribeScheduledInstancesResponse
+describeScheduledInstancesResponse pResponseStatus_ =
+    DescribeScheduledInstancesResponse'
+    { _dsirsNextToken = Nothing
+    , _dsirsScheduledInstanceSet = Nothing
+    , _dsirsResponseStatus = pResponseStatus_
+    }
+
+-- | The token required to retrieve the next set of results. This value is
+-- 'null' when there are no more results to return.
+dsirsNextToken :: Lens' DescribeScheduledInstancesResponse (Maybe Text)
+dsirsNextToken = lens _dsirsNextToken (\ s a -> s{_dsirsNextToken = a});
+
+-- | Information about the Scheduled Instances.
+dsirsScheduledInstanceSet :: Lens' DescribeScheduledInstancesResponse [ScheduledInstance]
+dsirsScheduledInstanceSet = lens _dsirsScheduledInstanceSet (\ s a -> s{_dsirsScheduledInstanceSet = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dsirsResponseStatus :: Lens' DescribeScheduledInstancesResponse Int
+dsirsResponseStatus = lens _dsirsResponseStatus (\ s a -> s{_dsirsResponseStatus = a});
diff --git a/gen/Network/AWS/EC2/DescribeSecurityGroups.hs b/gen/Network/AWS/EC2/DescribeSecurityGroups.hs
--- a/gen/Network/AWS/EC2/DescribeSecurityGroups.hs
+++ b/gen/Network/AWS/EC2/DescribeSecurityGroups.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSecurityGroups
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,8 +26,6 @@
 -- in the /Amazon Elastic Compute Cloud User Guide/ and
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html Security Groups for Your VPC>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSecurityGroups.html AWS API Reference> for DescribeSecurityGroups.
 module Network.AWS.EC2.DescribeSecurityGroups
     (
     -- * Creating a Request
@@ -155,7 +153,7 @@
 instance AWSRequest DescribeSecurityGroups where
         type Rs DescribeSecurityGroups =
              DescribeSecurityGroupsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -163,6 +161,8 @@
                    (x .@? "securityGroupInfo" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeSecurityGroups
 
 instance ToHeaders DescribeSecurityGroups where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeSnapshotAttribute.hs b/gen/Network/AWS/EC2/DescribeSnapshotAttribute.hs
--- a/gen/Network/AWS/EC2/DescribeSnapshotAttribute.hs
+++ b/gen/Network/AWS/EC2/DescribeSnapshotAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSnapshotAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- For more information about EBS snapshots, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html Amazon EBS Snapshots>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSnapshotAttribute.html AWS API Reference> for DescribeSnapshotAttribute.
 module Network.AWS.EC2.DescribeSnapshotAttribute
     (
     -- * Creating a Request
@@ -98,7 +96,7 @@
 instance AWSRequest DescribeSnapshotAttribute where
         type Rs DescribeSnapshotAttribute =
              DescribeSnapshotAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -110,6 +108,8 @@
                         may (parseXMLList "item"))
                      <*> (x .@? "snapshotId")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeSnapshotAttribute
 
 instance ToHeaders DescribeSnapshotAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeSnapshots.hs b/gen/Network/AWS/EC2/DescribeSnapshots.hs
--- a/gen/Network/AWS/EC2/DescribeSnapshots.hs
+++ b/gen/Network/AWS/EC2/DescribeSnapshots.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSnapshots
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -66,8 +66,6 @@
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html Amazon EBS Snapshots>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSnapshots.html AWS API Reference> for DescribeSnapshots.
---
 -- This operation returns paginated results.
 module Network.AWS.EC2.DescribeSnapshots
     (
@@ -233,7 +231,7 @@
 
 instance AWSRequest DescribeSnapshots where
         type Rs DescribeSnapshots = DescribeSnapshotsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -242,6 +240,8 @@
                      (x .@? "snapshotSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeSnapshots
 
 instance ToHeaders DescribeSnapshots where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeSpotDatafeedSubscription.hs b/gen/Network/AWS/EC2/DescribeSpotDatafeedSubscription.hs
--- a/gen/Network/AWS/EC2/DescribeSpotDatafeedSubscription.hs
+++ b/gen/Network/AWS/EC2/DescribeSpotDatafeedSubscription.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSpotDatafeedSubscription
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Describes the data feed for Spot instances. For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-data-feeds.html Spot Instance Data Feed>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSpotDatafeedSubscription.html AWS API Reference> for DescribeSpotDatafeedSubscription.
 module Network.AWS.EC2.DescribeSpotDatafeedSubscription
     (
     -- * Creating a Request
@@ -76,13 +74,15 @@
          where
         type Rs DescribeSpotDatafeedSubscription =
              DescribeSpotDatafeedSubscriptionResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  DescribeSpotDatafeedSubscriptionResponse' <$>
                    (x .@? "spotDatafeedSubscription") <*>
                      (pure (fromEnum s)))
+
+instance Hashable DescribeSpotDatafeedSubscription
 
 instance ToHeaders DescribeSpotDatafeedSubscription
          where
diff --git a/gen/Network/AWS/EC2/DescribeSpotFleetInstances.hs b/gen/Network/AWS/EC2/DescribeSpotFleetInstances.hs
--- a/gen/Network/AWS/EC2/DescribeSpotFleetInstances.hs
+++ b/gen/Network/AWS/EC2/DescribeSpotFleetInstances.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSpotFleetInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes the running instances for the specified Spot fleet.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSpotFleetInstances.html AWS API Reference> for DescribeSpotFleetInstances.
 module Network.AWS.EC2.DescribeSpotFleetInstances
     (
     -- * Creating a Request
@@ -106,7 +104,7 @@
 instance AWSRequest DescribeSpotFleetInstances where
         type Rs DescribeSpotFleetInstances =
              DescribeSpotFleetInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -116,6 +114,8 @@
                      <*>
                      (x .@? "activeInstanceSet" .!@ mempty >>=
                         parseXMLList "item"))
+
+instance Hashable DescribeSpotFleetInstances
 
 instance ToHeaders DescribeSpotFleetInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeSpotFleetRequestHistory.hs b/gen/Network/AWS/EC2/DescribeSpotFleetRequestHistory.hs
--- a/gen/Network/AWS/EC2/DescribeSpotFleetRequestHistory.hs
+++ b/gen/Network/AWS/EC2/DescribeSpotFleetRequestHistory.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSpotFleetRequestHistory
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- Spot fleet events are delayed by up to 30 seconds before they can be
 -- described. This ensures that you can query by the last evaluated time
 -- and not miss a recorded event.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSpotFleetRequestHistory.html AWS API Reference> for DescribeSpotFleetRequestHistory.
 module Network.AWS.EC2.DescribeSpotFleetRequestHistory
     (
     -- * Creating a Request
@@ -134,7 +132,7 @@
          where
         type Rs DescribeSpotFleetRequestHistory =
              DescribeSpotFleetRequestHistoryResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -146,6 +144,8 @@
                      <*>
                      (x .@? "historyRecordSet" .!@ mempty >>=
                         parseXMLList "item"))
+
+instance Hashable DescribeSpotFleetRequestHistory
 
 instance ToHeaders DescribeSpotFleetRequestHistory
          where
diff --git a/gen/Network/AWS/EC2/DescribeSpotFleetRequests.hs b/gen/Network/AWS/EC2/DescribeSpotFleetRequests.hs
--- a/gen/Network/AWS/EC2/DescribeSpotFleetRequests.hs
+++ b/gen/Network/AWS/EC2/DescribeSpotFleetRequests.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSpotFleetRequests
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes your Spot fleet requests.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSpotFleetRequests.html AWS API Reference> for DescribeSpotFleetRequests.
 module Network.AWS.EC2.DescribeSpotFleetRequests
     (
     -- * Creating a Request
@@ -104,7 +102,7 @@
 instance AWSRequest DescribeSpotFleetRequests where
         type Rs DescribeSpotFleetRequests =
              DescribeSpotFleetRequestsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -112,6 +110,8 @@
                    (x .@? "nextToken") <*> (pure (fromEnum s)) <*>
                      (x .@? "spotFleetRequestConfigSet" .!@ mempty >>=
                         parseXMLList "item"))
+
+instance Hashable DescribeSpotFleetRequests
 
 instance ToHeaders DescribeSpotFleetRequests where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeSpotInstanceRequests.hs b/gen/Network/AWS/EC2/DescribeSpotInstanceRequests.hs
--- a/gen/Network/AWS/EC2/DescribeSpotInstanceRequests.hs
+++ b/gen/Network/AWS/EC2/DescribeSpotInstanceRequests.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSpotInstanceRequests
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,11 +29,9 @@
 -- You can use 'DescribeSpotInstanceRequests' to find a running Spot
 -- instance by examining the response. If the status of the Spot instance
 -- is 'fulfilled', the instance ID appears in the response and contains the
--- identifier of the instance. Alternatively, you can use DescribeInstances
--- with a filter to look for instances where the instance lifecycle is
--- 'spot'.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSpotInstanceRequests.html AWS API Reference> for DescribeSpotInstanceRequests.
+-- identifier of the instance. Alternatively, you can use
+-- < DescribeInstances> with a filter to look for instances where the
+-- instance lifecycle is 'spot'.
 module Network.AWS.EC2.DescribeSpotInstanceRequests
     (
     -- * Creating a Request
@@ -223,7 +221,7 @@
          where
         type Rs DescribeSpotInstanceRequests =
              DescribeSpotInstanceRequestsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -231,6 +229,8 @@
                    (x .@? "spotInstanceRequestSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeSpotInstanceRequests
 
 instance ToHeaders DescribeSpotInstanceRequests where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeSpotPriceHistory.hs b/gen/Network/AWS/EC2/DescribeSpotPriceHistory.hs
--- a/gen/Network/AWS/EC2/DescribeSpotPriceHistory.hs
+++ b/gen/Network/AWS/EC2/DescribeSpotPriceHistory.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSpotPriceHistory
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -30,8 +30,6 @@
 -- that you specified; the response merely indicates the last time that the
 -- price changed.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSpotPriceHistory.html AWS API Reference> for DescribeSpotPriceHistory.
---
 -- This operation returns paginated results.
 module Network.AWS.EC2.DescribeSpotPriceHistory
     (
@@ -192,7 +190,7 @@
 instance AWSRequest DescribeSpotPriceHistory where
         type Rs DescribeSpotPriceHistory =
              DescribeSpotPriceHistoryResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -201,6 +199,8 @@
                      (x .@? "spotPriceHistorySet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeSpotPriceHistory
 
 instance ToHeaders DescribeSpotPriceHistory where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeSubnets.hs b/gen/Network/AWS/EC2/DescribeSubnets.hs
--- a/gen/Network/AWS/EC2/DescribeSubnets.hs
+++ b/gen/Network/AWS/EC2/DescribeSubnets.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeSubnets
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information about subnets, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Subnets.html Your VPC and Subnets>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeSubnets.html AWS API Reference> for DescribeSubnets.
 module Network.AWS.EC2.DescribeSubnets
     (
     -- * Creating a Request
@@ -130,7 +128,7 @@
 
 instance AWSRequest DescribeSubnets where
         type Rs DescribeSubnets = DescribeSubnetsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -138,6 +136,8 @@
                    (x .@? "subnetSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeSubnets
 
 instance ToHeaders DescribeSubnets where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeTags.hs b/gen/Network/AWS/EC2/DescribeTags.hs
--- a/gen/Network/AWS/EC2/DescribeTags.hs
+++ b/gen/Network/AWS/EC2/DescribeTags.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeTags
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html Tagging Your Resources>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeTags.html AWS API Reference> for DescribeTags.
---
 -- This operation returns paginated results.
 module Network.AWS.EC2.DescribeTags
     (
@@ -130,7 +128,7 @@
 
 instance AWSRequest DescribeTags where
         type Rs DescribeTags = DescribeTagsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -139,6 +137,8 @@
                      (x .@? "tagSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeTags
 
 instance ToHeaders DescribeTags where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVPCAttribute.hs b/gen/Network/AWS/EC2/DescribeVPCAttribute.hs
--- a/gen/Network/AWS/EC2/DescribeVPCAttribute.hs
+++ b/gen/Network/AWS/EC2/DescribeVPCAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVPCAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Describes the specified attribute of the specified VPC. You can specify
 -- only one attribute at a time.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVPCAttribute.html AWS API Reference> for DescribeVPCAttribute.
 module Network.AWS.EC2.DescribeVPCAttribute
     (
     -- * Creating a Request
@@ -94,7 +92,7 @@
 instance AWSRequest DescribeVPCAttribute where
         type Rs DescribeVPCAttribute =
              DescribeVPCAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -103,6 +101,8 @@
                      (x .@? "enableDnsSupport")
                      <*> (x .@? "vpcId")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVPCAttribute
 
 instance ToHeaders DescribeVPCAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVPCClassicLink.hs b/gen/Network/AWS/EC2/DescribeVPCClassicLink.hs
--- a/gen/Network/AWS/EC2/DescribeVPCClassicLink.hs
+++ b/gen/Network/AWS/EC2/DescribeVPCClassicLink.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVPCClassicLink
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes the ClassicLink status of one or more VPCs.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVPCClassicLink.html AWS API Reference> for DescribeVPCClassicLink.
 module Network.AWS.EC2.DescribeVPCClassicLink
     (
     -- * Creating a Request
@@ -107,7 +105,7 @@
 instance AWSRequest DescribeVPCClassicLink where
         type Rs DescribeVPCClassicLink =
              DescribeVPCClassicLinkResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -115,6 +113,8 @@
                    (x .@? "vpcSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVPCClassicLink
 
 instance ToHeaders DescribeVPCClassicLink where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVPCClassicLinkDNSSupport.hs b/gen/Network/AWS/EC2/DescribeVPCClassicLinkDNSSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/EC2/DescribeVPCClassicLinkDNSSupport.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the ClassicLink DNS support status of one or more VPCs. If
+-- enabled, the DNS hostname of a linked EC2-Classic instance resolves to
+-- its private IP address when addressed from an instance in the VPC to
+-- which it\'s linked. Similarly, the DNS hostname of an instance in a VPC
+-- resolves to its private IP address when addressed from a linked
+-- EC2-Classic instance. For more information about ClassicLink, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
+-- in the Amazon Elastic Compute Cloud User Guide.
+module Network.AWS.EC2.DescribeVPCClassicLinkDNSSupport
+    (
+    -- * Creating a Request
+      describeVPCClassicLinkDNSSupport
+    , DescribeVPCClassicLinkDNSSupport
+    -- * Request Lenses
+    , dvcldsNextToken
+    , dvcldsVPCIds
+    , dvcldsMaxResults
+
+    -- * Destructuring the Response
+    , describeVPCClassicLinkDNSSupportResponse
+    , DescribeVPCClassicLinkDNSSupportResponse
+    -- * Response Lenses
+    , dvpccldnssrsVPCs
+    , dvpccldnssrsNextToken
+    , dvpccldnssrsResponseStatus
+    ) where
+
+import           Network.AWS.EC2.Types
+import           Network.AWS.EC2.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeVPCClassicLinkDNSSupport' smart constructor.
+data DescribeVPCClassicLinkDNSSupport = DescribeVPCClassicLinkDNSSupport'
+    { _dvcldsNextToken  :: !(Maybe Text)
+    , _dvcldsVPCIds     :: !(Maybe [Text])
+    , _dvcldsMaxResults :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeVPCClassicLinkDNSSupport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvcldsNextToken'
+--
+-- * 'dvcldsVPCIds'
+--
+-- * 'dvcldsMaxResults'
+describeVPCClassicLinkDNSSupport
+    :: DescribeVPCClassicLinkDNSSupport
+describeVPCClassicLinkDNSSupport =
+    DescribeVPCClassicLinkDNSSupport'
+    { _dvcldsNextToken = Nothing
+    , _dvcldsVPCIds = Nothing
+    , _dvcldsMaxResults = Nothing
+    }
+
+-- | The token for the next set of items to return. (You received this token
+-- from a prior call.)
+dvcldsNextToken :: Lens' DescribeVPCClassicLinkDNSSupport (Maybe Text)
+dvcldsNextToken = lens _dvcldsNextToken (\ s a -> s{_dvcldsNextToken = a});
+
+-- | One or more VPC IDs.
+dvcldsVPCIds :: Lens' DescribeVPCClassicLinkDNSSupport [Text]
+dvcldsVPCIds = lens _dvcldsVPCIds (\ s a -> s{_dvcldsVPCIds = a}) . _Default . _Coerce;
+
+-- | The maximum number of items to return for this request. The request
+-- returns a token that you can specify in a subsequent call to get the
+-- next set of results.
+dvcldsMaxResults :: Lens' DescribeVPCClassicLinkDNSSupport (Maybe Natural)
+dvcldsMaxResults = lens _dvcldsMaxResults (\ s a -> s{_dvcldsMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest DescribeVPCClassicLinkDNSSupport
+         where
+        type Rs DescribeVPCClassicLinkDNSSupport =
+             DescribeVPCClassicLinkDNSSupportResponse
+        request = postQuery ec2
+        response
+          = receiveXML
+              (\ s h x ->
+                 DescribeVPCClassicLinkDNSSupportResponse' <$>
+                   (x .@? "vpcs" .!@ mempty >>=
+                      may (parseXMLList "item"))
+                     <*> (x .@? "nextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVPCClassicLinkDNSSupport
+
+instance ToHeaders DescribeVPCClassicLinkDNSSupport
+         where
+        toHeaders = const mempty
+
+instance ToPath DescribeVPCClassicLinkDNSSupport
+         where
+        toPath = const "/"
+
+instance ToQuery DescribeVPCClassicLinkDNSSupport
+         where
+        toQuery DescribeVPCClassicLinkDNSSupport'{..}
+          = mconcat
+              ["Action" =:
+                 ("DescribeVpcClassicLinkDnsSupport" :: ByteString),
+               "Version" =: ("2015-10-01" :: ByteString),
+               "NextToken" =: _dvcldsNextToken,
+               toQuery (toQueryList "VpcIds" <$> _dvcldsVPCIds),
+               "MaxResults" =: _dvcldsMaxResults]
+
+-- | /See:/ 'describeVPCClassicLinkDNSSupportResponse' smart constructor.
+data DescribeVPCClassicLinkDNSSupportResponse = DescribeVPCClassicLinkDNSSupportResponse'
+    { _dvpccldnssrsVPCs           :: !(Maybe [ClassicLinkDNSSupport])
+    , _dvpccldnssrsNextToken      :: !(Maybe Text)
+    , _dvpccldnssrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeVPCClassicLinkDNSSupportResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvpccldnssrsVPCs'
+--
+-- * 'dvpccldnssrsNextToken'
+--
+-- * 'dvpccldnssrsResponseStatus'
+describeVPCClassicLinkDNSSupportResponse
+    :: Int -- ^ 'dvpccldnssrsResponseStatus'
+    -> DescribeVPCClassicLinkDNSSupportResponse
+describeVPCClassicLinkDNSSupportResponse pResponseStatus_ =
+    DescribeVPCClassicLinkDNSSupportResponse'
+    { _dvpccldnssrsVPCs = Nothing
+    , _dvpccldnssrsNextToken = Nothing
+    , _dvpccldnssrsResponseStatus = pResponseStatus_
+    }
+
+-- | Information about the ClassicLink DNS support status of the VPCs.
+dvpccldnssrsVPCs :: Lens' DescribeVPCClassicLinkDNSSupportResponse [ClassicLinkDNSSupport]
+dvpccldnssrsVPCs = lens _dvpccldnssrsVPCs (\ s a -> s{_dvpccldnssrsVPCs = a}) . _Default . _Coerce;
+
+-- | The token to use when requesting the next set of items.
+dvpccldnssrsNextToken :: Lens' DescribeVPCClassicLinkDNSSupportResponse (Maybe Text)
+dvpccldnssrsNextToken = lens _dvpccldnssrsNextToken (\ s a -> s{_dvpccldnssrsNextToken = a});
+
+-- | The response status code.
+dvpccldnssrsResponseStatus :: Lens' DescribeVPCClassicLinkDNSSupportResponse Int
+dvpccldnssrsResponseStatus = lens _dvpccldnssrsResponseStatus (\ s a -> s{_dvpccldnssrsResponseStatus = a});
diff --git a/gen/Network/AWS/EC2/DescribeVPCEndpointServices.hs b/gen/Network/AWS/EC2/DescribeVPCEndpointServices.hs
--- a/gen/Network/AWS/EC2/DescribeVPCEndpointServices.hs
+++ b/gen/Network/AWS/EC2/DescribeVPCEndpointServices.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVPCEndpointServices
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Describes all supported AWS services that can be specified when creating
 -- a VPC endpoint.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVPCEndpointServices.html AWS API Reference> for DescribeVPCEndpointServices.
 module Network.AWS.EC2.DescribeVPCEndpointServices
     (
     -- * Creating a Request
@@ -97,7 +95,7 @@
 instance AWSRequest DescribeVPCEndpointServices where
         type Rs DescribeVPCEndpointServices =
              DescribeVPCEndpointServicesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -106,6 +104,8 @@
                       may (parseXMLList "item"))
                      <*> (x .@? "nextToken")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVPCEndpointServices
 
 instance ToHeaders DescribeVPCEndpointServices where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVPCEndpoints.hs b/gen/Network/AWS/EC2/DescribeVPCEndpoints.hs
--- a/gen/Network/AWS/EC2/DescribeVPCEndpoints.hs
+++ b/gen/Network/AWS/EC2/DescribeVPCEndpoints.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVPCEndpoints
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes one or more of your VPC endpoints.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVPCEndpoints.html AWS API Reference> for DescribeVPCEndpoints.
 module Network.AWS.EC2.DescribeVPCEndpoints
     (
     -- * Creating a Request
@@ -124,7 +122,7 @@
 instance AWSRequest DescribeVPCEndpoints where
         type Rs DescribeVPCEndpoints =
              DescribeVPCEndpointsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -133,6 +131,8 @@
                      (x .@? "vpcEndpointSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVPCEndpoints
 
 instance ToHeaders DescribeVPCEndpoints where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVPCPeeringConnections.hs b/gen/Network/AWS/EC2/DescribeVPCPeeringConnections.hs
--- a/gen/Network/AWS/EC2/DescribeVPCPeeringConnections.hs
+++ b/gen/Network/AWS/EC2/DescribeVPCPeeringConnections.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVPCPeeringConnections
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes one or more of your VPC peering connections.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVPCPeeringConnections.html AWS API Reference> for DescribeVPCPeeringConnections.
 module Network.AWS.EC2.DescribeVPCPeeringConnections
     (
     -- * Creating a Request
@@ -134,7 +132,7 @@
          where
         type Rs DescribeVPCPeeringConnections =
              DescribeVPCPeeringConnectionsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -142,6 +140,8 @@
                    (x .@? "vpcPeeringConnectionSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVPCPeeringConnections
 
 instance ToHeaders DescribeVPCPeeringConnections
          where
diff --git a/gen/Network/AWS/EC2/DescribeVPCs.hs b/gen/Network/AWS/EC2/DescribeVPCs.hs
--- a/gen/Network/AWS/EC2/DescribeVPCs.hs
+++ b/gen/Network/AWS/EC2/DescribeVPCs.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVPCs
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Describes one or more of your VPCs.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVPCs.html AWS API Reference> for DescribeVPCs.
 module Network.AWS.EC2.DescribeVPCs
     (
     -- * Creating a Request
@@ -118,7 +116,7 @@
 
 instance AWSRequest DescribeVPCs where
         type Rs DescribeVPCs = DescribeVPCsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -126,6 +124,8 @@
                    (x .@? "vpcSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVPCs
 
 instance ToHeaders DescribeVPCs where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVPNConnections.hs b/gen/Network/AWS/EC2/DescribeVPNConnections.hs
--- a/gen/Network/AWS/EC2/DescribeVPNConnections.hs
+++ b/gen/Network/AWS/EC2/DescribeVPNConnections.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVPNConnections
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information about VPN connections, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding a Hardware Virtual Private Gateway to Your VPC>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVPNConnections.html AWS API Reference> for DescribeVPNConnections.
 module Network.AWS.EC2.DescribeVPNConnections
     (
     -- * Creating a Request
@@ -137,7 +135,7 @@
 instance AWSRequest DescribeVPNConnections where
         type Rs DescribeVPNConnections =
              DescribeVPNConnectionsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -145,6 +143,8 @@
                    (x .@? "vpnConnectionSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVPNConnections
 
 instance ToHeaders DescribeVPNConnections where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVPNGateways.hs b/gen/Network/AWS/EC2/DescribeVPNGateways.hs
--- a/gen/Network/AWS/EC2/DescribeVPNGateways.hs
+++ b/gen/Network/AWS/EC2/DescribeVPNGateways.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVPNGateways
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information about virtual private gateways, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_VPN.html Adding an IPsec Hardware VPN to Your VPC>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVPNGateways.html AWS API Reference> for DescribeVPNGateways.
 module Network.AWS.EC2.DescribeVPNGateways
     (
     -- * Creating a Request
@@ -84,7 +82,7 @@
 -- -   'attachment.vpc-id' - The ID of an attached VPC.
 --
 -- -   'availability-zone' - The Availability Zone for the virtual private
---     gateway.
+--     gateway (if applicable).
 --
 -- -   'state' - The state of the virtual private gateway ('pending' |
 --     'available' | 'deleting' | 'deleted').
@@ -127,7 +125,7 @@
 instance AWSRequest DescribeVPNGateways where
         type Rs DescribeVPNGateways =
              DescribeVPNGatewaysResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -135,6 +133,8 @@
                    (x .@? "vpnGatewaySet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVPNGateways
 
 instance ToHeaders DescribeVPNGateways where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVolumeAttribute.hs b/gen/Network/AWS/EC2/DescribeVolumeAttribute.hs
--- a/gen/Network/AWS/EC2/DescribeVolumeAttribute.hs
+++ b/gen/Network/AWS/EC2/DescribeVolumeAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVolumeAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,6 @@
 -- For more information about EBS volumes, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html Amazon EBS Volumes>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVolumeAttribute.html AWS API Reference> for DescribeVolumeAttribute.
 module Network.AWS.EC2.DescribeVolumeAttribute
     (
     -- * Creating a Request
@@ -97,7 +95,7 @@
 instance AWSRequest DescribeVolumeAttribute where
         type Rs DescribeVolumeAttribute =
              DescribeVolumeAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -107,6 +105,8 @@
                         may (parseXMLList "item"))
                      <*> (x .@? "autoEnableIO")
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVolumeAttribute
 
 instance ToHeaders DescribeVolumeAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVolumeStatus.hs b/gen/Network/AWS/EC2/DescribeVolumeStatus.hs
--- a/gen/Network/AWS/EC2/DescribeVolumeStatus.hs
+++ b/gen/Network/AWS/EC2/DescribeVolumeStatus.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVolumeStatus
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -50,16 +50,14 @@
 -- event. For example, if the status of the volume is 'impaired' and the
 -- volume event shows 'potential-data-inconsistency', then the action shows
 -- 'enable-volume-io'. This means that you may want to enable the I\/O
--- operations for the volume by calling the EnableVolumeIO action and then
--- check the volume for data consistency.
+-- operations for the volume by calling the < EnableVolumeIO> action and
+-- then check the volume for data consistency.
 --
 -- Volume status is based on the volume status checks, and does not reflect
 -- the volume state. Therefore, volume status does not indicate volumes in
 -- the 'error' state (for example, when a volume is incapable of accepting
 -- I\/O.)
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVolumeStatus.html AWS API Reference> for DescribeVolumeStatus.
---
 -- This operation returns paginated results.
 module Network.AWS.EC2.DescribeVolumeStatus
     (
@@ -202,7 +200,7 @@
 instance AWSRequest DescribeVolumeStatus where
         type Rs DescribeVolumeStatus =
              DescribeVolumeStatusResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -211,6 +209,8 @@
                      (x .@? "volumeStatusSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVolumeStatus
 
 instance ToHeaders DescribeVolumeStatus where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DescribeVolumes.hs b/gen/Network/AWS/EC2/DescribeVolumes.hs
--- a/gen/Network/AWS/EC2/DescribeVolumes.hs
+++ b/gen/Network/AWS/EC2/DescribeVolumes.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DescribeVolumes
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -31,8 +31,6 @@
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumes.html Amazon EBS Volumes>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeVolumes.html AWS API Reference> for DescribeVolumes.
---
 -- This operation returns paginated results.
 module Network.AWS.EC2.DescribeVolumes
     (
@@ -191,7 +189,7 @@
 
 instance AWSRequest DescribeVolumes where
         type Rs DescribeVolumes = DescribeVolumesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -200,6 +198,8 @@
                      (x .@? "volumeSet" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable DescribeVolumes
 
 instance ToHeaders DescribeVolumes where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DetachClassicLinkVPC.hs b/gen/Network/AWS/EC2/DetachClassicLinkVPC.hs
--- a/gen/Network/AWS/EC2/DetachClassicLinkVPC.hs
+++ b/gen/Network/AWS/EC2/DetachClassicLinkVPC.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DetachClassicLinkVPC
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- instance has been unlinked, the VPC security groups are no longer
 -- associated with it. An instance is automatically unlinked from a VPC
 -- when it\'s stopped.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DetachClassicLinkVPC.html AWS API Reference> for DetachClassicLinkVPC.
 module Network.AWS.EC2.DetachClassicLinkVPC
     (
     -- * Creating a Request
@@ -94,12 +92,14 @@
 instance AWSRequest DetachClassicLinkVPC where
         type Rs DetachClassicLinkVPC =
              DetachClassicLinkVPCResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  DetachClassicLinkVPCResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable DetachClassicLinkVPC
 
 instance ToHeaders DetachClassicLinkVPC where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DetachInternetGateway.hs b/gen/Network/AWS/EC2/DetachInternetGateway.hs
--- a/gen/Network/AWS/EC2/DetachInternetGateway.hs
+++ b/gen/Network/AWS/EC2/DetachInternetGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DetachInternetGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Detaches an Internet gateway from a VPC, disabling connectivity between
 -- the Internet and the VPC. The VPC must not contain any running instances
 -- with Elastic IP addresses.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DetachInternetGateway.html AWS API Reference> for DetachInternetGateway.
 module Network.AWS.EC2.DetachInternetGateway
     (
     -- * Creating a Request
@@ -90,8 +88,10 @@
 instance AWSRequest DetachInternetGateway where
         type Rs DetachInternetGateway =
              DetachInternetGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DetachInternetGatewayResponse'
+
+instance Hashable DetachInternetGateway
 
 instance ToHeaders DetachInternetGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DetachNetworkInterface.hs b/gen/Network/AWS/EC2/DetachNetworkInterface.hs
--- a/gen/Network/AWS/EC2/DetachNetworkInterface.hs
+++ b/gen/Network/AWS/EC2/DetachNetworkInterface.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DetachNetworkInterface
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Detaches a network interface from an instance.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DetachNetworkInterface.html AWS API Reference> for DetachNetworkInterface.
 module Network.AWS.EC2.DetachNetworkInterface
     (
     -- * Creating a Request
@@ -87,9 +85,11 @@
 instance AWSRequest DetachNetworkInterface where
         type Rs DetachNetworkInterface =
              DetachNetworkInterfaceResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull DetachNetworkInterfaceResponse'
+
+instance Hashable DetachNetworkInterface
 
 instance ToHeaders DetachNetworkInterface where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DetachVPNGateway.hs b/gen/Network/AWS/EC2/DetachVPNGateway.hs
--- a/gen/Network/AWS/EC2/DetachVPNGateway.hs
+++ b/gen/Network/AWS/EC2/DetachVPNGateway.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DetachVPNGateway
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -27,8 +27,6 @@
 -- You must wait for the attachment\'s state to switch to 'detached' before
 -- you can delete the VPC or attach a different VPC to the virtual private
 -- gateway.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DetachVPNGateway.html AWS API Reference> for DetachVPNGateway.
 module Network.AWS.EC2.DetachVPNGateway
     (
     -- * Creating a Request
@@ -95,8 +93,10 @@
 
 instance AWSRequest DetachVPNGateway where
         type Rs DetachVPNGateway = DetachVPNGatewayResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DetachVPNGatewayResponse'
+
+instance Hashable DetachVPNGateway
 
 instance ToHeaders DetachVPNGateway where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DetachVolume.hs b/gen/Network/AWS/EC2/DetachVolume.hs
--- a/gen/Network/AWS/EC2/DetachVolume.hs
+++ b/gen/Network/AWS/EC2/DetachVolume.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DetachVolume
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -33,8 +33,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-detaching-volume.html Detaching an Amazon EBS Volume>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DetachVolume.html AWS API Reference> for DetachVolume.
 module Network.AWS.EC2.DetachVolume
     (
     -- * Creating a Request
@@ -131,8 +129,10 @@
 
 instance AWSRequest DetachVolume where
         type Rs DetachVolume = VolumeAttachment
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveXML (\ s h x -> parseXML x)
+
+instance Hashable DetachVolume
 
 instance ToHeaders DetachVolume where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DisableVGWRoutePropagation.hs b/gen/Network/AWS/EC2/DisableVGWRoutePropagation.hs
--- a/gen/Network/AWS/EC2/DisableVGWRoutePropagation.hs
+++ b/gen/Network/AWS/EC2/DisableVGWRoutePropagation.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DisableVGWRoutePropagation
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Disables a virtual private gateway (VGW) from propagating routes to a
 -- specified route table of a VPC.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DisableVGWRoutePropagation.html AWS API Reference> for DisableVGWRoutePropagation.
 module Network.AWS.EC2.DisableVGWRoutePropagation
     (
     -- * Creating a Request
@@ -77,9 +75,11 @@
 instance AWSRequest DisableVGWRoutePropagation where
         type Rs DisableVGWRoutePropagation =
              DisableVGWRoutePropagationResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull DisableVGWRoutePropagationResponse'
+
+instance Hashable DisableVGWRoutePropagation
 
 instance ToHeaders DisableVGWRoutePropagation where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DisableVPCClassicLink.hs b/gen/Network/AWS/EC2/DisableVPCClassicLink.hs
--- a/gen/Network/AWS/EC2/DisableVPCClassicLink.hs
+++ b/gen/Network/AWS/EC2/DisableVPCClassicLink.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DisableVPCClassicLink
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Disables ClassicLink for a VPC. You cannot disable ClassicLink for a VPC
 -- that has EC2-Classic instances linked to it.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DisableVPCClassicLink.html AWS API Reference> for DisableVPCClassicLink.
 module Network.AWS.EC2.DisableVPCClassicLink
     (
     -- * Creating a Request
@@ -82,12 +80,14 @@
 instance AWSRequest DisableVPCClassicLink where
         type Rs DisableVPCClassicLink =
              DisableVPCClassicLinkResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  DisableVPCClassicLinkResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable DisableVPCClassicLink
 
 instance ToHeaders DisableVPCClassicLink where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DisableVPCClassicLinkDNSSupport.hs b/gen/Network/AWS/EC2/DisableVPCClassicLinkDNSSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/EC2/DisableVPCClassicLinkDNSSupport.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables ClassicLink DNS support for a VPC. If disabled, DNS hostnames
+-- resolve to public IP addresses when addressed between a linked
+-- EC2-Classic instance and instances in the VPC to which it\'s linked. For
+-- more information about ClassicLink, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
+-- in the Amazon Elastic Compute Cloud User Guide.
+module Network.AWS.EC2.DisableVPCClassicLinkDNSSupport
+    (
+    -- * Creating a Request
+      disableVPCClassicLinkDNSSupport
+    , DisableVPCClassicLinkDNSSupport
+    -- * Request Lenses
+    , dvcldsVPCId
+
+    -- * Destructuring the Response
+    , disableVPCClassicLinkDNSSupportResponse
+    , DisableVPCClassicLinkDNSSupportResponse
+    -- * Response Lenses
+    , dvcldsrsReturn
+    , dvcldsrsResponseStatus
+    ) where
+
+import           Network.AWS.EC2.Types
+import           Network.AWS.EC2.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'disableVPCClassicLinkDNSSupport' smart constructor.
+newtype DisableVPCClassicLinkDNSSupport = DisableVPCClassicLinkDNSSupport'
+    { _dvcldsVPCId :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisableVPCClassicLinkDNSSupport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvcldsVPCId'
+disableVPCClassicLinkDNSSupport
+    :: DisableVPCClassicLinkDNSSupport
+disableVPCClassicLinkDNSSupport =
+    DisableVPCClassicLinkDNSSupport'
+    { _dvcldsVPCId = Nothing
+    }
+
+-- | The ID of the VPC.
+dvcldsVPCId :: Lens' DisableVPCClassicLinkDNSSupport (Maybe Text)
+dvcldsVPCId = lens _dvcldsVPCId (\ s a -> s{_dvcldsVPCId = a});
+
+instance AWSRequest DisableVPCClassicLinkDNSSupport
+         where
+        type Rs DisableVPCClassicLinkDNSSupport =
+             DisableVPCClassicLinkDNSSupportResponse
+        request = postQuery ec2
+        response
+          = receiveXML
+              (\ s h x ->
+                 DisableVPCClassicLinkDNSSupportResponse' <$>
+                   (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable DisableVPCClassicLinkDNSSupport
+
+instance ToHeaders DisableVPCClassicLinkDNSSupport
+         where
+        toHeaders = const mempty
+
+instance ToPath DisableVPCClassicLinkDNSSupport where
+        toPath = const "/"
+
+instance ToQuery DisableVPCClassicLinkDNSSupport
+         where
+        toQuery DisableVPCClassicLinkDNSSupport'{..}
+          = mconcat
+              ["Action" =:
+                 ("DisableVpcClassicLinkDnsSupport" :: ByteString),
+               "Version" =: ("2015-10-01" :: ByteString),
+               "VpcId" =: _dvcldsVPCId]
+
+-- | /See:/ 'disableVPCClassicLinkDNSSupportResponse' smart constructor.
+data DisableVPCClassicLinkDNSSupportResponse = DisableVPCClassicLinkDNSSupportResponse'
+    { _dvcldsrsReturn         :: !(Maybe Bool)
+    , _dvcldsrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DisableVPCClassicLinkDNSSupportResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dvcldsrsReturn'
+--
+-- * 'dvcldsrsResponseStatus'
+disableVPCClassicLinkDNSSupportResponse
+    :: Int -- ^ 'dvcldsrsResponseStatus'
+    -> DisableVPCClassicLinkDNSSupportResponse
+disableVPCClassicLinkDNSSupportResponse pResponseStatus_ =
+    DisableVPCClassicLinkDNSSupportResponse'
+    { _dvcldsrsReturn = Nothing
+    , _dvcldsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Returns 'true' if the request succeeds; otherwise, it returns an error.
+dvcldsrsReturn :: Lens' DisableVPCClassicLinkDNSSupportResponse (Maybe Bool)
+dvcldsrsReturn = lens _dvcldsrsReturn (\ s a -> s{_dvcldsrsReturn = a});
+
+-- | The response status code.
+dvcldsrsResponseStatus :: Lens' DisableVPCClassicLinkDNSSupportResponse Int
+dvcldsrsResponseStatus = lens _dvcldsrsResponseStatus (\ s a -> s{_dvcldsrsResponseStatus = a});
diff --git a/gen/Network/AWS/EC2/DisassociateAddress.hs b/gen/Network/AWS/EC2/DisassociateAddress.hs
--- a/gen/Network/AWS/EC2/DisassociateAddress.hs
+++ b/gen/Network/AWS/EC2/DisassociateAddress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DisassociateAddress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,8 +28,6 @@
 --
 -- This is an idempotent operation. If you perform the operation more than
 -- once, Amazon EC2 doesn\'t return an error.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DisassociateAddress.html AWS API Reference> for DisassociateAddress.
 module Network.AWS.EC2.DisassociateAddress
     (
     -- * Creating a Request
@@ -95,8 +93,10 @@
 instance AWSRequest DisassociateAddress where
         type Rs DisassociateAddress =
              DisassociateAddressResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull DisassociateAddressResponse'
+
+instance Hashable DisassociateAddress
 
 instance ToHeaders DisassociateAddress where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/DisassociateRouteTable.hs b/gen/Network/AWS/EC2/DisassociateRouteTable.hs
--- a/gen/Network/AWS/EC2/DisassociateRouteTable.hs
+++ b/gen/Network/AWS/EC2/DisassociateRouteTable.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.DisassociateRouteTable
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- table. For more information about route tables, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DisassociateRouteTable.html AWS API Reference> for DisassociateRouteTable.
 module Network.AWS.EC2.DisassociateRouteTable
     (
     -- * Creating a Request
@@ -85,9 +83,11 @@
 instance AWSRequest DisassociateRouteTable where
         type Rs DisassociateRouteTable =
              DisassociateRouteTableResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull DisassociateRouteTableResponse'
+
+instance Hashable DisassociateRouteTable
 
 instance ToHeaders DisassociateRouteTable where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/EnableVGWRoutePropagation.hs b/gen/Network/AWS/EC2/EnableVGWRoutePropagation.hs
--- a/gen/Network/AWS/EC2/EnableVGWRoutePropagation.hs
+++ b/gen/Network/AWS/EC2/EnableVGWRoutePropagation.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.EnableVGWRoutePropagation
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Enables a virtual private gateway (VGW) to propagate routes to the
 -- specified route table of a VPC.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-EnableVGWRoutePropagation.html AWS API Reference> for EnableVGWRoutePropagation.
 module Network.AWS.EC2.EnableVGWRoutePropagation
     (
     -- * Creating a Request
@@ -77,9 +75,11 @@
 instance AWSRequest EnableVGWRoutePropagation where
         type Rs EnableVGWRoutePropagation =
              EnableVGWRoutePropagationResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull EnableVGWRoutePropagationResponse'
+
+instance Hashable EnableVGWRoutePropagation
 
 instance ToHeaders EnableVGWRoutePropagation where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/EnableVPCClassicLink.hs b/gen/Network/AWS/EC2/EnableVPCClassicLink.hs
--- a/gen/Network/AWS/EC2/EnableVPCClassicLink.hs
+++ b/gen/Network/AWS/EC2/EnableVPCClassicLink.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.EnableVPCClassicLink
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -27,8 +27,6 @@
 -- information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
 -- in the Amazon Elastic Compute Cloud User Guide.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-EnableVPCClassicLink.html AWS API Reference> for EnableVPCClassicLink.
 module Network.AWS.EC2.EnableVPCClassicLink
     (
     -- * Creating a Request
@@ -89,12 +87,14 @@
 instance AWSRequest EnableVPCClassicLink where
         type Rs EnableVPCClassicLink =
              EnableVPCClassicLinkResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  EnableVPCClassicLinkResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable EnableVPCClassicLink
 
 instance ToHeaders EnableVPCClassicLink where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/EnableVPCClassicLinkDNSSupport.hs b/gen/Network/AWS/EC2/EnableVPCClassicLinkDNSSupport.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/EC2/EnableVPCClassicLinkDNSSupport.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables a VPC to support DNS hostname resolution for ClassicLink. If
+-- enabled, the DNS hostname of a linked EC2-Classic instance resolves to
+-- its private IP address when addressed from an instance in the VPC to
+-- which it\'s linked. Similarly, the DNS hostname of an instance in a VPC
+-- resolves to its private IP address when addressed from a linked
+-- EC2-Classic instance. For more information about ClassicLink, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html ClassicLink>
+-- in the Amazon Elastic Compute Cloud User Guide.
+module Network.AWS.EC2.EnableVPCClassicLinkDNSSupport
+    (
+    -- * Creating a Request
+      enableVPCClassicLinkDNSSupport
+    , EnableVPCClassicLinkDNSSupport
+    -- * Request Lenses
+    , evcldsVPCId
+
+    -- * Destructuring the Response
+    , enableVPCClassicLinkDNSSupportResponse
+    , EnableVPCClassicLinkDNSSupportResponse
+    -- * Response Lenses
+    , evcldsrsReturn
+    , evcldsrsResponseStatus
+    ) where
+
+import           Network.AWS.EC2.Types
+import           Network.AWS.EC2.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'enableVPCClassicLinkDNSSupport' smart constructor.
+newtype EnableVPCClassicLinkDNSSupport = EnableVPCClassicLinkDNSSupport'
+    { _evcldsVPCId :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnableVPCClassicLinkDNSSupport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'evcldsVPCId'
+enableVPCClassicLinkDNSSupport
+    :: EnableVPCClassicLinkDNSSupport
+enableVPCClassicLinkDNSSupport =
+    EnableVPCClassicLinkDNSSupport'
+    { _evcldsVPCId = Nothing
+    }
+
+-- | The ID of the VPC.
+evcldsVPCId :: Lens' EnableVPCClassicLinkDNSSupport (Maybe Text)
+evcldsVPCId = lens _evcldsVPCId (\ s a -> s{_evcldsVPCId = a});
+
+instance AWSRequest EnableVPCClassicLinkDNSSupport
+         where
+        type Rs EnableVPCClassicLinkDNSSupport =
+             EnableVPCClassicLinkDNSSupportResponse
+        request = postQuery ec2
+        response
+          = receiveXML
+              (\ s h x ->
+                 EnableVPCClassicLinkDNSSupportResponse' <$>
+                   (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable EnableVPCClassicLinkDNSSupport
+
+instance ToHeaders EnableVPCClassicLinkDNSSupport
+         where
+        toHeaders = const mempty
+
+instance ToPath EnableVPCClassicLinkDNSSupport where
+        toPath = const "/"
+
+instance ToQuery EnableVPCClassicLinkDNSSupport where
+        toQuery EnableVPCClassicLinkDNSSupport'{..}
+          = mconcat
+              ["Action" =:
+                 ("EnableVpcClassicLinkDnsSupport" :: ByteString),
+               "Version" =: ("2015-10-01" :: ByteString),
+               "VpcId" =: _evcldsVPCId]
+
+-- | /See:/ 'enableVPCClassicLinkDNSSupportResponse' smart constructor.
+data EnableVPCClassicLinkDNSSupportResponse = EnableVPCClassicLinkDNSSupportResponse'
+    { _evcldsrsReturn         :: !(Maybe Bool)
+    , _evcldsrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EnableVPCClassicLinkDNSSupportResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'evcldsrsReturn'
+--
+-- * 'evcldsrsResponseStatus'
+enableVPCClassicLinkDNSSupportResponse
+    :: Int -- ^ 'evcldsrsResponseStatus'
+    -> EnableVPCClassicLinkDNSSupportResponse
+enableVPCClassicLinkDNSSupportResponse pResponseStatus_ =
+    EnableVPCClassicLinkDNSSupportResponse'
+    { _evcldsrsReturn = Nothing
+    , _evcldsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Returns 'true' if the request succeeds; otherwise, it returns an error.
+evcldsrsReturn :: Lens' EnableVPCClassicLinkDNSSupportResponse (Maybe Bool)
+evcldsrsReturn = lens _evcldsrsReturn (\ s a -> s{_evcldsrsReturn = a});
+
+-- | The response status code.
+evcldsrsResponseStatus :: Lens' EnableVPCClassicLinkDNSSupportResponse Int
+evcldsrsResponseStatus = lens _evcldsrsResponseStatus (\ s a -> s{_evcldsrsResponseStatus = a});
diff --git a/gen/Network/AWS/EC2/EnableVolumeIO.hs b/gen/Network/AWS/EC2/EnableVolumeIO.hs
--- a/gen/Network/AWS/EC2/EnableVolumeIO.hs
+++ b/gen/Network/AWS/EC2/EnableVolumeIO.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.EnableVolumeIO
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Enables I\/O operations for a volume that had I\/O operations disabled
 -- because the data on the volume was potentially inconsistent.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-EnableVolumeIO.html AWS API Reference> for EnableVolumeIO.
 module Network.AWS.EC2.EnableVolumeIO
     (
     -- * Creating a Request
@@ -78,8 +76,10 @@
 
 instance AWSRequest EnableVolumeIO where
         type Rs EnableVolumeIO = EnableVolumeIOResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull EnableVolumeIOResponse'
+
+instance Hashable EnableVolumeIO
 
 instance ToHeaders EnableVolumeIO where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/GetConsoleOutput.hs b/gen/Network/AWS/EC2/GetConsoleOutput.hs
--- a/gen/Network/AWS/EC2/GetConsoleOutput.hs
+++ b/gen/Network/AWS/EC2/GetConsoleOutput.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.GetConsoleOutput
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -38,8 +38,6 @@
 --
 -- For Windows instances, the instance console output includes output from
 -- the EC2Config service.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-GetConsoleOutput.html AWS API Reference> for GetConsoleOutput.
 module Network.AWS.EC2.GetConsoleOutput
     (
     -- * Creating a Request
@@ -101,7 +99,7 @@
 
 instance AWSRequest GetConsoleOutput where
         type Rs GetConsoleOutput = GetConsoleOutputResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -110,6 +108,8 @@
                      (x .@? "timestamp")
                      <*> (pure (fromEnum s)))
 
+instance Hashable GetConsoleOutput
+
 instance ToHeaders GetConsoleOutput where
         toHeaders = const mempty
 
@@ -158,7 +158,8 @@
 gcorsInstanceId :: Lens' GetConsoleOutputResponse (Maybe Text)
 gcorsInstanceId = lens _gcorsInstanceId (\ s a -> s{_gcorsInstanceId = a});
 
--- | The console output, Base64 encoded.
+-- | The console output, Base64 encoded. If using a command line tool, the
+-- tools decode the output for you.
 gcorsOutput :: Lens' GetConsoleOutputResponse (Maybe Text)
 gcorsOutput = lens _gcorsOutput (\ s a -> s{_gcorsOutput = a});
 
diff --git a/gen/Network/AWS/EC2/GetPasswordData.hs b/gen/Network/AWS/EC2/GetPasswordData.hs
--- a/gen/Network/AWS/EC2/GetPasswordData.hs
+++ b/gen/Network/AWS/EC2/GetPasswordData.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.GetPasswordData
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -33,8 +33,6 @@
 -- Password generation and encryption takes a few moments. We recommend
 -- that you wait up to 15 minutes after launching an instance before trying
 -- to retrieve the generated password.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-GetPasswordData.html AWS API Reference> for GetPasswordData.
 module Network.AWS.EC2.GetPasswordData
     (
     -- * Creating a Request
@@ -96,7 +94,7 @@
 
 instance AWSRequest GetPasswordData where
         type Rs GetPasswordData = GetPasswordDataResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -104,6 +102,8 @@
                    (pure (fromEnum s)) <*> (x .@ "instanceId") <*>
                      (x .@ "passwordData")
                      <*> (x .@ "timestamp"))
+
+instance Hashable GetPasswordData
 
 instance ToHeaders GetPasswordData where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ImportImage.hs b/gen/Network/AWS/EC2/ImportImage.hs
--- a/gen/Network/AWS/EC2/ImportImage.hs
+++ b/gen/Network/AWS/EC2/ImportImage.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ImportImage
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Import single or multi-volume disk images or EBS snapshots into an
 -- Amazon Machine Image (AMI).
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ImportImage.html AWS API Reference> for ImportImage.
 module Network.AWS.EC2.ImportImage
     (
     -- * Creating a Request
@@ -178,7 +176,7 @@
 
 instance AWSRequest ImportImage where
         type Rs ImportImage = ImportImageResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -196,6 +194,8 @@
                      <*> (x .@? "architecture")
                      <*> (x .@? "description")
                      <*> (pure (fromEnum s)))
+
+instance Hashable ImportImage
 
 instance ToHeaders ImportImage where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ImportInstance.hs b/gen/Network/AWS/EC2/ImportInstance.hs
--- a/gen/Network/AWS/EC2/ImportInstance.hs
+++ b/gen/Network/AWS/EC2/ImportInstance.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ImportInstance
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,13 +20,15 @@
 --
 -- Creates an import instance task using metadata from the specified disk
 -- image. 'ImportInstance' only supports single-volume VMs. To import
--- multi-volume VMs, use ImportImage. After importing the image, you then
--- upload it using the 'ec2-import-volume' command in the EC2 command line
--- tools. For more information, see
+-- multi-volume VMs, use < ImportImage>. After importing the image, you
+-- then upload it using the 'ec2-import-volume' command in the EC2 command
+-- line tools. For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UploadingYourInstancesandVolumes.html Using the Command Line Tools to Import Your Virtual Machine to Amazon EC2>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ImportInstance.html AWS API Reference> for ImportInstance.
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
 module Network.AWS.EC2.ImportInstance
     (
     -- * Creating a Request
@@ -113,12 +115,14 @@
 
 instance AWSRequest ImportInstance where
         type Rs ImportInstance = ImportInstanceResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ImportInstanceResponse' <$>
                    (x .@? "conversionTask") <*> (pure (fromEnum s)))
+
+instance Hashable ImportInstance
 
 instance ToHeaders ImportInstance where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ImportKeyPair.hs b/gen/Network/AWS/EC2/ImportKeyPair.hs
--- a/gen/Network/AWS/EC2/ImportKeyPair.hs
+++ b/gen/Network/AWS/EC2/ImportKeyPair.hs
@@ -12,23 +12,22 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ImportKeyPair
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Imports the public key from an RSA key pair that you created with a
--- third-party tool. Compare this with CreateKeyPair, in which AWS creates
--- the key pair and gives the keys to you (AWS keeps a copy of the public
--- key). With ImportKeyPair, you create the key pair and give AWS just the
--- public key. The private key is never transferred between you and AWS.
+-- third-party tool. Compare this with < CreateKeyPair>, in which AWS
+-- creates the key pair and gives the keys to you (AWS keeps a copy of the
+-- public key). With ImportKeyPair, you create the key pair and give AWS
+-- just the public key. The private key is never transferred between you
+-- and AWS.
 --
 -- For more information about key pairs, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html Key Pairs>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ImportKeyPair.html AWS API Reference> for ImportKeyPair.
 module Network.AWS.EC2.ImportKeyPair
     (
     -- * Creating a Request
@@ -106,13 +105,15 @@
 
 instance AWSRequest ImportKeyPair where
         type Rs ImportKeyPair = ImportKeyPairResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ImportKeyPairResponse' <$>
                    (x .@? "keyFingerprint") <*> (x .@? "keyName") <*>
                      (pure (fromEnum s)))
+
+instance Hashable ImportKeyPair
 
 instance ToHeaders ImportKeyPair where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ImportSnapshot.hs b/gen/Network/AWS/EC2/ImportSnapshot.hs
--- a/gen/Network/AWS/EC2/ImportSnapshot.hs
+++ b/gen/Network/AWS/EC2/ImportSnapshot.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ImportSnapshot
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Imports a disk into an EBS snapshot.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ImportSnapshot.html AWS API Reference> for ImportSnapshot.
 module Network.AWS.EC2.ImportSnapshot
     (
     -- * Creating a Request
@@ -118,7 +116,7 @@
 
 instance AWSRequest ImportSnapshot where
         type Rs ImportSnapshot = ImportSnapshotResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -127,6 +125,8 @@
                      (x .@? "importTaskId")
                      <*> (x .@? "description")
                      <*> (pure (fromEnum s)))
+
+instance Hashable ImportSnapshot
 
 instance ToHeaders ImportSnapshot where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ImportVolume.hs b/gen/Network/AWS/EC2/ImportVolume.hs
--- a/gen/Network/AWS/EC2/ImportVolume.hs
+++ b/gen/Network/AWS/EC2/ImportVolume.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ImportVolume
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,7 +25,9 @@
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UploadingYourInstancesandVolumes.html Using the Command Line Tools to Import Your Virtual Machine to Amazon EC2>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ImportVolume.html AWS API Reference> for ImportVolume.
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
 module Network.AWS.EC2.ImportVolume
     (
     -- * Creating a Request
@@ -114,12 +116,14 @@
 
 instance AWSRequest ImportVolume where
         type Rs ImportVolume = ImportVolumeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ImportVolumeResponse' <$>
                    (x .@? "conversionTask") <*> (pure (fromEnum s)))
+
+instance Hashable ImportVolume
 
 instance ToHeaders ImportVolume where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifyHosts.hs b/gen/Network/AWS/EC2/ModifyHosts.hs
--- a/gen/Network/AWS/EC2/ModifyHosts.hs
+++ b/gen/Network/AWS/EC2/ModifyHosts.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyHosts
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,8 +26,6 @@
 -- if you want the instance to launch onto a specific host. If no host ID
 -- is provided, the instance will be launched onto a suitable host which
 -- has auto-placement enabled.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyHosts.html AWS API Reference> for ModifyHosts.
 module Network.AWS.EC2.ModifyHosts
     (
     -- * Creating a Request
@@ -85,7 +83,7 @@
 
 instance AWSRequest ModifyHosts where
         type Rs ModifyHosts = ModifyHostsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -96,6 +94,8 @@
                      (x .@? "successful" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable ModifyHosts
 
 instance ToHeaders ModifyHosts where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifyIdFormat.hs b/gen/Network/AWS/EC2/ModifyIdFormat.hs
--- a/gen/Network/AWS/EC2/ModifyIdFormat.hs
+++ b/gen/Network/AWS/EC2/ModifyIdFormat.hs
@@ -12,27 +12,30 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyIdFormat
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- __Important: This command is reserved for future use, and is currently
--- not available for you to use.__
---
--- Modifies the ID format for the specified resource. You can specify that
--- resources should receive longer IDs (17-character IDs) when they are
--- created. The following resource types support longer IDs: 'instance' |
--- 'reservation'.
+-- Modifies the ID format for the specified resource on a per-region basis.
+-- You can specify that resources should receive longer IDs (17-character
+-- IDs) when they are created. The following resource types support longer
+-- IDs: 'instance' | 'reservation'.
 --
 -- This setting applies to the IAM user who makes the request; it does not
 -- apply to the entire AWS account. By default, an IAM user defaults to the
--- same settings as the root user, unless they explicitly override the
--- settings by running this request. These settings are applied on a
--- per-region basis.
+-- same settings as the root user. If you\'re using this action as the root
+-- user or as an IAM role that has permission to use this action, then
+-- these settings apply to the entire account, unless an IAM user
+-- explicitly overrides these settings for themselves. For more
+-- information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/resource-ids.html#resource-ids-access Controlling Access to Longer ID Settings>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
 --
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyIdFormat.html AWS API Reference> for ModifyIdFormat.
+-- Resources created with longer IDs are visible to all IAM users,
+-- regardless of these settings and provided that they have permission to
+-- use the relevant 'Describe' command for the resource type.
 module Network.AWS.EC2.ModifyIdFormat
     (
     -- * Creating a Request
@@ -87,8 +90,10 @@
 
 instance AWSRequest ModifyIdFormat where
         type Rs ModifyIdFormat = ModifyIdFormatResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull ModifyIdFormatResponse'
+
+instance Hashable ModifyIdFormat
 
 instance ToHeaders ModifyIdFormat where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifyImageAttribute.hs b/gen/Network/AWS/EC2/ModifyImageAttribute.hs
--- a/gen/Network/AWS/EC2/ModifyImageAttribute.hs
+++ b/gen/Network/AWS/EC2/ModifyImageAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyImageAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 --
 -- AWS Marketplace product codes cannot be modified. Images with an AWS
 -- Marketplace product code cannot be made public.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyImageAttribute.html AWS API Reference> for ModifyImageAttribute.
 module Network.AWS.EC2.ModifyImageAttribute
     (
     -- * Creating a Request
@@ -159,8 +157,10 @@
 instance AWSRequest ModifyImageAttribute where
         type Rs ModifyImageAttribute =
              ModifyImageAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull ModifyImageAttributeResponse'
+
+instance Hashable ModifyImageAttribute
 
 instance ToHeaders ModifyImageAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifyInstanceAttribute.hs b/gen/Network/AWS/EC2/ModifyInstanceAttribute.hs
--- a/gen/Network/AWS/EC2/ModifyInstanceAttribute.hs
+++ b/gen/Network/AWS/EC2/ModifyInstanceAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyInstanceAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,8 +25,6 @@
 -- information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_ChangingAttributesWhileInstanceStopped.html Modifying Attributes of a Stopped Instance>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyInstanceAttribute.html AWS API Reference> for ModifyInstanceAttribute.
 module Network.AWS.EC2.ModifyInstanceAttribute
     (
     -- * Creating a Request
@@ -239,9 +237,11 @@
 instance AWSRequest ModifyInstanceAttribute where
         type Rs ModifyInstanceAttribute =
              ModifyInstanceAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull ModifyInstanceAttributeResponse'
+
+instance Hashable ModifyInstanceAttribute
 
 instance ToHeaders ModifyInstanceAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifyInstancePlacement.hs b/gen/Network/AWS/EC2/ModifyInstancePlacement.hs
--- a/gen/Network/AWS/EC2/ModifyInstancePlacement.hs
+++ b/gen/Network/AWS/EC2/ModifyInstancePlacement.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyInstancePlacement
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -38,8 +38,6 @@
 -- one of them must be specified in the request. Affinity and tenancy can
 -- be modified in the same request, but tenancy can only be modified on
 -- instances that are stopped.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyInstancePlacement.html AWS API Reference> for ModifyInstancePlacement.
 module Network.AWS.EC2.ModifyInstancePlacement
     (
     -- * Creating a Request
@@ -115,12 +113,14 @@
 instance AWSRequest ModifyInstancePlacement where
         type Rs ModifyInstancePlacement =
              ModifyInstancePlacementResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ModifyInstancePlacementResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable ModifyInstancePlacement
 
 instance ToHeaders ModifyInstancePlacement where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifyNetworkInterfaceAttribute.hs b/gen/Network/AWS/EC2/ModifyNetworkInterfaceAttribute.hs
--- a/gen/Network/AWS/EC2/ModifyNetworkInterfaceAttribute.hs
+++ b/gen/Network/AWS/EC2/ModifyNetworkInterfaceAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyNetworkInterfaceAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Modifies the specified network interface attribute. You can specify only
 -- one attribute at a time.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyNetworkInterfaceAttribute.html AWS API Reference> for ModifyNetworkInterfaceAttribute.
 module Network.AWS.EC2.ModifyNetworkInterfaceAttribute
     (
     -- * Creating a Request
@@ -126,10 +124,12 @@
          where
         type Rs ModifyNetworkInterfaceAttribute =
              ModifyNetworkInterfaceAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull
               ModifyNetworkInterfaceAttributeResponse'
+
+instance Hashable ModifyNetworkInterfaceAttribute
 
 instance ToHeaders ModifyNetworkInterfaceAttribute
          where
diff --git a/gen/Network/AWS/EC2/ModifyReservedInstances.hs b/gen/Network/AWS/EC2/ModifyReservedInstances.hs
--- a/gen/Network/AWS/EC2/ModifyReservedInstances.hs
+++ b/gen/Network/AWS/EC2/ModifyReservedInstances.hs
@@ -12,22 +12,20 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyReservedInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Modifies the Availability Zone, instance count, instance type, or
--- network platform (EC2-Classic or EC2-VPC) of your Reserved instances.
--- The Reserved instances to be modified must be identical, except for
+-- network platform (EC2-Classic or EC2-VPC) of your Reserved Instances.
+-- The Reserved Instances to be modified must be identical, except for
 -- Availability Zone, network platform, and instance type.
 --
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-modifying.html Modifying Reserved Instances>
 -- in the Amazon Elastic Compute Cloud User Guide.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyReservedInstances.html AWS API Reference> for ModifyReservedInstances.
 module Network.AWS.EC2.ModifyReservedInstances
     (
     -- * Creating a Request
@@ -84,24 +82,26 @@
 mriClientToken :: Lens' ModifyReservedInstances (Maybe Text)
 mriClientToken = lens _mriClientToken (\ s a -> s{_mriClientToken = a});
 
--- | The IDs of the Reserved instances to modify.
+-- | The IDs of the Reserved Instances to modify.
 mriReservedInstancesIds :: Lens' ModifyReservedInstances [Text]
 mriReservedInstancesIds = lens _mriReservedInstancesIds (\ s a -> s{_mriReservedInstancesIds = a}) . _Coerce;
 
--- | The configuration settings for the Reserved instances to modify.
+-- | The configuration settings for the Reserved Instances to modify.
 mriTargetConfigurations :: Lens' ModifyReservedInstances [ReservedInstancesConfiguration]
 mriTargetConfigurations = lens _mriTargetConfigurations (\ s a -> s{_mriTargetConfigurations = a}) . _Coerce;
 
 instance AWSRequest ModifyReservedInstances where
         type Rs ModifyReservedInstances =
              ModifyReservedInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ModifyReservedInstancesResponse' <$>
                    (x .@? "reservedInstancesModificationId") <*>
                      (pure (fromEnum s)))
+
+instance Hashable ModifyReservedInstances
 
 instance ToHeaders ModifyReservedInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifySnapshotAttribute.hs b/gen/Network/AWS/EC2/ModifySnapshotAttribute.hs
--- a/gen/Network/AWS/EC2/ModifySnapshotAttribute.hs
+++ b/gen/Network/AWS/EC2/ModifySnapshotAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifySnapshotAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,8 +29,6 @@
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
 -- Snapshots with AWS Marketplace product codes cannot be made public.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifySnapshotAttribute.html AWS API Reference> for ModifySnapshotAttribute.
 module Network.AWS.EC2.ModifySnapshotAttribute
     (
     -- * Creating a Request
@@ -135,9 +133,11 @@
 instance AWSRequest ModifySnapshotAttribute where
         type Rs ModifySnapshotAttribute =
              ModifySnapshotAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull ModifySnapshotAttributeResponse'
+
+instance Hashable ModifySnapshotAttribute
 
 instance ToHeaders ModifySnapshotAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifySpotFleetRequest.hs b/gen/Network/AWS/EC2/ModifySpotFleetRequest.hs
--- a/gen/Network/AWS/EC2/ModifySpotFleetRequest.hs
+++ b/gen/Network/AWS/EC2/ModifySpotFleetRequest.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifySpotFleetRequest
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -40,8 +40,6 @@
 -- pools. Alternatively, you can request that the Spot fleet keep the fleet
 -- at its current size, but not replace any Spot instances that are
 -- interrupted or that you terminate manually.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifySpotFleetRequest.html AWS API Reference> for ModifySpotFleetRequest.
 module Network.AWS.EC2.ModifySpotFleetRequest
     (
     -- * Creating a Request
@@ -112,12 +110,14 @@
 instance AWSRequest ModifySpotFleetRequest where
         type Rs ModifySpotFleetRequest =
              ModifySpotFleetRequestResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ModifySpotFleetRequestResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable ModifySpotFleetRequest
 
 instance ToHeaders ModifySpotFleetRequest where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifySubnetAttribute.hs b/gen/Network/AWS/EC2/ModifySubnetAttribute.hs
--- a/gen/Network/AWS/EC2/ModifySubnetAttribute.hs
+++ b/gen/Network/AWS/EC2/ModifySubnetAttribute.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifySubnetAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Modifies a subnet attribute.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifySubnetAttribute.html AWS API Reference> for ModifySubnetAttribute.
 module Network.AWS.EC2.ModifySubnetAttribute
     (
     -- * Creating a Request
@@ -76,8 +74,10 @@
 instance AWSRequest ModifySubnetAttribute where
         type Rs ModifySubnetAttribute =
              ModifySubnetAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull ModifySubnetAttributeResponse'
+
+instance Hashable ModifySubnetAttribute
 
 instance ToHeaders ModifySubnetAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifyVPCAttribute.hs b/gen/Network/AWS/EC2/ModifyVPCAttribute.hs
--- a/gen/Network/AWS/EC2/ModifyVPCAttribute.hs
+++ b/gen/Network/AWS/EC2/ModifyVPCAttribute.hs
@@ -12,15 +12,13 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyVPCAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Modifies the specified attribute of the specified VPC.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyVPCAttribute.html AWS API Reference> for ModifyVPCAttribute.
 module Network.AWS.EC2.ModifyVPCAttribute
     (
     -- * Creating a Request
@@ -98,8 +96,10 @@
 instance AWSRequest ModifyVPCAttribute where
         type Rs ModifyVPCAttribute =
              ModifyVPCAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull ModifyVPCAttributeResponse'
+
+instance Hashable ModifyVPCAttribute
 
 instance ToHeaders ModifyVPCAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifyVPCEndpoint.hs b/gen/Network/AWS/EC2/ModifyVPCEndpoint.hs
--- a/gen/Network/AWS/EC2/ModifyVPCEndpoint.hs
+++ b/gen/Network/AWS/EC2/ModifyVPCEndpoint.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyVPCEndpoint
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Modifies attributes of a specified VPC endpoint. You can modify the
 -- policy associated with the endpoint, and you can add and remove route
 -- tables associated with the endpoint.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyVPCEndpoint.html AWS API Reference> for ModifyVPCEndpoint.
 module Network.AWS.EC2.ModifyVPCEndpoint
     (
     -- * Creating a Request
@@ -120,12 +118,14 @@
 
 instance AWSRequest ModifyVPCEndpoint where
         type Rs ModifyVPCEndpoint = ModifyVPCEndpointResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ModifyVPCEndpointResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable ModifyVPCEndpoint
 
 instance ToHeaders ModifyVPCEndpoint where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ModifyVolumeAttribute.hs b/gen/Network/AWS/EC2/ModifyVolumeAttribute.hs
--- a/gen/Network/AWS/EC2/ModifyVolumeAttribute.hs
+++ b/gen/Network/AWS/EC2/ModifyVolumeAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ModifyVolumeAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,8 +29,6 @@
 -- You can change the default behavior to resume I\/O operations. We
 -- recommend that you change this only for boot volumes or for volumes that
 -- are stateless or disposable.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ModifyVolumeAttribute.html AWS API Reference> for ModifyVolumeAttribute.
 module Network.AWS.EC2.ModifyVolumeAttribute
     (
     -- * Creating a Request
@@ -97,8 +95,10 @@
 instance AWSRequest ModifyVolumeAttribute where
         type Rs ModifyVolumeAttribute =
              ModifyVolumeAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull ModifyVolumeAttributeResponse'
+
+instance Hashable ModifyVolumeAttribute
 
 instance ToHeaders ModifyVolumeAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/MonitorInstances.hs b/gen/Network/AWS/EC2/MonitorInstances.hs
--- a/gen/Network/AWS/EC2/MonitorInstances.hs
+++ b/gen/Network/AWS/EC2/MonitorInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.MonitorInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- monitoring instances, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html Monitoring Your Instances and Volumes>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-MonitorInstances.html AWS API Reference> for MonitorInstances.
 module Network.AWS.EC2.MonitorInstances
     (
     -- * Creating a Request
@@ -82,7 +80,7 @@
 
 instance AWSRequest MonitorInstances where
         type Rs MonitorInstances = MonitorInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -90,6 +88,8 @@
                    (x .@? "instancesSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable MonitorInstances
 
 instance ToHeaders MonitorInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/MoveAddressToVPC.hs b/gen/Network/AWS/EC2/MoveAddressToVPC.hs
--- a/gen/Network/AWS/EC2/MoveAddressToVPC.hs
+++ b/gen/Network/AWS/EC2/MoveAddressToVPC.hs
@@ -12,21 +12,22 @@
 
 -- |
 -- Module      : Network.AWS.EC2.MoveAddressToVPC
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
 -- Moves an Elastic IP address from the EC2-Classic platform to the EC2-VPC
--- platform. The Elastic IP address must be allocated to your account, and
--- it must not be associated with an instance. After the Elastic IP address
--- is moved, it is no longer available for use in the EC2-Classic platform,
--- unless you move it back using the RestoreAddressToClassic request. You
--- cannot move an Elastic IP address that\'s allocated for use in the
--- EC2-VPC platform to the EC2-Classic platform.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-MoveAddressToVPC.html AWS API Reference> for MoveAddressToVPC.
+-- platform. The Elastic IP address must be allocated to your account for
+-- more than 24 hours, and it must not be associated with an instance.
+-- After the Elastic IP address is moved, it is no longer available for use
+-- in the EC2-Classic platform, unless you move it back using the
+-- < RestoreAddressToClassic> request. You cannot move an Elastic IP
+-- address that\'s allocated for use in the EC2-VPC platform to the
+-- EC2-Classic platform. You cannot migrate an Elastic IP address that\'s
+-- associated with a reverse DNS record. Contact AWS account and billing
+-- support to remove the reverse DNS record.
 module Network.AWS.EC2.MoveAddressToVPC
     (
     -- * Creating a Request
@@ -87,13 +88,15 @@
 
 instance AWSRequest MoveAddressToVPC where
         type Rs MoveAddressToVPC = MoveAddressToVPCResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  MoveAddressToVPCResponse' <$>
                    (x .@? "status") <*> (x .@? "allocationId") <*>
                      (pure (fromEnum s)))
+
+instance Hashable MoveAddressToVPC
 
 instance ToHeaders MoveAddressToVPC where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/PurchaseReservedInstancesOffering.hs b/gen/Network/AWS/EC2/PurchaseReservedInstancesOffering.hs
--- a/gen/Network/AWS/EC2/PurchaseReservedInstancesOffering.hs
+++ b/gen/Network/AWS/EC2/PurchaseReservedInstancesOffering.hs
@@ -12,29 +12,27 @@
 
 -- |
 -- Module      : Network.AWS.EC2.PurchaseReservedInstancesOffering
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Purchases a Reserved instance for use with your account. With Amazon EC2
--- Reserved instances, you obtain a capacity reservation for a certain
--- instance configuration over a specified period of time and pay a lower
--- hourly rate compared to On-Demand Instance pricing.
+-- Purchases a Reserved Instance for use with your account. With Reserved
+-- Instances, you obtain a capacity reservation for a certain instance
+-- configuration over a specified period of time and pay a lower hourly
+-- rate compared to On-Demand instance pricing.
 --
--- Use DescribeReservedInstancesOfferings to get a list of Reserved
--- instance offerings that match your specifications. After you\'ve
--- purchased a Reserved instance, you can check for your new Reserved
--- instance with DescribeReservedInstances.
+-- Use < DescribeReservedInstancesOfferings> to get a list of Reserved
+-- Instance offerings that match your specifications. After you\'ve
+-- purchased a Reserved Instance, you can check for your new Reserved
+-- Instance with < DescribeReservedInstances>.
 --
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts-on-demand-reserved-instances.html Reserved Instances>
 -- and
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ri-market-general.html Reserved Instance Marketplace>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-PurchaseReservedInstancesOffering.html AWS API Reference> for PurchaseReservedInstancesOffering.
 module Network.AWS.EC2.PurchaseReservedInstancesOffering
     (
     -- * Creating a Request
@@ -93,7 +91,7 @@
     }
 
 -- | Specified for Reserved Instance Marketplace offerings to limit the total
--- order and ensure that the Reserved instances are not purchased at
+-- order and ensure that the Reserved Instances are not purchased at
 -- unexpected prices.
 prioLimitPrice :: Lens' PurchaseReservedInstancesOffering (Maybe ReservedInstanceLimitPrice)
 prioLimitPrice = lens _prioLimitPrice (\ s a -> s{_prioLimitPrice = a});
@@ -105,11 +103,11 @@
 prioDryRun :: Lens' PurchaseReservedInstancesOffering (Maybe Bool)
 prioDryRun = lens _prioDryRun (\ s a -> s{_prioDryRun = a});
 
--- | The ID of the Reserved instance offering to purchase.
+-- | The ID of the Reserved Instance offering to purchase.
 prioReservedInstancesOfferingId :: Lens' PurchaseReservedInstancesOffering Text
 prioReservedInstancesOfferingId = lens _prioReservedInstancesOfferingId (\ s a -> s{_prioReservedInstancesOfferingId = a});
 
--- | The number of Reserved instances to purchase.
+-- | The number of Reserved Instances to purchase.
 prioInstanceCount :: Lens' PurchaseReservedInstancesOffering Int
 prioInstanceCount = lens _prioInstanceCount (\ s a -> s{_prioInstanceCount = a});
 
@@ -117,7 +115,7 @@
          where
         type Rs PurchaseReservedInstancesOffering =
              PurchaseReservedInstancesOfferingResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -125,6 +123,8 @@
                    (x .@? "reservedInstancesId") <*>
                      (pure (fromEnum s)))
 
+instance Hashable PurchaseReservedInstancesOffering
+
 instance ToHeaders PurchaseReservedInstancesOffering
          where
         toHeaders = const mempty
@@ -168,7 +168,7 @@
     , _priorsResponseStatus = pResponseStatus_
     }
 
--- | The IDs of the purchased Reserved instances.
+-- | The IDs of the purchased Reserved Instances.
 priorsReservedInstancesId :: Lens' PurchaseReservedInstancesOfferingResponse (Maybe Text)
 priorsReservedInstancesId = lens _priorsReservedInstancesId (\ s a -> s{_priorsReservedInstancesId = a});
 
diff --git a/gen/Network/AWS/EC2/PurchaseScheduledInstances.hs b/gen/Network/AWS/EC2/PurchaseScheduledInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/EC2/PurchaseScheduledInstances.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.EC2.PurchaseScheduledInstances
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Purchases one or more Scheduled Instances with the specified schedule.
+--
+-- Scheduled Instances enable you to purchase Amazon EC2 compute capacity
+-- by the hour for a one-year term. Before you can purchase a Scheduled
+-- Instance, you must call < DescribeScheduledInstanceAvailability> to
+-- check for available schedules and obtain a purchase token.
+module Network.AWS.EC2.PurchaseScheduledInstances
+    (
+    -- * Creating a Request
+      purchaseScheduledInstances
+    , PurchaseScheduledInstances
+    -- * Request Lenses
+    , psiClientToken
+    , psiDryRun
+    , psiPurchaseRequests
+
+    -- * Destructuring the Response
+    , purchaseScheduledInstancesResponse
+    , PurchaseScheduledInstancesResponse
+    -- * Response Lenses
+    , psirsScheduledInstanceSet
+    , psirsResponseStatus
+    ) where
+
+import           Network.AWS.EC2.Types
+import           Network.AWS.EC2.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Contains the parameters for PurchaseScheduledInstances.
+--
+-- /See:/ 'purchaseScheduledInstances' smart constructor.
+data PurchaseScheduledInstances = PurchaseScheduledInstances'
+    { _psiClientToken      :: !(Maybe Text)
+    , _psiDryRun           :: !(Maybe Bool)
+    , _psiPurchaseRequests :: !(List1 PurchaseRequest)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PurchaseScheduledInstances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psiClientToken'
+--
+-- * 'psiDryRun'
+--
+-- * 'psiPurchaseRequests'
+purchaseScheduledInstances
+    :: NonEmpty PurchaseRequest -- ^ 'psiPurchaseRequests'
+    -> PurchaseScheduledInstances
+purchaseScheduledInstances pPurchaseRequests_ =
+    PurchaseScheduledInstances'
+    { _psiClientToken = Nothing
+    , _psiDryRun = Nothing
+    , _psiPurchaseRequests = _List1 # pPurchaseRequests_
+    }
+
+-- | Unique, case-sensitive identifier that ensures the idempotency of the
+-- request. For more information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+psiClientToken :: Lens' PurchaseScheduledInstances (Maybe Text)
+psiClientToken = lens _psiClientToken (\ s a -> s{_psiClientToken = a});
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is 'DryRunOperation'.
+-- Otherwise, it is 'UnauthorizedOperation'.
+psiDryRun :: Lens' PurchaseScheduledInstances (Maybe Bool)
+psiDryRun = lens _psiDryRun (\ s a -> s{_psiDryRun = a});
+
+-- | One or more purchase requests.
+psiPurchaseRequests :: Lens' PurchaseScheduledInstances (NonEmpty PurchaseRequest)
+psiPurchaseRequests = lens _psiPurchaseRequests (\ s a -> s{_psiPurchaseRequests = a}) . _List1;
+
+instance AWSRequest PurchaseScheduledInstances where
+        type Rs PurchaseScheduledInstances =
+             PurchaseScheduledInstancesResponse
+        request = postQuery ec2
+        response
+          = receiveXML
+              (\ s h x ->
+                 PurchaseScheduledInstancesResponse' <$>
+                   (x .@? "scheduledInstanceSet" .!@ mempty >>=
+                      may (parseXMLList "item"))
+                     <*> (pure (fromEnum s)))
+
+instance Hashable PurchaseScheduledInstances
+
+instance ToHeaders PurchaseScheduledInstances where
+        toHeaders = const mempty
+
+instance ToPath PurchaseScheduledInstances where
+        toPath = const "/"
+
+instance ToQuery PurchaseScheduledInstances where
+        toQuery PurchaseScheduledInstances'{..}
+          = mconcat
+              ["Action" =:
+                 ("PurchaseScheduledInstances" :: ByteString),
+               "Version" =: ("2015-10-01" :: ByteString),
+               "ClientToken" =: _psiClientToken,
+               "DryRun" =: _psiDryRun,
+               toQueryList "PurchaseRequest" _psiPurchaseRequests]
+
+-- | Contains the output of PurchaseScheduledInstances.
+--
+-- /See:/ 'purchaseScheduledInstancesResponse' smart constructor.
+data PurchaseScheduledInstancesResponse = PurchaseScheduledInstancesResponse'
+    { _psirsScheduledInstanceSet :: !(Maybe [ScheduledInstance])
+    , _psirsResponseStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PurchaseScheduledInstancesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psirsScheduledInstanceSet'
+--
+-- * 'psirsResponseStatus'
+purchaseScheduledInstancesResponse
+    :: Int -- ^ 'psirsResponseStatus'
+    -> PurchaseScheduledInstancesResponse
+purchaseScheduledInstancesResponse pResponseStatus_ =
+    PurchaseScheduledInstancesResponse'
+    { _psirsScheduledInstanceSet = Nothing
+    , _psirsResponseStatus = pResponseStatus_
+    }
+
+-- | Information about the Scheduled Instances.
+psirsScheduledInstanceSet :: Lens' PurchaseScheduledInstancesResponse [ScheduledInstance]
+psirsScheduledInstanceSet = lens _psirsScheduledInstanceSet (\ s a -> s{_psirsScheduledInstanceSet = a}) . _Default . _Coerce;
+
+-- | The response status code.
+psirsResponseStatus :: Lens' PurchaseScheduledInstancesResponse Int
+psirsResponseStatus = lens _psirsResponseStatus (\ s a -> s{_psirsResponseStatus = a});
diff --git a/gen/Network/AWS/EC2/RebootInstances.hs b/gen/Network/AWS/EC2/RebootInstances.hs
--- a/gen/Network/AWS/EC2/RebootInstances.hs
+++ b/gen/Network/AWS/EC2/RebootInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.RebootInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,8 +29,6 @@
 -- For more information about troubleshooting, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html Getting Console Output and Rebooting Instances>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RebootInstances.html AWS API Reference> for RebootInstances.
 module Network.AWS.EC2.RebootInstances
     (
     -- * Creating a Request
@@ -86,8 +84,10 @@
 
 instance AWSRequest RebootInstances where
         type Rs RebootInstances = RebootInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull RebootInstancesResponse'
+
+instance Hashable RebootInstances
 
 instance ToHeaders RebootInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/RegisterImage.hs b/gen/Network/AWS/EC2/RegisterImage.hs
--- a/gen/Network/AWS/EC2/RegisterImage.hs
+++ b/gen/Network/AWS/EC2/RegisterImage.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.RegisterImage
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -24,8 +24,8 @@
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami.html Creating Your Own AMIs>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
 --
--- For Amazon EBS-backed instances, CreateImage creates and registers the
--- AMI in a single request, so you don\'t have to register the AMI
+-- For Amazon EBS-backed instances, < CreateImage> creates and registers
+-- the AMI in a single request, so you don\'t have to register the AMI
 -- yourself.
 --
 -- You can also use 'RegisterImage' to create an Amazon EBS-backed Linux
@@ -44,7 +44,7 @@
 -- can\'t successfully launch an instance from the AMI.
 --
 -- To create Windows AMIs or to create AMIs for Linux operating systems
--- that must retain AMI billing codes to work properly, see CreateImage.
+-- that must retain AMI billing codes to work properly, see < CreateImage>.
 --
 -- If needed, you can deregister an AMI at any time. Any modifications you
 -- make to an AMI backed by an instance store volume invalidates its
@@ -53,8 +53,6 @@
 --
 -- You can\'t register an image where a secondary (non-root) snapshot has
 -- AWS Marketplace product codes.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RegisterImage.html AWS API Reference> for RegisterImage.
 module Network.AWS.EC2.RegisterImage
     (
     -- * Creating a Request
@@ -211,12 +209,14 @@
 
 instance AWSRequest RegisterImage where
         type Rs RegisterImage = RegisterImageResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  RegisterImageResponse' <$>
                    (x .@? "imageId") <*> (pure (fromEnum s)))
+
+instance Hashable RegisterImage
 
 instance ToHeaders RegisterImage where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/RejectVPCPeeringConnection.hs b/gen/Network/AWS/EC2/RejectVPCPeeringConnection.hs
--- a/gen/Network/AWS/EC2/RejectVPCPeeringConnection.hs
+++ b/gen/Network/AWS/EC2/RejectVPCPeeringConnection.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.RejectVPCPeeringConnection
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,12 +20,10 @@
 --
 -- Rejects a VPC peering connection request. The VPC peering connection
 -- must be in the 'pending-acceptance' state. Use the
--- DescribeVpcPeeringConnections request to view your outstanding VPC
+-- < DescribeVpcPeeringConnections> request to view your outstanding VPC
 -- peering connection requests. To delete an active VPC peering connection,
 -- or to delete a VPC peering connection request that you initiated, use
--- DeleteVpcPeeringConnection.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RejectVPCPeeringConnection.html AWS API Reference> for RejectVPCPeeringConnection.
+-- < DeleteVpcPeeringConnection>.
 module Network.AWS.EC2.RejectVPCPeeringConnection
     (
     -- * Creating a Request
@@ -86,12 +84,14 @@
 instance AWSRequest RejectVPCPeeringConnection where
         type Rs RejectVPCPeeringConnection =
              RejectVPCPeeringConnectionResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  RejectVPCPeeringConnectionResponse' <$>
                    (x .@? "return") <*> (pure (fromEnum s)))
+
+instance Hashable RejectVPCPeeringConnection
 
 instance ToHeaders RejectVPCPeeringConnection where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ReleaseAddress.hs b/gen/Network/AWS/EC2/ReleaseAddress.hs
--- a/gen/Network/AWS/EC2/ReleaseAddress.hs
+++ b/gen/Network/AWS/EC2/ReleaseAddress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ReleaseAddress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -30,13 +30,11 @@
 -- [EC2-Classic, default VPC] Releasing an Elastic IP address automatically
 -- disassociates it from any instance that it\'s associated with. To
 -- disassociate an Elastic IP address without releasing it, use
--- DisassociateAddress.
+-- < DisassociateAddress>.
 --
--- [Nondefault VPC] You must use DisassociateAddress to disassociate the
+-- [Nondefault VPC] You must use < DisassociateAddress> to disassociate the
 -- Elastic IP address before you try to release it. Otherwise, Amazon EC2
 -- returns an error ('InvalidIPAddress.InUse').
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ReleaseAddress.html AWS API Reference> for ReleaseAddress.
 module Network.AWS.EC2.ReleaseAddress
     (
     -- * Creating a Request
@@ -101,8 +99,10 @@
 
 instance AWSRequest ReleaseAddress where
         type Rs ReleaseAddress = ReleaseAddressResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull ReleaseAddressResponse'
+
+instance Hashable ReleaseAddress
 
 instance ToHeaders ReleaseAddress where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ReleaseHosts.hs b/gen/Network/AWS/EC2/ReleaseHosts.hs
--- a/gen/Network/AWS/EC2/ReleaseHosts.hs
+++ b/gen/Network/AWS/EC2/ReleaseHosts.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ReleaseHosts
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -30,8 +30,6 @@
 -- then try again.
 --
 -- Released hosts will still appear in a DescribeHosts response.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ReleaseHosts.html AWS API Reference> for ReleaseHosts.
 module Network.AWS.EC2.ReleaseHosts
     (
     -- * Creating a Request
@@ -79,7 +77,7 @@
 
 instance AWSRequest ReleaseHosts where
         type Rs ReleaseHosts = ReleaseHostsResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -90,6 +88,8 @@
                      (x .@? "successful" .!@ mempty >>=
                         may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable ReleaseHosts
 
 instance ToHeaders ReleaseHosts where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ReplaceNetworkACLAssociation.hs b/gen/Network/AWS/EC2/ReplaceNetworkACLAssociation.hs
--- a/gen/Network/AWS/EC2/ReplaceNetworkACLAssociation.hs
+++ b/gen/Network/AWS/EC2/ReplaceNetworkACLAssociation.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ReplaceNetworkACLAssociation
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- network ACL. For more information about network ACLs, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ReplaceNetworkACLAssociation.html AWS API Reference> for ReplaceNetworkACLAssociation.
 module Network.AWS.EC2.ReplaceNetworkACLAssociation
     (
     -- * Creating a Request
@@ -97,12 +95,14 @@
          where
         type Rs ReplaceNetworkACLAssociation =
              ReplaceNetworkACLAssociationResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ReplaceNetworkACLAssociationResponse' <$>
                    (x .@? "newAssociationId") <*> (pure (fromEnum s)))
+
+instance Hashable ReplaceNetworkACLAssociation
 
 instance ToHeaders ReplaceNetworkACLAssociation where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ReplaceNetworkACLEntry.hs b/gen/Network/AWS/EC2/ReplaceNetworkACLEntry.hs
--- a/gen/Network/AWS/EC2/ReplaceNetworkACLEntry.hs
+++ b/gen/Network/AWS/EC2/ReplaceNetworkACLEntry.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ReplaceNetworkACLEntry
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- network ACLs, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html Network ACLs>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ReplaceNetworkACLEntry.html AWS API Reference> for ReplaceNetworkACLEntry.
 module Network.AWS.EC2.ReplaceNetworkACLEntry
     (
     -- * Creating a Request
@@ -153,9 +151,11 @@
 instance AWSRequest ReplaceNetworkACLEntry where
         type Rs ReplaceNetworkACLEntry =
              ReplaceNetworkACLEntryResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull ReplaceNetworkACLEntryResponse'
+
+instance Hashable ReplaceNetworkACLEntry
 
 instance ToHeaders ReplaceNetworkACLEntry where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ReplaceRoute.hs b/gen/Network/AWS/EC2/ReplaceRoute.hs
--- a/gen/Network/AWS/EC2/ReplaceRoute.hs
+++ b/gen/Network/AWS/EC2/ReplaceRoute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ReplaceRoute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -26,8 +26,6 @@
 -- For more information about route tables, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html Route Tables>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ReplaceRoute.html AWS API Reference> for ReplaceRoute.
 module Network.AWS.EC2.ReplaceRoute
     (
     -- * Creating a Request
@@ -140,8 +138,10 @@
 
 instance AWSRequest ReplaceRoute where
         type Rs ReplaceRoute = ReplaceRouteResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull ReplaceRouteResponse'
+
+instance Hashable ReplaceRoute
 
 instance ToHeaders ReplaceRoute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ReplaceRouteTableAssociation.hs b/gen/Network/AWS/EC2/ReplaceRouteTableAssociation.hs
--- a/gen/Network/AWS/EC2/ReplaceRouteTableAssociation.hs
+++ b/gen/Network/AWS/EC2/ReplaceRouteTableAssociation.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ReplaceRouteTableAssociation
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,8 +29,6 @@
 -- the main route table in the VPC. You just specify the main route
 -- table\'s association ID and the route table to be the new main route
 -- table.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ReplaceRouteTableAssociation.html AWS API Reference> for ReplaceRouteTableAssociation.
 module Network.AWS.EC2.ReplaceRouteTableAssociation
     (
     -- * Creating a Request
@@ -102,12 +100,14 @@
          where
         type Rs ReplaceRouteTableAssociation =
              ReplaceRouteTableAssociationResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  ReplaceRouteTableAssociationResponse' <$>
                    (x .@? "newAssociationId") <*> (pure (fromEnum s)))
+
+instance Hashable ReplaceRouteTableAssociation
 
 instance ToHeaders ReplaceRouteTableAssociation where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ReportInstanceStatus.hs b/gen/Network/AWS/EC2/ReportInstanceStatus.hs
--- a/gen/Network/AWS/EC2/ReportInstanceStatus.hs
+++ b/gen/Network/AWS/EC2/ReportInstanceStatus.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ReportInstanceStatus
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,14 +20,13 @@
 --
 -- Submits feedback about the status of an instance. The instance must be
 -- in the 'running' state. If your experience with the instance differs
--- from the instance status returned by DescribeInstanceStatus, use
--- ReportInstanceStatus to report your experience with the instance. Amazon
--- EC2 collects this information to improve the accuracy of status checks.
+-- from the instance status returned by < DescribeInstanceStatus>, use
+-- < ReportInstanceStatus> to report your experience with the instance.
+-- Amazon EC2 collects this information to improve the accuracy of status
+-- checks.
 --
 -- Use of this action does not change the value returned by
--- DescribeInstanceStatus.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ReportInstanceStatus.html AWS API Reference> for ReportInstanceStatus.
+-- < DescribeInstanceStatus>.
 module Network.AWS.EC2.ReportInstanceStatus
     (
     -- * Creating a Request
@@ -157,8 +156,10 @@
 instance AWSRequest ReportInstanceStatus where
         type Rs ReportInstanceStatus =
              ReportInstanceStatusResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull ReportInstanceStatusResponse'
+
+instance Hashable ReportInstanceStatus
 
 instance ToHeaders ReportInstanceStatus where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/RequestSpotFleet.hs b/gen/Network/AWS/EC2/RequestSpotFleet.hs
--- a/gen/Network/AWS/EC2/RequestSpotFleet.hs
+++ b/gen/Network/AWS/EC2/RequestSpotFleet.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.RequestSpotFleet
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -37,8 +37,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-fleet-requests.html Spot Fleet Requests>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RequestSpotFleet.html AWS API Reference> for RequestSpotFleet.
 module Network.AWS.EC2.RequestSpotFleet
     (
     -- * Creating a Request
@@ -100,12 +98,14 @@
 
 instance AWSRequest RequestSpotFleet where
         type Rs RequestSpotFleet = RequestSpotFleetResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  RequestSpotFleetResponse' <$>
                    (pure (fromEnum s)) <*> (x .@ "spotFleetRequestId"))
+
+instance Hashable RequestSpotFleet
 
 instance ToHeaders RequestSpotFleet where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/RequestSpotInstances.hs b/gen/Network/AWS/EC2/RequestSpotInstances.hs
--- a/gen/Network/AWS/EC2/RequestSpotInstances.hs
+++ b/gen/Network/AWS/EC2/RequestSpotInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.RequestSpotInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -25,25 +25,23 @@
 -- more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html Spot Instance Requests>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RequestSpotInstances.html AWS API Reference> for RequestSpotInstances.
 module Network.AWS.EC2.RequestSpotInstances
     (
     -- * Creating a Request
       requestSpotInstances
     , RequestSpotInstances
     -- * Request Lenses
-    , rsiBlockDurationMinutes
-    , rsiClientToken
-    , rsiInstanceCount
-    , rsiLaunchSpecification
-    , rsiAvailabilityZoneGroup
-    , rsiValidUntil
-    , rsiLaunchGroup
-    , rsiType
-    , rsiValidFrom
-    , rsiDryRun
-    , rsiSpotPrice
+    , rsisBlockDurationMinutes
+    , rsisClientToken
+    , rsisInstanceCount
+    , rsisLaunchSpecification
+    , rsisAvailabilityZoneGroup
+    , rsisValidUntil
+    , rsisLaunchGroup
+    , rsisType
+    , rsisValidFrom
+    , rsisDryRun
+    , rsisSpotPrice
 
     -- * Destructuring the Response
     , requestSpotInstancesResponse
@@ -64,64 +62,65 @@
 --
 -- /See:/ 'requestSpotInstances' smart constructor.
 data RequestSpotInstances = RequestSpotInstances'
-    { _rsiBlockDurationMinutes  :: !(Maybe Int)
-    , _rsiClientToken           :: !(Maybe Text)
-    , _rsiInstanceCount         :: !(Maybe Int)
-    , _rsiLaunchSpecification   :: !(Maybe RequestSpotLaunchSpecification)
-    , _rsiAvailabilityZoneGroup :: !(Maybe Text)
-    , _rsiValidUntil            :: !(Maybe ISO8601)
-    , _rsiLaunchGroup           :: !(Maybe Text)
-    , _rsiType                  :: !(Maybe SpotInstanceType)
-    , _rsiValidFrom             :: !(Maybe ISO8601)
-    , _rsiDryRun                :: !(Maybe Bool)
-    , _rsiSpotPrice             :: !Text
+    { _rsisBlockDurationMinutes  :: !(Maybe Int)
+    , _rsisClientToken           :: !(Maybe Text)
+    , _rsisInstanceCount         :: !(Maybe Int)
+    , _rsisLaunchSpecification   :: !(Maybe RequestSpotLaunchSpecification)
+    , _rsisAvailabilityZoneGroup :: !(Maybe Text)
+    , _rsisValidUntil            :: !(Maybe ISO8601)
+    , _rsisLaunchGroup           :: !(Maybe Text)
+    , _rsisType                  :: !(Maybe SpotInstanceType)
+    , _rsisValidFrom             :: !(Maybe ISO8601)
+    , _rsisDryRun                :: !(Maybe Bool)
+    , _rsisSpotPrice             :: !Text
     } deriving (Eq,Read,Show,Data,Typeable,Generic)
 
 -- | Creates a value of 'RequestSpotInstances' with the minimum fields required to make a request.
 --
 -- Use one of the following lenses to modify other fields as desired:
 --
--- * 'rsiBlockDurationMinutes'
+-- * 'rsisBlockDurationMinutes'
 --
--- * 'rsiClientToken'
+-- * 'rsisClientToken'
 --
--- * 'rsiInstanceCount'
+-- * 'rsisInstanceCount'
 --
--- * 'rsiLaunchSpecification'
+-- * 'rsisLaunchSpecification'
 --
--- * 'rsiAvailabilityZoneGroup'
+-- * 'rsisAvailabilityZoneGroup'
 --
--- * 'rsiValidUntil'
+-- * 'rsisValidUntil'
 --
--- * 'rsiLaunchGroup'
+-- * 'rsisLaunchGroup'
 --
--- * 'rsiType'
+-- * 'rsisType'
 --
--- * 'rsiValidFrom'
+-- * 'rsisValidFrom'
 --
--- * 'rsiDryRun'
+-- * 'rsisDryRun'
 --
--- * 'rsiSpotPrice'
+-- * 'rsisSpotPrice'
 requestSpotInstances
-    :: Text -- ^ 'rsiSpotPrice'
+    :: Text -- ^ 'rsisSpotPrice'
     -> RequestSpotInstances
 requestSpotInstances pSpotPrice_ =
     RequestSpotInstances'
-    { _rsiBlockDurationMinutes = Nothing
-    , _rsiClientToken = Nothing
-    , _rsiInstanceCount = Nothing
-    , _rsiLaunchSpecification = Nothing
-    , _rsiAvailabilityZoneGroup = Nothing
-    , _rsiValidUntil = Nothing
-    , _rsiLaunchGroup = Nothing
-    , _rsiType = Nothing
-    , _rsiValidFrom = Nothing
-    , _rsiDryRun = Nothing
-    , _rsiSpotPrice = pSpotPrice_
+    { _rsisBlockDurationMinutes = Nothing
+    , _rsisClientToken = Nothing
+    , _rsisInstanceCount = Nothing
+    , _rsisLaunchSpecification = Nothing
+    , _rsisAvailabilityZoneGroup = Nothing
+    , _rsisValidUntil = Nothing
+    , _rsisLaunchGroup = Nothing
+    , _rsisType = Nothing
+    , _rsisValidFrom = Nothing
+    , _rsisDryRun = Nothing
+    , _rsisSpotPrice = pSpotPrice_
     }
 
--- | The required duration for the Spot instances, in minutes. This value
--- must be a multiple of 60 (60, 120, 180, 240, 300, or 360).
+-- | The required duration for the Spot instances (also known as Spot
+-- blocks), in minutes. This value must be a multiple of 60 (60, 120, 180,
+-- 240, 300, or 360).
 --
 -- The duration period starts as soon as your Spot instance receives its
 -- instance ID. At the end of the duration period, Amazon EC2 marks the
@@ -131,25 +130,25 @@
 --
 -- Note that you can\'t specify an Availability Zone group or a launch
 -- group if you specify a duration.
-rsiBlockDurationMinutes :: Lens' RequestSpotInstances (Maybe Int)
-rsiBlockDurationMinutes = lens _rsiBlockDurationMinutes (\ s a -> s{_rsiBlockDurationMinutes = a});
+rsisBlockDurationMinutes :: Lens' RequestSpotInstances (Maybe Int)
+rsisBlockDurationMinutes = lens _rsisBlockDurationMinutes (\ s a -> s{_rsisBlockDurationMinutes = a});
 
 -- | Unique, case-sensitive identifier that you provide to ensure the
 -- idempotency of the request. For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
-rsiClientToken :: Lens' RequestSpotInstances (Maybe Text)
-rsiClientToken = lens _rsiClientToken (\ s a -> s{_rsiClientToken = a});
+rsisClientToken :: Lens' RequestSpotInstances (Maybe Text)
+rsisClientToken = lens _rsisClientToken (\ s a -> s{_rsisClientToken = a});
 
 -- | The maximum number of Spot instances to launch.
 --
 -- Default: 1
-rsiInstanceCount :: Lens' RequestSpotInstances (Maybe Int)
-rsiInstanceCount = lens _rsiInstanceCount (\ s a -> s{_rsiInstanceCount = a});
+rsisInstanceCount :: Lens' RequestSpotInstances (Maybe Int)
+rsisInstanceCount = lens _rsisInstanceCount (\ s a -> s{_rsisInstanceCount = a});
 
 -- | Undocumented member.
-rsiLaunchSpecification :: Lens' RequestSpotInstances (Maybe RequestSpotLaunchSpecification)
-rsiLaunchSpecification = lens _rsiLaunchSpecification (\ s a -> s{_rsiLaunchSpecification = a});
+rsisLaunchSpecification :: Lens' RequestSpotInstances (Maybe RequestSpotLaunchSpecification)
+rsisLaunchSpecification = lens _rsisLaunchSpecification (\ s a -> s{_rsisLaunchSpecification = a});
 
 -- | The user-specified name for a logical grouping of bids.
 --
@@ -171,8 +170,8 @@
 -- even if you specified the same Availability Zone group.
 --
 -- Default: Instances are launched in any available Availability Zone.
-rsiAvailabilityZoneGroup :: Lens' RequestSpotInstances (Maybe Text)
-rsiAvailabilityZoneGroup = lens _rsiAvailabilityZoneGroup (\ s a -> s{_rsiAvailabilityZoneGroup = a});
+rsisAvailabilityZoneGroup :: Lens' RequestSpotInstances (Maybe Text)
+rsisAvailabilityZoneGroup = lens _rsisAvailabilityZoneGroup (\ s a -> s{_rsisAvailabilityZoneGroup = a});
 
 -- | The end date of the request. If this is a one-time request, the request
 -- remains active until all instances launch, the request is canceled, or
@@ -180,21 +179,21 @@
 -- until it is canceled or this date and time is reached.
 --
 -- Default: The request is effective indefinitely.
-rsiValidUntil :: Lens' RequestSpotInstances (Maybe UTCTime)
-rsiValidUntil = lens _rsiValidUntil (\ s a -> s{_rsiValidUntil = a}) . mapping _Time;
+rsisValidUntil :: Lens' RequestSpotInstances (Maybe UTCTime)
+rsisValidUntil = lens _rsisValidUntil (\ s a -> s{_rsisValidUntil = a}) . mapping _Time;
 
 -- | The instance launch group. Launch groups are Spot instances that launch
 -- together and terminate together.
 --
 -- Default: Instances are launched and terminated individually
-rsiLaunchGroup :: Lens' RequestSpotInstances (Maybe Text)
-rsiLaunchGroup = lens _rsiLaunchGroup (\ s a -> s{_rsiLaunchGroup = a});
+rsisLaunchGroup :: Lens' RequestSpotInstances (Maybe Text)
+rsisLaunchGroup = lens _rsisLaunchGroup (\ s a -> s{_rsisLaunchGroup = a});
 
 -- | The Spot instance request type.
 --
 -- Default: 'one-time'
-rsiType :: Lens' RequestSpotInstances (Maybe SpotInstanceType)
-rsiType = lens _rsiType (\ s a -> s{_rsiType = a});
+rsisType :: Lens' RequestSpotInstances (Maybe SpotInstanceType)
+rsisType = lens _rsisType (\ s a -> s{_rsisType = a});
 
 -- | The start date of the request. If this is a one-time request, the
 -- request becomes active at this date and time and remains active until
@@ -203,25 +202,25 @@
 -- and time and remains active until it expires or is canceled.
 --
 -- Default: The request is effective indefinitely.
-rsiValidFrom :: Lens' RequestSpotInstances (Maybe UTCTime)
-rsiValidFrom = lens _rsiValidFrom (\ s a -> s{_rsiValidFrom = a}) . mapping _Time;
+rsisValidFrom :: Lens' RequestSpotInstances (Maybe UTCTime)
+rsisValidFrom = lens _rsisValidFrom (\ s a -> s{_rsisValidFrom = a}) . mapping _Time;
 
 -- | Checks whether you have the required permissions for the action, without
 -- actually making the request, and provides an error response. If you have
 -- the required permissions, the error response is 'DryRunOperation'.
 -- Otherwise, it is 'UnauthorizedOperation'.
-rsiDryRun :: Lens' RequestSpotInstances (Maybe Bool)
-rsiDryRun = lens _rsiDryRun (\ s a -> s{_rsiDryRun = a});
+rsisDryRun :: Lens' RequestSpotInstances (Maybe Bool)
+rsisDryRun = lens _rsisDryRun (\ s a -> s{_rsisDryRun = a});
 
 -- | The maximum hourly price (bid) for any Spot instance launched to fulfill
 -- the request.
-rsiSpotPrice :: Lens' RequestSpotInstances Text
-rsiSpotPrice = lens _rsiSpotPrice (\ s a -> s{_rsiSpotPrice = a});
+rsisSpotPrice :: Lens' RequestSpotInstances Text
+rsisSpotPrice = lens _rsisSpotPrice (\ s a -> s{_rsisSpotPrice = a});
 
 instance AWSRequest RequestSpotInstances where
         type Rs RequestSpotInstances =
              RequestSpotInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -230,6 +229,8 @@
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
 
+instance Hashable RequestSpotInstances
+
 instance ToHeaders RequestSpotInstances where
         toHeaders = const mempty
 
@@ -241,15 +242,17 @@
           = mconcat
               ["Action" =: ("RequestSpotInstances" :: ByteString),
                "Version" =: ("2015-10-01" :: ByteString),
-               "BlockDurationMinutes" =: _rsiBlockDurationMinutes,
-               "ClientToken" =: _rsiClientToken,
-               "InstanceCount" =: _rsiInstanceCount,
-               "LaunchSpecification" =: _rsiLaunchSpecification,
-               "AvailabilityZoneGroup" =: _rsiAvailabilityZoneGroup,
-               "ValidUntil" =: _rsiValidUntil,
-               "LaunchGroup" =: _rsiLaunchGroup, "Type" =: _rsiType,
-               "ValidFrom" =: _rsiValidFrom, "DryRun" =: _rsiDryRun,
-               "SpotPrice" =: _rsiSpotPrice]
+               "BlockDurationMinutes" =: _rsisBlockDurationMinutes,
+               "ClientToken" =: _rsisClientToken,
+               "InstanceCount" =: _rsisInstanceCount,
+               "LaunchSpecification" =: _rsisLaunchSpecification,
+               "AvailabilityZoneGroup" =:
+                 _rsisAvailabilityZoneGroup,
+               "ValidUntil" =: _rsisValidUntil,
+               "LaunchGroup" =: _rsisLaunchGroup,
+               "Type" =: _rsisType, "ValidFrom" =: _rsisValidFrom,
+               "DryRun" =: _rsisDryRun,
+               "SpotPrice" =: _rsisSpotPrice]
 
 -- | Contains the output of RequestSpotInstances.
 --
diff --git a/gen/Network/AWS/EC2/ResetImageAttribute.hs b/gen/Network/AWS/EC2/ResetImageAttribute.hs
--- a/gen/Network/AWS/EC2/ResetImageAttribute.hs
+++ b/gen/Network/AWS/EC2/ResetImageAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ResetImageAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -21,8 +21,6 @@
 -- Resets an attribute of an AMI to its default value.
 --
 -- The productCodes attribute can\'t be reset.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ResetImageAttribute.html AWS API Reference> for ResetImageAttribute.
 module Network.AWS.EC2.ResetImageAttribute
     (
     -- * Creating a Request
@@ -91,8 +89,10 @@
 instance AWSRequest ResetImageAttribute where
         type Rs ResetImageAttribute =
              ResetImageAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveNull ResetImageAttributeResponse'
+
+instance Hashable ResetImageAttribute
 
 instance ToHeaders ResetImageAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ResetInstanceAttribute.hs b/gen/Network/AWS/EC2/ResetInstanceAttribute.hs
--- a/gen/Network/AWS/EC2/ResetInstanceAttribute.hs
+++ b/gen/Network/AWS/EC2/ResetInstanceAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ResetInstanceAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -28,8 +28,6 @@
 -- NAT. For more information, see
 -- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html NAT Instances>
 -- in the /Amazon Virtual Private Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ResetInstanceAttribute.html AWS API Reference> for ResetInstanceAttribute.
 module Network.AWS.EC2.ResetInstanceAttribute
     (
     -- * Creating a Request
@@ -97,9 +95,11 @@
 instance AWSRequest ResetInstanceAttribute where
         type Rs ResetInstanceAttribute =
              ResetInstanceAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull ResetInstanceAttributeResponse'
+
+instance Hashable ResetInstanceAttribute
 
 instance ToHeaders ResetInstanceAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/ResetNetworkInterfaceAttribute.hs b/gen/Network/AWS/EC2/ResetNetworkInterfaceAttribute.hs
--- a/gen/Network/AWS/EC2/ResetNetworkInterfaceAttribute.hs
+++ b/gen/Network/AWS/EC2/ResetNetworkInterfaceAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ResetNetworkInterfaceAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Resets a network interface attribute. You can specify only one attribute
 -- at a time.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ResetNetworkInterfaceAttribute.html AWS API Reference> for ResetNetworkInterfaceAttribute.
 module Network.AWS.EC2.ResetNetworkInterfaceAttribute
     (
     -- * Creating a Request
@@ -89,9 +87,11 @@
          where
         type Rs ResetNetworkInterfaceAttribute =
              ResetNetworkInterfaceAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull ResetNetworkInterfaceAttributeResponse'
+
+instance Hashable ResetNetworkInterfaceAttribute
 
 instance ToHeaders ResetNetworkInterfaceAttribute
          where
diff --git a/gen/Network/AWS/EC2/ResetSnapshotAttribute.hs b/gen/Network/AWS/EC2/ResetSnapshotAttribute.hs
--- a/gen/Network/AWS/EC2/ResetSnapshotAttribute.hs
+++ b/gen/Network/AWS/EC2/ResetSnapshotAttribute.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.ResetSnapshotAttribute
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,6 @@
 -- For more information on modifying snapshot permissions, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html Sharing Snapshots>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-ResetSnapshotAttribute.html AWS API Reference> for ResetSnapshotAttribute.
 module Network.AWS.EC2.ResetSnapshotAttribute
     (
     -- * Creating a Request
@@ -93,9 +91,11 @@
 instance AWSRequest ResetSnapshotAttribute where
         type Rs ResetSnapshotAttribute =
              ResetSnapshotAttributeResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull ResetSnapshotAttributeResponse'
+
+instance Hashable ResetSnapshotAttribute
 
 instance ToHeaders ResetSnapshotAttribute where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/RestoreAddressToClassic.hs b/gen/Network/AWS/EC2/RestoreAddressToClassic.hs
--- a/gen/Network/AWS/EC2/RestoreAddressToClassic.hs
+++ b/gen/Network/AWS/EC2/RestoreAddressToClassic.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.RestoreAddressToClassic
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,9 @@
 -- platform back to the EC2-Classic platform. You cannot move an Elastic IP
 -- address that was originally allocated for use in EC2-VPC. The Elastic IP
 -- address must not be associated with an instance or network interface.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RestoreAddressToClassic.html AWS API Reference> for RestoreAddressToClassic.
+-- You cannot restore an Elastic IP address that\'s associated with a
+-- reverse DNS record. Contact AWS account and billing support to remove
+-- the reverse DNS record.
 module Network.AWS.EC2.RestoreAddressToClassic
     (
     -- * Creating a Request
@@ -85,13 +86,15 @@
 instance AWSRequest RestoreAddressToClassic where
         type Rs RestoreAddressToClassic =
              RestoreAddressToClassicResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
                  RestoreAddressToClassicResponse' <$>
                    (x .@? "status") <*> (x .@? "publicIp") <*>
                      (pure (fromEnum s)))
+
+instance Hashable RestoreAddressToClassic
 
 instance ToHeaders RestoreAddressToClassic where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/RevokeSecurityGroupEgress.hs b/gen/Network/AWS/EC2/RevokeSecurityGroupEgress.hs
--- a/gen/Network/AWS/EC2/RevokeSecurityGroupEgress.hs
+++ b/gen/Network/AWS/EC2/RevokeSecurityGroupEgress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.RevokeSecurityGroupEgress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -31,8 +31,6 @@
 --
 -- Rule changes are propagated to instances within the security group as
 -- quickly as possible. However, a small delay might occur.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RevokeSecurityGroupEgress.html AWS API Reference> for RevokeSecurityGroupEgress.
 module Network.AWS.EC2.RevokeSecurityGroupEgress
     (
     -- * Creating a Request
@@ -164,9 +162,11 @@
 instance AWSRequest RevokeSecurityGroupEgress where
         type Rs RevokeSecurityGroupEgress =
              RevokeSecurityGroupEgressResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull RevokeSecurityGroupEgressResponse'
+
+instance Hashable RevokeSecurityGroupEgress
 
 instance ToHeaders RevokeSecurityGroupEgress where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/RevokeSecurityGroupIngress.hs b/gen/Network/AWS/EC2/RevokeSecurityGroupIngress.hs
--- a/gen/Network/AWS/EC2/RevokeSecurityGroupIngress.hs
+++ b/gen/Network/AWS/EC2/RevokeSecurityGroupIngress.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.RevokeSecurityGroupIngress
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,8 +29,6 @@
 --
 -- Rule changes are propagated to instances within the security group as
 -- quickly as possible. However, a small delay might occur.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RevokeSecurityGroupIngress.html AWS API Reference> for RevokeSecurityGroupIngress.
 module Network.AWS.EC2.RevokeSecurityGroupIngress
     (
     -- * Creating a Request
@@ -176,9 +174,11 @@
 instance AWSRequest RevokeSecurityGroupIngress where
         type Rs RevokeSecurityGroupIngress =
              RevokeSecurityGroupIngressResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull RevokeSecurityGroupIngressResponse'
+
+instance Hashable RevokeSecurityGroupIngress
 
 instance ToHeaders RevokeSecurityGroupIngress where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/RunInstances.hs b/gen/Network/AWS/EC2/RunInstances.hs
--- a/gen/Network/AWS/EC2/RunInstances.hs
+++ b/gen/Network/AWS/EC2/RunInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.RunInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -23,8 +23,12 @@
 --
 -- When you launch an instance, it enters the 'pending' state. After the
 -- instance is ready for you, it enters the 'running' state. To check the
--- state of your instance, call DescribeInstances.
+-- state of your instance, call < DescribeInstances>.
 --
+-- To ensure faster instance launches, break up large requests into smaller
+-- batches. For example, create five separate launch requests for 100
+-- instances each instead of one launch request for 500 instances.
+--
 -- If you don\'t specify a security group when launching an instance,
 -- Amazon EC2 uses the default security group. For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html Security Groups>
@@ -51,17 +55,16 @@
 -- If any of the AMIs have a product code attached for which the user has
 -- not subscribed, 'RunInstances' fails.
 --
--- T2 instance types can only be launched into a VPC. If you do not have a
--- default VPC, or if you do not specify a subnet ID in the request,
--- 'RunInstances' fails.
+-- Some instance types can only be launched into a VPC. If you do not have
+-- a default VPC, or if you do not specify a subnet ID in the request,
+-- 'RunInstances' fails. For more information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-vpc.html#vpc-only-instance-types Instance Types Available Only in a VPC>.
 --
 -- For more information about troubleshooting, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_InstanceStraightToTerminated.html What To Do If An Instance Immediately Terminates>,
 -- and
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html Troubleshooting Connecting to Your Instance>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-RunInstances.html AWS API Reference> for RunInstances.
 module Network.AWS.EC2.RunInstances
     (
     -- * Creating a Request
@@ -223,7 +226,7 @@
 rAdditionalInfo = lens _rAdditionalInfo (\ s a -> s{_rAdditionalInfo = a});
 
 -- | One or more security group IDs. You can create a security group using
--- CreateSecurityGroup.
+-- < CreateSecurityGroup>.
 --
 -- Default: Amazon EC2 uses the default security group.
 rSecurityGroupIds :: Lens' RunInstances [Text]
@@ -249,7 +252,7 @@
 -- set this parameter to 'true' and then later want to be able to terminate
 -- the instance, you must first change the value of the
 -- 'disableApiTermination' attribute to 'false' using
--- ModifyInstanceAttribute. Alternatively, if you set
+-- < ModifyInstanceAttribute>. Alternatively, if you set
 -- 'InstanceInitiatedShutdownBehavior' to 'terminate', you can terminate
 -- the instance by running the shutdown command from the instance.
 --
@@ -257,8 +260,8 @@
 rDisableAPITermination :: Lens' RunInstances (Maybe Bool)
 rDisableAPITermination = lens _rDisableAPITermination (\ s a -> s{_rDisableAPITermination = a});
 
--- | The name of the key pair. You can create a key pair using CreateKeyPair
--- or ImportKeyPair.
+-- | The name of the key pair. You can create a key pair using
+-- < CreateKeyPair> or < ImportKeyPair>.
 --
 -- If you do not specify a key pair, you can\'t connect to the instance
 -- unless you choose an AMI that is configured to allow users another way
@@ -310,7 +313,14 @@
 rEBSOptimized :: Lens' RunInstances (Maybe Bool)
 rEBSOptimized = lens _rEBSOptimized (\ s a -> s{_rEBSOptimized = a});
 
--- | The Base64-encoded MIME user data for the instances.
+-- | Data to configure the instance, or a script to run during instance
+-- launch. For more information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html Running Commands on Your Linux Instance at Launch>
+-- (Linux) and
+-- <http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#instancedata-add-user-data Adding User Data>
+-- (Windows). For API calls, the text must be base64-encoded. For command
+-- line tools, the encoding is performed for you, and you can load the text
+-- from a file.
 rUserData :: Lens' RunInstances (Maybe Text)
 rUserData = lens _rUserData (\ s a -> s{_rUserData = a});
 
@@ -358,7 +368,7 @@
 rPlacement :: Lens' RunInstances (Maybe Placement)
 rPlacement = lens _rPlacement (\ s a -> s{_rPlacement = a});
 
--- | The ID of the AMI, which you can get by calling DescribeImages.
+-- | The ID of the AMI, which you can get by calling < DescribeImages>.
 rImageId :: Lens' RunInstances Text
 rImageId = lens _rImageId (\ s a -> s{_rImageId = a});
 
@@ -382,14 +392,16 @@
 -- specified instance type. For more information about the default limits,
 -- and how to request an increase, see
 -- <http://aws.amazon.com/ec2/faqs/#How_many_instances_can_I_run_in_Amazon_EC2 How many instances can I run in Amazon EC2>
--- in the Amazon EC2 General FAQ.
+-- in the Amazon EC2 FAQ.
 rMaxCount :: Lens' RunInstances Int
 rMaxCount = lens _rMaxCount (\ s a -> s{_rMaxCount = a});
 
 instance AWSRequest RunInstances where
         type Rs RunInstances = Reservation
-        request = postQuery eC2
+        request = postQuery ec2
         response = receiveXML (\ s h x -> parseXML x)
+
+instance Hashable RunInstances
 
 instance ToHeaders RunInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/RunScheduledInstances.hs b/gen/Network/AWS/EC2/RunScheduledInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/EC2/RunScheduledInstances.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.EC2.RunScheduledInstances
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Launches the specified Scheduled Instances.
+--
+-- Before you can launch a Scheduled Instance, you must purchase it and
+-- obtain an identifier using < PurchaseScheduledInstances>.
+--
+-- You must launch a Scheduled Instance during its scheduled time period.
+-- You can\'t stop or reboot a Scheduled Instance, but you can terminate it
+-- as needed. If you terminate a Scheduled Instance before the current
+-- scheduled time period ends, you can launch it again after a few minutes.
+module Network.AWS.EC2.RunScheduledInstances
+    (
+    -- * Creating a Request
+      runScheduledInstances
+    , RunScheduledInstances
+    -- * Request Lenses
+    , rsiClientToken
+    , rsiInstanceCount
+    , rsiDryRun
+    , rsiScheduledInstanceId
+    , rsiLaunchSpecification
+
+    -- * Destructuring the Response
+    , runScheduledInstancesResponse
+    , RunScheduledInstancesResponse
+    -- * Response Lenses
+    , rrsInstanceIdSet
+    , rrsResponseStatus
+    ) where
+
+import           Network.AWS.EC2.Types
+import           Network.AWS.EC2.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Contains the parameters for RunScheduledInstances.
+--
+-- /See:/ 'runScheduledInstances' smart constructor.
+data RunScheduledInstances = RunScheduledInstances'
+    { _rsiClientToken         :: !(Maybe Text)
+    , _rsiInstanceCount       :: !(Maybe Int)
+    , _rsiDryRun              :: !(Maybe Bool)
+    , _rsiScheduledInstanceId :: !Text
+    , _rsiLaunchSpecification :: !ScheduledInstancesLaunchSpecification
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RunScheduledInstances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rsiClientToken'
+--
+-- * 'rsiInstanceCount'
+--
+-- * 'rsiDryRun'
+--
+-- * 'rsiScheduledInstanceId'
+--
+-- * 'rsiLaunchSpecification'
+runScheduledInstances
+    :: Text -- ^ 'rsiScheduledInstanceId'
+    -> ScheduledInstancesLaunchSpecification -- ^ 'rsiLaunchSpecification'
+    -> RunScheduledInstances
+runScheduledInstances pScheduledInstanceId_ pLaunchSpecification_ =
+    RunScheduledInstances'
+    { _rsiClientToken = Nothing
+    , _rsiInstanceCount = Nothing
+    , _rsiDryRun = Nothing
+    , _rsiScheduledInstanceId = pScheduledInstanceId_
+    , _rsiLaunchSpecification = pLaunchSpecification_
+    }
+
+-- | Unique, case-sensitive identifier that ensures the idempotency of the
+-- request. For more information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+rsiClientToken :: Lens' RunScheduledInstances (Maybe Text)
+rsiClientToken = lens _rsiClientToken (\ s a -> s{_rsiClientToken = a});
+
+-- | The number of instances.
+--
+-- Default: 1
+rsiInstanceCount :: Lens' RunScheduledInstances (Maybe Int)
+rsiInstanceCount = lens _rsiInstanceCount (\ s a -> s{_rsiInstanceCount = a});
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is 'DryRunOperation'.
+-- Otherwise, it is 'UnauthorizedOperation'.
+rsiDryRun :: Lens' RunScheduledInstances (Maybe Bool)
+rsiDryRun = lens _rsiDryRun (\ s a -> s{_rsiDryRun = a});
+
+-- | The Scheduled Instance ID.
+rsiScheduledInstanceId :: Lens' RunScheduledInstances Text
+rsiScheduledInstanceId = lens _rsiScheduledInstanceId (\ s a -> s{_rsiScheduledInstanceId = a});
+
+-- | The launch specification.
+rsiLaunchSpecification :: Lens' RunScheduledInstances ScheduledInstancesLaunchSpecification
+rsiLaunchSpecification = lens _rsiLaunchSpecification (\ s a -> s{_rsiLaunchSpecification = a});
+
+instance AWSRequest RunScheduledInstances where
+        type Rs RunScheduledInstances =
+             RunScheduledInstancesResponse
+        request = postQuery ec2
+        response
+          = receiveXML
+              (\ s h x ->
+                 RunScheduledInstancesResponse' <$>
+                   (x .@? "instanceIdSet" .!@ mempty >>=
+                      may (parseXMLList "item"))
+                     <*> (pure (fromEnum s)))
+
+instance Hashable RunScheduledInstances
+
+instance ToHeaders RunScheduledInstances where
+        toHeaders = const mempty
+
+instance ToPath RunScheduledInstances where
+        toPath = const "/"
+
+instance ToQuery RunScheduledInstances where
+        toQuery RunScheduledInstances'{..}
+          = mconcat
+              ["Action" =: ("RunScheduledInstances" :: ByteString),
+               "Version" =: ("2015-10-01" :: ByteString),
+               "ClientToken" =: _rsiClientToken,
+               "InstanceCount" =: _rsiInstanceCount,
+               "DryRun" =: _rsiDryRun,
+               "ScheduledInstanceId" =: _rsiScheduledInstanceId,
+               "LaunchSpecification" =: _rsiLaunchSpecification]
+
+-- | Contains the output of RunScheduledInstances.
+--
+-- /See:/ 'runScheduledInstancesResponse' smart constructor.
+data RunScheduledInstancesResponse = RunScheduledInstancesResponse'
+    { _rrsInstanceIdSet  :: !(Maybe [Text])
+    , _rrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RunScheduledInstancesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rrsInstanceIdSet'
+--
+-- * 'rrsResponseStatus'
+runScheduledInstancesResponse
+    :: Int -- ^ 'rrsResponseStatus'
+    -> RunScheduledInstancesResponse
+runScheduledInstancesResponse pResponseStatus_ =
+    RunScheduledInstancesResponse'
+    { _rrsInstanceIdSet = Nothing
+    , _rrsResponseStatus = pResponseStatus_
+    }
+
+-- | The IDs of the newly launched instances.
+rrsInstanceIdSet :: Lens' RunScheduledInstancesResponse [Text]
+rrsInstanceIdSet = lens _rrsInstanceIdSet (\ s a -> s{_rrsInstanceIdSet = a}) . _Default . _Coerce;
+
+-- | The response status code.
+rrsResponseStatus :: Lens' RunScheduledInstancesResponse Int
+rrsResponseStatus = lens _rrsResponseStatus (\ s a -> s{_rrsResponseStatus = a});
diff --git a/gen/Network/AWS/EC2/StartInstances.hs b/gen/Network/AWS/EC2/StartInstances.hs
--- a/gen/Network/AWS/EC2/StartInstances.hs
+++ b/gen/Network/AWS/EC2/StartInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.StartInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -39,8 +39,6 @@
 -- For more information, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html Stopping Instances>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-StartInstances.html AWS API Reference> for StartInstances.
 module Network.AWS.EC2.StartInstances
     (
     -- * Creating a Request
@@ -108,7 +106,7 @@
 
 instance AWSRequest StartInstances where
         type Rs StartInstances = StartInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -116,6 +114,8 @@
                    (x .@? "instancesSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable StartInstances
 
 instance ToHeaders StartInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/StopInstances.hs b/gen/Network/AWS/EC2/StopInstances.hs
--- a/gen/Network/AWS/EC2/StopInstances.hs
+++ b/gen/Network/AWS/EC2/StopInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.StopInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -52,8 +52,6 @@
 -- For more information about troubleshooting, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesStopping.html Troubleshooting Stopping Your Instance>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-StopInstances.html AWS API Reference> for StopInstances.
 module Network.AWS.EC2.StopInstances
     (
     -- * Creating a Request
@@ -126,7 +124,7 @@
 
 instance AWSRequest StopInstances where
         type Rs StopInstances = StopInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -134,6 +132,8 @@
                    (x .@? "instancesSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable StopInstances
 
 instance ToHeaders StopInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/TerminateInstances.hs b/gen/Network/AWS/EC2/TerminateInstances.hs
--- a/gen/Network/AWS/EC2/TerminateInstances.hs
+++ b/gen/Network/AWS/EC2/TerminateInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.TerminateInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -42,8 +42,6 @@
 -- For more information about troubleshooting, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesShuttingDown.html Troubleshooting Terminating Your Instance>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-TerminateInstances.html AWS API Reference> for TerminateInstances.
 module Network.AWS.EC2.TerminateInstances
     (
     -- * Creating a Request
@@ -103,7 +101,7 @@
 instance AWSRequest TerminateInstances where
         type Rs TerminateInstances =
              TerminateInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -111,6 +109,8 @@
                    (x .@? "instancesSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable TerminateInstances
 
 instance ToHeaders TerminateInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/Types.hs b/gen/Network/AWS/EC2/Types.hs
--- a/gen/Network/AWS/EC2/Types.hs
+++ b/gen/Network/AWS/EC2/Types.hs
@@ -4,7 +4,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.Types
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -13,10 +13,13 @@
 module Network.AWS.EC2.Types
     (
     -- * Service Configuration
-      eC2
+      ec2
 
     -- * Errors
 
+    -- * Re-exported Types
+    , module Network.AWS.EC2.Internal
+
     -- * AccountAttributeName
     , AccountAttributeName (..)
 
@@ -390,6 +393,12 @@
     , csirState
     , csirSpotInstanceRequestId
 
+    -- * ClassicLinkDNSSupport
+    , ClassicLinkDNSSupport
+    , classicLinkDNSSupport
+    , cldsVPCId
+    , cldsClassicLinkDNSSupported
+
     -- * ClassicLinkInstance
     , ClassicLinkInstance
     , classicLinkInstance
@@ -1163,6 +1172,12 @@
     , propagatingVGW
     , pvGatewayId
 
+    -- * PurchaseRequest
+    , PurchaseRequest
+    , purchaseRequest
+    , prPurchaseToken
+    , prInstanceCount
+
     -- * RecurringCharge
     , RecurringCharge
     , recurringCharge
@@ -1339,6 +1354,133 @@
     , ssUploadPolicySignature
     , ssAWSAccessKeyId
 
+    -- * ScheduledInstance
+    , ScheduledInstance
+    , scheduledInstance
+    , siPreviousSlotEndTime
+    , siPlatform
+    , siTermStartDate
+    , siInstanceCount
+    , siScheduledInstanceId
+    , siHourlyPrice
+    , siCreateDate
+    , siSlotDurationInHours
+    , siTotalScheduledInstanceHours
+    , siInstanceType
+    , siRecurrence
+    , siAvailabilityZone
+    , siTermEndDate
+    , siNextSlotStartTime
+    , siNetworkPlatform
+
+    -- * ScheduledInstanceAvailability
+    , ScheduledInstanceAvailability
+    , scheduledInstanceAvailability
+    , siaMaxTermDurationInDays
+    , siaPlatform
+    , siaPurchaseToken
+    , siaHourlyPrice
+    , siaAvailableInstanceCount
+    , siaSlotDurationInHours
+    , siaTotalScheduledInstanceHours
+    , siaInstanceType
+    , siaRecurrence
+    , siaAvailabilityZone
+    , siaMinTermDurationInDays
+    , siaFirstSlotStartTime
+    , siaNetworkPlatform
+
+    -- * ScheduledInstanceRecurrence
+    , ScheduledInstanceRecurrence
+    , scheduledInstanceRecurrence
+    , sirFrequency
+    , sirOccurrenceRelativeToEnd
+    , sirOccurrenceUnit
+    , sirInterval
+    , sirOccurrenceDaySet
+
+    -- * ScheduledInstanceRecurrenceRequest
+    , ScheduledInstanceRecurrenceRequest
+    , scheduledInstanceRecurrenceRequest
+    , sirrFrequency
+    , sirrOccurrenceRelativeToEnd
+    , sirrOccurrenceDays
+    , sirrOccurrenceUnit
+    , sirrInterval
+
+    -- * ScheduledInstancesBlockDeviceMapping
+    , ScheduledInstancesBlockDeviceMapping
+    , scheduledInstancesBlockDeviceMapping
+    , sibdmVirtualName
+    , sibdmNoDevice
+    , sibdmEBS
+    , sibdmDeviceName
+
+    -- * ScheduledInstancesEBS
+    , ScheduledInstancesEBS
+    , scheduledInstancesEBS
+    , sieDeleteOnTermination
+    , sieVolumeSize
+    , sieIOPS
+    , sieEncrypted
+    , sieVolumeType
+    , sieSnapshotId
+
+    -- * ScheduledInstancesIAMInstanceProfile
+    , ScheduledInstancesIAMInstanceProfile
+    , scheduledInstancesIAMInstanceProfile
+    , siiapARN
+    , siiapName
+
+    -- * ScheduledInstancesLaunchSpecification
+    , ScheduledInstancesLaunchSpecification
+    , scheduledInstancesLaunchSpecification
+    , silsSecurityGroupIds
+    , silsKeyName
+    , silsNetworkInterfaces
+    , silsRAMDiskId
+    , silsSubnetId
+    , silsKernelId
+    , silsInstanceType
+    , silsEBSOptimized
+    , silsUserData
+    , silsMonitoring
+    , silsIAMInstanceProfile
+    , silsBlockDeviceMappings
+    , silsPlacement
+    , silsImageId
+
+    -- * ScheduledInstancesMonitoring
+    , ScheduledInstancesMonitoring
+    , scheduledInstancesMonitoring
+    , simEnabled
+
+    -- * ScheduledInstancesNetworkInterface
+    , ScheduledInstancesNetworkInterface
+    , scheduledInstancesNetworkInterface
+    , siniGroups
+    , siniDeleteOnTermination
+    , siniAssociatePublicIPAddress
+    , siniPrivateIPAddressConfigs
+    , siniNetworkInterfaceId
+    , siniSubnetId
+    , siniPrivateIPAddress
+    , siniSecondaryPrivateIPAddressCount
+    , siniDescription
+    , siniDeviceIndex
+
+    -- * ScheduledInstancesPlacement
+    , ScheduledInstancesPlacement
+    , scheduledInstancesPlacement
+    , sipAvailabilityZone
+    , sipGroupName
+
+    -- * ScheduledInstancesPrivateIPAddressConfig
+    , ScheduledInstancesPrivateIPAddressConfig
+    , scheduledInstancesPrivateIPAddressConfig
+    , sipiacPrimary
+    , sipiacPrivateIPAddress
+
     -- * SecurityGroup
     , SecurityGroup
     , securityGroup
@@ -1351,6 +1493,18 @@
     , sgGroupName
     , sgDescription
 
+    -- * SlotDateTimeRangeRequest
+    , SlotDateTimeRangeRequest
+    , slotDateTimeRangeRequest
+    , sdtrrEarliestTime
+    , sdtrrLatestTime
+
+    -- * SlotStartTimeRangeRequest
+    , SlotStartTimeRangeRequest
+    , slotStartTimeRangeRequest
+    , sstrrLatestTime
+    , sstrrEarliestTime
+
     -- * Snapshot
     , Snapshot
     , snapshot
@@ -1581,9 +1735,12 @@
     -- * UserIdGroupPair
     , UserIdGroupPair
     , userIdGroupPair
+    , uigpVPCPeeringConnectionId
+    , uigpVPCId
     , uigpUserId
     , uigpGroupId
     , uigpGroupName
+    , uigpPeeringStatus
 
     -- * VGWTelemetry
     , VGWTelemetry
@@ -1763,6 +1920,7 @@
     , vsiVolumeId
     ) where
 
+import           Network.AWS.EC2.Internal
 import           Network.AWS.EC2.Types.Product
 import           Network.AWS.EC2.Types.Sum
 import           Network.AWS.Lens
@@ -1770,14 +1928,14 @@
 import           Network.AWS.Sign.V4
 
 -- | API version '2015-10-01' of the Amazon Elastic Compute Cloud SDK configuration.
-eC2 :: Service
-eC2 =
+ec2 :: Service
+ec2 =
     Service
     { _svcAbbrev = "EC2"
     , _svcSigner = v4
     , _svcPrefix = "ec2"
     , _svcVersion = "2015-10-01"
-    , _svcEndpoint = defaultEndpoint eC2
+    , _svcEndpoint = defaultEndpoint ec2
     , _svcTimeout = Just 70
     , _svcCheck = statusSuccess
     , _svcError = parseXMLError
@@ -1794,6 +1952,7 @@
     check e
       | has (hasCode "RequestLimitExceeded" . hasStatus 503) e =
           Just "request_limit_exceeded"
+      | has (hasStatus 429) e = Just "too_many_requests"
       | has (hasCode "ThrottlingException" . hasStatus 400) e =
           Just "throttling_exception"
       | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
diff --git a/gen/Network/AWS/EC2/Types/Product.hs b/gen/Network/AWS/EC2/Types/Product.hs
--- a/gen/Network/AWS/EC2/Types/Product.hs
+++ b/gen/Network/AWS/EC2/Types/Product.hs
@@ -9,11388 +9,12987 @@
 
 -- |
 -- Module      : Network.AWS.EC2.Types.Product
--- Copyright   : (c) 2013-2015 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.EC2.Types.Product where
-
-import           Network.AWS.EC2.Types.Sum
-import           Network.AWS.Lens
-import           Network.AWS.Prelude
-
--- | Describes an account attribute.
---
--- /See:/ 'accountAttribute' smart constructor.
-data AccountAttribute = AccountAttribute'
-    { _aaAttributeValues :: !(Maybe [AccountAttributeValue])
-    , _aaAttributeName   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AccountAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aaAttributeValues'
---
--- * 'aaAttributeName'
-accountAttribute
-    :: AccountAttribute
-accountAttribute =
-    AccountAttribute'
-    { _aaAttributeValues = Nothing
-    , _aaAttributeName = Nothing
-    }
-
--- | One or more values for the account attribute.
-aaAttributeValues :: Lens' AccountAttribute [AccountAttributeValue]
-aaAttributeValues = lens _aaAttributeValues (\ s a -> s{_aaAttributeValues = a}) . _Default . _Coerce;
-
--- | The name of the account attribute.
-aaAttributeName :: Lens' AccountAttribute (Maybe Text)
-aaAttributeName = lens _aaAttributeName (\ s a -> s{_aaAttributeName = a});
-
-instance FromXML AccountAttribute where
-        parseXML x
-          = AccountAttribute' <$>
-              (x .@? "attributeValueSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "attributeName")
-
--- | Describes a value of an account attribute.
---
--- /See:/ 'accountAttributeValue' smart constructor.
-newtype AccountAttributeValue = AccountAttributeValue'
-    { _aavAttributeValue :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AccountAttributeValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aavAttributeValue'
-accountAttributeValue
-    :: AccountAttributeValue
-accountAttributeValue =
-    AccountAttributeValue'
-    { _aavAttributeValue = Nothing
-    }
-
--- | The value of the attribute.
-aavAttributeValue :: Lens' AccountAttributeValue (Maybe Text)
-aavAttributeValue = lens _aavAttributeValue (\ s a -> s{_aavAttributeValue = a});
-
-instance FromXML AccountAttributeValue where
-        parseXML x
-          = AccountAttributeValue' <$> (x .@? "attributeValue")
-
--- | Describes a running instance in a Spot fleet.
---
--- /See:/ 'activeInstance' smart constructor.
-data ActiveInstance = ActiveInstance'
-    { _aiInstanceId            :: !(Maybe Text)
-    , _aiInstanceType          :: !(Maybe Text)
-    , _aiSpotInstanceRequestId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ActiveInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aiInstanceId'
---
--- * 'aiInstanceType'
---
--- * 'aiSpotInstanceRequestId'
-activeInstance
-    :: ActiveInstance
-activeInstance =
-    ActiveInstance'
-    { _aiInstanceId = Nothing
-    , _aiInstanceType = Nothing
-    , _aiSpotInstanceRequestId = Nothing
-    }
-
--- | The ID of the instance.
-aiInstanceId :: Lens' ActiveInstance (Maybe Text)
-aiInstanceId = lens _aiInstanceId (\ s a -> s{_aiInstanceId = a});
-
--- | The instance type.
-aiInstanceType :: Lens' ActiveInstance (Maybe Text)
-aiInstanceType = lens _aiInstanceType (\ s a -> s{_aiInstanceType = a});
-
--- | The ID of the Spot instance request.
-aiSpotInstanceRequestId :: Lens' ActiveInstance (Maybe Text)
-aiSpotInstanceRequestId = lens _aiSpotInstanceRequestId (\ s a -> s{_aiSpotInstanceRequestId = a});
-
-instance FromXML ActiveInstance where
-        parseXML x
-          = ActiveInstance' <$>
-              (x .@? "instanceId") <*> (x .@? "instanceType") <*>
-                (x .@? "spotInstanceRequestId")
-
--- | Describes an Elastic IP address.
---
--- /See:/ 'address' smart constructor.
-data Address = Address'
-    { _aAssociationId           :: !(Maybe Text)
-    , _aInstanceId              :: !(Maybe Text)
-    , _aNetworkInterfaceOwnerId :: !(Maybe Text)
-    , _aAllocationId            :: !(Maybe Text)
-    , _aDomain                  :: !(Maybe DomainType)
-    , _aNetworkInterfaceId      :: !(Maybe Text)
-    , _aPrivateIPAddress        :: !(Maybe Text)
-    , _aPublicIP                :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Address' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aAssociationId'
---
--- * 'aInstanceId'
---
--- * 'aNetworkInterfaceOwnerId'
---
--- * 'aAllocationId'
---
--- * 'aDomain'
---
--- * 'aNetworkInterfaceId'
---
--- * 'aPrivateIPAddress'
---
--- * 'aPublicIP'
-address
-    :: Address
-address =
-    Address'
-    { _aAssociationId = Nothing
-    , _aInstanceId = Nothing
-    , _aNetworkInterfaceOwnerId = Nothing
-    , _aAllocationId = Nothing
-    , _aDomain = Nothing
-    , _aNetworkInterfaceId = Nothing
-    , _aPrivateIPAddress = Nothing
-    , _aPublicIP = Nothing
-    }
-
--- | The ID representing the association of the address with an instance in a
--- VPC.
-aAssociationId :: Lens' Address (Maybe Text)
-aAssociationId = lens _aAssociationId (\ s a -> s{_aAssociationId = a});
-
--- | The ID of the instance that the address is associated with (if any).
-aInstanceId :: Lens' Address (Maybe Text)
-aInstanceId = lens _aInstanceId (\ s a -> s{_aInstanceId = a});
-
--- | The ID of the AWS account that owns the network interface.
-aNetworkInterfaceOwnerId :: Lens' Address (Maybe Text)
-aNetworkInterfaceOwnerId = lens _aNetworkInterfaceOwnerId (\ s a -> s{_aNetworkInterfaceOwnerId = a});
-
--- | The ID representing the allocation of the address for use with EC2-VPC.
-aAllocationId :: Lens' Address (Maybe Text)
-aAllocationId = lens _aAllocationId (\ s a -> s{_aAllocationId = a});
-
--- | Indicates whether this Elastic IP address is for use with instances in
--- EC2-Classic ('standard') or instances in a VPC ('vpc').
-aDomain :: Lens' Address (Maybe DomainType)
-aDomain = lens _aDomain (\ s a -> s{_aDomain = a});
-
--- | The ID of the network interface.
-aNetworkInterfaceId :: Lens' Address (Maybe Text)
-aNetworkInterfaceId = lens _aNetworkInterfaceId (\ s a -> s{_aNetworkInterfaceId = a});
-
--- | The private IP address associated with the Elastic IP address.
-aPrivateIPAddress :: Lens' Address (Maybe Text)
-aPrivateIPAddress = lens _aPrivateIPAddress (\ s a -> s{_aPrivateIPAddress = a});
-
--- | The Elastic IP address.
-aPublicIP :: Lens' Address (Maybe Text)
-aPublicIP = lens _aPublicIP (\ s a -> s{_aPublicIP = a});
-
-instance FromXML Address where
-        parseXML x
-          = Address' <$>
-              (x .@? "associationId") <*> (x .@? "instanceId") <*>
-                (x .@? "networkInterfaceOwnerId")
-                <*> (x .@? "allocationId")
-                <*> (x .@? "domain")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "privateIpAddress")
-                <*> (x .@? "publicIp")
-
--- | The value to use when a resource attribute accepts a Boolean value.
---
--- /See:/ 'attributeBooleanValue' smart constructor.
-newtype AttributeBooleanValue = AttributeBooleanValue'
-    { _abvValue :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttributeBooleanValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'abvValue'
-attributeBooleanValue
-    :: AttributeBooleanValue
-attributeBooleanValue =
-    AttributeBooleanValue'
-    { _abvValue = Nothing
-    }
-
--- | Valid values are 'true' or 'false'.
-abvValue :: Lens' AttributeBooleanValue (Maybe Bool)
-abvValue = lens _abvValue (\ s a -> s{_abvValue = a});
-
-instance FromXML AttributeBooleanValue where
-        parseXML x
-          = AttributeBooleanValue' <$> (x .@? "value")
-
-instance ToQuery AttributeBooleanValue where
-        toQuery AttributeBooleanValue'{..}
-          = mconcat ["Value" =: _abvValue]
-
--- | The value to use for a resource attribute.
---
--- /See:/ 'attributeValue' smart constructor.
-newtype AttributeValue = AttributeValue'
-    { _avValue :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AttributeValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'avValue'
-attributeValue
-    :: AttributeValue
-attributeValue =
-    AttributeValue'
-    { _avValue = Nothing
-    }
-
--- | Valid values are case-sensitive and vary by action.
-avValue :: Lens' AttributeValue (Maybe Text)
-avValue = lens _avValue (\ s a -> s{_avValue = a});
-
-instance FromXML AttributeValue where
-        parseXML x = AttributeValue' <$> (x .@? "value")
-
-instance ToQuery AttributeValue where
-        toQuery AttributeValue'{..}
-          = mconcat ["Value" =: _avValue]
-
--- | Describes an Availability Zone.
---
--- /See:/ 'availabilityZone' smart constructor.
-data AvailabilityZone = AvailabilityZone'
-    { _azState      :: !(Maybe AvailabilityZoneState)
-    , _azRegionName :: !(Maybe Text)
-    , _azZoneName   :: !(Maybe Text)
-    , _azMessages   :: !(Maybe [AvailabilityZoneMessage])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AvailabilityZone' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'azState'
---
--- * 'azRegionName'
---
--- * 'azZoneName'
---
--- * 'azMessages'
-availabilityZone
-    :: AvailabilityZone
-availabilityZone =
-    AvailabilityZone'
-    { _azState = Nothing
-    , _azRegionName = Nothing
-    , _azZoneName = Nothing
-    , _azMessages = Nothing
-    }
-
--- | The state of the Availability Zone.
-azState :: Lens' AvailabilityZone (Maybe AvailabilityZoneState)
-azState = lens _azState (\ s a -> s{_azState = a});
-
--- | The name of the region.
-azRegionName :: Lens' AvailabilityZone (Maybe Text)
-azRegionName = lens _azRegionName (\ s a -> s{_azRegionName = a});
-
--- | The name of the Availability Zone.
-azZoneName :: Lens' AvailabilityZone (Maybe Text)
-azZoneName = lens _azZoneName (\ s a -> s{_azZoneName = a});
-
--- | Any messages about the Availability Zone.
-azMessages :: Lens' AvailabilityZone [AvailabilityZoneMessage]
-azMessages = lens _azMessages (\ s a -> s{_azMessages = a}) . _Default . _Coerce;
-
-instance FromXML AvailabilityZone where
-        parseXML x
-          = AvailabilityZone' <$>
-              (x .@? "zoneState") <*> (x .@? "regionName") <*>
-                (x .@? "zoneName")
-                <*>
-                (x .@? "messageSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes a message about an Availability Zone.
---
--- /See:/ 'availabilityZoneMessage' smart constructor.
-newtype AvailabilityZoneMessage = AvailabilityZoneMessage'
-    { _azmMessage :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AvailabilityZoneMessage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'azmMessage'
-availabilityZoneMessage
-    :: AvailabilityZoneMessage
-availabilityZoneMessage =
-    AvailabilityZoneMessage'
-    { _azmMessage = Nothing
-    }
-
--- | The message about the Availability Zone.
-azmMessage :: Lens' AvailabilityZoneMessage (Maybe Text)
-azmMessage = lens _azmMessage (\ s a -> s{_azmMessage = a});
-
-instance FromXML AvailabilityZoneMessage where
-        parseXML x
-          = AvailabilityZoneMessage' <$> (x .@? "message")
-
--- | The capacity information for instances launched onto the Dedicated host.
---
--- /See:/ 'availableCapacity' smart constructor.
-data AvailableCapacity = AvailableCapacity'
-    { _acAvailableInstanceCapacity :: !(Maybe [InstanceCapacity])
-    , _acAvailableVCPUs            :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'AvailableCapacity' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'acAvailableInstanceCapacity'
---
--- * 'acAvailableVCPUs'
-availableCapacity
-    :: AvailableCapacity
-availableCapacity =
-    AvailableCapacity'
-    { _acAvailableInstanceCapacity = Nothing
-    , _acAvailableVCPUs = Nothing
-    }
-
--- | The total number of instances that the Dedicated host supports.
-acAvailableInstanceCapacity :: Lens' AvailableCapacity [InstanceCapacity]
-acAvailableInstanceCapacity = lens _acAvailableInstanceCapacity (\ s a -> s{_acAvailableInstanceCapacity = a}) . _Default . _Coerce;
-
--- | The number of vCPUs available on the Dedicated host.
-acAvailableVCPUs :: Lens' AvailableCapacity (Maybe Int)
-acAvailableVCPUs = lens _acAvailableVCPUs (\ s a -> s{_acAvailableVCPUs = a});
-
-instance FromXML AvailableCapacity where
-        parseXML x
-          = AvailableCapacity' <$>
-              (x .@? "availableInstanceCapacity" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "availableVCpus")
-
--- | /See:/ 'blobAttributeValue' smart constructor.
-newtype BlobAttributeValue = BlobAttributeValue'
-    { _bavValue :: Maybe Base64
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BlobAttributeValue' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bavValue'
-blobAttributeValue
-    :: BlobAttributeValue
-blobAttributeValue =
-    BlobAttributeValue'
-    { _bavValue = Nothing
-    }
-
--- | Undocumented member.
---
--- /Note:/ This 'Lens' automatically encodes and decodes Base64 data,
--- despite what the AWS documentation might say.
--- The underlying isomorphism will encode to Base64 representation during
--- serialisation, and decode from Base64 representation during deserialisation.
--- This 'Lens' accepts and returns only raw unencoded data.
-bavValue :: Lens' BlobAttributeValue (Maybe ByteString)
-bavValue = lens _bavValue (\ s a -> s{_bavValue = a}) . mapping _Base64;
-
-instance ToQuery BlobAttributeValue where
-        toQuery BlobAttributeValue'{..}
-          = mconcat ["Value" =: _bavValue]
-
--- | Describes a block device mapping.
---
--- /See:/ 'blockDeviceMapping' smart constructor.
-data BlockDeviceMapping = BlockDeviceMapping'
-    { _bdmVirtualName :: !(Maybe Text)
-    , _bdmNoDevice    :: !(Maybe Text)
-    , _bdmEBS         :: !(Maybe EBSBlockDevice)
-    , _bdmDeviceName  :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BlockDeviceMapping' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bdmVirtualName'
---
--- * 'bdmNoDevice'
---
--- * 'bdmEBS'
---
--- * 'bdmDeviceName'
-blockDeviceMapping
-    :: Text -- ^ 'bdmDeviceName'
-    -> BlockDeviceMapping
-blockDeviceMapping pDeviceName_ =
-    BlockDeviceMapping'
-    { _bdmVirtualName = Nothing
-    , _bdmNoDevice = Nothing
-    , _bdmEBS = Nothing
-    , _bdmDeviceName = pDeviceName_
-    }
-
--- | The virtual device name ('ephemeral'N). Instance store volumes are
--- numbered starting from 0. An instance type with 2 available instance
--- store volumes can specify mappings for 'ephemeral0' and 'ephemeral1'.The
--- number of available instance store volumes depends on the instance type.
--- After you connect to the instance, you must mount the volume.
---
--- Constraints: For M3 instances, you must specify instance store volumes
--- in the block device mapping for the instance. When you launch an M3
--- instance, we ignore any instance store volumes specified in the block
--- device mapping for the AMI.
-bdmVirtualName :: Lens' BlockDeviceMapping (Maybe Text)
-bdmVirtualName = lens _bdmVirtualName (\ s a -> s{_bdmVirtualName = a});
-
--- | Suppresses the specified device included in the block device mapping of
--- the AMI.
-bdmNoDevice :: Lens' BlockDeviceMapping (Maybe Text)
-bdmNoDevice = lens _bdmNoDevice (\ s a -> s{_bdmNoDevice = a});
-
--- | Parameters used to automatically set up EBS volumes when the instance is
--- launched.
-bdmEBS :: Lens' BlockDeviceMapping (Maybe EBSBlockDevice)
-bdmEBS = lens _bdmEBS (\ s a -> s{_bdmEBS = a});
-
--- | The device name exposed to the instance (for example, '\/dev\/sdh' or
--- 'xvdh').
-bdmDeviceName :: Lens' BlockDeviceMapping Text
-bdmDeviceName = lens _bdmDeviceName (\ s a -> s{_bdmDeviceName = a});
-
-instance FromXML BlockDeviceMapping where
-        parseXML x
-          = BlockDeviceMapping' <$>
-              (x .@? "virtualName") <*> (x .@? "noDevice") <*>
-                (x .@? "ebs")
-                <*> (x .@ "deviceName")
-
-instance ToQuery BlockDeviceMapping where
-        toQuery BlockDeviceMapping'{..}
-          = mconcat
-              ["VirtualName" =: _bdmVirtualName,
-               "NoDevice" =: _bdmNoDevice, "Ebs" =: _bdmEBS,
-               "DeviceName" =: _bdmDeviceName]
-
--- | Describes a bundle task.
---
--- /See:/ 'bundleTask' smart constructor.
-data BundleTask = BundleTask'
-    { _btBundleTaskError :: !(Maybe BundleTaskError)
-    , _btBundleId        :: !Text
-    , _btInstanceId      :: !Text
-    , _btProgress        :: !Text
-    , _btStartTime       :: !ISO8601
-    , _btState           :: !BundleTaskState
-    , _btStorage         :: !Storage
-    , _btUpdateTime      :: !ISO8601
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BundleTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'btBundleTaskError'
---
--- * 'btBundleId'
---
--- * 'btInstanceId'
---
--- * 'btProgress'
---
--- * 'btStartTime'
---
--- * 'btState'
---
--- * 'btStorage'
---
--- * 'btUpdateTime'
-bundleTask
-    :: Text -- ^ 'btBundleId'
-    -> Text -- ^ 'btInstanceId'
-    -> Text -- ^ 'btProgress'
-    -> UTCTime -- ^ 'btStartTime'
-    -> BundleTaskState -- ^ 'btState'
-    -> Storage -- ^ 'btStorage'
-    -> UTCTime -- ^ 'btUpdateTime'
-    -> BundleTask
-bundleTask pBundleId_ pInstanceId_ pProgress_ pStartTime_ pState_ pStorage_ pUpdateTime_ =
-    BundleTask'
-    { _btBundleTaskError = Nothing
-    , _btBundleId = pBundleId_
-    , _btInstanceId = pInstanceId_
-    , _btProgress = pProgress_
-    , _btStartTime = _Time # pStartTime_
-    , _btState = pState_
-    , _btStorage = pStorage_
-    , _btUpdateTime = _Time # pUpdateTime_
-    }
-
--- | If the task fails, a description of the error.
-btBundleTaskError :: Lens' BundleTask (Maybe BundleTaskError)
-btBundleTaskError = lens _btBundleTaskError (\ s a -> s{_btBundleTaskError = a});
-
--- | The ID of the bundle task.
-btBundleId :: Lens' BundleTask Text
-btBundleId = lens _btBundleId (\ s a -> s{_btBundleId = a});
-
--- | The ID of the instance associated with this bundle task.
-btInstanceId :: Lens' BundleTask Text
-btInstanceId = lens _btInstanceId (\ s a -> s{_btInstanceId = a});
-
--- | The level of task completion, as a percent (for example, 20%).
-btProgress :: Lens' BundleTask Text
-btProgress = lens _btProgress (\ s a -> s{_btProgress = a});
-
--- | The time this task started.
-btStartTime :: Lens' BundleTask UTCTime
-btStartTime = lens _btStartTime (\ s a -> s{_btStartTime = a}) . _Time;
-
--- | The state of the task.
-btState :: Lens' BundleTask BundleTaskState
-btState = lens _btState (\ s a -> s{_btState = a});
-
--- | The Amazon S3 storage locations.
-btStorage :: Lens' BundleTask Storage
-btStorage = lens _btStorage (\ s a -> s{_btStorage = a});
-
--- | The time of the most recent update for the task.
-btUpdateTime :: Lens' BundleTask UTCTime
-btUpdateTime = lens _btUpdateTime (\ s a -> s{_btUpdateTime = a}) . _Time;
-
-instance FromXML BundleTask where
-        parseXML x
-          = BundleTask' <$>
-              (x .@? "error") <*> (x .@ "bundleId") <*>
-                (x .@ "instanceId")
-                <*> (x .@ "progress")
-                <*> (x .@ "startTime")
-                <*> (x .@ "state")
-                <*> (x .@ "storage")
-                <*> (x .@ "updateTime")
-
--- | Describes an error for BundleInstance.
---
--- /See:/ 'bundleTaskError' smart constructor.
-data BundleTaskError = BundleTaskError'
-    { _bteCode    :: !(Maybe Text)
-    , _bteMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'BundleTaskError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bteCode'
---
--- * 'bteMessage'
-bundleTaskError
-    :: BundleTaskError
-bundleTaskError =
-    BundleTaskError'
-    { _bteCode = Nothing
-    , _bteMessage = Nothing
-    }
-
--- | The error code.
-bteCode :: Lens' BundleTaskError (Maybe Text)
-bteCode = lens _bteCode (\ s a -> s{_bteCode = a});
-
--- | The error message.
-bteMessage :: Lens' BundleTaskError (Maybe Text)
-bteMessage = lens _bteMessage (\ s a -> s{_bteMessage = a});
-
-instance FromXML BundleTaskError where
-        parseXML x
-          = BundleTaskError' <$>
-              (x .@? "code") <*> (x .@? "message")
-
--- | Describes a Spot fleet error.
---
--- /See:/ 'cancelSpotFleetRequestsError' smart constructor.
-data CancelSpotFleetRequestsError = CancelSpotFleetRequestsError'
-    { _csfreCode    :: !CancelBatchErrorCode
-    , _csfreMessage :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotFleetRequestsError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csfreCode'
---
--- * 'csfreMessage'
-cancelSpotFleetRequestsError
-    :: CancelBatchErrorCode -- ^ 'csfreCode'
-    -> Text -- ^ 'csfreMessage'
-    -> CancelSpotFleetRequestsError
-cancelSpotFleetRequestsError pCode_ pMessage_ =
-    CancelSpotFleetRequestsError'
-    { _csfreCode = pCode_
-    , _csfreMessage = pMessage_
-    }
-
--- | The error code.
-csfreCode :: Lens' CancelSpotFleetRequestsError CancelBatchErrorCode
-csfreCode = lens _csfreCode (\ s a -> s{_csfreCode = a});
-
--- | The description for the error code.
-csfreMessage :: Lens' CancelSpotFleetRequestsError Text
-csfreMessage = lens _csfreMessage (\ s a -> s{_csfreMessage = a});
-
-instance FromXML CancelSpotFleetRequestsError where
-        parseXML x
-          = CancelSpotFleetRequestsError' <$>
-              (x .@ "code") <*> (x .@ "message")
-
--- | Describes a Spot fleet request that was not successfully canceled.
---
--- /See:/ 'cancelSpotFleetRequestsErrorItem' smart constructor.
-data CancelSpotFleetRequestsErrorItem = CancelSpotFleetRequestsErrorItem'
-    { _csfreiSpotFleetRequestId :: !Text
-    , _csfreiError              :: !CancelSpotFleetRequestsError
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotFleetRequestsErrorItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csfreiSpotFleetRequestId'
---
--- * 'csfreiError'
-cancelSpotFleetRequestsErrorItem
-    :: Text -- ^ 'csfreiSpotFleetRequestId'
-    -> CancelSpotFleetRequestsError -- ^ 'csfreiError'
-    -> CancelSpotFleetRequestsErrorItem
-cancelSpotFleetRequestsErrorItem pSpotFleetRequestId_ pError_ =
-    CancelSpotFleetRequestsErrorItem'
-    { _csfreiSpotFleetRequestId = pSpotFleetRequestId_
-    , _csfreiError = pError_
-    }
-
--- | The ID of the Spot fleet request.
-csfreiSpotFleetRequestId :: Lens' CancelSpotFleetRequestsErrorItem Text
-csfreiSpotFleetRequestId = lens _csfreiSpotFleetRequestId (\ s a -> s{_csfreiSpotFleetRequestId = a});
-
--- | The error.
-csfreiError :: Lens' CancelSpotFleetRequestsErrorItem CancelSpotFleetRequestsError
-csfreiError = lens _csfreiError (\ s a -> s{_csfreiError = a});
-
-instance FromXML CancelSpotFleetRequestsErrorItem
-         where
-        parseXML x
-          = CancelSpotFleetRequestsErrorItem' <$>
-              (x .@ "spotFleetRequestId") <*> (x .@ "error")
-
--- | Describes a Spot fleet request that was successfully canceled.
---
--- /See:/ 'cancelSpotFleetRequestsSuccessItem' smart constructor.
-data CancelSpotFleetRequestsSuccessItem = CancelSpotFleetRequestsSuccessItem'
-    { _csfrsiSpotFleetRequestId            :: !Text
-    , _csfrsiCurrentSpotFleetRequestState  :: !BatchState
-    , _csfrsiPreviousSpotFleetRequestState :: !BatchState
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelSpotFleetRequestsSuccessItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csfrsiSpotFleetRequestId'
---
--- * 'csfrsiCurrentSpotFleetRequestState'
---
--- * 'csfrsiPreviousSpotFleetRequestState'
-cancelSpotFleetRequestsSuccessItem
-    :: Text -- ^ 'csfrsiSpotFleetRequestId'
-    -> BatchState -- ^ 'csfrsiCurrentSpotFleetRequestState'
-    -> BatchState -- ^ 'csfrsiPreviousSpotFleetRequestState'
-    -> CancelSpotFleetRequestsSuccessItem
-cancelSpotFleetRequestsSuccessItem pSpotFleetRequestId_ pCurrentSpotFleetRequestState_ pPreviousSpotFleetRequestState_ =
-    CancelSpotFleetRequestsSuccessItem'
-    { _csfrsiSpotFleetRequestId = pSpotFleetRequestId_
-    , _csfrsiCurrentSpotFleetRequestState = pCurrentSpotFleetRequestState_
-    , _csfrsiPreviousSpotFleetRequestState = pPreviousSpotFleetRequestState_
-    }
-
--- | The ID of the Spot fleet request.
-csfrsiSpotFleetRequestId :: Lens' CancelSpotFleetRequestsSuccessItem Text
-csfrsiSpotFleetRequestId = lens _csfrsiSpotFleetRequestId (\ s a -> s{_csfrsiSpotFleetRequestId = a});
-
--- | The current state of the Spot fleet request.
-csfrsiCurrentSpotFleetRequestState :: Lens' CancelSpotFleetRequestsSuccessItem BatchState
-csfrsiCurrentSpotFleetRequestState = lens _csfrsiCurrentSpotFleetRequestState (\ s a -> s{_csfrsiCurrentSpotFleetRequestState = a});
-
--- | The previous state of the Spot fleet request.
-csfrsiPreviousSpotFleetRequestState :: Lens' CancelSpotFleetRequestsSuccessItem BatchState
-csfrsiPreviousSpotFleetRequestState = lens _csfrsiPreviousSpotFleetRequestState (\ s a -> s{_csfrsiPreviousSpotFleetRequestState = a});
-
-instance FromXML CancelSpotFleetRequestsSuccessItem
-         where
-        parseXML x
-          = CancelSpotFleetRequestsSuccessItem' <$>
-              (x .@ "spotFleetRequestId") <*>
-                (x .@ "currentSpotFleetRequestState")
-                <*> (x .@ "previousSpotFleetRequestState")
-
--- | Describes a request to cancel a Spot instance.
---
--- /See:/ 'cancelledSpotInstanceRequest' smart constructor.
-data CancelledSpotInstanceRequest = CancelledSpotInstanceRequest'
-    { _csirState                 :: !(Maybe CancelSpotInstanceRequestState)
-    , _csirSpotInstanceRequestId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CancelledSpotInstanceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csirState'
---
--- * 'csirSpotInstanceRequestId'
-cancelledSpotInstanceRequest
-    :: CancelledSpotInstanceRequest
-cancelledSpotInstanceRequest =
-    CancelledSpotInstanceRequest'
-    { _csirState = Nothing
-    , _csirSpotInstanceRequestId = Nothing
-    }
-
--- | The state of the Spot instance request.
-csirState :: Lens' CancelledSpotInstanceRequest (Maybe CancelSpotInstanceRequestState)
-csirState = lens _csirState (\ s a -> s{_csirState = a});
-
--- | The ID of the Spot instance request.
-csirSpotInstanceRequestId :: Lens' CancelledSpotInstanceRequest (Maybe Text)
-csirSpotInstanceRequestId = lens _csirSpotInstanceRequestId (\ s a -> s{_csirSpotInstanceRequestId = a});
-
-instance FromXML CancelledSpotInstanceRequest where
-        parseXML x
-          = CancelledSpotInstanceRequest' <$>
-              (x .@? "state") <*> (x .@? "spotInstanceRequestId")
-
--- | Describes a linked EC2-Classic instance.
---
--- /See:/ 'classicLinkInstance' smart constructor.
-data ClassicLinkInstance = ClassicLinkInstance'
-    { _cliInstanceId :: !(Maybe Text)
-    , _cliGroups     :: !(Maybe [GroupIdentifier])
-    , _cliVPCId      :: !(Maybe Text)
-    , _cliTags       :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ClassicLinkInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cliInstanceId'
---
--- * 'cliGroups'
---
--- * 'cliVPCId'
---
--- * 'cliTags'
-classicLinkInstance
-    :: ClassicLinkInstance
-classicLinkInstance =
-    ClassicLinkInstance'
-    { _cliInstanceId = Nothing
-    , _cliGroups = Nothing
-    , _cliVPCId = Nothing
-    , _cliTags = Nothing
-    }
-
--- | The ID of the instance.
-cliInstanceId :: Lens' ClassicLinkInstance (Maybe Text)
-cliInstanceId = lens _cliInstanceId (\ s a -> s{_cliInstanceId = a});
-
--- | A list of security groups.
-cliGroups :: Lens' ClassicLinkInstance [GroupIdentifier]
-cliGroups = lens _cliGroups (\ s a -> s{_cliGroups = a}) . _Default . _Coerce;
-
--- | The ID of the VPC.
-cliVPCId :: Lens' ClassicLinkInstance (Maybe Text)
-cliVPCId = lens _cliVPCId (\ s a -> s{_cliVPCId = a});
-
--- | Any tags assigned to the instance.
-cliTags :: Lens' ClassicLinkInstance [Tag]
-cliTags = lens _cliTags (\ s a -> s{_cliTags = a}) . _Default . _Coerce;
-
-instance FromXML ClassicLinkInstance where
-        parseXML x
-          = ClassicLinkInstance' <$>
-              (x .@? "instanceId") <*>
-                (x .@? "groupSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "vpcId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes the client-specific data.
---
--- /See:/ 'clientData' smart constructor.
-data ClientData = ClientData'
-    { _cdUploadStart :: !(Maybe ISO8601)
-    , _cdUploadSize  :: !(Maybe Double)
-    , _cdUploadEnd   :: !(Maybe ISO8601)
-    , _cdComment     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ClientData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdUploadStart'
---
--- * 'cdUploadSize'
---
--- * 'cdUploadEnd'
---
--- * 'cdComment'
-clientData
-    :: ClientData
-clientData =
-    ClientData'
-    { _cdUploadStart = Nothing
-    , _cdUploadSize = Nothing
-    , _cdUploadEnd = Nothing
-    , _cdComment = Nothing
-    }
-
--- | The time that the disk upload starts.
-cdUploadStart :: Lens' ClientData (Maybe UTCTime)
-cdUploadStart = lens _cdUploadStart (\ s a -> s{_cdUploadStart = a}) . mapping _Time;
-
--- | The size of the uploaded disk image, in GiB.
-cdUploadSize :: Lens' ClientData (Maybe Double)
-cdUploadSize = lens _cdUploadSize (\ s a -> s{_cdUploadSize = a});
-
--- | The time that the disk upload ends.
-cdUploadEnd :: Lens' ClientData (Maybe UTCTime)
-cdUploadEnd = lens _cdUploadEnd (\ s a -> s{_cdUploadEnd = a}) . mapping _Time;
-
--- | A user-defined comment about the disk upload.
-cdComment :: Lens' ClientData (Maybe Text)
-cdComment = lens _cdComment (\ s a -> s{_cdComment = a});
-
-instance ToQuery ClientData where
-        toQuery ClientData'{..}
-          = mconcat
-              ["UploadStart" =: _cdUploadStart,
-               "UploadSize" =: _cdUploadSize,
-               "UploadEnd" =: _cdUploadEnd, "Comment" =: _cdComment]
-
--- | Describes a conversion task.
---
--- /See:/ 'conversionTask' smart constructor.
-data ConversionTask = ConversionTask'
-    { _ctImportInstance   :: !(Maybe ImportInstanceTaskDetails)
-    , _ctStatusMessage    :: !(Maybe Text)
-    , _ctImportVolume     :: !(Maybe ImportVolumeTaskDetails)
-    , _ctExpirationTime   :: !(Maybe Text)
-    , _ctTags             :: !(Maybe [Tag])
-    , _ctConversionTaskId :: !Text
-    , _ctState            :: !ConversionTaskState
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ConversionTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ctImportInstance'
---
--- * 'ctStatusMessage'
---
--- * 'ctImportVolume'
---
--- * 'ctExpirationTime'
---
--- * 'ctTags'
---
--- * 'ctConversionTaskId'
---
--- * 'ctState'
-conversionTask
-    :: Text -- ^ 'ctConversionTaskId'
-    -> ConversionTaskState -- ^ 'ctState'
-    -> ConversionTask
-conversionTask pConversionTaskId_ pState_ =
-    ConversionTask'
-    { _ctImportInstance = Nothing
-    , _ctStatusMessage = Nothing
-    , _ctImportVolume = Nothing
-    , _ctExpirationTime = Nothing
-    , _ctTags = Nothing
-    , _ctConversionTaskId = pConversionTaskId_
-    , _ctState = pState_
-    }
-
--- | If the task is for importing an instance, this contains information
--- about the import instance task.
-ctImportInstance :: Lens' ConversionTask (Maybe ImportInstanceTaskDetails)
-ctImportInstance = lens _ctImportInstance (\ s a -> s{_ctImportInstance = a});
-
--- | The status message related to the conversion task.
-ctStatusMessage :: Lens' ConversionTask (Maybe Text)
-ctStatusMessage = lens _ctStatusMessage (\ s a -> s{_ctStatusMessage = a});
-
--- | If the task is for importing a volume, this contains information about
--- the import volume task.
-ctImportVolume :: Lens' ConversionTask (Maybe ImportVolumeTaskDetails)
-ctImportVolume = lens _ctImportVolume (\ s a -> s{_ctImportVolume = a});
-
--- | The time when the task expires. If the upload isn\'t complete before the
--- expiration time, we automatically cancel the task.
-ctExpirationTime :: Lens' ConversionTask (Maybe Text)
-ctExpirationTime = lens _ctExpirationTime (\ s a -> s{_ctExpirationTime = a});
-
--- | Any tags assigned to the task.
-ctTags :: Lens' ConversionTask [Tag]
-ctTags = lens _ctTags (\ s a -> s{_ctTags = a}) . _Default . _Coerce;
-
--- | The ID of the conversion task.
-ctConversionTaskId :: Lens' ConversionTask Text
-ctConversionTaskId = lens _ctConversionTaskId (\ s a -> s{_ctConversionTaskId = a});
-
--- | The state of the conversion task.
-ctState :: Lens' ConversionTask ConversionTaskState
-ctState = lens _ctState (\ s a -> s{_ctState = a});
-
-instance FromXML ConversionTask where
-        parseXML x
-          = ConversionTask' <$>
-              (x .@? "importInstance") <*> (x .@? "statusMessage")
-                <*> (x .@? "importVolume")
-                <*> (x .@? "expirationTime")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "conversionTaskId")
-                <*> (x .@ "state")
-
--- | Describes the user or group to be added or removed from the permissions
--- for a volume.
---
--- /See:/ 'createVolumePermission' smart constructor.
-data CreateVolumePermission = CreateVolumePermission'
-    { _cvpGroup  :: !(Maybe PermissionGroup)
-    , _cvpUserId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVolumePermission' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvpGroup'
---
--- * 'cvpUserId'
-createVolumePermission
-    :: CreateVolumePermission
-createVolumePermission =
-    CreateVolumePermission'
-    { _cvpGroup = Nothing
-    , _cvpUserId = Nothing
-    }
-
--- | The specific group that is to be added or removed from a volume\'s list
--- of create volume permissions.
-cvpGroup :: Lens' CreateVolumePermission (Maybe PermissionGroup)
-cvpGroup = lens _cvpGroup (\ s a -> s{_cvpGroup = a});
-
--- | The specific AWS account ID that is to be added or removed from a
--- volume\'s list of create volume permissions.
-cvpUserId :: Lens' CreateVolumePermission (Maybe Text)
-cvpUserId = lens _cvpUserId (\ s a -> s{_cvpUserId = a});
-
-instance FromXML CreateVolumePermission where
-        parseXML x
-          = CreateVolumePermission' <$>
-              (x .@? "group") <*> (x .@? "userId")
-
-instance ToQuery CreateVolumePermission where
-        toQuery CreateVolumePermission'{..}
-          = mconcat
-              ["Group" =: _cvpGroup, "UserId" =: _cvpUserId]
-
--- | Describes modifications to the permissions for a volume.
---
--- /See:/ 'createVolumePermissionModifications' smart constructor.
-data CreateVolumePermissionModifications = CreateVolumePermissionModifications'
-    { _cvpmRemove :: !(Maybe [CreateVolumePermission])
-    , _cvpmAdd    :: !(Maybe [CreateVolumePermission])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CreateVolumePermissionModifications' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cvpmRemove'
---
--- * 'cvpmAdd'
-createVolumePermissionModifications
-    :: CreateVolumePermissionModifications
-createVolumePermissionModifications =
-    CreateVolumePermissionModifications'
-    { _cvpmRemove = Nothing
-    , _cvpmAdd = Nothing
-    }
-
--- | Removes a specific AWS account ID or group from a volume\'s list of
--- create volume permissions.
-cvpmRemove :: Lens' CreateVolumePermissionModifications [CreateVolumePermission]
-cvpmRemove = lens _cvpmRemove (\ s a -> s{_cvpmRemove = a}) . _Default . _Coerce;
-
--- | Adds a specific AWS account ID or group to a volume\'s list of create
--- volume permissions.
-cvpmAdd :: Lens' CreateVolumePermissionModifications [CreateVolumePermission]
-cvpmAdd = lens _cvpmAdd (\ s a -> s{_cvpmAdd = a}) . _Default . _Coerce;
-
-instance ToQuery CreateVolumePermissionModifications
-         where
-        toQuery CreateVolumePermissionModifications'{..}
-          = mconcat
-              [toQuery (toQueryList "Remove" <$> _cvpmRemove),
-               toQuery (toQueryList "Add" <$> _cvpmAdd)]
-
--- | Describes a customer gateway.
---
--- /See:/ 'customerGateway' smart constructor.
-data CustomerGateway = CustomerGateway'
-    { _cgTags              :: !(Maybe [Tag])
-    , _cgBGPASN            :: !Text
-    , _cgCustomerGatewayId :: !Text
-    , _cgIPAddress         :: !Text
-    , _cgState             :: !Text
-    , _cgType              :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'CustomerGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cgTags'
---
--- * 'cgBGPASN'
---
--- * 'cgCustomerGatewayId'
---
--- * 'cgIPAddress'
---
--- * 'cgState'
---
--- * 'cgType'
-customerGateway
-    :: Text -- ^ 'cgBGPASN'
-    -> Text -- ^ 'cgCustomerGatewayId'
-    -> Text -- ^ 'cgIPAddress'
-    -> Text -- ^ 'cgState'
-    -> Text -- ^ 'cgType'
-    -> CustomerGateway
-customerGateway pBGPASN_ pCustomerGatewayId_ pIPAddress_ pState_ pType_ =
-    CustomerGateway'
-    { _cgTags = Nothing
-    , _cgBGPASN = pBGPASN_
-    , _cgCustomerGatewayId = pCustomerGatewayId_
-    , _cgIPAddress = pIPAddress_
-    , _cgState = pState_
-    , _cgType = pType_
-    }
-
--- | Any tags assigned to the customer gateway.
-cgTags :: Lens' CustomerGateway [Tag]
-cgTags = lens _cgTags (\ s a -> s{_cgTags = a}) . _Default . _Coerce;
-
--- | The customer gateway\'s Border Gateway Protocol (BGP) Autonomous System
--- Number (ASN).
-cgBGPASN :: Lens' CustomerGateway Text
-cgBGPASN = lens _cgBGPASN (\ s a -> s{_cgBGPASN = a});
-
--- | The ID of the customer gateway.
-cgCustomerGatewayId :: Lens' CustomerGateway Text
-cgCustomerGatewayId = lens _cgCustomerGatewayId (\ s a -> s{_cgCustomerGatewayId = a});
-
--- | The Internet-routable IP address of the customer gateway\'s outside
--- interface.
-cgIPAddress :: Lens' CustomerGateway Text
-cgIPAddress = lens _cgIPAddress (\ s a -> s{_cgIPAddress = a});
-
--- | The current state of the customer gateway
--- ('pending | available | deleting | deleted').
-cgState :: Lens' CustomerGateway Text
-cgState = lens _cgState (\ s a -> s{_cgState = a});
-
--- | The type of VPN connection the customer gateway supports ('ipsec.1').
-cgType :: Lens' CustomerGateway Text
-cgType = lens _cgType (\ s a -> s{_cgType = a});
-
-instance FromXML CustomerGateway where
-        parseXML x
-          = CustomerGateway' <$>
-              (x .@? "tagSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@ "bgpAsn")
-                <*> (x .@ "customerGatewayId")
-                <*> (x .@ "ipAddress")
-                <*> (x .@ "state")
-                <*> (x .@ "type")
-
--- | Describes a DHCP configuration option.
---
--- /See:/ 'dhcpConfiguration' smart constructor.
-data DHCPConfiguration = DHCPConfiguration'
-    { _dcValues :: !(Maybe [AttributeValue])
-    , _dcKey    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DHCPConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcValues'
---
--- * 'dcKey'
-dhcpConfiguration
-    :: DHCPConfiguration
-dhcpConfiguration =
-    DHCPConfiguration'
-    { _dcValues = Nothing
-    , _dcKey = Nothing
-    }
-
--- | One or more values for the DHCP option.
-dcValues :: Lens' DHCPConfiguration [AttributeValue]
-dcValues = lens _dcValues (\ s a -> s{_dcValues = a}) . _Default . _Coerce;
-
--- | The name of a DHCP option.
-dcKey :: Lens' DHCPConfiguration (Maybe Text)
-dcKey = lens _dcKey (\ s a -> s{_dcKey = a});
-
-instance FromXML DHCPConfiguration where
-        parseXML x
-          = DHCPConfiguration' <$>
-              (x .@? "valueSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "key")
-
--- | Describes a set of DHCP options.
---
--- /See:/ 'dhcpOptions' smart constructor.
-data DHCPOptions = DHCPOptions'
-    { _doDHCPConfigurations :: !(Maybe [DHCPConfiguration])
-    , _doDHCPOptionsId      :: !(Maybe Text)
-    , _doTags               :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DHCPOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'doDHCPConfigurations'
---
--- * 'doDHCPOptionsId'
---
--- * 'doTags'
-dhcpOptions
-    :: DHCPOptions
-dhcpOptions =
-    DHCPOptions'
-    { _doDHCPConfigurations = Nothing
-    , _doDHCPOptionsId = Nothing
-    , _doTags = Nothing
-    }
-
--- | One or more DHCP options in the set.
-doDHCPConfigurations :: Lens' DHCPOptions [DHCPConfiguration]
-doDHCPConfigurations = lens _doDHCPConfigurations (\ s a -> s{_doDHCPConfigurations = a}) . _Default . _Coerce;
-
--- | The ID of the set of DHCP options.
-doDHCPOptionsId :: Lens' DHCPOptions (Maybe Text)
-doDHCPOptionsId = lens _doDHCPOptionsId (\ s a -> s{_doDHCPOptionsId = a});
-
--- | Any tags assigned to the DHCP options set.
-doTags :: Lens' DHCPOptions [Tag]
-doTags = lens _doTags (\ s a -> s{_doTags = a}) . _Default . _Coerce;
-
-instance FromXML DHCPOptions where
-        parseXML x
-          = DHCPOptions' <$>
-              (x .@? "dhcpConfigurationSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "dhcpOptionsId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes a disk image.
---
--- /See:/ 'diskImage' smart constructor.
-data DiskImage = DiskImage'
-    { _diImage       :: !(Maybe DiskImageDetail)
-    , _diVolume      :: !(Maybe VolumeDetail)
-    , _diDescription :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskImage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diImage'
---
--- * 'diVolume'
---
--- * 'diDescription'
-diskImage
-    :: DiskImage
-diskImage =
-    DiskImage'
-    { _diImage = Nothing
-    , _diVolume = Nothing
-    , _diDescription = Nothing
-    }
-
--- | Information about the disk image.
-diImage :: Lens' DiskImage (Maybe DiskImageDetail)
-diImage = lens _diImage (\ s a -> s{_diImage = a});
-
--- | Information about the volume.
-diVolume :: Lens' DiskImage (Maybe VolumeDetail)
-diVolume = lens _diVolume (\ s a -> s{_diVolume = a});
-
--- | A description of the disk image.
-diDescription :: Lens' DiskImage (Maybe Text)
-diDescription = lens _diDescription (\ s a -> s{_diDescription = a});
-
-instance ToQuery DiskImage where
-        toQuery DiskImage'{..}
-          = mconcat
-              ["Image" =: _diImage, "Volume" =: _diVolume,
-               "Description" =: _diDescription]
-
--- | Describes a disk image.
---
--- /See:/ 'diskImageDescription' smart constructor.
-data DiskImageDescription = DiskImageDescription'
-    { _dChecksum          :: !(Maybe Text)
-    , _dFormat            :: !DiskImageFormat
-    , _dSize              :: !Integer
-    , _dImportManifestURL :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskImageDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dChecksum'
---
--- * 'dFormat'
---
--- * 'dSize'
---
--- * 'dImportManifestURL'
-diskImageDescription
-    :: DiskImageFormat -- ^ 'dFormat'
-    -> Integer -- ^ 'dSize'
-    -> Text -- ^ 'dImportManifestURL'
-    -> DiskImageDescription
-diskImageDescription pFormat_ pSize_ pImportManifestURL_ =
-    DiskImageDescription'
-    { _dChecksum = Nothing
-    , _dFormat = pFormat_
-    , _dSize = pSize_
-    , _dImportManifestURL = pImportManifestURL_
-    }
-
--- | The checksum computed for the disk image.
-dChecksum :: Lens' DiskImageDescription (Maybe Text)
-dChecksum = lens _dChecksum (\ s a -> s{_dChecksum = a});
-
--- | The disk image format.
-dFormat :: Lens' DiskImageDescription DiskImageFormat
-dFormat = lens _dFormat (\ s a -> s{_dFormat = a});
-
--- | The size of the disk image, in GiB.
-dSize :: Lens' DiskImageDescription Integer
-dSize = lens _dSize (\ s a -> s{_dSize = a});
-
--- | A presigned URL for the import manifest stored in Amazon S3. For
--- information about creating a presigned URL for an Amazon S3 object, read
--- the \"Query String Request Authentication Alternative\" section of the
--- <http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
--- topic in the /Amazon Simple Storage Service Developer Guide/.
-dImportManifestURL :: Lens' DiskImageDescription Text
-dImportManifestURL = lens _dImportManifestURL (\ s a -> s{_dImportManifestURL = a});
-
-instance FromXML DiskImageDescription where
-        parseXML x
-          = DiskImageDescription' <$>
-              (x .@? "checksum") <*> (x .@ "format") <*>
-                (x .@ "size")
-                <*> (x .@ "importManifestUrl")
-
--- | Describes a disk image.
---
--- /See:/ 'diskImageDetail' smart constructor.
-data DiskImageDetail = DiskImageDetail'
-    { _didFormat            :: !DiskImageFormat
-    , _didBytes             :: !Integer
-    , _didImportManifestURL :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskImageDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'didFormat'
---
--- * 'didBytes'
---
--- * 'didImportManifestURL'
-diskImageDetail
-    :: DiskImageFormat -- ^ 'didFormat'
-    -> Integer -- ^ 'didBytes'
-    -> Text -- ^ 'didImportManifestURL'
-    -> DiskImageDetail
-diskImageDetail pFormat_ pBytes_ pImportManifestURL_ =
-    DiskImageDetail'
-    { _didFormat = pFormat_
-    , _didBytes = pBytes_
-    , _didImportManifestURL = pImportManifestURL_
-    }
-
--- | The disk image format.
-didFormat :: Lens' DiskImageDetail DiskImageFormat
-didFormat = lens _didFormat (\ s a -> s{_didFormat = a});
-
--- | The size of the disk image, in GiB.
-didBytes :: Lens' DiskImageDetail Integer
-didBytes = lens _didBytes (\ s a -> s{_didBytes = a});
-
--- | A presigned URL for the import manifest stored in Amazon S3 and
--- presented here as an Amazon S3 presigned URL. For information about
--- creating a presigned URL for an Amazon S3 object, read the \"Query
--- String Request Authentication Alternative\" section of the
--- <http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
--- topic in the /Amazon Simple Storage Service Developer Guide/.
-didImportManifestURL :: Lens' DiskImageDetail Text
-didImportManifestURL = lens _didImportManifestURL (\ s a -> s{_didImportManifestURL = a});
-
-instance ToQuery DiskImageDetail where
-        toQuery DiskImageDetail'{..}
-          = mconcat
-              ["Format" =: _didFormat, "Bytes" =: _didBytes,
-               "ImportManifestUrl" =: _didImportManifestURL]
-
--- | Describes a disk image volume.
---
--- /See:/ 'diskImageVolumeDescription' smart constructor.
-data DiskImageVolumeDescription = DiskImageVolumeDescription'
-    { _divdSize :: !(Maybe Integer)
-    , _divdId   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'DiskImageVolumeDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'divdSize'
---
--- * 'divdId'
-diskImageVolumeDescription
-    :: Text -- ^ 'divdId'
-    -> DiskImageVolumeDescription
-diskImageVolumeDescription pId_ =
-    DiskImageVolumeDescription'
-    { _divdSize = Nothing
-    , _divdId = pId_
-    }
-
--- | The size of the volume, in GiB.
-divdSize :: Lens' DiskImageVolumeDescription (Maybe Integer)
-divdSize = lens _divdSize (\ s a -> s{_divdSize = a});
-
--- | The volume identifier.
-divdId :: Lens' DiskImageVolumeDescription Text
-divdId = lens _divdId (\ s a -> s{_divdId = a});
-
-instance FromXML DiskImageVolumeDescription where
-        parseXML x
-          = DiskImageVolumeDescription' <$>
-              (x .@? "size") <*> (x .@ "id")
-
--- | Describes a block device for an EBS volume.
---
--- /See:/ 'ebsBlockDevice' smart constructor.
-data EBSBlockDevice = EBSBlockDevice'
-    { _ebdDeleteOnTermination :: !(Maybe Bool)
-    , _ebdVolumeSize          :: !(Maybe Int)
-    , _ebdIOPS                :: !(Maybe Int)
-    , _ebdEncrypted           :: !(Maybe Bool)
-    , _ebdVolumeType          :: !(Maybe VolumeType)
-    , _ebdSnapshotId          :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EBSBlockDevice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ebdDeleteOnTermination'
---
--- * 'ebdVolumeSize'
---
--- * 'ebdIOPS'
---
--- * 'ebdEncrypted'
---
--- * 'ebdVolumeType'
---
--- * 'ebdSnapshotId'
-ebsBlockDevice
-    :: EBSBlockDevice
-ebsBlockDevice =
-    EBSBlockDevice'
-    { _ebdDeleteOnTermination = Nothing
-    , _ebdVolumeSize = Nothing
-    , _ebdIOPS = Nothing
-    , _ebdEncrypted = Nothing
-    , _ebdVolumeType = Nothing
-    , _ebdSnapshotId = Nothing
-    }
-
--- | Indicates whether the EBS volume is deleted on instance termination.
-ebdDeleteOnTermination :: Lens' EBSBlockDevice (Maybe Bool)
-ebdDeleteOnTermination = lens _ebdDeleteOnTermination (\ s a -> s{_ebdDeleteOnTermination = a});
-
--- | The size of the volume, in GiB.
---
--- Constraints: '1-1024' for 'standard' volumes, '1-16384' for 'gp2'
--- volumes, and '4-16384' for 'io1' volumes. If you specify a snapshot, the
--- volume size must be equal to or larger than the snapshot size.
---
--- Default: If you\'re creating the volume from a snapshot and don\'t
--- specify a volume size, the default is the snapshot size.
-ebdVolumeSize :: Lens' EBSBlockDevice (Maybe Int)
-ebdVolumeSize = lens _ebdVolumeSize (\ s a -> s{_ebdVolumeSize = a});
-
--- | The number of I\/O operations per second (IOPS) that the volume
--- supports. For Provisioned IOPS (SSD) volumes, this represents the number
--- of IOPS that are provisioned for the volume. For General Purpose (SSD)
--- volumes, this represents the baseline performance of the volume and the
--- rate at which the volume accumulates I\/O credits for bursting. For more
--- information on General Purpose (SSD) baseline performance, I\/O credits,
--- and bursting, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types>
--- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- Constraint: Range is 100 to 20000 for Provisioned IOPS (SSD) volumes and
--- 3 to 10000 for General Purpose (SSD) volumes.
---
--- Condition: This parameter is required for requests to create 'io1'
--- volumes; it is not used in requests to create 'standard' or 'gp2'
--- volumes.
-ebdIOPS :: Lens' EBSBlockDevice (Maybe Int)
-ebdIOPS = lens _ebdIOPS (\ s a -> s{_ebdIOPS = a});
-
--- | Indicates whether the EBS volume is encrypted. Encrypted Amazon EBS
--- volumes may only be attached to instances that support Amazon EBS
--- encryption.
-ebdEncrypted :: Lens' EBSBlockDevice (Maybe Bool)
-ebdEncrypted = lens _ebdEncrypted (\ s a -> s{_ebdEncrypted = a});
-
--- | The volume type. 'gp2' for General Purpose (SSD) volumes, 'io1' for
--- Provisioned IOPS (SSD) volumes, and 'standard' for Magnetic volumes.
---
--- Default: 'standard'
-ebdVolumeType :: Lens' EBSBlockDevice (Maybe VolumeType)
-ebdVolumeType = lens _ebdVolumeType (\ s a -> s{_ebdVolumeType = a});
-
--- | The ID of the snapshot.
-ebdSnapshotId :: Lens' EBSBlockDevice (Maybe Text)
-ebdSnapshotId = lens _ebdSnapshotId (\ s a -> s{_ebdSnapshotId = a});
-
-instance FromXML EBSBlockDevice where
-        parseXML x
-          = EBSBlockDevice' <$>
-              (x .@? "deleteOnTermination") <*>
-                (x .@? "volumeSize")
-                <*> (x .@? "iops")
-                <*> (x .@? "encrypted")
-                <*> (x .@? "volumeType")
-                <*> (x .@? "snapshotId")
-
-instance ToQuery EBSBlockDevice where
-        toQuery EBSBlockDevice'{..}
-          = mconcat
-              ["DeleteOnTermination" =: _ebdDeleteOnTermination,
-               "VolumeSize" =: _ebdVolumeSize, "Iops" =: _ebdIOPS,
-               "Encrypted" =: _ebdEncrypted,
-               "VolumeType" =: _ebdVolumeType,
-               "SnapshotId" =: _ebdSnapshotId]
-
--- | Describes a parameter used to set up an EBS volume in a block device
--- mapping.
---
--- /See:/ 'ebsInstanceBlockDevice' smart constructor.
-data EBSInstanceBlockDevice = EBSInstanceBlockDevice'
-    { _eibdStatus              :: !(Maybe AttachmentStatus)
-    , _eibdDeleteOnTermination :: !(Maybe Bool)
-    , _eibdVolumeId            :: !(Maybe Text)
-    , _eibdAttachTime          :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EBSInstanceBlockDevice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eibdStatus'
---
--- * 'eibdDeleteOnTermination'
---
--- * 'eibdVolumeId'
---
--- * 'eibdAttachTime'
-ebsInstanceBlockDevice
-    :: EBSInstanceBlockDevice
-ebsInstanceBlockDevice =
-    EBSInstanceBlockDevice'
-    { _eibdStatus = Nothing
-    , _eibdDeleteOnTermination = Nothing
-    , _eibdVolumeId = Nothing
-    , _eibdAttachTime = Nothing
-    }
-
--- | The attachment state.
-eibdStatus :: Lens' EBSInstanceBlockDevice (Maybe AttachmentStatus)
-eibdStatus = lens _eibdStatus (\ s a -> s{_eibdStatus = a});
-
--- | Indicates whether the volume is deleted on instance termination.
-eibdDeleteOnTermination :: Lens' EBSInstanceBlockDevice (Maybe Bool)
-eibdDeleteOnTermination = lens _eibdDeleteOnTermination (\ s a -> s{_eibdDeleteOnTermination = a});
-
--- | The ID of the EBS volume.
-eibdVolumeId :: Lens' EBSInstanceBlockDevice (Maybe Text)
-eibdVolumeId = lens _eibdVolumeId (\ s a -> s{_eibdVolumeId = a});
-
--- | The time stamp when the attachment initiated.
-eibdAttachTime :: Lens' EBSInstanceBlockDevice (Maybe UTCTime)
-eibdAttachTime = lens _eibdAttachTime (\ s a -> s{_eibdAttachTime = a}) . mapping _Time;
-
-instance FromXML EBSInstanceBlockDevice where
-        parseXML x
-          = EBSInstanceBlockDevice' <$>
-              (x .@? "status") <*> (x .@? "deleteOnTermination")
-                <*> (x .@? "volumeId")
-                <*> (x .@? "attachTime")
-
--- | /See:/ 'ebsInstanceBlockDeviceSpecification' smart constructor.
-data EBSInstanceBlockDeviceSpecification = EBSInstanceBlockDeviceSpecification'
-    { _eibdsDeleteOnTermination :: !(Maybe Bool)
-    , _eibdsVolumeId            :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EBSInstanceBlockDeviceSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eibdsDeleteOnTermination'
---
--- * 'eibdsVolumeId'
-ebsInstanceBlockDeviceSpecification
-    :: EBSInstanceBlockDeviceSpecification
-ebsInstanceBlockDeviceSpecification =
-    EBSInstanceBlockDeviceSpecification'
-    { _eibdsDeleteOnTermination = Nothing
-    , _eibdsVolumeId = Nothing
-    }
-
--- | Indicates whether the volume is deleted on instance termination.
-eibdsDeleteOnTermination :: Lens' EBSInstanceBlockDeviceSpecification (Maybe Bool)
-eibdsDeleteOnTermination = lens _eibdsDeleteOnTermination (\ s a -> s{_eibdsDeleteOnTermination = a});
-
--- | The ID of the EBS volume.
-eibdsVolumeId :: Lens' EBSInstanceBlockDeviceSpecification (Maybe Text)
-eibdsVolumeId = lens _eibdsVolumeId (\ s a -> s{_eibdsVolumeId = a});
-
-instance ToQuery EBSInstanceBlockDeviceSpecification
-         where
-        toQuery EBSInstanceBlockDeviceSpecification'{..}
-          = mconcat
-              ["DeleteOnTermination" =: _eibdsDeleteOnTermination,
-               "VolumeId" =: _eibdsVolumeId]
-
--- | Describes a Spot fleet event.
---
--- /See:/ 'eventInformation' smart constructor.
-data EventInformation = EventInformation'
-    { _eiInstanceId       :: !(Maybe Text)
-    , _eiEventDescription :: !(Maybe Text)
-    , _eiEventSubType     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'EventInformation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eiInstanceId'
---
--- * 'eiEventDescription'
---
--- * 'eiEventSubType'
-eventInformation
-    :: EventInformation
-eventInformation =
-    EventInformation'
-    { _eiInstanceId = Nothing
-    , _eiEventDescription = Nothing
-    , _eiEventSubType = Nothing
-    }
-
--- | The ID of the instance. This information is available only for
--- 'instanceChange' events.
-eiInstanceId :: Lens' EventInformation (Maybe Text)
-eiInstanceId = lens _eiInstanceId (\ s a -> s{_eiInstanceId = a});
-
--- | The description of the event.
-eiEventDescription :: Lens' EventInformation (Maybe Text)
-eiEventDescription = lens _eiEventDescription (\ s a -> s{_eiEventDescription = a});
-
--- | The event.
---
--- The following are the 'error' events.
---
--- -   'iamFleetRoleInvalid' - The Spot fleet did not have the required
---     permissions either to launch or terminate an instance.
---
--- -   'launchSpecTemporarilyBlacklisted' - The configuration is not valid
---     and several attempts to launch instances have failed. For more
---     information, see the description of the event.
---
--- -   'spotFleetRequestConfigurationInvalid' - The configuration is not
---     valid. For more information, see the description of the event.
---
--- -   'spotInstanceCountLimitExceeded' - You\'ve reached the limit on the
---     number of Spot instances that you can launch.
---
--- The following are the 'fleetRequestChange' events.
---
--- -   'active' - The Spot fleet has been validated and Amazon EC2 is
---     attempting to maintain the target number of running Spot instances.
---
--- -   'cancelled' - The Spot fleet is canceled and has no running Spot
---     instances. The Spot fleet will be deleted two days after its
---     instances were terminated.
---
--- -   'cancelled_running' - The Spot fleet is canceled and will not launch
---     additional Spot instances, but its existing Spot instances continue
---     to run until they are interrupted or terminated.
---
--- -   'cancelled_terminating' - The Spot fleet is canceled and its Spot
---     instances are terminating.
---
--- -   'expired' - The Spot fleet request has expired. A subsequent event
---     indicates that the instances were terminated, if the request was
---     created with 'TerminateInstancesWithExpiration' set.
---
--- -   'modify_in_progress' - A request to modify the Spot fleet request
---     was accepted and is in progress.
---
--- -   'modify_successful' - The Spot fleet request was modified.
---
--- -   'price_update' - The bid price for a launch configuration was
---     adjusted because it was too high. This change is permanent.
---
--- -   'submitted' - The Spot fleet request is being evaluated and Amazon
---     EC2 is preparing to launch the target number of Spot instances.
---
--- The following are the 'instanceChange' events.
---
--- -   'launched' - A bid was fulfilled and a new instance was launched.
---
--- -   'terminated' - An instance was terminated by the user.
---
-eiEventSubType :: Lens' EventInformation (Maybe Text)
-eiEventSubType = lens _eiEventSubType (\ s a -> s{_eiEventSubType = a});
-
-instance FromXML EventInformation where
-        parseXML x
-          = EventInformation' <$>
-              (x .@? "instanceId") <*> (x .@? "eventDescription")
-                <*> (x .@? "eventSubType")
-
--- | Describes an instance export task.
---
--- /See:/ 'exportTask' smart constructor.
-data ExportTask = ExportTask'
-    { _etDescription           :: !Text
-    , _etExportTaskId          :: !Text
-    , _etExportToS3Task        :: !ExportToS3Task
-    , _etInstanceExportDetails :: !InstanceExportDetails
-    , _etState                 :: !ExportTaskState
-    , _etStatusMessage         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExportTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'etDescription'
---
--- * 'etExportTaskId'
---
--- * 'etExportToS3Task'
---
--- * 'etInstanceExportDetails'
---
--- * 'etState'
---
--- * 'etStatusMessage'
-exportTask
-    :: Text -- ^ 'etDescription'
-    -> Text -- ^ 'etExportTaskId'
-    -> ExportToS3Task -- ^ 'etExportToS3Task'
-    -> InstanceExportDetails -- ^ 'etInstanceExportDetails'
-    -> ExportTaskState -- ^ 'etState'
-    -> Text -- ^ 'etStatusMessage'
-    -> ExportTask
-exportTask pDescription_ pExportTaskId_ pExportToS3Task_ pInstanceExportDetails_ pState_ pStatusMessage_ =
-    ExportTask'
-    { _etDescription = pDescription_
-    , _etExportTaskId = pExportTaskId_
-    , _etExportToS3Task = pExportToS3Task_
-    , _etInstanceExportDetails = pInstanceExportDetails_
-    , _etState = pState_
-    , _etStatusMessage = pStatusMessage_
-    }
-
--- | A description of the resource being exported.
-etDescription :: Lens' ExportTask Text
-etDescription = lens _etDescription (\ s a -> s{_etDescription = a});
-
--- | The ID of the export task.
-etExportTaskId :: Lens' ExportTask Text
-etExportTaskId = lens _etExportTaskId (\ s a -> s{_etExportTaskId = a});
-
--- | Information about the export task.
-etExportToS3Task :: Lens' ExportTask ExportToS3Task
-etExportToS3Task = lens _etExportToS3Task (\ s a -> s{_etExportToS3Task = a});
-
--- | Information about the instance to export.
-etInstanceExportDetails :: Lens' ExportTask InstanceExportDetails
-etInstanceExportDetails = lens _etInstanceExportDetails (\ s a -> s{_etInstanceExportDetails = a});
-
--- | The state of the export task.
-etState :: Lens' ExportTask ExportTaskState
-etState = lens _etState (\ s a -> s{_etState = a});
-
--- | The status message related to the export task.
-etStatusMessage :: Lens' ExportTask Text
-etStatusMessage = lens _etStatusMessage (\ s a -> s{_etStatusMessage = a});
-
-instance FromXML ExportTask where
-        parseXML x
-          = ExportTask' <$>
-              (x .@ "description") <*> (x .@ "exportTaskId") <*>
-                (x .@ "exportToS3")
-                <*> (x .@ "instanceExport")
-                <*> (x .@ "state")
-                <*> (x .@ "statusMessage")
-
--- | Describes the format and location for an instance export task.
---
--- /See:/ 'exportToS3Task' smart constructor.
-data ExportToS3Task = ExportToS3Task'
-    { _etstS3Key           :: !(Maybe Text)
-    , _etstContainerFormat :: !(Maybe ContainerFormat)
-    , _etstS3Bucket        :: !(Maybe Text)
-    , _etstDiskImageFormat :: !(Maybe DiskImageFormat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExportToS3Task' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'etstS3Key'
---
--- * 'etstContainerFormat'
---
--- * 'etstS3Bucket'
---
--- * 'etstDiskImageFormat'
-exportToS3Task
-    :: ExportToS3Task
-exportToS3Task =
-    ExportToS3Task'
-    { _etstS3Key = Nothing
-    , _etstContainerFormat = Nothing
-    , _etstS3Bucket = Nothing
-    , _etstDiskImageFormat = Nothing
-    }
-
--- | The encryption key for your S3 bucket.
-etstS3Key :: Lens' ExportToS3Task (Maybe Text)
-etstS3Key = lens _etstS3Key (\ s a -> s{_etstS3Key = a});
-
--- | The container format used to combine disk images with metadata (such as
--- OVF). If absent, only the disk image is exported.
-etstContainerFormat :: Lens' ExportToS3Task (Maybe ContainerFormat)
-etstContainerFormat = lens _etstContainerFormat (\ s a -> s{_etstContainerFormat = a});
-
--- | The S3 bucket for the destination image. The destination bucket must
--- exist and grant WRITE and READ_ACP permissions to the AWS account
--- 'vm-import-export\'amazon.com'.
-etstS3Bucket :: Lens' ExportToS3Task (Maybe Text)
-etstS3Bucket = lens _etstS3Bucket (\ s a -> s{_etstS3Bucket = a});
-
--- | The format for the exported image.
-etstDiskImageFormat :: Lens' ExportToS3Task (Maybe DiskImageFormat)
-etstDiskImageFormat = lens _etstDiskImageFormat (\ s a -> s{_etstDiskImageFormat = a});
-
-instance FromXML ExportToS3Task where
-        parseXML x
-          = ExportToS3Task' <$>
-              (x .@? "s3Key") <*> (x .@? "containerFormat") <*>
-                (x .@? "s3Bucket")
-                <*> (x .@? "diskImageFormat")
-
--- | Describes an instance export task.
---
--- /See:/ 'exportToS3TaskSpecification' smart constructor.
-data ExportToS3TaskSpecification = ExportToS3TaskSpecification'
-    { _etstsContainerFormat :: !(Maybe ContainerFormat)
-    , _etstsS3Prefix        :: !(Maybe Text)
-    , _etstsS3Bucket        :: !(Maybe Text)
-    , _etstsDiskImageFormat :: !(Maybe DiskImageFormat)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ExportToS3TaskSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'etstsContainerFormat'
---
--- * 'etstsS3Prefix'
---
--- * 'etstsS3Bucket'
---
--- * 'etstsDiskImageFormat'
-exportToS3TaskSpecification
-    :: ExportToS3TaskSpecification
-exportToS3TaskSpecification =
-    ExportToS3TaskSpecification'
-    { _etstsContainerFormat = Nothing
-    , _etstsS3Prefix = Nothing
-    , _etstsS3Bucket = Nothing
-    , _etstsDiskImageFormat = Nothing
-    }
-
--- | The container format used to combine disk images with metadata (such as
--- OVF). If absent, only the disk image is exported.
-etstsContainerFormat :: Lens' ExportToS3TaskSpecification (Maybe ContainerFormat)
-etstsContainerFormat = lens _etstsContainerFormat (\ s a -> s{_etstsContainerFormat = a});
-
--- | The image is written to a single object in the S3 bucket at the S3 key
--- s3prefix + exportTaskId + \'.\' + diskImageFormat.
-etstsS3Prefix :: Lens' ExportToS3TaskSpecification (Maybe Text)
-etstsS3Prefix = lens _etstsS3Prefix (\ s a -> s{_etstsS3Prefix = a});
-
--- | The S3 bucket for the destination image. The destination bucket must
--- exist and grant WRITE and READ_ACP permissions to the AWS account
--- 'vm-import-export\'amazon.com'.
-etstsS3Bucket :: Lens' ExportToS3TaskSpecification (Maybe Text)
-etstsS3Bucket = lens _etstsS3Bucket (\ s a -> s{_etstsS3Bucket = a});
-
--- | The format for the exported image.
-etstsDiskImageFormat :: Lens' ExportToS3TaskSpecification (Maybe DiskImageFormat)
-etstsDiskImageFormat = lens _etstsDiskImageFormat (\ s a -> s{_etstsDiskImageFormat = a});
-
-instance ToQuery ExportToS3TaskSpecification where
-        toQuery ExportToS3TaskSpecification'{..}
-          = mconcat
-              ["ContainerFormat" =: _etstsContainerFormat,
-               "S3Prefix" =: _etstsS3Prefix,
-               "S3Bucket" =: _etstsS3Bucket,
-               "DiskImageFormat" =: _etstsDiskImageFormat]
-
--- | A filter name and value pair that is used to return a more specific list
--- of results. Filters can be used to match a set of resources by various
--- criteria, such as tags, attributes, or IDs.
---
--- /See:/ 'filter'' smart constructor.
-data Filter = Filter'
-    { _fValues :: !(Maybe [Text])
-    , _fName   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Filter' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fValues'
---
--- * 'fName'
-filter'
-    :: Text -- ^ 'fName'
-    -> Filter
-filter' pName_ =
-    Filter'
-    { _fValues = Nothing
-    , _fName = pName_
-    }
-
--- | One or more filter values. Filter values are case-sensitive.
-fValues :: Lens' Filter [Text]
-fValues = lens _fValues (\ s a -> s{_fValues = a}) . _Default . _Coerce;
-
--- | The name of the filter. Filter names are case-sensitive.
-fName :: Lens' Filter Text
-fName = lens _fName (\ s a -> s{_fName = a});
-
-instance ToQuery Filter where
-        toQuery Filter'{..}
-          = mconcat
-              [toQuery (toQueryList "Value" <$> _fValues),
-               "Name" =: _fName]
-
--- | Describes a flow log.
---
--- /See:/ 'flowLog' smart constructor.
-data FlowLog = FlowLog'
-    { _flCreationTime             :: !(Maybe ISO8601)
-    , _flResourceId               :: !(Maybe Text)
-    , _flFlowLogStatus            :: !(Maybe Text)
-    , _flTrafficType              :: !(Maybe TrafficType)
-    , _flDeliverLogsStatus        :: !(Maybe Text)
-    , _flDeliverLogsErrorMessage  :: !(Maybe Text)
-    , _flLogGroupName             :: !(Maybe Text)
-    , _flDeliverLogsPermissionARN :: !(Maybe Text)
-    , _flFlowLogId                :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'FlowLog' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'flCreationTime'
---
--- * 'flResourceId'
---
--- * 'flFlowLogStatus'
---
--- * 'flTrafficType'
---
--- * 'flDeliverLogsStatus'
---
--- * 'flDeliverLogsErrorMessage'
---
--- * 'flLogGroupName'
---
--- * 'flDeliverLogsPermissionARN'
---
--- * 'flFlowLogId'
-flowLog
-    :: FlowLog
-flowLog =
-    FlowLog'
-    { _flCreationTime = Nothing
-    , _flResourceId = Nothing
-    , _flFlowLogStatus = Nothing
-    , _flTrafficType = Nothing
-    , _flDeliverLogsStatus = Nothing
-    , _flDeliverLogsErrorMessage = Nothing
-    , _flLogGroupName = Nothing
-    , _flDeliverLogsPermissionARN = Nothing
-    , _flFlowLogId = Nothing
-    }
-
--- | The date and time the flow log was created.
-flCreationTime :: Lens' FlowLog (Maybe UTCTime)
-flCreationTime = lens _flCreationTime (\ s a -> s{_flCreationTime = a}) . mapping _Time;
-
--- | The ID of the resource on which the flow log was created.
-flResourceId :: Lens' FlowLog (Maybe Text)
-flResourceId = lens _flResourceId (\ s a -> s{_flResourceId = a});
-
--- | The status of the flow log ('ACTIVE').
-flFlowLogStatus :: Lens' FlowLog (Maybe Text)
-flFlowLogStatus = lens _flFlowLogStatus (\ s a -> s{_flFlowLogStatus = a});
-
--- | The type of traffic captured for the flow log.
-flTrafficType :: Lens' FlowLog (Maybe TrafficType)
-flTrafficType = lens _flTrafficType (\ s a -> s{_flTrafficType = a});
-
--- | The status of the logs delivery ('SUCCESS' | 'FAILED').
-flDeliverLogsStatus :: Lens' FlowLog (Maybe Text)
-flDeliverLogsStatus = lens _flDeliverLogsStatus (\ s a -> s{_flDeliverLogsStatus = a});
-
--- | Information about the error that occurred. 'Rate limited' indicates that
--- CloudWatch logs throttling has been applied for one or more network
--- interfaces, or that you\'ve reached the limit on the number of
--- CloudWatch Logs log groups that you can create. 'Access error' indicates
--- that the IAM role associated with the flow log does not have sufficient
--- permissions to publish to CloudWatch Logs. 'Unknown error' indicates an
--- internal error.
-flDeliverLogsErrorMessage :: Lens' FlowLog (Maybe Text)
-flDeliverLogsErrorMessage = lens _flDeliverLogsErrorMessage (\ s a -> s{_flDeliverLogsErrorMessage = a});
-
--- | The name of the flow log group.
-flLogGroupName :: Lens' FlowLog (Maybe Text)
-flLogGroupName = lens _flLogGroupName (\ s a -> s{_flLogGroupName = a});
-
--- | The ARN of the IAM role that posts logs to CloudWatch Logs.
-flDeliverLogsPermissionARN :: Lens' FlowLog (Maybe Text)
-flDeliverLogsPermissionARN = lens _flDeliverLogsPermissionARN (\ s a -> s{_flDeliverLogsPermissionARN = a});
-
--- | The flow log ID.
-flFlowLogId :: Lens' FlowLog (Maybe Text)
-flFlowLogId = lens _flFlowLogId (\ s a -> s{_flFlowLogId = a});
-
-instance FromXML FlowLog where
-        parseXML x
-          = FlowLog' <$>
-              (x .@? "creationTime") <*> (x .@? "resourceId") <*>
-                (x .@? "flowLogStatus")
-                <*> (x .@? "trafficType")
-                <*> (x .@? "deliverLogsStatus")
-                <*> (x .@? "deliverLogsErrorMessage")
-                <*> (x .@? "logGroupName")
-                <*> (x .@? "deliverLogsPermissionArn")
-                <*> (x .@? "flowLogId")
-
--- | Describes a security group.
---
--- /See:/ 'groupIdentifier' smart constructor.
-data GroupIdentifier = GroupIdentifier'
-    { _giGroupId   :: !(Maybe Text)
-    , _giGroupName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'GroupIdentifier' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'giGroupId'
---
--- * 'giGroupName'
-groupIdentifier
-    :: GroupIdentifier
-groupIdentifier =
-    GroupIdentifier'
-    { _giGroupId = Nothing
-    , _giGroupName = Nothing
-    }
-
--- | The ID of the security group.
-giGroupId :: Lens' GroupIdentifier (Maybe Text)
-giGroupId = lens _giGroupId (\ s a -> s{_giGroupId = a});
-
--- | The name of the security group.
-giGroupName :: Lens' GroupIdentifier (Maybe Text)
-giGroupName = lens _giGroupName (\ s a -> s{_giGroupName = a});
-
-instance FromXML GroupIdentifier where
-        parseXML x
-          = GroupIdentifier' <$>
-              (x .@? "groupId") <*> (x .@? "groupName")
-
-instance ToQuery GroupIdentifier where
-        toQuery GroupIdentifier'{..}
-          = mconcat
-              ["GroupId" =: _giGroupId,
-               "GroupName" =: _giGroupName]
-
--- | Describes an event in the history of the Spot fleet request.
---
--- /See:/ 'historyRecord' smart constructor.
-data HistoryRecord = HistoryRecord'
-    { _hrTimestamp        :: !ISO8601
-    , _hrEventType        :: !EventType
-    , _hrEventInformation :: !EventInformation
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HistoryRecord' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hrTimestamp'
---
--- * 'hrEventType'
---
--- * 'hrEventInformation'
-historyRecord
-    :: UTCTime -- ^ 'hrTimestamp'
-    -> EventType -- ^ 'hrEventType'
-    -> EventInformation -- ^ 'hrEventInformation'
-    -> HistoryRecord
-historyRecord pTimestamp_ pEventType_ pEventInformation_ =
-    HistoryRecord'
-    { _hrTimestamp = _Time # pTimestamp_
-    , _hrEventType = pEventType_
-    , _hrEventInformation = pEventInformation_
-    }
-
--- | The date and time of the event, in UTC format (for example,
--- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
-hrTimestamp :: Lens' HistoryRecord UTCTime
-hrTimestamp = lens _hrTimestamp (\ s a -> s{_hrTimestamp = a}) . _Time;
-
--- | The event type.
---
--- -   'error' - Indicates an error with the Spot fleet request.
---
--- -   'fleetRequestChange' - Indicates a change in the status or
---     configuration of the Spot fleet request.
---
--- -   'instanceChange' - Indicates that an instance was launched or
---     terminated.
---
-hrEventType :: Lens' HistoryRecord EventType
-hrEventType = lens _hrEventType (\ s a -> s{_hrEventType = a});
-
--- | Information about the event.
-hrEventInformation :: Lens' HistoryRecord EventInformation
-hrEventInformation = lens _hrEventInformation (\ s a -> s{_hrEventInformation = a});
-
-instance FromXML HistoryRecord where
-        parseXML x
-          = HistoryRecord' <$>
-              (x .@ "timestamp") <*> (x .@ "eventType") <*>
-                (x .@ "eventInformation")
-
--- | Describes the properties of the Dedicated host.
---
--- /See:/ 'host' smart constructor.
-data Host = Host'
-    { _hState             :: !(Maybe AllocationState)
-    , _hClientToken       :: !(Maybe Text)
-    , _hHostId            :: !(Maybe Text)
-    , _hAvailableCapacity :: !(Maybe AvailableCapacity)
-    , _hHostReservationId :: !(Maybe Text)
-    , _hHostProperties    :: !(Maybe HostProperties)
-    , _hAvailabilityZone  :: !(Maybe Text)
-    , _hInstances         :: !(Maybe [HostInstance])
-    , _hAutoPlacement     :: !(Maybe AutoPlacement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Host' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hState'
---
--- * 'hClientToken'
---
--- * 'hHostId'
---
--- * 'hAvailableCapacity'
---
--- * 'hHostReservationId'
---
--- * 'hHostProperties'
---
--- * 'hAvailabilityZone'
---
--- * 'hInstances'
---
--- * 'hAutoPlacement'
-host
-    :: Host
-host =
-    Host'
-    { _hState = Nothing
-    , _hClientToken = Nothing
-    , _hHostId = Nothing
-    , _hAvailableCapacity = Nothing
-    , _hHostReservationId = Nothing
-    , _hHostProperties = Nothing
-    , _hAvailabilityZone = Nothing
-    , _hInstances = Nothing
-    , _hAutoPlacement = Nothing
-    }
-
--- | The Dedicated host\'s state.
-hState :: Lens' Host (Maybe AllocationState)
-hState = lens _hState (\ s a -> s{_hState = a});
-
--- | Unique, case-sensitive identifier you provide to ensure idempotency of
--- the request. For more information, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>
--- in the /Amazon Elastic Compute Cloud User Guide/.
-hClientToken :: Lens' Host (Maybe Text)
-hClientToken = lens _hClientToken (\ s a -> s{_hClientToken = a});
-
--- | The ID of the Dedicated host.
-hHostId :: Lens' Host (Maybe Text)
-hHostId = lens _hHostId (\ s a -> s{_hHostId = a});
-
--- | The number of new instances that can be launched onto the Dedicated
--- host.
-hAvailableCapacity :: Lens' Host (Maybe AvailableCapacity)
-hAvailableCapacity = lens _hAvailableCapacity (\ s a -> s{_hAvailableCapacity = a});
-
--- | The reservation ID of the Dedicated host. This returns a 'null' response
--- if the Dedicated host doesn\'t have an associated reservation.
-hHostReservationId :: Lens' Host (Maybe Text)
-hHostReservationId = lens _hHostReservationId (\ s a -> s{_hHostReservationId = a});
-
--- | The hardware specifications of the Dedicated host.
-hHostProperties :: Lens' Host (Maybe HostProperties)
-hHostProperties = lens _hHostProperties (\ s a -> s{_hHostProperties = a});
-
--- | The Availability Zone of the Dedicated host.
-hAvailabilityZone :: Lens' Host (Maybe Text)
-hAvailabilityZone = lens _hAvailabilityZone (\ s a -> s{_hAvailabilityZone = a});
-
--- | The IDs and instance type that are currently running on the Dedicated
--- host.
-hInstances :: Lens' Host [HostInstance]
-hInstances = lens _hInstances (\ s a -> s{_hInstances = a}) . _Default . _Coerce;
-
--- | Whether auto-placement is on or off.
-hAutoPlacement :: Lens' Host (Maybe AutoPlacement)
-hAutoPlacement = lens _hAutoPlacement (\ s a -> s{_hAutoPlacement = a});
-
-instance FromXML Host where
-        parseXML x
-          = Host' <$>
-              (x .@? "state") <*> (x .@? "clientToken") <*>
-                (x .@? "hostId")
-                <*> (x .@? "availableCapacity")
-                <*> (x .@? "hostReservationId")
-                <*> (x .@? "hostProperties")
-                <*> (x .@? "availabilityZone")
-                <*>
-                (x .@? "instances" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "autoPlacement")
-
--- | /See:/ 'hostInstance' smart constructor.
-data HostInstance = HostInstance'
-    { _hiInstanceId   :: !(Maybe Text)
-    , _hiInstanceType :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HostInstance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hiInstanceId'
---
--- * 'hiInstanceType'
-hostInstance
-    :: HostInstance
-hostInstance =
-    HostInstance'
-    { _hiInstanceId = Nothing
-    , _hiInstanceType = Nothing
-    }
-
--- | the IDs of instances that are running on the Dedicated host.
-hiInstanceId :: Lens' HostInstance (Maybe Text)
-hiInstanceId = lens _hiInstanceId (\ s a -> s{_hiInstanceId = a});
-
--- | The instance type size (e.g., m3.medium) of the running instance.
-hiInstanceType :: Lens' HostInstance (Maybe Text)
-hiInstanceType = lens _hiInstanceType (\ s a -> s{_hiInstanceType = a});
-
-instance FromXML HostInstance where
-        parseXML x
-          = HostInstance' <$>
-              (x .@? "instanceId") <*> (x .@? "instanceType")
-
--- | /See:/ 'hostProperties' smart constructor.
-data HostProperties = HostProperties'
-    { _hpInstanceType :: !(Maybe Text)
-    , _hpTotalVCPUs   :: !(Maybe Int)
-    , _hpCores        :: !(Maybe Int)
-    , _hpSockets      :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'HostProperties' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'hpInstanceType'
---
--- * 'hpTotalVCPUs'
---
--- * 'hpCores'
---
--- * 'hpSockets'
-hostProperties
-    :: HostProperties
-hostProperties =
-    HostProperties'
-    { _hpInstanceType = Nothing
-    , _hpTotalVCPUs = Nothing
-    , _hpCores = Nothing
-    , _hpSockets = Nothing
-    }
-
--- | The instance type size that the Dedicated host supports (e.g.,
--- m3.medium).
-hpInstanceType :: Lens' HostProperties (Maybe Text)
-hpInstanceType = lens _hpInstanceType (\ s a -> s{_hpInstanceType = a});
-
--- | The number of vCPUs on the Dedicated host.
-hpTotalVCPUs :: Lens' HostProperties (Maybe Int)
-hpTotalVCPUs = lens _hpTotalVCPUs (\ s a -> s{_hpTotalVCPUs = a});
-
--- | The number of cores on the Dedicated host.
-hpCores :: Lens' HostProperties (Maybe Int)
-hpCores = lens _hpCores (\ s a -> s{_hpCores = a});
-
--- | The number of sockets on the Dedicated host.
-hpSockets :: Lens' HostProperties (Maybe Int)
-hpSockets = lens _hpSockets (\ s a -> s{_hpSockets = a});
-
-instance FromXML HostProperties where
-        parseXML x
-          = HostProperties' <$>
-              (x .@? "instanceType") <*> (x .@? "totalVCpus") <*>
-                (x .@? "cores")
-                <*> (x .@? "sockets")
-
--- | Describes an IAM instance profile.
---
--- /See:/ 'iamInstanceProfile' smart constructor.
-data IAMInstanceProfile = IAMInstanceProfile'
-    { _iapARN :: !(Maybe Text)
-    , _iapId  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IAMInstanceProfile' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iapARN'
---
--- * 'iapId'
-iamInstanceProfile
-    :: IAMInstanceProfile
-iamInstanceProfile =
-    IAMInstanceProfile'
-    { _iapARN = Nothing
-    , _iapId = Nothing
-    }
-
--- | The Amazon Resource Name (ARN) of the instance profile.
-iapARN :: Lens' IAMInstanceProfile (Maybe Text)
-iapARN = lens _iapARN (\ s a -> s{_iapARN = a});
-
--- | The ID of the instance profile.
-iapId :: Lens' IAMInstanceProfile (Maybe Text)
-iapId = lens _iapId (\ s a -> s{_iapId = a});
-
-instance FromXML IAMInstanceProfile where
-        parseXML x
-          = IAMInstanceProfile' <$>
-              (x .@? "arn") <*> (x .@? "id")
-
--- | Describes an IAM instance profile.
---
--- /See:/ 'iamInstanceProfileSpecification' smart constructor.
-data IAMInstanceProfileSpecification = IAMInstanceProfileSpecification'
-    { _iapsARN  :: !(Maybe Text)
-    , _iapsName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IAMInstanceProfileSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iapsARN'
---
--- * 'iapsName'
-iamInstanceProfileSpecification
-    :: IAMInstanceProfileSpecification
-iamInstanceProfileSpecification =
-    IAMInstanceProfileSpecification'
-    { _iapsARN = Nothing
-    , _iapsName = Nothing
-    }
-
--- | The Amazon Resource Name (ARN) of the instance profile.
-iapsARN :: Lens' IAMInstanceProfileSpecification (Maybe Text)
-iapsARN = lens _iapsARN (\ s a -> s{_iapsARN = a});
-
--- | The name of the instance profile.
-iapsName :: Lens' IAMInstanceProfileSpecification (Maybe Text)
-iapsName = lens _iapsName (\ s a -> s{_iapsName = a});
-
-instance FromXML IAMInstanceProfileSpecification
-         where
-        parseXML x
-          = IAMInstanceProfileSpecification' <$>
-              (x .@? "arn") <*> (x .@? "name")
-
-instance ToQuery IAMInstanceProfileSpecification
-         where
-        toQuery IAMInstanceProfileSpecification'{..}
-          = mconcat ["Arn" =: _iapsARN, "Name" =: _iapsName]
-
--- | Describes the ICMP type and code.
---
--- /See:/ 'icmpTypeCode' smart constructor.
-data ICMPTypeCode = ICMPTypeCode'
-    { _itcCode :: !(Maybe Int)
-    , _itcType :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ICMPTypeCode' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'itcCode'
---
--- * 'itcType'
-icmpTypeCode
-    :: ICMPTypeCode
-icmpTypeCode =
-    ICMPTypeCode'
-    { _itcCode = Nothing
-    , _itcType = Nothing
-    }
-
--- | The ICMP type. A value of -1 means all types.
-itcCode :: Lens' ICMPTypeCode (Maybe Int)
-itcCode = lens _itcCode (\ s a -> s{_itcCode = a});
-
--- | The ICMP code. A value of -1 means all codes for the specified ICMP
--- type.
-itcType :: Lens' ICMPTypeCode (Maybe Int)
-itcType = lens _itcType (\ s a -> s{_itcType = a});
-
-instance FromXML ICMPTypeCode where
-        parseXML x
-          = ICMPTypeCode' <$> (x .@? "code") <*> (x .@? "type")
-
-instance ToQuery ICMPTypeCode where
-        toQuery ICMPTypeCode'{..}
-          = mconcat ["Code" =: _itcCode, "Type" =: _itcType]
-
--- | Describes a security group rule.
---
--- /See:/ 'ipPermission' smart constructor.
-data IPPermission = IPPermission'
-    { _ipFromPort         :: !(Maybe Int)
-    , _ipUserIdGroupPairs :: !(Maybe [UserIdGroupPair])
-    , _ipPrefixListIds    :: !(Maybe [PrefixListId])
-    , _ipToPort           :: !(Maybe Int)
-    , _ipIPRanges         :: !(Maybe [IPRange])
-    , _ipIPProtocol       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IPPermission' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ipFromPort'
---
--- * 'ipUserIdGroupPairs'
---
--- * 'ipPrefixListIds'
---
--- * 'ipToPort'
---
--- * 'ipIPRanges'
---
--- * 'ipIPProtocol'
-ipPermission
-    :: Text -- ^ 'ipIPProtocol'
-    -> IPPermission
-ipPermission pIPProtocol_ =
-    IPPermission'
-    { _ipFromPort = Nothing
-    , _ipUserIdGroupPairs = Nothing
-    , _ipPrefixListIds = Nothing
-    , _ipToPort = Nothing
-    , _ipIPRanges = Nothing
-    , _ipIPProtocol = pIPProtocol_
-    }
-
--- | The start of port range for the TCP and UDP protocols, or an ICMP type
--- number. A value of '-1' indicates all ICMP types.
-ipFromPort :: Lens' IPPermission (Maybe Int)
-ipFromPort = lens _ipFromPort (\ s a -> s{_ipFromPort = a});
-
--- | One or more security group and AWS account ID pairs.
-ipUserIdGroupPairs :: Lens' IPPermission [UserIdGroupPair]
-ipUserIdGroupPairs = lens _ipUserIdGroupPairs (\ s a -> s{_ipUserIdGroupPairs = a}) . _Default . _Coerce;
-
--- | (Valid for AuthorizeSecurityGroupEgress, RevokeSecurityGroupEgress and
--- DescribeSecurityGroups only) One or more prefix list IDs for an AWS
--- service. In an AuthorizeSecurityGroupEgress request, this is the AWS
--- service that you want to access through a VPC endpoint from instances
--- associated with the security group.
-ipPrefixListIds :: Lens' IPPermission [PrefixListId]
-ipPrefixListIds = lens _ipPrefixListIds (\ s a -> s{_ipPrefixListIds = a}) . _Default . _Coerce;
-
--- | The end of port range for the TCP and UDP protocols, or an ICMP code. A
--- value of '-1' indicates all ICMP codes for the specified ICMP type.
-ipToPort :: Lens' IPPermission (Maybe Int)
-ipToPort = lens _ipToPort (\ s a -> s{_ipToPort = a});
-
--- | One or more IP ranges.
-ipIPRanges :: Lens' IPPermission [IPRange]
-ipIPRanges = lens _ipIPRanges (\ s a -> s{_ipIPRanges = a}) . _Default . _Coerce;
-
--- | The IP protocol name (for 'tcp', 'udp', and 'icmp') or number (see
--- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
---
--- [EC2-VPC only] When you authorize or revoke security group rules, you
--- can use '-1' to specify all.
-ipIPProtocol :: Lens' IPPermission Text
-ipIPProtocol = lens _ipIPProtocol (\ s a -> s{_ipIPProtocol = a});
-
-instance FromXML IPPermission where
-        parseXML x
-          = IPPermission' <$>
-              (x .@? "fromPort") <*>
-                (x .@? "groups" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "prefixListIds" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "toPort")
-                <*>
-                (x .@? "ipRanges" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "ipProtocol")
-
-instance ToQuery IPPermission where
-        toQuery IPPermission'{..}
-          = mconcat
-              ["FromPort" =: _ipFromPort,
-               toQuery
-                 (toQueryList "Groups" <$> _ipUserIdGroupPairs),
-               toQuery
-                 (toQueryList "PrefixListIds" <$> _ipPrefixListIds),
-               "ToPort" =: _ipToPort,
-               toQuery (toQueryList "IpRanges" <$> _ipIPRanges),
-               "IpProtocol" =: _ipIPProtocol]
-
--- | Describes an IP range.
---
--- /See:/ 'ipRange' smart constructor.
-newtype IPRange = IPRange'
-    { _irCIdRIP :: Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IPRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'irCIdRIP'
-ipRange
-    :: Text -- ^ 'irCIdRIP'
-    -> IPRange
-ipRange pCIdRIP_ =
-    IPRange'
-    { _irCIdRIP = pCIdRIP_
-    }
-
--- | The CIDR range. You can either specify a CIDR range or a source security
--- group, not both.
-irCIdRIP :: Lens' IPRange Text
-irCIdRIP = lens _irCIdRIP (\ s a -> s{_irCIdRIP = a});
-
-instance FromXML IPRange where
-        parseXML x = IPRange' <$> (x .@ "cidrIp")
-
-instance ToQuery IPRange where
-        toQuery IPRange'{..}
-          = mconcat ["CidrIp" =: _irCIdRIP]
-
--- | Describes the ID format for a resource.
---
--- /See:/ 'idFormat' smart constructor.
-data IdFormat = IdFormat'
-    { _ifUseLongIds :: !(Maybe Bool)
-    , _ifDeadline   :: !(Maybe ISO8601)
-    , _ifResource   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'IdFormat' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ifUseLongIds'
---
--- * 'ifDeadline'
---
--- * 'ifResource'
-idFormat
-    :: IdFormat
-idFormat =
-    IdFormat'
-    { _ifUseLongIds = Nothing
-    , _ifDeadline = Nothing
-    , _ifResource = Nothing
-    }
-
--- | Indicates whether longer IDs (17-character IDs) are enabled for the
--- resource.
-ifUseLongIds :: Lens' IdFormat (Maybe Bool)
-ifUseLongIds = lens _ifUseLongIds (\ s a -> s{_ifUseLongIds = a});
-
--- | The date in UTC at which you are permanently switched over to using
--- longer IDs.
-ifDeadline :: Lens' IdFormat (Maybe UTCTime)
-ifDeadline = lens _ifDeadline (\ s a -> s{_ifDeadline = a}) . mapping _Time;
-
--- | The type of resource.
-ifResource :: Lens' IdFormat (Maybe Text)
-ifResource = lens _ifResource (\ s a -> s{_ifResource = a});
-
-instance FromXML IdFormat where
-        parseXML x
-          = IdFormat' <$>
-              (x .@? "useLongIds") <*> (x .@? "deadline") <*>
-                (x .@? "resource")
-
--- | Describes an image.
---
--- /See:/ 'image' smart constructor.
-data Image = Image'
-    { _iPlatform            :: !(Maybe PlatformValues)
-    , _iImageOwnerAlias     :: !(Maybe Text)
-    , _iRAMDiskId           :: !(Maybe Text)
-    , _iKernelId            :: !(Maybe Text)
-    , _iRootDeviceName      :: !(Maybe Text)
-    , _iSRIOVNetSupport     :: !(Maybe Text)
-    , _iName                :: !(Maybe Text)
-    , _iCreationDate        :: !(Maybe Text)
-    , _iProductCodes        :: !(Maybe [ProductCode])
-    , _iStateReason         :: !(Maybe StateReason)
-    , _iDescription         :: !(Maybe Text)
-    , _iBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _iTags                :: !(Maybe [Tag])
-    , _iImageId             :: !Text
-    , _iImageLocation       :: !Text
-    , _iState               :: !ImageState
-    , _iOwnerId             :: !Text
-    , _iPublic              :: !Bool
-    , _iArchitecture        :: !ArchitectureValues
-    , _iImageType           :: !ImageTypeValues
-    , _iRootDeviceType      :: !DeviceType
-    , _iVirtualizationType  :: !VirtualizationType
-    , _iHypervisor          :: !HypervisorType
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Image' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iPlatform'
---
--- * 'iImageOwnerAlias'
---
--- * 'iRAMDiskId'
---
--- * 'iKernelId'
---
--- * 'iRootDeviceName'
---
--- * 'iSRIOVNetSupport'
---
--- * 'iName'
---
--- * 'iCreationDate'
---
--- * 'iProductCodes'
---
--- * 'iStateReason'
---
--- * 'iDescription'
---
--- * 'iBlockDeviceMappings'
---
--- * 'iTags'
---
--- * 'iImageId'
---
--- * 'iImageLocation'
---
--- * 'iState'
---
--- * 'iOwnerId'
---
--- * 'iPublic'
---
--- * 'iArchitecture'
---
--- * 'iImageType'
---
--- * 'iRootDeviceType'
---
--- * 'iVirtualizationType'
---
--- * 'iHypervisor'
-image
-    :: Text -- ^ 'iImageId'
-    -> Text -- ^ 'iImageLocation'
-    -> ImageState -- ^ 'iState'
-    -> Text -- ^ 'iOwnerId'
-    -> Bool -- ^ 'iPublic'
-    -> ArchitectureValues -- ^ 'iArchitecture'
-    -> ImageTypeValues -- ^ 'iImageType'
-    -> DeviceType -- ^ 'iRootDeviceType'
-    -> VirtualizationType -- ^ 'iVirtualizationType'
-    -> HypervisorType -- ^ 'iHypervisor'
-    -> Image
-image pImageId_ pImageLocation_ pState_ pOwnerId_ pPublic_ pArchitecture_ pImageType_ pRootDeviceType_ pVirtualizationType_ pHypervisor_ =
-    Image'
-    { _iPlatform = Nothing
-    , _iImageOwnerAlias = Nothing
-    , _iRAMDiskId = Nothing
-    , _iKernelId = Nothing
-    , _iRootDeviceName = Nothing
-    , _iSRIOVNetSupport = Nothing
-    , _iName = Nothing
-    , _iCreationDate = Nothing
-    , _iProductCodes = Nothing
-    , _iStateReason = Nothing
-    , _iDescription = Nothing
-    , _iBlockDeviceMappings = Nothing
-    , _iTags = Nothing
-    , _iImageId = pImageId_
-    , _iImageLocation = pImageLocation_
-    , _iState = pState_
-    , _iOwnerId = pOwnerId_
-    , _iPublic = pPublic_
-    , _iArchitecture = pArchitecture_
-    , _iImageType = pImageType_
-    , _iRootDeviceType = pRootDeviceType_
-    , _iVirtualizationType = pVirtualizationType_
-    , _iHypervisor = pHypervisor_
-    }
-
--- | The value is 'Windows' for Windows AMIs; otherwise blank.
-iPlatform :: Lens' Image (Maybe PlatformValues)
-iPlatform = lens _iPlatform (\ s a -> s{_iPlatform = a});
-
--- | The AWS account alias (for example, 'amazon', 'self') or the AWS account
--- ID of the AMI owner.
-iImageOwnerAlias :: Lens' Image (Maybe Text)
-iImageOwnerAlias = lens _iImageOwnerAlias (\ s a -> s{_iImageOwnerAlias = a});
-
--- | The RAM disk associated with the image, if any. Only applicable for
--- machine images.
-iRAMDiskId :: Lens' Image (Maybe Text)
-iRAMDiskId = lens _iRAMDiskId (\ s a -> s{_iRAMDiskId = a});
-
--- | The kernel associated with the image, if any. Only applicable for
--- machine images.
-iKernelId :: Lens' Image (Maybe Text)
-iKernelId = lens _iKernelId (\ s a -> s{_iKernelId = a});
-
--- | The device name of the root device (for example, '\/dev\/sda1' or
--- '\/dev\/xvda').
-iRootDeviceName :: Lens' Image (Maybe Text)
-iRootDeviceName = lens _iRootDeviceName (\ s a -> s{_iRootDeviceName = a});
-
--- | Specifies whether enhanced networking is enabled.
-iSRIOVNetSupport :: Lens' Image (Maybe Text)
-iSRIOVNetSupport = lens _iSRIOVNetSupport (\ s a -> s{_iSRIOVNetSupport = a});
-
--- | The name of the AMI that was provided during image creation.
-iName :: Lens' Image (Maybe Text)
-iName = lens _iName (\ s a -> s{_iName = a});
-
--- | The date and time the image was created.
-iCreationDate :: Lens' Image (Maybe Text)
-iCreationDate = lens _iCreationDate (\ s a -> s{_iCreationDate = a});
-
--- | Any product codes associated with the AMI.
-iProductCodes :: Lens' Image [ProductCode]
-iProductCodes = lens _iProductCodes (\ s a -> s{_iProductCodes = a}) . _Default . _Coerce;
-
--- | The reason for the state change.
-iStateReason :: Lens' Image (Maybe StateReason)
-iStateReason = lens _iStateReason (\ s a -> s{_iStateReason = a});
-
--- | The description of the AMI that was provided during image creation.
-iDescription :: Lens' Image (Maybe Text)
-iDescription = lens _iDescription (\ s a -> s{_iDescription = a});
-
--- | Any block device mapping entries.
-iBlockDeviceMappings :: Lens' Image [BlockDeviceMapping]
-iBlockDeviceMappings = lens _iBlockDeviceMappings (\ s a -> s{_iBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the image.
-iTags :: Lens' Image [Tag]
-iTags = lens _iTags (\ s a -> s{_iTags = a}) . _Default . _Coerce;
-
--- | The ID of the AMI.
-iImageId :: Lens' Image Text
-iImageId = lens _iImageId (\ s a -> s{_iImageId = a});
-
--- | The location of the AMI.
-iImageLocation :: Lens' Image Text
-iImageLocation = lens _iImageLocation (\ s a -> s{_iImageLocation = a});
-
--- | The current state of the AMI. If the state is 'available', the image is
--- successfully registered and can be used to launch an instance.
-iState :: Lens' Image ImageState
-iState = lens _iState (\ s a -> s{_iState = a});
-
--- | The AWS account ID of the image owner.
-iOwnerId :: Lens' Image Text
-iOwnerId = lens _iOwnerId (\ s a -> s{_iOwnerId = a});
-
--- | Indicates whether the image has public launch permissions. The value is
--- 'true' if this image has public launch permissions or 'false' if it has
--- only implicit and explicit launch permissions.
-iPublic :: Lens' Image Bool
-iPublic = lens _iPublic (\ s a -> s{_iPublic = a});
-
--- | The architecture of the image.
-iArchitecture :: Lens' Image ArchitectureValues
-iArchitecture = lens _iArchitecture (\ s a -> s{_iArchitecture = a});
-
--- | The type of image.
-iImageType :: Lens' Image ImageTypeValues
-iImageType = lens _iImageType (\ s a -> s{_iImageType = a});
-
--- | The type of root device used by the AMI. The AMI can use an EBS volume
--- or an instance store volume.
-iRootDeviceType :: Lens' Image DeviceType
-iRootDeviceType = lens _iRootDeviceType (\ s a -> s{_iRootDeviceType = a});
-
--- | The type of virtualization of the AMI.
-iVirtualizationType :: Lens' Image VirtualizationType
-iVirtualizationType = lens _iVirtualizationType (\ s a -> s{_iVirtualizationType = a});
-
--- | The hypervisor type of the image.
-iHypervisor :: Lens' Image HypervisorType
-iHypervisor = lens _iHypervisor (\ s a -> s{_iHypervisor = a});
-
-instance FromXML Image where
-        parseXML x
-          = Image' <$>
-              (x .@? "platform") <*> (x .@? "imageOwnerAlias") <*>
-                (x .@? "ramdiskId")
-                <*> (x .@? "kernelId")
-                <*> (x .@? "rootDeviceName")
-                <*> (x .@? "sriovNetSupport")
-                <*> (x .@? "name")
-                <*> (x .@? "creationDate")
-                <*>
-                (x .@? "productCodes" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "stateReason")
-                <*> (x .@? "description")
-                <*>
-                (x .@? "blockDeviceMapping" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "imageId")
-                <*> (x .@ "imageLocation")
-                <*> (x .@ "imageState")
-                <*> (x .@ "imageOwnerId")
-                <*> (x .@ "isPublic")
-                <*> (x .@ "architecture")
-                <*> (x .@ "imageType")
-                <*> (x .@ "rootDeviceType")
-                <*> (x .@ "virtualizationType")
-                <*> (x .@ "hypervisor")
-
--- | Describes the disk container object for an import image task.
---
--- /See:/ 'imageDiskContainer' smart constructor.
-data ImageDiskContainer = ImageDiskContainer'
-    { _idcFormat      :: !(Maybe Text)
-    , _idcURL         :: !(Maybe Text)
-    , _idcDeviceName  :: !(Maybe Text)
-    , _idcUserBucket  :: !(Maybe UserBucket)
-    , _idcDescription :: !(Maybe Text)
-    , _idcSnapshotId  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImageDiskContainer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'idcFormat'
---
--- * 'idcURL'
---
--- * 'idcDeviceName'
---
--- * 'idcUserBucket'
---
--- * 'idcDescription'
---
--- * 'idcSnapshotId'
-imageDiskContainer
-    :: ImageDiskContainer
-imageDiskContainer =
-    ImageDiskContainer'
-    { _idcFormat = Nothing
-    , _idcURL = Nothing
-    , _idcDeviceName = Nothing
-    , _idcUserBucket = Nothing
-    , _idcDescription = Nothing
-    , _idcSnapshotId = Nothing
-    }
-
--- | The format of the disk image being imported.
---
--- Valid values: 'RAW' | 'VHD' | 'VMDK' | 'OVA'
-idcFormat :: Lens' ImageDiskContainer (Maybe Text)
-idcFormat = lens _idcFormat (\ s a -> s{_idcFormat = a});
-
--- | The URL to the Amazon S3-based disk image being imported. The URL can
--- either be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..)
-idcURL :: Lens' ImageDiskContainer (Maybe Text)
-idcURL = lens _idcURL (\ s a -> s{_idcURL = a});
-
--- | The block device mapping for the disk.
-idcDeviceName :: Lens' ImageDiskContainer (Maybe Text)
-idcDeviceName = lens _idcDeviceName (\ s a -> s{_idcDeviceName = a});
-
--- | The S3 bucket for the disk image.
-idcUserBucket :: Lens' ImageDiskContainer (Maybe UserBucket)
-idcUserBucket = lens _idcUserBucket (\ s a -> s{_idcUserBucket = a});
-
--- | The description of the disk image.
-idcDescription :: Lens' ImageDiskContainer (Maybe Text)
-idcDescription = lens _idcDescription (\ s a -> s{_idcDescription = a});
-
--- | The ID of the EBS snapshot to be used for importing the snapshot.
-idcSnapshotId :: Lens' ImageDiskContainer (Maybe Text)
-idcSnapshotId = lens _idcSnapshotId (\ s a -> s{_idcSnapshotId = a});
-
-instance ToQuery ImageDiskContainer where
-        toQuery ImageDiskContainer'{..}
-          = mconcat
-              ["Format" =: _idcFormat, "Url" =: _idcURL,
-               "DeviceName" =: _idcDeviceName,
-               "UserBucket" =: _idcUserBucket,
-               "Description" =: _idcDescription,
-               "SnapshotId" =: _idcSnapshotId]
-
--- | Describes an import image task.
---
--- /See:/ 'importImageTask' smart constructor.
-data ImportImageTask = ImportImageTask'
-    { _iitStatus          :: !(Maybe Text)
-    , _iitHypervisor      :: !(Maybe Text)
-    , _iitPlatform        :: !(Maybe Text)
-    , _iitProgress        :: !(Maybe Text)
-    , _iitLicenseType     :: !(Maybe Text)
-    , _iitSnapshotDetails :: !(Maybe [SnapshotDetail])
-    , _iitStatusMessage   :: !(Maybe Text)
-    , _iitImageId         :: !(Maybe Text)
-    , _iitImportTaskId    :: !(Maybe Text)
-    , _iitArchitecture    :: !(Maybe Text)
-    , _iitDescription     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportImageTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iitStatus'
---
--- * 'iitHypervisor'
---
--- * 'iitPlatform'
---
--- * 'iitProgress'
---
--- * 'iitLicenseType'
---
--- * 'iitSnapshotDetails'
---
--- * 'iitStatusMessage'
---
--- * 'iitImageId'
---
--- * 'iitImportTaskId'
---
--- * 'iitArchitecture'
---
--- * 'iitDescription'
-importImageTask
-    :: ImportImageTask
-importImageTask =
-    ImportImageTask'
-    { _iitStatus = Nothing
-    , _iitHypervisor = Nothing
-    , _iitPlatform = Nothing
-    , _iitProgress = Nothing
-    , _iitLicenseType = Nothing
-    , _iitSnapshotDetails = Nothing
-    , _iitStatusMessage = Nothing
-    , _iitImageId = Nothing
-    , _iitImportTaskId = Nothing
-    , _iitArchitecture = Nothing
-    , _iitDescription = Nothing
-    }
-
--- | A brief status for the import image task.
-iitStatus :: Lens' ImportImageTask (Maybe Text)
-iitStatus = lens _iitStatus (\ s a -> s{_iitStatus = a});
-
--- | The target hypervisor for the import task.
---
--- Valid values: 'xen'
-iitHypervisor :: Lens' ImportImageTask (Maybe Text)
-iitHypervisor = lens _iitHypervisor (\ s a -> s{_iitHypervisor = a});
-
--- | The description string for the import image task.
-iitPlatform :: Lens' ImportImageTask (Maybe Text)
-iitPlatform = lens _iitPlatform (\ s a -> s{_iitPlatform = a});
-
--- | The percentage of progress of the import image task.
-iitProgress :: Lens' ImportImageTask (Maybe Text)
-iitProgress = lens _iitProgress (\ s a -> s{_iitProgress = a});
-
--- | The license type of the virtual machine.
-iitLicenseType :: Lens' ImportImageTask (Maybe Text)
-iitLicenseType = lens _iitLicenseType (\ s a -> s{_iitLicenseType = a});
-
--- | Information about the snapshots.
-iitSnapshotDetails :: Lens' ImportImageTask [SnapshotDetail]
-iitSnapshotDetails = lens _iitSnapshotDetails (\ s a -> s{_iitSnapshotDetails = a}) . _Default . _Coerce;
-
--- | A descriptive status message for the import image task.
-iitStatusMessage :: Lens' ImportImageTask (Maybe Text)
-iitStatusMessage = lens _iitStatusMessage (\ s a -> s{_iitStatusMessage = a});
-
--- | The ID of the Amazon Machine Image (AMI) of the imported virtual
--- machine.
-iitImageId :: Lens' ImportImageTask (Maybe Text)
-iitImageId = lens _iitImageId (\ s a -> s{_iitImageId = a});
-
--- | The ID of the import image task.
-iitImportTaskId :: Lens' ImportImageTask (Maybe Text)
-iitImportTaskId = lens _iitImportTaskId (\ s a -> s{_iitImportTaskId = a});
-
--- | The architecture of the virtual machine.
---
--- Valid values: 'i386' | 'x86_64'
-iitArchitecture :: Lens' ImportImageTask (Maybe Text)
-iitArchitecture = lens _iitArchitecture (\ s a -> s{_iitArchitecture = a});
-
--- | A description of the import task.
-iitDescription :: Lens' ImportImageTask (Maybe Text)
-iitDescription = lens _iitDescription (\ s a -> s{_iitDescription = a});
-
-instance FromXML ImportImageTask where
-        parseXML x
-          = ImportImageTask' <$>
-              (x .@? "status") <*> (x .@? "hypervisor") <*>
-                (x .@? "platform")
-                <*> (x .@? "progress")
-                <*> (x .@? "licenseType")
-                <*>
-                (x .@? "snapshotDetailSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "imageId")
-                <*> (x .@? "importTaskId")
-                <*> (x .@? "architecture")
-                <*> (x .@? "description")
-
--- | Describes the launch specification for VM import.
---
--- /See:/ 'importInstanceLaunchSpecification' smart constructor.
-data ImportInstanceLaunchSpecification = ImportInstanceLaunchSpecification'
-    { _iilsAdditionalInfo                    :: !(Maybe Text)
-    , _iilsGroupNames                        :: !(Maybe [Text])
-    , _iilsSubnetId                          :: !(Maybe Text)
-    , _iilsInstanceType                      :: !(Maybe InstanceType)
-    , _iilsGroupIds                          :: !(Maybe [Text])
-    , _iilsUserData                          :: !(Maybe UserData)
-    , _iilsMonitoring                        :: !(Maybe Bool)
-    , _iilsPrivateIPAddress                  :: !(Maybe Text)
-    , _iilsInstanceInitiatedShutdownBehavior :: !(Maybe ShutdownBehavior)
-    , _iilsArchitecture                      :: !(Maybe ArchitectureValues)
-    , _iilsPlacement                         :: !(Maybe Placement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportInstanceLaunchSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iilsAdditionalInfo'
---
--- * 'iilsGroupNames'
---
--- * 'iilsSubnetId'
---
--- * 'iilsInstanceType'
---
--- * 'iilsGroupIds'
---
--- * 'iilsUserData'
---
--- * 'iilsMonitoring'
---
--- * 'iilsPrivateIPAddress'
---
--- * 'iilsInstanceInitiatedShutdownBehavior'
---
--- * 'iilsArchitecture'
---
--- * 'iilsPlacement'
-importInstanceLaunchSpecification
-    :: ImportInstanceLaunchSpecification
-importInstanceLaunchSpecification =
-    ImportInstanceLaunchSpecification'
-    { _iilsAdditionalInfo = Nothing
-    , _iilsGroupNames = Nothing
-    , _iilsSubnetId = Nothing
-    , _iilsInstanceType = Nothing
-    , _iilsGroupIds = Nothing
-    , _iilsUserData = Nothing
-    , _iilsMonitoring = Nothing
-    , _iilsPrivateIPAddress = Nothing
-    , _iilsInstanceInitiatedShutdownBehavior = Nothing
-    , _iilsArchitecture = Nothing
-    , _iilsPlacement = Nothing
-    }
-
--- | Reserved.
-iilsAdditionalInfo :: Lens' ImportInstanceLaunchSpecification (Maybe Text)
-iilsAdditionalInfo = lens _iilsAdditionalInfo (\ s a -> s{_iilsAdditionalInfo = a});
-
--- | One or more security group names.
-iilsGroupNames :: Lens' ImportInstanceLaunchSpecification [Text]
-iilsGroupNames = lens _iilsGroupNames (\ s a -> s{_iilsGroupNames = a}) . _Default . _Coerce;
-
--- | [EC2-VPC] The ID of the subnet in which to launch the instance.
-iilsSubnetId :: Lens' ImportInstanceLaunchSpecification (Maybe Text)
-iilsSubnetId = lens _iilsSubnetId (\ s a -> s{_iilsSubnetId = a});
-
--- | The instance type. For more information about the instance types that
--- you can import, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/VMImportPrerequisites.html Before You Get Started>
--- in the Amazon Elastic Compute Cloud User Guide.
-iilsInstanceType :: Lens' ImportInstanceLaunchSpecification (Maybe InstanceType)
-iilsInstanceType = lens _iilsInstanceType (\ s a -> s{_iilsInstanceType = a});
-
--- | One or more security group IDs.
-iilsGroupIds :: Lens' ImportInstanceLaunchSpecification [Text]
-iilsGroupIds = lens _iilsGroupIds (\ s a -> s{_iilsGroupIds = a}) . _Default . _Coerce;
-
--- | The Base64-encoded MIME user data to be made available to the instance.
-iilsUserData :: Lens' ImportInstanceLaunchSpecification (Maybe UserData)
-iilsUserData = lens _iilsUserData (\ s a -> s{_iilsUserData = a});
-
--- | Indicates whether monitoring is enabled.
-iilsMonitoring :: Lens' ImportInstanceLaunchSpecification (Maybe Bool)
-iilsMonitoring = lens _iilsMonitoring (\ s a -> s{_iilsMonitoring = a});
-
--- | [EC2-VPC] An available IP address from the IP address range of the
--- subnet.
-iilsPrivateIPAddress :: Lens' ImportInstanceLaunchSpecification (Maybe Text)
-iilsPrivateIPAddress = lens _iilsPrivateIPAddress (\ s a -> s{_iilsPrivateIPAddress = a});
-
--- | Indicates whether an instance stops or terminates when you initiate
--- shutdown from the instance (using the operating system command for
--- system shutdown).
-iilsInstanceInitiatedShutdownBehavior :: Lens' ImportInstanceLaunchSpecification (Maybe ShutdownBehavior)
-iilsInstanceInitiatedShutdownBehavior = lens _iilsInstanceInitiatedShutdownBehavior (\ s a -> s{_iilsInstanceInitiatedShutdownBehavior = a});
-
--- | The architecture of the instance.
-iilsArchitecture :: Lens' ImportInstanceLaunchSpecification (Maybe ArchitectureValues)
-iilsArchitecture = lens _iilsArchitecture (\ s a -> s{_iilsArchitecture = a});
-
--- | The placement information for the instance.
-iilsPlacement :: Lens' ImportInstanceLaunchSpecification (Maybe Placement)
-iilsPlacement = lens _iilsPlacement (\ s a -> s{_iilsPlacement = a});
-
-instance ToQuery ImportInstanceLaunchSpecification
-         where
-        toQuery ImportInstanceLaunchSpecification'{..}
-          = mconcat
-              ["AdditionalInfo" =: _iilsAdditionalInfo,
-               toQuery
-                 (toQueryList "GroupName" <$> _iilsGroupNames),
-               "SubnetId" =: _iilsSubnetId,
-               "InstanceType" =: _iilsInstanceType,
-               toQuery (toQueryList "GroupId" <$> _iilsGroupIds),
-               "UserData" =: _iilsUserData,
-               "Monitoring" =: _iilsMonitoring,
-               "PrivateIpAddress" =: _iilsPrivateIPAddress,
-               "InstanceInitiatedShutdownBehavior" =:
-                 _iilsInstanceInitiatedShutdownBehavior,
-               "Architecture" =: _iilsArchitecture,
-               "Placement" =: _iilsPlacement]
-
--- | Describes an import instance task.
---
--- /See:/ 'importInstanceTaskDetails' smart constructor.
-data ImportInstanceTaskDetails = ImportInstanceTaskDetails'
-    { _iitdInstanceId  :: !(Maybe Text)
-    , _iitdPlatform    :: !(Maybe PlatformValues)
-    , _iitdDescription :: !(Maybe Text)
-    , _iitdVolumes     :: ![ImportInstanceVolumeDetailItem]
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportInstanceTaskDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iitdInstanceId'
---
--- * 'iitdPlatform'
---
--- * 'iitdDescription'
---
--- * 'iitdVolumes'
-importInstanceTaskDetails
-    :: ImportInstanceTaskDetails
-importInstanceTaskDetails =
-    ImportInstanceTaskDetails'
-    { _iitdInstanceId = Nothing
-    , _iitdPlatform = Nothing
-    , _iitdDescription = Nothing
-    , _iitdVolumes = mempty
-    }
-
--- | The ID of the instance.
-iitdInstanceId :: Lens' ImportInstanceTaskDetails (Maybe Text)
-iitdInstanceId = lens _iitdInstanceId (\ s a -> s{_iitdInstanceId = a});
-
--- | The instance operating system.
-iitdPlatform :: Lens' ImportInstanceTaskDetails (Maybe PlatformValues)
-iitdPlatform = lens _iitdPlatform (\ s a -> s{_iitdPlatform = a});
-
--- | A description of the task.
-iitdDescription :: Lens' ImportInstanceTaskDetails (Maybe Text)
-iitdDescription = lens _iitdDescription (\ s a -> s{_iitdDescription = a});
-
--- | One or more volumes.
-iitdVolumes :: Lens' ImportInstanceTaskDetails [ImportInstanceVolumeDetailItem]
-iitdVolumes = lens _iitdVolumes (\ s a -> s{_iitdVolumes = a}) . _Coerce;
-
-instance FromXML ImportInstanceTaskDetails where
-        parseXML x
-          = ImportInstanceTaskDetails' <$>
-              (x .@? "instanceId") <*> (x .@? "platform") <*>
-                (x .@? "description")
-                <*>
-                (x .@? "volumes" .!@ mempty >>= parseXMLList "item")
-
--- | Describes an import volume task.
---
--- /See:/ 'importInstanceVolumeDetailItem' smart constructor.
-data ImportInstanceVolumeDetailItem = ImportInstanceVolumeDetailItem'
-    { _iivdiStatusMessage    :: !(Maybe Text)
-    , _iivdiDescription      :: !(Maybe Text)
-    , _iivdiBytesConverted   :: !Integer
-    , _iivdiAvailabilityZone :: !Text
-    , _iivdiImage            :: !DiskImageDescription
-    , _iivdiVolume           :: !DiskImageVolumeDescription
-    , _iivdiStatus           :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportInstanceVolumeDetailItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iivdiStatusMessage'
---
--- * 'iivdiDescription'
---
--- * 'iivdiBytesConverted'
---
--- * 'iivdiAvailabilityZone'
---
--- * 'iivdiImage'
---
--- * 'iivdiVolume'
---
--- * 'iivdiStatus'
-importInstanceVolumeDetailItem
-    :: Integer -- ^ 'iivdiBytesConverted'
-    -> Text -- ^ 'iivdiAvailabilityZone'
-    -> DiskImageDescription -- ^ 'iivdiImage'
-    -> DiskImageVolumeDescription -- ^ 'iivdiVolume'
-    -> Text -- ^ 'iivdiStatus'
-    -> ImportInstanceVolumeDetailItem
-importInstanceVolumeDetailItem pBytesConverted_ pAvailabilityZone_ pImage_ pVolume_ pStatus_ =
-    ImportInstanceVolumeDetailItem'
-    { _iivdiStatusMessage = Nothing
-    , _iivdiDescription = Nothing
-    , _iivdiBytesConverted = pBytesConverted_
-    , _iivdiAvailabilityZone = pAvailabilityZone_
-    , _iivdiImage = pImage_
-    , _iivdiVolume = pVolume_
-    , _iivdiStatus = pStatus_
-    }
-
--- | The status information or errors related to the disk image.
-iivdiStatusMessage :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
-iivdiStatusMessage = lens _iivdiStatusMessage (\ s a -> s{_iivdiStatusMessage = a});
-
--- | A description of the task.
-iivdiDescription :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
-iivdiDescription = lens _iivdiDescription (\ s a -> s{_iivdiDescription = a});
-
--- | The number of bytes converted so far.
-iivdiBytesConverted :: Lens' ImportInstanceVolumeDetailItem Integer
-iivdiBytesConverted = lens _iivdiBytesConverted (\ s a -> s{_iivdiBytesConverted = a});
-
--- | The Availability Zone where the resulting instance will reside.
-iivdiAvailabilityZone :: Lens' ImportInstanceVolumeDetailItem Text
-iivdiAvailabilityZone = lens _iivdiAvailabilityZone (\ s a -> s{_iivdiAvailabilityZone = a});
-
--- | The image.
-iivdiImage :: Lens' ImportInstanceVolumeDetailItem DiskImageDescription
-iivdiImage = lens _iivdiImage (\ s a -> s{_iivdiImage = a});
-
--- | The volume.
-iivdiVolume :: Lens' ImportInstanceVolumeDetailItem DiskImageVolumeDescription
-iivdiVolume = lens _iivdiVolume (\ s a -> s{_iivdiVolume = a});
-
--- | The status of the import of this particular disk image.
-iivdiStatus :: Lens' ImportInstanceVolumeDetailItem Text
-iivdiStatus = lens _iivdiStatus (\ s a -> s{_iivdiStatus = a});
-
-instance FromXML ImportInstanceVolumeDetailItem where
-        parseXML x
-          = ImportInstanceVolumeDetailItem' <$>
-              (x .@? "statusMessage") <*> (x .@? "description") <*>
-                (x .@ "bytesConverted")
-                <*> (x .@ "availabilityZone")
-                <*> (x .@ "image")
-                <*> (x .@ "volume")
-                <*> (x .@ "status")
-
--- | Describes an import snapshot task.
---
--- /See:/ 'importSnapshotTask' smart constructor.
-data ImportSnapshotTask = ImportSnapshotTask'
-    { _istSnapshotTaskDetail :: !(Maybe SnapshotTaskDetail)
-    , _istImportTaskId       :: !(Maybe Text)
-    , _istDescription        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportSnapshotTask' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'istSnapshotTaskDetail'
---
--- * 'istImportTaskId'
---
--- * 'istDescription'
-importSnapshotTask
-    :: ImportSnapshotTask
-importSnapshotTask =
-    ImportSnapshotTask'
-    { _istSnapshotTaskDetail = Nothing
-    , _istImportTaskId = Nothing
-    , _istDescription = Nothing
-    }
-
--- | Describes an import snapshot task.
-istSnapshotTaskDetail :: Lens' ImportSnapshotTask (Maybe SnapshotTaskDetail)
-istSnapshotTaskDetail = lens _istSnapshotTaskDetail (\ s a -> s{_istSnapshotTaskDetail = a});
-
--- | The ID of the import snapshot task.
-istImportTaskId :: Lens' ImportSnapshotTask (Maybe Text)
-istImportTaskId = lens _istImportTaskId (\ s a -> s{_istImportTaskId = a});
-
--- | A description of the import snapshot task.
-istDescription :: Lens' ImportSnapshotTask (Maybe Text)
-istDescription = lens _istDescription (\ s a -> s{_istDescription = a});
-
-instance FromXML ImportSnapshotTask where
-        parseXML x
-          = ImportSnapshotTask' <$>
-              (x .@? "snapshotTaskDetail") <*>
-                (x .@? "importTaskId")
-                <*> (x .@? "description")
-
--- | Describes an import volume task.
---
--- /See:/ 'importVolumeTaskDetails' smart constructor.
-data ImportVolumeTaskDetails = ImportVolumeTaskDetails'
-    { _ivtdDescription      :: !(Maybe Text)
-    , _ivtdBytesConverted   :: !Integer
-    , _ivtdAvailabilityZone :: !Text
-    , _ivtdImage            :: !DiskImageDescription
-    , _ivtdVolume           :: !DiskImageVolumeDescription
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ImportVolumeTaskDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ivtdDescription'
---
--- * 'ivtdBytesConverted'
---
--- * 'ivtdAvailabilityZone'
---
--- * 'ivtdImage'
---
--- * 'ivtdVolume'
-importVolumeTaskDetails
-    :: Integer -- ^ 'ivtdBytesConverted'
-    -> Text -- ^ 'ivtdAvailabilityZone'
-    -> DiskImageDescription -- ^ 'ivtdImage'
-    -> DiskImageVolumeDescription -- ^ 'ivtdVolume'
-    -> ImportVolumeTaskDetails
-importVolumeTaskDetails pBytesConverted_ pAvailabilityZone_ pImage_ pVolume_ =
-    ImportVolumeTaskDetails'
-    { _ivtdDescription = Nothing
-    , _ivtdBytesConverted = pBytesConverted_
-    , _ivtdAvailabilityZone = pAvailabilityZone_
-    , _ivtdImage = pImage_
-    , _ivtdVolume = pVolume_
-    }
-
--- | The description you provided when starting the import volume task.
-ivtdDescription :: Lens' ImportVolumeTaskDetails (Maybe Text)
-ivtdDescription = lens _ivtdDescription (\ s a -> s{_ivtdDescription = a});
-
--- | The number of bytes converted so far.
-ivtdBytesConverted :: Lens' ImportVolumeTaskDetails Integer
-ivtdBytesConverted = lens _ivtdBytesConverted (\ s a -> s{_ivtdBytesConverted = a});
-
--- | The Availability Zone where the resulting volume will reside.
-ivtdAvailabilityZone :: Lens' ImportVolumeTaskDetails Text
-ivtdAvailabilityZone = lens _ivtdAvailabilityZone (\ s a -> s{_ivtdAvailabilityZone = a});
-
--- | The image.
-ivtdImage :: Lens' ImportVolumeTaskDetails DiskImageDescription
-ivtdImage = lens _ivtdImage (\ s a -> s{_ivtdImage = a});
-
--- | The volume.
-ivtdVolume :: Lens' ImportVolumeTaskDetails DiskImageVolumeDescription
-ivtdVolume = lens _ivtdVolume (\ s a -> s{_ivtdVolume = a});
-
-instance FromXML ImportVolumeTaskDetails where
-        parseXML x
-          = ImportVolumeTaskDetails' <$>
-              (x .@? "description") <*> (x .@ "bytesConverted") <*>
-                (x .@ "availabilityZone")
-                <*> (x .@ "image")
-                <*> (x .@ "volume")
-
--- | Describes an instance.
---
--- /See:/ 'instance'' smart constructor.
-data Instance = Instance'
-    { _insPublicDNSName         :: !(Maybe Text)
-    , _insPlatform              :: !(Maybe PlatformValues)
-    , _insSecurityGroups        :: !(Maybe [GroupIdentifier])
-    , _insClientToken           :: !(Maybe Text)
-    , _insSourceDestCheck       :: !(Maybe Bool)
-    , _insVPCId                 :: !(Maybe Text)
-    , _insKeyName               :: !(Maybe Text)
-    , _insNetworkInterfaces     :: !(Maybe [InstanceNetworkInterface])
-    , _insRAMDiskId             :: !(Maybe Text)
-    , _insSubnetId              :: !(Maybe Text)
-    , _insKernelId              :: !(Maybe Text)
-    , _insRootDeviceName        :: !(Maybe Text)
-    , _insSRIOVNetSupport       :: !(Maybe Text)
-    , _insEBSOptimized          :: !(Maybe Bool)
-    , _insStateTransitionReason :: !(Maybe Text)
-    , _insInstanceLifecycle     :: !(Maybe InstanceLifecycleType)
-    , _insIAMInstanceProfile    :: !(Maybe IAMInstanceProfile)
-    , _insPrivateIPAddress      :: !(Maybe Text)
-    , _insProductCodes          :: !(Maybe [ProductCode])
-    , _insSpotInstanceRequestId :: !(Maybe Text)
-    , _insPrivateDNSName        :: !(Maybe Text)
-    , _insStateReason           :: !(Maybe StateReason)
-    , _insBlockDeviceMappings   :: !(Maybe [InstanceBlockDeviceMapping])
-    , _insPublicIPAddress       :: !(Maybe Text)
-    , _insTags                  :: !(Maybe [Tag])
-    , _insInstanceId            :: !Text
-    , _insImageId               :: !Text
-    , _insAMILaunchIndex        :: !Int
-    , _insInstanceType          :: !InstanceType
-    , _insLaunchTime            :: !ISO8601
-    , _insPlacement             :: !Placement
-    , _insMonitoring            :: !Monitoring
-    , _insArchitecture          :: !ArchitectureValues
-    , _insRootDeviceType        :: !DeviceType
-    , _insVirtualizationType    :: !VirtualizationType
-    , _insHypervisor            :: !HypervisorType
-    , _insState                 :: !InstanceState
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Instance' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'insPublicDNSName'
---
--- * 'insPlatform'
---
--- * 'insSecurityGroups'
---
--- * 'insClientToken'
---
--- * 'insSourceDestCheck'
---
--- * 'insVPCId'
---
--- * 'insKeyName'
---
--- * 'insNetworkInterfaces'
---
--- * 'insRAMDiskId'
---
--- * 'insSubnetId'
---
--- * 'insKernelId'
---
--- * 'insRootDeviceName'
---
--- * 'insSRIOVNetSupport'
---
--- * 'insEBSOptimized'
---
--- * 'insStateTransitionReason'
---
--- * 'insInstanceLifecycle'
---
--- * 'insIAMInstanceProfile'
---
--- * 'insPrivateIPAddress'
---
--- * 'insProductCodes'
---
--- * 'insSpotInstanceRequestId'
---
--- * 'insPrivateDNSName'
---
--- * 'insStateReason'
---
--- * 'insBlockDeviceMappings'
---
--- * 'insPublicIPAddress'
---
--- * 'insTags'
---
--- * 'insInstanceId'
---
--- * 'insImageId'
---
--- * 'insAMILaunchIndex'
---
--- * 'insInstanceType'
---
--- * 'insLaunchTime'
---
--- * 'insPlacement'
---
--- * 'insMonitoring'
---
--- * 'insArchitecture'
---
--- * 'insRootDeviceType'
---
--- * 'insVirtualizationType'
---
--- * 'insHypervisor'
---
--- * 'insState'
-instance'
-    :: Text -- ^ 'insInstanceId'
-    -> Text -- ^ 'insImageId'
-    -> Int -- ^ 'insAMILaunchIndex'
-    -> InstanceType -- ^ 'insInstanceType'
-    -> UTCTime -- ^ 'insLaunchTime'
-    -> Placement -- ^ 'insPlacement'
-    -> Monitoring -- ^ 'insMonitoring'
-    -> ArchitectureValues -- ^ 'insArchitecture'
-    -> DeviceType -- ^ 'insRootDeviceType'
-    -> VirtualizationType -- ^ 'insVirtualizationType'
-    -> HypervisorType -- ^ 'insHypervisor'
-    -> InstanceState -- ^ 'insState'
-    -> Instance
-instance' pInstanceId_ pImageId_ pAMILaunchIndex_ pInstanceType_ pLaunchTime_ pPlacement_ pMonitoring_ pArchitecture_ pRootDeviceType_ pVirtualizationType_ pHypervisor_ pState_ =
-    Instance'
-    { _insPublicDNSName = Nothing
-    , _insPlatform = Nothing
-    , _insSecurityGroups = Nothing
-    , _insClientToken = Nothing
-    , _insSourceDestCheck = Nothing
-    , _insVPCId = Nothing
-    , _insKeyName = Nothing
-    , _insNetworkInterfaces = Nothing
-    , _insRAMDiskId = Nothing
-    , _insSubnetId = Nothing
-    , _insKernelId = Nothing
-    , _insRootDeviceName = Nothing
-    , _insSRIOVNetSupport = Nothing
-    , _insEBSOptimized = Nothing
-    , _insStateTransitionReason = Nothing
-    , _insInstanceLifecycle = Nothing
-    , _insIAMInstanceProfile = Nothing
-    , _insPrivateIPAddress = Nothing
-    , _insProductCodes = Nothing
-    , _insSpotInstanceRequestId = Nothing
-    , _insPrivateDNSName = Nothing
-    , _insStateReason = Nothing
-    , _insBlockDeviceMappings = Nothing
-    , _insPublicIPAddress = Nothing
-    , _insTags = Nothing
-    , _insInstanceId = pInstanceId_
-    , _insImageId = pImageId_
-    , _insAMILaunchIndex = pAMILaunchIndex_
-    , _insInstanceType = pInstanceType_
-    , _insLaunchTime = _Time # pLaunchTime_
-    , _insPlacement = pPlacement_
-    , _insMonitoring = pMonitoring_
-    , _insArchitecture = pArchitecture_
-    , _insRootDeviceType = pRootDeviceType_
-    , _insVirtualizationType = pVirtualizationType_
-    , _insHypervisor = pHypervisor_
-    , _insState = pState_
-    }
-
--- | The public DNS name assigned to the instance. This name is not available
--- until the instance enters the 'running' state. For EC2-VPC, this name is
--- only available if you\'ve enabled DNS hostnames for your VPC.
-insPublicDNSName :: Lens' Instance (Maybe Text)
-insPublicDNSName = lens _insPublicDNSName (\ s a -> s{_insPublicDNSName = a});
-
--- | The value is 'Windows' for Windows instances; otherwise blank.
-insPlatform :: Lens' Instance (Maybe PlatformValues)
-insPlatform = lens _insPlatform (\ s a -> s{_insPlatform = a});
-
--- | One or more security groups for the instance.
-insSecurityGroups :: Lens' Instance [GroupIdentifier]
-insSecurityGroups = lens _insSecurityGroups (\ s a -> s{_insSecurityGroups = a}) . _Default . _Coerce;
-
--- | The idempotency token you provided when you launched the instance, if
--- applicable.
-insClientToken :: Lens' Instance (Maybe Text)
-insClientToken = lens _insClientToken (\ s a -> s{_insClientToken = a});
-
--- | Specifies whether to enable an instance launched in a VPC to perform
--- NAT. This controls whether source\/destination checking is enabled on
--- the instance. A value of 'true' means checking is enabled, and 'false'
--- means checking is disabled. The value must be 'false' for the instance
--- to perform NAT. For more information, see
--- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html NAT Instances>
--- in the /Amazon Virtual Private Cloud User Guide/.
-insSourceDestCheck :: Lens' Instance (Maybe Bool)
-insSourceDestCheck = lens _insSourceDestCheck (\ s a -> s{_insSourceDestCheck = a});
-
--- | [EC2-VPC] The ID of the VPC in which the instance is running.
-insVPCId :: Lens' Instance (Maybe Text)
-insVPCId = lens _insVPCId (\ s a -> s{_insVPCId = a});
-
--- | The name of the key pair, if this instance was launched with an
--- associated key pair.
-insKeyName :: Lens' Instance (Maybe Text)
-insKeyName = lens _insKeyName (\ s a -> s{_insKeyName = a});
-
--- | [EC2-VPC] One or more network interfaces for the instance.
-insNetworkInterfaces :: Lens' Instance [InstanceNetworkInterface]
-insNetworkInterfaces = lens _insNetworkInterfaces (\ s a -> s{_insNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The RAM disk associated with this instance, if applicable.
-insRAMDiskId :: Lens' Instance (Maybe Text)
-insRAMDiskId = lens _insRAMDiskId (\ s a -> s{_insRAMDiskId = a});
-
--- | [EC2-VPC] The ID of the subnet in which the instance is running.
-insSubnetId :: Lens' Instance (Maybe Text)
-insSubnetId = lens _insSubnetId (\ s a -> s{_insSubnetId = a});
-
--- | The kernel associated with this instance, if applicable.
-insKernelId :: Lens' Instance (Maybe Text)
-insKernelId = lens _insKernelId (\ s a -> s{_insKernelId = a});
-
--- | The root device name (for example, '\/dev\/sda1' or '\/dev\/xvda').
-insRootDeviceName :: Lens' Instance (Maybe Text)
-insRootDeviceName = lens _insRootDeviceName (\ s a -> s{_insRootDeviceName = a});
-
--- | Specifies whether enhanced networking is enabled.
-insSRIOVNetSupport :: Lens' Instance (Maybe Text)
-insSRIOVNetSupport = lens _insSRIOVNetSupport (\ s a -> s{_insSRIOVNetSupport = a});
-
--- | Indicates whether the instance is optimized for EBS I\/O. This
--- optimization provides dedicated throughput to Amazon EBS and an
--- optimized configuration stack to provide optimal I\/O performance. This
--- optimization isn\'t available with all instance types. Additional usage
--- charges apply when using an EBS Optimized instance.
-insEBSOptimized :: Lens' Instance (Maybe Bool)
-insEBSOptimized = lens _insEBSOptimized (\ s a -> s{_insEBSOptimized = a});
-
--- | The reason for the most recent state transition. This might be an empty
--- string.
-insStateTransitionReason :: Lens' Instance (Maybe Text)
-insStateTransitionReason = lens _insStateTransitionReason (\ s a -> s{_insStateTransitionReason = a});
-
--- | Indicates whether this is a Spot instance.
-insInstanceLifecycle :: Lens' Instance (Maybe InstanceLifecycleType)
-insInstanceLifecycle = lens _insInstanceLifecycle (\ s a -> s{_insInstanceLifecycle = a});
-
--- | The IAM instance profile associated with the instance, if applicable.
-insIAMInstanceProfile :: Lens' Instance (Maybe IAMInstanceProfile)
-insIAMInstanceProfile = lens _insIAMInstanceProfile (\ s a -> s{_insIAMInstanceProfile = a});
-
--- | The private IP address assigned to the instance.
-insPrivateIPAddress :: Lens' Instance (Maybe Text)
-insPrivateIPAddress = lens _insPrivateIPAddress (\ s a -> s{_insPrivateIPAddress = a});
-
--- | The product codes attached to this instance, if applicable.
-insProductCodes :: Lens' Instance [ProductCode]
-insProductCodes = lens _insProductCodes (\ s a -> s{_insProductCodes = a}) . _Default . _Coerce;
-
--- | If the request is a Spot instance request, the ID of the request.
-insSpotInstanceRequestId :: Lens' Instance (Maybe Text)
-insSpotInstanceRequestId = lens _insSpotInstanceRequestId (\ s a -> s{_insSpotInstanceRequestId = a});
-
--- | The private DNS name assigned to the instance. This DNS name can only be
--- used inside the Amazon EC2 network. This name is not available until the
--- instance enters the 'running' state. For EC2-VPC, this name is only
--- available if you\'ve enabled DNS hostnames for your VPC.
-insPrivateDNSName :: Lens' Instance (Maybe Text)
-insPrivateDNSName = lens _insPrivateDNSName (\ s a -> s{_insPrivateDNSName = a});
-
--- | The reason for the most recent state transition.
-insStateReason :: Lens' Instance (Maybe StateReason)
-insStateReason = lens _insStateReason (\ s a -> s{_insStateReason = a});
-
--- | Any block device mapping entries for the instance.
-insBlockDeviceMappings :: Lens' Instance [InstanceBlockDeviceMapping]
-insBlockDeviceMappings = lens _insBlockDeviceMappings (\ s a -> s{_insBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | The public IP address assigned to the instance, if applicable.
-insPublicIPAddress :: Lens' Instance (Maybe Text)
-insPublicIPAddress = lens _insPublicIPAddress (\ s a -> s{_insPublicIPAddress = a});
-
--- | Any tags assigned to the instance.
-insTags :: Lens' Instance [Tag]
-insTags = lens _insTags (\ s a -> s{_insTags = a}) . _Default . _Coerce;
-
--- | The ID of the instance.
-insInstanceId :: Lens' Instance Text
-insInstanceId = lens _insInstanceId (\ s a -> s{_insInstanceId = a});
-
--- | The ID of the AMI used to launch the instance.
-insImageId :: Lens' Instance Text
-insImageId = lens _insImageId (\ s a -> s{_insImageId = a});
-
--- | The AMI launch index, which can be used to find this instance in the
--- launch group.
-insAMILaunchIndex :: Lens' Instance Int
-insAMILaunchIndex = lens _insAMILaunchIndex (\ s a -> s{_insAMILaunchIndex = a});
-
--- | The instance type.
-insInstanceType :: Lens' Instance InstanceType
-insInstanceType = lens _insInstanceType (\ s a -> s{_insInstanceType = a});
-
--- | The time the instance was launched.
-insLaunchTime :: Lens' Instance UTCTime
-insLaunchTime = lens _insLaunchTime (\ s a -> s{_insLaunchTime = a}) . _Time;
-
--- | The location where the instance launched, if applicable.
-insPlacement :: Lens' Instance Placement
-insPlacement = lens _insPlacement (\ s a -> s{_insPlacement = a});
-
--- | The monitoring information for the instance.
-insMonitoring :: Lens' Instance Monitoring
-insMonitoring = lens _insMonitoring (\ s a -> s{_insMonitoring = a});
-
--- | The architecture of the image.
-insArchitecture :: Lens' Instance ArchitectureValues
-insArchitecture = lens _insArchitecture (\ s a -> s{_insArchitecture = a});
-
--- | The root device type used by the AMI. The AMI can use an EBS volume or
--- an instance store volume.
-insRootDeviceType :: Lens' Instance DeviceType
-insRootDeviceType = lens _insRootDeviceType (\ s a -> s{_insRootDeviceType = a});
-
--- | The virtualization type of the instance.
-insVirtualizationType :: Lens' Instance VirtualizationType
-insVirtualizationType = lens _insVirtualizationType (\ s a -> s{_insVirtualizationType = a});
-
--- | The hypervisor type of the instance.
-insHypervisor :: Lens' Instance HypervisorType
-insHypervisor = lens _insHypervisor (\ s a -> s{_insHypervisor = a});
-
--- | The current state of the instance.
-insState :: Lens' Instance InstanceState
-insState = lens _insState (\ s a -> s{_insState = a});
-
-instance FromXML Instance where
-        parseXML x
-          = Instance' <$>
-              (x .@? "dnsName") <*> (x .@? "platform") <*>
-                (x .@? "groupSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "clientToken")
-                <*> (x .@? "sourceDestCheck")
-                <*> (x .@? "vpcId")
-                <*> (x .@? "keyName")
-                <*>
-                (x .@? "networkInterfaceSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "ramdiskId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "kernelId")
-                <*> (x .@? "rootDeviceName")
-                <*> (x .@? "sriovNetSupport")
-                <*> (x .@? "ebsOptimized")
-                <*> (x .@? "reason")
-                <*> (x .@? "instanceLifecycle")
-                <*> (x .@? "iamInstanceProfile")
-                <*> (x .@? "privateIpAddress")
-                <*>
-                (x .@? "productCodes" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "spotInstanceRequestId")
-                <*> (x .@? "privateDnsName")
-                <*> (x .@? "stateReason")
-                <*>
-                (x .@? "blockDeviceMapping" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "ipAddress")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "instanceId")
-                <*> (x .@ "imageId")
-                <*> (x .@ "amiLaunchIndex")
-                <*> (x .@ "instanceType")
-                <*> (x .@ "launchTime")
-                <*> (x .@ "placement")
-                <*> (x .@ "monitoring")
-                <*> (x .@ "architecture")
-                <*> (x .@ "rootDeviceType")
-                <*> (x .@ "virtualizationType")
-                <*> (x .@ "hypervisor")
-                <*> (x .@ "instanceState")
-
--- | Describes a block device mapping.
---
--- /See:/ 'instanceBlockDeviceMapping' smart constructor.
-data InstanceBlockDeviceMapping = InstanceBlockDeviceMapping'
-    { _ibdmEBS        :: !(Maybe EBSInstanceBlockDevice)
-    , _ibdmDeviceName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceBlockDeviceMapping' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ibdmEBS'
---
--- * 'ibdmDeviceName'
-instanceBlockDeviceMapping
-    :: InstanceBlockDeviceMapping
-instanceBlockDeviceMapping =
-    InstanceBlockDeviceMapping'
-    { _ibdmEBS = Nothing
-    , _ibdmDeviceName = Nothing
-    }
-
--- | Parameters used to automatically set up EBS volumes when the instance is
--- launched.
-ibdmEBS :: Lens' InstanceBlockDeviceMapping (Maybe EBSInstanceBlockDevice)
-ibdmEBS = lens _ibdmEBS (\ s a -> s{_ibdmEBS = a});
-
--- | The device name exposed to the instance (for example, '\/dev\/sdh' or
--- 'xvdh').
-ibdmDeviceName :: Lens' InstanceBlockDeviceMapping (Maybe Text)
-ibdmDeviceName = lens _ibdmDeviceName (\ s a -> s{_ibdmDeviceName = a});
-
-instance FromXML InstanceBlockDeviceMapping where
-        parseXML x
-          = InstanceBlockDeviceMapping' <$>
-              (x .@? "ebs") <*> (x .@? "deviceName")
-
--- | Describes a block device mapping entry.
---
--- /See:/ 'instanceBlockDeviceMappingSpecification' smart constructor.
-data InstanceBlockDeviceMappingSpecification = InstanceBlockDeviceMappingSpecification'
-    { _ibdmsVirtualName :: !(Maybe Text)
-    , _ibdmsNoDevice    :: !(Maybe Text)
-    , _ibdmsEBS         :: !(Maybe EBSInstanceBlockDeviceSpecification)
-    , _ibdmsDeviceName  :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceBlockDeviceMappingSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ibdmsVirtualName'
---
--- * 'ibdmsNoDevice'
---
--- * 'ibdmsEBS'
---
--- * 'ibdmsDeviceName'
-instanceBlockDeviceMappingSpecification
-    :: InstanceBlockDeviceMappingSpecification
-instanceBlockDeviceMappingSpecification =
-    InstanceBlockDeviceMappingSpecification'
-    { _ibdmsVirtualName = Nothing
-    , _ibdmsNoDevice = Nothing
-    , _ibdmsEBS = Nothing
-    , _ibdmsDeviceName = Nothing
-    }
-
--- | The virtual device name.
-ibdmsVirtualName :: Lens' InstanceBlockDeviceMappingSpecification (Maybe Text)
-ibdmsVirtualName = lens _ibdmsVirtualName (\ s a -> s{_ibdmsVirtualName = a});
-
--- | suppress the specified device included in the block device mapping.
-ibdmsNoDevice :: Lens' InstanceBlockDeviceMappingSpecification (Maybe Text)
-ibdmsNoDevice = lens _ibdmsNoDevice (\ s a -> s{_ibdmsNoDevice = a});
-
--- | Parameters used to automatically set up EBS volumes when the instance is
--- launched.
-ibdmsEBS :: Lens' InstanceBlockDeviceMappingSpecification (Maybe EBSInstanceBlockDeviceSpecification)
-ibdmsEBS = lens _ibdmsEBS (\ s a -> s{_ibdmsEBS = a});
-
--- | The device name exposed to the instance (for example, '\/dev\/sdh' or
--- 'xvdh').
-ibdmsDeviceName :: Lens' InstanceBlockDeviceMappingSpecification (Maybe Text)
-ibdmsDeviceName = lens _ibdmsDeviceName (\ s a -> s{_ibdmsDeviceName = a});
-
-instance ToQuery
-         InstanceBlockDeviceMappingSpecification where
-        toQuery InstanceBlockDeviceMappingSpecification'{..}
-          = mconcat
-              ["VirtualName" =: _ibdmsVirtualName,
-               "NoDevice" =: _ibdmsNoDevice, "Ebs" =: _ibdmsEBS,
-               "DeviceName" =: _ibdmsDeviceName]
-
--- | Information about the instance type that the Dedicated host supports.
---
--- /See:/ 'instanceCapacity' smart constructor.
-data InstanceCapacity = InstanceCapacity'
-    { _icAvailableCapacity :: !(Maybe Int)
-    , _icInstanceType      :: !(Maybe Text)
-    , _icTotalCapacity     :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceCapacity' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'icAvailableCapacity'
---
--- * 'icInstanceType'
---
--- * 'icTotalCapacity'
-instanceCapacity
-    :: InstanceCapacity
-instanceCapacity =
-    InstanceCapacity'
-    { _icAvailableCapacity = Nothing
-    , _icInstanceType = Nothing
-    , _icTotalCapacity = Nothing
-    }
-
--- | The number of instances that can still be launched onto the Dedicated
--- host.
-icAvailableCapacity :: Lens' InstanceCapacity (Maybe Int)
-icAvailableCapacity = lens _icAvailableCapacity (\ s a -> s{_icAvailableCapacity = a});
-
--- | The instance type size supported by the Dedicated host.
-icInstanceType :: Lens' InstanceCapacity (Maybe Text)
-icInstanceType = lens _icInstanceType (\ s a -> s{_icInstanceType = a});
-
--- | The total number of instances that can be launched onto the Dedicated
--- host.
-icTotalCapacity :: Lens' InstanceCapacity (Maybe Int)
-icTotalCapacity = lens _icTotalCapacity (\ s a -> s{_icTotalCapacity = a});
-
-instance FromXML InstanceCapacity where
-        parseXML x
-          = InstanceCapacity' <$>
-              (x .@? "availableCapacity") <*>
-                (x .@? "instanceType")
-                <*> (x .@? "totalCapacity")
-
--- | Describes a Reserved instance listing state.
---
--- /See:/ 'instanceCount' smart constructor.
-data InstanceCount = InstanceCount'
-    { _icState         :: !(Maybe ListingState)
-    , _icInstanceCount :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceCount' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'icState'
---
--- * 'icInstanceCount'
-instanceCount
-    :: InstanceCount
-instanceCount =
-    InstanceCount'
-    { _icState = Nothing
-    , _icInstanceCount = Nothing
-    }
-
--- | The states of the listed Reserved instances.
-icState :: Lens' InstanceCount (Maybe ListingState)
-icState = lens _icState (\ s a -> s{_icState = a});
-
--- | The number of listed Reserved instances in the state specified by the
--- 'state'.
-icInstanceCount :: Lens' InstanceCount (Maybe Int)
-icInstanceCount = lens _icInstanceCount (\ s a -> s{_icInstanceCount = a});
-
-instance FromXML InstanceCount where
-        parseXML x
-          = InstanceCount' <$>
-              (x .@? "state") <*> (x .@? "instanceCount")
-
--- | Describes an instance to export.
---
--- /See:/ 'instanceExportDetails' smart constructor.
-data InstanceExportDetails = InstanceExportDetails'
-    { _iedTargetEnvironment :: !(Maybe ExportEnvironment)
-    , _iedInstanceId        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceExportDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iedTargetEnvironment'
---
--- * 'iedInstanceId'
-instanceExportDetails
-    :: InstanceExportDetails
-instanceExportDetails =
-    InstanceExportDetails'
-    { _iedTargetEnvironment = Nothing
-    , _iedInstanceId = Nothing
-    }
-
--- | The target virtualization environment.
-iedTargetEnvironment :: Lens' InstanceExportDetails (Maybe ExportEnvironment)
-iedTargetEnvironment = lens _iedTargetEnvironment (\ s a -> s{_iedTargetEnvironment = a});
-
--- | The ID of the resource being exported.
-iedInstanceId :: Lens' InstanceExportDetails (Maybe Text)
-iedInstanceId = lens _iedInstanceId (\ s a -> s{_iedInstanceId = a});
-
-instance FromXML InstanceExportDetails where
-        parseXML x
-          = InstanceExportDetails' <$>
-              (x .@? "targetEnvironment") <*> (x .@? "instanceId")
-
--- | Describes the monitoring information of the instance.
---
--- /See:/ 'instanceMonitoring' smart constructor.
-data InstanceMonitoring = InstanceMonitoring'
-    { _imInstanceId :: !(Maybe Text)
-    , _imMonitoring :: !(Maybe Monitoring)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceMonitoring' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'imInstanceId'
---
--- * 'imMonitoring'
-instanceMonitoring
-    :: InstanceMonitoring
-instanceMonitoring =
-    InstanceMonitoring'
-    { _imInstanceId = Nothing
-    , _imMonitoring = Nothing
-    }
-
--- | The ID of the instance.
-imInstanceId :: Lens' InstanceMonitoring (Maybe Text)
-imInstanceId = lens _imInstanceId (\ s a -> s{_imInstanceId = a});
-
--- | The monitoring information.
-imMonitoring :: Lens' InstanceMonitoring (Maybe Monitoring)
-imMonitoring = lens _imMonitoring (\ s a -> s{_imMonitoring = a});
-
-instance FromXML InstanceMonitoring where
-        parseXML x
-          = InstanceMonitoring' <$>
-              (x .@? "instanceId") <*> (x .@? "monitoring")
-
--- | Describes a network interface.
---
--- /See:/ 'instanceNetworkInterface' smart constructor.
-data InstanceNetworkInterface = InstanceNetworkInterface'
-    { _iniGroups             :: !(Maybe [GroupIdentifier])
-    , _iniStatus             :: !(Maybe NetworkInterfaceStatus)
-    , _iniPrivateIPAddresses :: !(Maybe [InstancePrivateIPAddress])
-    , _iniSourceDestCheck    :: !(Maybe Bool)
-    , _iniVPCId              :: !(Maybe Text)
-    , _iniNetworkInterfaceId :: !(Maybe Text)
-    , _iniSubnetId           :: !(Maybe Text)
-    , _iniMACAddress         :: !(Maybe Text)
-    , _iniAttachment         :: !(Maybe InstanceNetworkInterfaceAttachment)
-    , _iniOwnerId            :: !(Maybe Text)
-    , _iniPrivateIPAddress   :: !(Maybe Text)
-    , _iniPrivateDNSName     :: !(Maybe Text)
-    , _iniDescription        :: !(Maybe Text)
-    , _iniAssociation        :: !(Maybe InstanceNetworkInterfaceAssociation)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceNetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iniGroups'
---
--- * 'iniStatus'
---
--- * 'iniPrivateIPAddresses'
---
--- * 'iniSourceDestCheck'
---
--- * 'iniVPCId'
---
--- * 'iniNetworkInterfaceId'
---
--- * 'iniSubnetId'
---
--- * 'iniMACAddress'
---
--- * 'iniAttachment'
---
--- * 'iniOwnerId'
---
--- * 'iniPrivateIPAddress'
---
--- * 'iniPrivateDNSName'
---
--- * 'iniDescription'
---
--- * 'iniAssociation'
-instanceNetworkInterface
-    :: InstanceNetworkInterface
-instanceNetworkInterface =
-    InstanceNetworkInterface'
-    { _iniGroups = Nothing
-    , _iniStatus = Nothing
-    , _iniPrivateIPAddresses = Nothing
-    , _iniSourceDestCheck = Nothing
-    , _iniVPCId = Nothing
-    , _iniNetworkInterfaceId = Nothing
-    , _iniSubnetId = Nothing
-    , _iniMACAddress = Nothing
-    , _iniAttachment = Nothing
-    , _iniOwnerId = Nothing
-    , _iniPrivateIPAddress = Nothing
-    , _iniPrivateDNSName = Nothing
-    , _iniDescription = Nothing
-    , _iniAssociation = Nothing
-    }
-
--- | One or more security groups.
-iniGroups :: Lens' InstanceNetworkInterface [GroupIdentifier]
-iniGroups = lens _iniGroups (\ s a -> s{_iniGroups = a}) . _Default . _Coerce;
-
--- | The status of the network interface.
-iniStatus :: Lens' InstanceNetworkInterface (Maybe NetworkInterfaceStatus)
-iniStatus = lens _iniStatus (\ s a -> s{_iniStatus = a});
-
--- | The private IP addresses associated with the network interface.
-iniPrivateIPAddresses :: Lens' InstanceNetworkInterface [InstancePrivateIPAddress]
-iniPrivateIPAddresses = lens _iniPrivateIPAddresses (\ s a -> s{_iniPrivateIPAddresses = a}) . _Default . _Coerce;
-
--- | Indicates whether to validate network traffic to or from this network
--- interface.
-iniSourceDestCheck :: Lens' InstanceNetworkInterface (Maybe Bool)
-iniSourceDestCheck = lens _iniSourceDestCheck (\ s a -> s{_iniSourceDestCheck = a});
-
--- | The ID of the VPC.
-iniVPCId :: Lens' InstanceNetworkInterface (Maybe Text)
-iniVPCId = lens _iniVPCId (\ s a -> s{_iniVPCId = a});
-
--- | The ID of the network interface.
-iniNetworkInterfaceId :: Lens' InstanceNetworkInterface (Maybe Text)
-iniNetworkInterfaceId = lens _iniNetworkInterfaceId (\ s a -> s{_iniNetworkInterfaceId = a});
-
--- | The ID of the subnet.
-iniSubnetId :: Lens' InstanceNetworkInterface (Maybe Text)
-iniSubnetId = lens _iniSubnetId (\ s a -> s{_iniSubnetId = a});
-
--- | The MAC address.
-iniMACAddress :: Lens' InstanceNetworkInterface (Maybe Text)
-iniMACAddress = lens _iniMACAddress (\ s a -> s{_iniMACAddress = a});
-
--- | The network interface attachment.
-iniAttachment :: Lens' InstanceNetworkInterface (Maybe InstanceNetworkInterfaceAttachment)
-iniAttachment = lens _iniAttachment (\ s a -> s{_iniAttachment = a});
-
--- | The ID of the AWS account that created the network interface.
-iniOwnerId :: Lens' InstanceNetworkInterface (Maybe Text)
-iniOwnerId = lens _iniOwnerId (\ s a -> s{_iniOwnerId = a});
-
--- | The IP address of the network interface within the subnet.
-iniPrivateIPAddress :: Lens' InstanceNetworkInterface (Maybe Text)
-iniPrivateIPAddress = lens _iniPrivateIPAddress (\ s a -> s{_iniPrivateIPAddress = a});
-
--- | The private DNS name.
-iniPrivateDNSName :: Lens' InstanceNetworkInterface (Maybe Text)
-iniPrivateDNSName = lens _iniPrivateDNSName (\ s a -> s{_iniPrivateDNSName = a});
-
--- | The description.
-iniDescription :: Lens' InstanceNetworkInterface (Maybe Text)
-iniDescription = lens _iniDescription (\ s a -> s{_iniDescription = a});
-
--- | The association information for an Elastic IP associated with the
--- network interface.
-iniAssociation :: Lens' InstanceNetworkInterface (Maybe InstanceNetworkInterfaceAssociation)
-iniAssociation = lens _iniAssociation (\ s a -> s{_iniAssociation = a});
-
-instance FromXML InstanceNetworkInterface where
-        parseXML x
-          = InstanceNetworkInterface' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "status")
-                <*>
-                (x .@? "privateIpAddressesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "sourceDestCheck")
-                <*> (x .@? "vpcId")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "macAddress")
-                <*> (x .@? "attachment")
-                <*> (x .@? "ownerId")
-                <*> (x .@? "privateIpAddress")
-                <*> (x .@? "privateDnsName")
-                <*> (x .@? "description")
-                <*> (x .@? "association")
-
--- | Describes association information for an Elastic IP address.
---
--- /See:/ 'instanceNetworkInterfaceAssociation' smart constructor.
-data InstanceNetworkInterfaceAssociation = InstanceNetworkInterfaceAssociation'
-    { _iniaPublicDNSName :: !(Maybe Text)
-    , _iniaIPOwnerId     :: !(Maybe Text)
-    , _iniaPublicIP      :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceNetworkInterfaceAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iniaPublicDNSName'
---
--- * 'iniaIPOwnerId'
---
--- * 'iniaPublicIP'
-instanceNetworkInterfaceAssociation
-    :: InstanceNetworkInterfaceAssociation
-instanceNetworkInterfaceAssociation =
-    InstanceNetworkInterfaceAssociation'
-    { _iniaPublicDNSName = Nothing
-    , _iniaIPOwnerId = Nothing
-    , _iniaPublicIP = Nothing
-    }
-
--- | The public DNS name.
-iniaPublicDNSName :: Lens' InstanceNetworkInterfaceAssociation (Maybe Text)
-iniaPublicDNSName = lens _iniaPublicDNSName (\ s a -> s{_iniaPublicDNSName = a});
-
--- | The ID of the owner of the Elastic IP address.
-iniaIPOwnerId :: Lens' InstanceNetworkInterfaceAssociation (Maybe Text)
-iniaIPOwnerId = lens _iniaIPOwnerId (\ s a -> s{_iniaIPOwnerId = a});
-
--- | The public IP address or Elastic IP address bound to the network
--- interface.
-iniaPublicIP :: Lens' InstanceNetworkInterfaceAssociation (Maybe Text)
-iniaPublicIP = lens _iniaPublicIP (\ s a -> s{_iniaPublicIP = a});
-
-instance FromXML InstanceNetworkInterfaceAssociation
-         where
-        parseXML x
-          = InstanceNetworkInterfaceAssociation' <$>
-              (x .@? "publicDnsName") <*> (x .@? "ipOwnerId") <*>
-                (x .@? "publicIp")
-
--- | Describes a network interface attachment.
---
--- /See:/ 'instanceNetworkInterfaceAttachment' smart constructor.
-data InstanceNetworkInterfaceAttachment = InstanceNetworkInterfaceAttachment'
-    { _iniaStatus              :: !(Maybe AttachmentStatus)
-    , _iniaDeleteOnTermination :: !(Maybe Bool)
-    , _iniaAttachmentId        :: !(Maybe Text)
-    , _iniaAttachTime          :: !(Maybe ISO8601)
-    , _iniaDeviceIndex         :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceNetworkInterfaceAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iniaStatus'
---
--- * 'iniaDeleteOnTermination'
---
--- * 'iniaAttachmentId'
---
--- * 'iniaAttachTime'
---
--- * 'iniaDeviceIndex'
-instanceNetworkInterfaceAttachment
-    :: InstanceNetworkInterfaceAttachment
-instanceNetworkInterfaceAttachment =
-    InstanceNetworkInterfaceAttachment'
-    { _iniaStatus = Nothing
-    , _iniaDeleteOnTermination = Nothing
-    , _iniaAttachmentId = Nothing
-    , _iniaAttachTime = Nothing
-    , _iniaDeviceIndex = Nothing
-    }
-
--- | The attachment state.
-iniaStatus :: Lens' InstanceNetworkInterfaceAttachment (Maybe AttachmentStatus)
-iniaStatus = lens _iniaStatus (\ s a -> s{_iniaStatus = a});
-
--- | Indicates whether the network interface is deleted when the instance is
--- terminated.
-iniaDeleteOnTermination :: Lens' InstanceNetworkInterfaceAttachment (Maybe Bool)
-iniaDeleteOnTermination = lens _iniaDeleteOnTermination (\ s a -> s{_iniaDeleteOnTermination = a});
-
--- | The ID of the network interface attachment.
-iniaAttachmentId :: Lens' InstanceNetworkInterfaceAttachment (Maybe Text)
-iniaAttachmentId = lens _iniaAttachmentId (\ s a -> s{_iniaAttachmentId = a});
-
--- | The time stamp when the attachment initiated.
-iniaAttachTime :: Lens' InstanceNetworkInterfaceAttachment (Maybe UTCTime)
-iniaAttachTime = lens _iniaAttachTime (\ s a -> s{_iniaAttachTime = a}) . mapping _Time;
-
--- | The index of the device on the instance for the network interface
--- attachment.
-iniaDeviceIndex :: Lens' InstanceNetworkInterfaceAttachment (Maybe Int)
-iniaDeviceIndex = lens _iniaDeviceIndex (\ s a -> s{_iniaDeviceIndex = a});
-
-instance FromXML InstanceNetworkInterfaceAttachment
-         where
-        parseXML x
-          = InstanceNetworkInterfaceAttachment' <$>
-              (x .@? "status") <*> (x .@? "deleteOnTermination")
-                <*> (x .@? "attachmentId")
-                <*> (x .@? "attachTime")
-                <*> (x .@? "deviceIndex")
-
--- | Describes a network interface.
---
--- /See:/ 'instanceNetworkInterfaceSpecification' smart constructor.
-data InstanceNetworkInterfaceSpecification = InstanceNetworkInterfaceSpecification'
-    { _inisGroups                         :: !(Maybe [Text])
-    , _inisPrivateIPAddresses             :: !(Maybe [PrivateIPAddressSpecification])
-    , _inisDeleteOnTermination            :: !(Maybe Bool)
-    , _inisAssociatePublicIPAddress       :: !(Maybe Bool)
-    , _inisNetworkInterfaceId             :: !(Maybe Text)
-    , _inisSubnetId                       :: !(Maybe Text)
-    , _inisPrivateIPAddress               :: !(Maybe Text)
-    , _inisSecondaryPrivateIPAddressCount :: !(Maybe Int)
-    , _inisDescription                    :: !(Maybe Text)
-    , _inisDeviceIndex                    :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceNetworkInterfaceSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'inisGroups'
---
--- * 'inisPrivateIPAddresses'
---
--- * 'inisDeleteOnTermination'
---
--- * 'inisAssociatePublicIPAddress'
---
--- * 'inisNetworkInterfaceId'
---
--- * 'inisSubnetId'
---
--- * 'inisPrivateIPAddress'
---
--- * 'inisSecondaryPrivateIPAddressCount'
---
--- * 'inisDescription'
---
--- * 'inisDeviceIndex'
-instanceNetworkInterfaceSpecification
-    :: InstanceNetworkInterfaceSpecification
-instanceNetworkInterfaceSpecification =
-    InstanceNetworkInterfaceSpecification'
-    { _inisGroups = Nothing
-    , _inisPrivateIPAddresses = Nothing
-    , _inisDeleteOnTermination = Nothing
-    , _inisAssociatePublicIPAddress = Nothing
-    , _inisNetworkInterfaceId = Nothing
-    , _inisSubnetId = Nothing
-    , _inisPrivateIPAddress = Nothing
-    , _inisSecondaryPrivateIPAddressCount = Nothing
-    , _inisDescription = Nothing
-    , _inisDeviceIndex = Nothing
-    }
-
--- | The IDs of the security groups for the network interface. Applies only
--- if creating a network interface when launching an instance.
-inisGroups :: Lens' InstanceNetworkInterfaceSpecification [Text]
-inisGroups = lens _inisGroups (\ s a -> s{_inisGroups = a}) . _Default . _Coerce;
-
--- | One or more private IP addresses to assign to the network interface.
--- Only one private IP address can be designated as primary.
-inisPrivateIPAddresses :: Lens' InstanceNetworkInterfaceSpecification [PrivateIPAddressSpecification]
-inisPrivateIPAddresses = lens _inisPrivateIPAddresses (\ s a -> s{_inisPrivateIPAddresses = a}) . _Default . _Coerce;
-
--- | If set to 'true', the interface is deleted when the instance is
--- terminated. You can specify 'true' only if creating a new network
--- interface when launching an instance.
-inisDeleteOnTermination :: Lens' InstanceNetworkInterfaceSpecification (Maybe Bool)
-inisDeleteOnTermination = lens _inisDeleteOnTermination (\ s a -> s{_inisDeleteOnTermination = a});
-
--- | Indicates whether to assign a public IP address to an instance you
--- launch in a VPC. The public IP address can only be assigned to a network
--- interface for eth0, and can only be assigned to a new network interface,
--- not an existing one. You cannot specify more than one network interface
--- in the request. If launching into a default subnet, the default value is
--- 'true'.
-inisAssociatePublicIPAddress :: Lens' InstanceNetworkInterfaceSpecification (Maybe Bool)
-inisAssociatePublicIPAddress = lens _inisAssociatePublicIPAddress (\ s a -> s{_inisAssociatePublicIPAddress = a});
-
--- | The ID of the network interface.
-inisNetworkInterfaceId :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
-inisNetworkInterfaceId = lens _inisNetworkInterfaceId (\ s a -> s{_inisNetworkInterfaceId = a});
-
--- | The ID of the subnet associated with the network string. Applies only if
--- creating a network interface when launching an instance.
-inisSubnetId :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
-inisSubnetId = lens _inisSubnetId (\ s a -> s{_inisSubnetId = a});
-
--- | The private IP address of the network interface. Applies only if
--- creating a network interface when launching an instance.
-inisPrivateIPAddress :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
-inisPrivateIPAddress = lens _inisPrivateIPAddress (\ s a -> s{_inisPrivateIPAddress = a});
-
--- | The number of secondary private IP addresses. You can\'t specify this
--- option and specify more than one private IP address using the private IP
--- addresses option.
-inisSecondaryPrivateIPAddressCount :: Lens' InstanceNetworkInterfaceSpecification (Maybe Int)
-inisSecondaryPrivateIPAddressCount = lens _inisSecondaryPrivateIPAddressCount (\ s a -> s{_inisSecondaryPrivateIPAddressCount = a});
-
--- | The description of the network interface. Applies only if creating a
--- network interface when launching an instance.
-inisDescription :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
-inisDescription = lens _inisDescription (\ s a -> s{_inisDescription = a});
-
--- | The index of the device on the instance for the network interface
--- attachment. If you are specifying a network interface in a RunInstances
--- request, you must provide the device index.
-inisDeviceIndex :: Lens' InstanceNetworkInterfaceSpecification (Maybe Int)
-inisDeviceIndex = lens _inisDeviceIndex (\ s a -> s{_inisDeviceIndex = a});
-
-instance FromXML
-         InstanceNetworkInterfaceSpecification where
-        parseXML x
-          = InstanceNetworkInterfaceSpecification' <$>
-              (x .@? "SecurityGroupId" .!@ mempty >>=
-                 may (parseXMLList "SecurityGroupId"))
-                <*>
-                (x .@? "privateIpAddressesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "deleteOnTermination")
-                <*> (x .@? "associatePublicIpAddress")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "privateIpAddress")
-                <*> (x .@? "secondaryPrivateIpAddressCount")
-                <*> (x .@? "description")
-                <*> (x .@? "deviceIndex")
-
-instance ToQuery
-         InstanceNetworkInterfaceSpecification where
-        toQuery InstanceNetworkInterfaceSpecification'{..}
-          = mconcat
-              [toQuery
-                 (toQueryList "SecurityGroupId" <$> _inisGroups),
-               toQuery
-                 (toQueryList "PrivateIpAddresses" <$>
-                    _inisPrivateIPAddresses),
-               "DeleteOnTermination" =: _inisDeleteOnTermination,
-               "AssociatePublicIpAddress" =:
-                 _inisAssociatePublicIPAddress,
-               "NetworkInterfaceId" =: _inisNetworkInterfaceId,
-               "SubnetId" =: _inisSubnetId,
-               "PrivateIpAddress" =: _inisPrivateIPAddress,
-               "SecondaryPrivateIpAddressCount" =:
-                 _inisSecondaryPrivateIPAddressCount,
-               "Description" =: _inisDescription,
-               "DeviceIndex" =: _inisDeviceIndex]
-
--- | Describes a private IP address.
---
--- /See:/ 'instancePrivateIPAddress' smart constructor.
-data InstancePrivateIPAddress = InstancePrivateIPAddress'
-    { _ipiaPrimary          :: !(Maybe Bool)
-    , _ipiaPrivateIPAddress :: !(Maybe Text)
-    , _ipiaPrivateDNSName   :: !(Maybe Text)
-    , _ipiaAssociation      :: !(Maybe InstanceNetworkInterfaceAssociation)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstancePrivateIPAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ipiaPrimary'
---
--- * 'ipiaPrivateIPAddress'
---
--- * 'ipiaPrivateDNSName'
---
--- * 'ipiaAssociation'
-instancePrivateIPAddress
-    :: InstancePrivateIPAddress
-instancePrivateIPAddress =
-    InstancePrivateIPAddress'
-    { _ipiaPrimary = Nothing
-    , _ipiaPrivateIPAddress = Nothing
-    , _ipiaPrivateDNSName = Nothing
-    , _ipiaAssociation = Nothing
-    }
-
--- | Indicates whether this IP address is the primary private IP address of
--- the network interface.
-ipiaPrimary :: Lens' InstancePrivateIPAddress (Maybe Bool)
-ipiaPrimary = lens _ipiaPrimary (\ s a -> s{_ipiaPrimary = a});
-
--- | The private IP address of the network interface.
-ipiaPrivateIPAddress :: Lens' InstancePrivateIPAddress (Maybe Text)
-ipiaPrivateIPAddress = lens _ipiaPrivateIPAddress (\ s a -> s{_ipiaPrivateIPAddress = a});
-
--- | The private DNS name.
-ipiaPrivateDNSName :: Lens' InstancePrivateIPAddress (Maybe Text)
-ipiaPrivateDNSName = lens _ipiaPrivateDNSName (\ s a -> s{_ipiaPrivateDNSName = a});
-
--- | The association information for an Elastic IP address for the network
--- interface.
-ipiaAssociation :: Lens' InstancePrivateIPAddress (Maybe InstanceNetworkInterfaceAssociation)
-ipiaAssociation = lens _ipiaAssociation (\ s a -> s{_ipiaAssociation = a});
-
-instance FromXML InstancePrivateIPAddress where
-        parseXML x
-          = InstancePrivateIPAddress' <$>
-              (x .@? "primary") <*> (x .@? "privateIpAddress") <*>
-                (x .@? "privateDnsName")
-                <*> (x .@? "association")
-
--- | Describes the current state of the instance.
---
--- /See:/ 'instanceState' smart constructor.
-data InstanceState = InstanceState'
-    { _isName :: !InstanceStateName
-    , _isCode :: !Int
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceState' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isName'
---
--- * 'isCode'
-instanceState
-    :: InstanceStateName -- ^ 'isName'
-    -> Int -- ^ 'isCode'
-    -> InstanceState
-instanceState pName_ pCode_ =
-    InstanceState'
-    { _isName = pName_
-    , _isCode = pCode_
-    }
-
--- | The current state of the instance.
-isName :: Lens' InstanceState InstanceStateName
-isName = lens _isName (\ s a -> s{_isName = a});
-
--- | The low byte represents the state. The high byte is an opaque internal
--- value and should be ignored.
---
--- -   '0' : 'pending'
---
--- -   '16' : 'running'
---
--- -   '32' : 'shutting-down'
---
--- -   '48' : 'terminated'
---
--- -   '64' : 'stopping'
---
--- -   '80' : 'stopped'
---
-isCode :: Lens' InstanceState Int
-isCode = lens _isCode (\ s a -> s{_isCode = a});
-
-instance FromXML InstanceState where
-        parseXML x
-          = InstanceState' <$> (x .@ "name") <*> (x .@ "code")
-
--- | Describes an instance state change.
---
--- /See:/ 'instanceStateChange' smart constructor.
-data InstanceStateChange = InstanceStateChange'
-    { _iscInstanceId    :: !(Maybe Text)
-    , _iscCurrentState  :: !(Maybe InstanceState)
-    , _iscPreviousState :: !(Maybe InstanceState)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStateChange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iscInstanceId'
---
--- * 'iscCurrentState'
---
--- * 'iscPreviousState'
-instanceStateChange
-    :: InstanceStateChange
-instanceStateChange =
-    InstanceStateChange'
-    { _iscInstanceId = Nothing
-    , _iscCurrentState = Nothing
-    , _iscPreviousState = Nothing
-    }
-
--- | The ID of the instance.
-iscInstanceId :: Lens' InstanceStateChange (Maybe Text)
-iscInstanceId = lens _iscInstanceId (\ s a -> s{_iscInstanceId = a});
-
--- | The current state of the instance.
-iscCurrentState :: Lens' InstanceStateChange (Maybe InstanceState)
-iscCurrentState = lens _iscCurrentState (\ s a -> s{_iscCurrentState = a});
-
--- | The previous state of the instance.
-iscPreviousState :: Lens' InstanceStateChange (Maybe InstanceState)
-iscPreviousState = lens _iscPreviousState (\ s a -> s{_iscPreviousState = a});
-
-instance FromXML InstanceStateChange where
-        parseXML x
-          = InstanceStateChange' <$>
-              (x .@? "instanceId") <*> (x .@? "currentState") <*>
-                (x .@? "previousState")
-
--- | Describes the status of an instance.
---
--- /See:/ 'instanceStatus' smart constructor.
-data InstanceStatus = InstanceStatus'
-    { _isInstanceId       :: !(Maybe Text)
-    , _isSystemStatus     :: !(Maybe InstanceStatusSummary)
-    , _isEvents           :: !(Maybe [InstanceStatusEvent])
-    , _isAvailabilityZone :: !(Maybe Text)
-    , _isInstanceStatus   :: !(Maybe InstanceStatusSummary)
-    , _isInstanceState    :: !(Maybe InstanceState)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isInstanceId'
---
--- * 'isSystemStatus'
---
--- * 'isEvents'
---
--- * 'isAvailabilityZone'
---
--- * 'isInstanceStatus'
---
--- * 'isInstanceState'
-instanceStatus
-    :: InstanceStatus
-instanceStatus =
-    InstanceStatus'
-    { _isInstanceId = Nothing
-    , _isSystemStatus = Nothing
-    , _isEvents = Nothing
-    , _isAvailabilityZone = Nothing
-    , _isInstanceStatus = Nothing
-    , _isInstanceState = Nothing
-    }
-
--- | The ID of the instance.
-isInstanceId :: Lens' InstanceStatus (Maybe Text)
-isInstanceId = lens _isInstanceId (\ s a -> s{_isInstanceId = a});
-
--- | Reports impaired functionality that stems from issues related to the
--- systems that support an instance, such as hardware failures and network
--- connectivity problems.
-isSystemStatus :: Lens' InstanceStatus (Maybe InstanceStatusSummary)
-isSystemStatus = lens _isSystemStatus (\ s a -> s{_isSystemStatus = a});
-
--- | Any scheduled events associated with the instance.
-isEvents :: Lens' InstanceStatus [InstanceStatusEvent]
-isEvents = lens _isEvents (\ s a -> s{_isEvents = a}) . _Default . _Coerce;
-
--- | The Availability Zone of the instance.
-isAvailabilityZone :: Lens' InstanceStatus (Maybe Text)
-isAvailabilityZone = lens _isAvailabilityZone (\ s a -> s{_isAvailabilityZone = a});
-
--- | Reports impaired functionality that stems from issues internal to the
--- instance, such as impaired reachability.
-isInstanceStatus :: Lens' InstanceStatus (Maybe InstanceStatusSummary)
-isInstanceStatus = lens _isInstanceStatus (\ s a -> s{_isInstanceStatus = a});
-
--- | The intended state of the instance. DescribeInstanceStatus requires that
--- an instance be in the 'running' state.
-isInstanceState :: Lens' InstanceStatus (Maybe InstanceState)
-isInstanceState = lens _isInstanceState (\ s a -> s{_isInstanceState = a});
-
-instance FromXML InstanceStatus where
-        parseXML x
-          = InstanceStatus' <$>
-              (x .@? "instanceId") <*> (x .@? "systemStatus") <*>
-                (x .@? "eventsSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "instanceStatus")
-                <*> (x .@? "instanceState")
-
--- | Describes the instance status.
---
--- /See:/ 'instanceStatusDetails' smart constructor.
-data InstanceStatusDetails = InstanceStatusDetails'
-    { _isdStatus        :: !(Maybe StatusType)
-    , _isdImpairedSince :: !(Maybe ISO8601)
-    , _isdName          :: !(Maybe StatusName)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStatusDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'isdStatus'
---
--- * 'isdImpairedSince'
---
--- * 'isdName'
-instanceStatusDetails
-    :: InstanceStatusDetails
-instanceStatusDetails =
-    InstanceStatusDetails'
-    { _isdStatus = Nothing
-    , _isdImpairedSince = Nothing
-    , _isdName = Nothing
-    }
-
--- | The status.
-isdStatus :: Lens' InstanceStatusDetails (Maybe StatusType)
-isdStatus = lens _isdStatus (\ s a -> s{_isdStatus = a});
-
--- | The time when a status check failed. For an instance that was launched
--- and impaired, this is the time when the instance was launched.
-isdImpairedSince :: Lens' InstanceStatusDetails (Maybe UTCTime)
-isdImpairedSince = lens _isdImpairedSince (\ s a -> s{_isdImpairedSince = a}) . mapping _Time;
-
--- | The type of instance status.
-isdName :: Lens' InstanceStatusDetails (Maybe StatusName)
-isdName = lens _isdName (\ s a -> s{_isdName = a});
-
-instance FromXML InstanceStatusDetails where
-        parseXML x
-          = InstanceStatusDetails' <$>
-              (x .@? "status") <*> (x .@? "impairedSince") <*>
-                (x .@? "name")
-
--- | Describes a scheduled event for an instance.
---
--- /See:/ 'instanceStatusEvent' smart constructor.
-data InstanceStatusEvent = InstanceStatusEvent'
-    { _iseNotBefore   :: !(Maybe ISO8601)
-    , _iseCode        :: !(Maybe EventCode)
-    , _iseDescription :: !(Maybe Text)
-    , _iseNotAfter    :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStatusEvent' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iseNotBefore'
---
--- * 'iseCode'
---
--- * 'iseDescription'
---
--- * 'iseNotAfter'
-instanceStatusEvent
-    :: InstanceStatusEvent
-instanceStatusEvent =
-    InstanceStatusEvent'
-    { _iseNotBefore = Nothing
-    , _iseCode = Nothing
-    , _iseDescription = Nothing
-    , _iseNotAfter = Nothing
-    }
-
--- | The earliest scheduled start time for the event.
-iseNotBefore :: Lens' InstanceStatusEvent (Maybe UTCTime)
-iseNotBefore = lens _iseNotBefore (\ s a -> s{_iseNotBefore = a}) . mapping _Time;
-
--- | The event code.
-iseCode :: Lens' InstanceStatusEvent (Maybe EventCode)
-iseCode = lens _iseCode (\ s a -> s{_iseCode = a});
-
--- | A description of the event.
---
--- After a scheduled event is completed, it can still be described for up
--- to a week. If the event has been completed, this description starts with
--- the following text: [Completed].
-iseDescription :: Lens' InstanceStatusEvent (Maybe Text)
-iseDescription = lens _iseDescription (\ s a -> s{_iseDescription = a});
-
--- | The latest scheduled end time for the event.
-iseNotAfter :: Lens' InstanceStatusEvent (Maybe UTCTime)
-iseNotAfter = lens _iseNotAfter (\ s a -> s{_iseNotAfter = a}) . mapping _Time;
-
-instance FromXML InstanceStatusEvent where
-        parseXML x
-          = InstanceStatusEvent' <$>
-              (x .@? "notBefore") <*> (x .@? "code") <*>
-                (x .@? "description")
-                <*> (x .@? "notAfter")
-
--- | Describes the status of an instance.
---
--- /See:/ 'instanceStatusSummary' smart constructor.
-data InstanceStatusSummary = InstanceStatusSummary'
-    { _issDetails :: !(Maybe [InstanceStatusDetails])
-    , _issStatus  :: !SummaryStatus
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InstanceStatusSummary' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'issDetails'
---
--- * 'issStatus'
-instanceStatusSummary
-    :: SummaryStatus -- ^ 'issStatus'
-    -> InstanceStatusSummary
-instanceStatusSummary pStatus_ =
-    InstanceStatusSummary'
-    { _issDetails = Nothing
-    , _issStatus = pStatus_
-    }
-
--- | The system instance health or application instance health.
-issDetails :: Lens' InstanceStatusSummary [InstanceStatusDetails]
-issDetails = lens _issDetails (\ s a -> s{_issDetails = a}) . _Default . _Coerce;
-
--- | The status.
-issStatus :: Lens' InstanceStatusSummary SummaryStatus
-issStatus = lens _issStatus (\ s a -> s{_issStatus = a});
-
-instance FromXML InstanceStatusSummary where
-        parseXML x
-          = InstanceStatusSummary' <$>
-              (x .@? "details" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@ "status")
-
--- | Describes an Internet gateway.
---
--- /See:/ 'internetGateway' smart constructor.
-data InternetGateway = InternetGateway'
-    { _igAttachments       :: !(Maybe [InternetGatewayAttachment])
-    , _igTags              :: !(Maybe [Tag])
-    , _igInternetGatewayId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InternetGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igAttachments'
---
--- * 'igTags'
---
--- * 'igInternetGatewayId'
-internetGateway
-    :: Text -- ^ 'igInternetGatewayId'
-    -> InternetGateway
-internetGateway pInternetGatewayId_ =
-    InternetGateway'
-    { _igAttachments = Nothing
-    , _igTags = Nothing
-    , _igInternetGatewayId = pInternetGatewayId_
-    }
-
--- | Any VPCs attached to the Internet gateway.
-igAttachments :: Lens' InternetGateway [InternetGatewayAttachment]
-igAttachments = lens _igAttachments (\ s a -> s{_igAttachments = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the Internet gateway.
-igTags :: Lens' InternetGateway [Tag]
-igTags = lens _igTags (\ s a -> s{_igTags = a}) . _Default . _Coerce;
-
--- | The ID of the Internet gateway.
-igInternetGatewayId :: Lens' InternetGateway Text
-igInternetGatewayId = lens _igInternetGatewayId (\ s a -> s{_igInternetGatewayId = a});
-
-instance FromXML InternetGateway where
-        parseXML x
-          = InternetGateway' <$>
-              (x .@? "attachmentSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "internetGatewayId")
-
--- | Describes the attachment of a VPC to an Internet gateway.
---
--- /See:/ 'internetGatewayAttachment' smart constructor.
-data InternetGatewayAttachment = InternetGatewayAttachment'
-    { _igaState :: !AttachmentStatus
-    , _igaVPCId :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'InternetGatewayAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'igaState'
---
--- * 'igaVPCId'
-internetGatewayAttachment
-    :: AttachmentStatus -- ^ 'igaState'
-    -> Text -- ^ 'igaVPCId'
-    -> InternetGatewayAttachment
-internetGatewayAttachment pState_ pVPCId_ =
-    InternetGatewayAttachment'
-    { _igaState = pState_
-    , _igaVPCId = pVPCId_
-    }
-
--- | The current state of the attachment.
-igaState :: Lens' InternetGatewayAttachment AttachmentStatus
-igaState = lens _igaState (\ s a -> s{_igaState = a});
-
--- | The ID of the VPC.
-igaVPCId :: Lens' InternetGatewayAttachment Text
-igaVPCId = lens _igaVPCId (\ s a -> s{_igaVPCId = a});
-
-instance FromXML InternetGatewayAttachment where
-        parseXML x
-          = InternetGatewayAttachment' <$>
-              (x .@ "state") <*> (x .@ "vpcId")
-
--- | Describes a key pair.
---
--- /See:/ 'keyPairInfo' smart constructor.
-data KeyPairInfo = KeyPairInfo'
-    { _kpiKeyFingerprint :: !(Maybe Text)
-    , _kpiKeyName        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'KeyPairInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'kpiKeyFingerprint'
---
--- * 'kpiKeyName'
-keyPairInfo
-    :: KeyPairInfo
-keyPairInfo =
-    KeyPairInfo'
-    { _kpiKeyFingerprint = Nothing
-    , _kpiKeyName = Nothing
-    }
-
--- | If you used CreateKeyPair to create the key pair, this is the SHA-1
--- digest of the DER encoded private key. If you used ImportKeyPair to
--- provide AWS the public key, this is the MD5 public key fingerprint as
--- specified in section 4 of RFC4716.
-kpiKeyFingerprint :: Lens' KeyPairInfo (Maybe Text)
-kpiKeyFingerprint = lens _kpiKeyFingerprint (\ s a -> s{_kpiKeyFingerprint = a});
-
--- | The name of the key pair.
-kpiKeyName :: Lens' KeyPairInfo (Maybe Text)
-kpiKeyName = lens _kpiKeyName (\ s a -> s{_kpiKeyName = a});
-
-instance FromXML KeyPairInfo where
-        parseXML x
-          = KeyPairInfo' <$>
-              (x .@? "keyFingerprint") <*> (x .@? "keyName")
-
--- | Describes a launch permission.
---
--- /See:/ 'launchPermission' smart constructor.
-data LaunchPermission = LaunchPermission'
-    { _lpGroup  :: !(Maybe PermissionGroup)
-    , _lpUserId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LaunchPermission' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lpGroup'
---
--- * 'lpUserId'
-launchPermission
-    :: LaunchPermission
-launchPermission =
-    LaunchPermission'
-    { _lpGroup = Nothing
-    , _lpUserId = Nothing
-    }
-
--- | The name of the group.
-lpGroup :: Lens' LaunchPermission (Maybe PermissionGroup)
-lpGroup = lens _lpGroup (\ s a -> s{_lpGroup = a});
-
--- | The AWS account ID.
-lpUserId :: Lens' LaunchPermission (Maybe Text)
-lpUserId = lens _lpUserId (\ s a -> s{_lpUserId = a});
-
-instance FromXML LaunchPermission where
-        parseXML x
-          = LaunchPermission' <$>
-              (x .@? "group") <*> (x .@? "userId")
-
-instance ToQuery LaunchPermission where
-        toQuery LaunchPermission'{..}
-          = mconcat
-              ["Group" =: _lpGroup, "UserId" =: _lpUserId]
-
--- | Describes a launch permission modification.
---
--- /See:/ 'launchPermissionModifications' smart constructor.
-data LaunchPermissionModifications = LaunchPermissionModifications'
-    { _lpmRemove :: !(Maybe [LaunchPermission])
-    , _lpmAdd    :: !(Maybe [LaunchPermission])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LaunchPermissionModifications' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lpmRemove'
---
--- * 'lpmAdd'
-launchPermissionModifications
-    :: LaunchPermissionModifications
-launchPermissionModifications =
-    LaunchPermissionModifications'
-    { _lpmRemove = Nothing
-    , _lpmAdd = Nothing
-    }
-
--- | The AWS account ID to remove from the list of launch permissions for the
--- AMI.
-lpmRemove :: Lens' LaunchPermissionModifications [LaunchPermission]
-lpmRemove = lens _lpmRemove (\ s a -> s{_lpmRemove = a}) . _Default . _Coerce;
-
--- | The AWS account ID to add to the list of launch permissions for the AMI.
-lpmAdd :: Lens' LaunchPermissionModifications [LaunchPermission]
-lpmAdd = lens _lpmAdd (\ s a -> s{_lpmAdd = a}) . _Default . _Coerce;
-
-instance ToQuery LaunchPermissionModifications where
-        toQuery LaunchPermissionModifications'{..}
-          = mconcat
-              [toQuery (toQueryList "Remove" <$> _lpmRemove),
-               toQuery (toQueryList "Add" <$> _lpmAdd)]
-
--- | Describes the launch specification for an instance.
---
--- /See:/ 'launchSpecification' smart constructor.
-data LaunchSpecification = LaunchSpecification'
-    { _lsSecurityGroups      :: !(Maybe [GroupIdentifier])
-    , _lsKeyName             :: !(Maybe Text)
-    , _lsNetworkInterfaces   :: !(Maybe [InstanceNetworkInterfaceSpecification])
-    , _lsRAMDiskId           :: !(Maybe Text)
-    , _lsSubnetId            :: !(Maybe Text)
-    , _lsKernelId            :: !(Maybe Text)
-    , _lsInstanceType        :: !(Maybe InstanceType)
-    , _lsEBSOptimized        :: !(Maybe Bool)
-    , _lsUserData            :: !(Maybe Text)
-    , _lsMonitoring          :: !(Maybe RunInstancesMonitoringEnabled)
-    , _lsIAMInstanceProfile  :: !(Maybe IAMInstanceProfileSpecification)
-    , _lsImageId             :: !(Maybe Text)
-    , _lsAddressingType      :: !(Maybe Text)
-    , _lsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _lsPlacement           :: !(Maybe SpotPlacement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'LaunchSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lsSecurityGroups'
---
--- * 'lsKeyName'
---
--- * 'lsNetworkInterfaces'
---
--- * 'lsRAMDiskId'
---
--- * 'lsSubnetId'
---
--- * 'lsKernelId'
---
--- * 'lsInstanceType'
---
--- * 'lsEBSOptimized'
---
--- * 'lsUserData'
---
--- * 'lsMonitoring'
---
--- * 'lsIAMInstanceProfile'
---
--- * 'lsImageId'
---
--- * 'lsAddressingType'
---
--- * 'lsBlockDeviceMappings'
---
--- * 'lsPlacement'
-launchSpecification
-    :: LaunchSpecification
-launchSpecification =
-    LaunchSpecification'
-    { _lsSecurityGroups = Nothing
-    , _lsKeyName = Nothing
-    , _lsNetworkInterfaces = Nothing
-    , _lsRAMDiskId = Nothing
-    , _lsSubnetId = Nothing
-    , _lsKernelId = Nothing
-    , _lsInstanceType = Nothing
-    , _lsEBSOptimized = Nothing
-    , _lsUserData = Nothing
-    , _lsMonitoring = Nothing
-    , _lsIAMInstanceProfile = Nothing
-    , _lsImageId = Nothing
-    , _lsAddressingType = Nothing
-    , _lsBlockDeviceMappings = Nothing
-    , _lsPlacement = Nothing
-    }
-
--- | One or more security groups. When requesting instances in a VPC, you
--- must specify the IDs of the security groups. When requesting instances
--- in EC2-Classic, you can specify the names or the IDs of the security
--- groups.
-lsSecurityGroups :: Lens' LaunchSpecification [GroupIdentifier]
-lsSecurityGroups = lens _lsSecurityGroups (\ s a -> s{_lsSecurityGroups = a}) . _Default . _Coerce;
-
--- | The name of the key pair.
-lsKeyName :: Lens' LaunchSpecification (Maybe Text)
-lsKeyName = lens _lsKeyName (\ s a -> s{_lsKeyName = a});
-
--- | One or more network interfaces.
-lsNetworkInterfaces :: Lens' LaunchSpecification [InstanceNetworkInterfaceSpecification]
-lsNetworkInterfaces = lens _lsNetworkInterfaces (\ s a -> s{_lsNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The ID of the RAM disk.
-lsRAMDiskId :: Lens' LaunchSpecification (Maybe Text)
-lsRAMDiskId = lens _lsRAMDiskId (\ s a -> s{_lsRAMDiskId = a});
-
--- | The ID of the subnet in which to launch the instance.
-lsSubnetId :: Lens' LaunchSpecification (Maybe Text)
-lsSubnetId = lens _lsSubnetId (\ s a -> s{_lsSubnetId = a});
-
--- | The ID of the kernel.
-lsKernelId :: Lens' LaunchSpecification (Maybe Text)
-lsKernelId = lens _lsKernelId (\ s a -> s{_lsKernelId = a});
-
--- | The instance type.
-lsInstanceType :: Lens' LaunchSpecification (Maybe InstanceType)
-lsInstanceType = lens _lsInstanceType (\ s a -> s{_lsInstanceType = a});
-
--- | Indicates whether the instance is optimized for EBS I\/O. This
--- optimization provides dedicated throughput to Amazon EBS and an
--- optimized configuration stack to provide optimal EBS I\/O performance.
--- This optimization isn\'t available with all instance types. Additional
--- usage charges apply when using an EBS Optimized instance.
---
--- Default: 'false'
-lsEBSOptimized :: Lens' LaunchSpecification (Maybe Bool)
-lsEBSOptimized = lens _lsEBSOptimized (\ s a -> s{_lsEBSOptimized = a});
-
--- | The Base64-encoded MIME user data to make available to the instances.
-lsUserData :: Lens' LaunchSpecification (Maybe Text)
-lsUserData = lens _lsUserData (\ s a -> s{_lsUserData = a});
-
--- | Undocumented member.
-lsMonitoring :: Lens' LaunchSpecification (Maybe RunInstancesMonitoringEnabled)
-lsMonitoring = lens _lsMonitoring (\ s a -> s{_lsMonitoring = a});
-
--- | The IAM instance profile.
-lsIAMInstanceProfile :: Lens' LaunchSpecification (Maybe IAMInstanceProfileSpecification)
-lsIAMInstanceProfile = lens _lsIAMInstanceProfile (\ s a -> s{_lsIAMInstanceProfile = a});
-
--- | The ID of the AMI.
-lsImageId :: Lens' LaunchSpecification (Maybe Text)
-lsImageId = lens _lsImageId (\ s a -> s{_lsImageId = a});
-
--- | Deprecated.
-lsAddressingType :: Lens' LaunchSpecification (Maybe Text)
-lsAddressingType = lens _lsAddressingType (\ s a -> s{_lsAddressingType = a});
-
--- | One or more block device mapping entries.
-lsBlockDeviceMappings :: Lens' LaunchSpecification [BlockDeviceMapping]
-lsBlockDeviceMappings = lens _lsBlockDeviceMappings (\ s a -> s{_lsBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | The placement information for the instance.
-lsPlacement :: Lens' LaunchSpecification (Maybe SpotPlacement)
-lsPlacement = lens _lsPlacement (\ s a -> s{_lsPlacement = a});
-
-instance FromXML LaunchSpecification where
-        parseXML x
-          = LaunchSpecification' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "keyName")
-                <*>
-                (x .@? "networkInterfaceSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "ramdiskId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "kernelId")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "ebsOptimized")
-                <*> (x .@? "userData")
-                <*> (x .@? "monitoring")
-                <*> (x .@? "iamInstanceProfile")
-                <*> (x .@? "imageId")
-                <*> (x .@? "addressingType")
-                <*>
-                (x .@? "blockDeviceMapping" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "placement")
-
--- | Describes the monitoring for the instance.
---
--- /See:/ 'monitoring' smart constructor.
-newtype Monitoring = Monitoring'
-    { _mState :: Maybe MonitoringState
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Monitoring' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'mState'
-monitoring
-    :: Monitoring
-monitoring =
-    Monitoring'
-    { _mState = Nothing
-    }
-
--- | Indicates whether monitoring is enabled for the instance.
-mState :: Lens' Monitoring (Maybe MonitoringState)
-mState = lens _mState (\ s a -> s{_mState = a});
-
-instance FromXML Monitoring where
-        parseXML x = Monitoring' <$> (x .@? "state")
-
--- | Describes the status of a moving Elastic IP address.
---
--- /See:/ 'movingAddressStatus' smart constructor.
-data MovingAddressStatus = MovingAddressStatus'
-    { _masMoveStatus :: !(Maybe MoveStatus)
-    , _masPublicIP   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'MovingAddressStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'masMoveStatus'
---
--- * 'masPublicIP'
-movingAddressStatus
-    :: MovingAddressStatus
-movingAddressStatus =
-    MovingAddressStatus'
-    { _masMoveStatus = Nothing
-    , _masPublicIP = Nothing
-    }
-
--- | The status of the Elastic IP address that\'s being moved to the EC2-VPC
--- platform, or restored to the EC2-Classic platform.
-masMoveStatus :: Lens' MovingAddressStatus (Maybe MoveStatus)
-masMoveStatus = lens _masMoveStatus (\ s a -> s{_masMoveStatus = a});
-
--- | The Elastic IP address.
-masPublicIP :: Lens' MovingAddressStatus (Maybe Text)
-masPublicIP = lens _masPublicIP (\ s a -> s{_masPublicIP = a});
-
-instance FromXML MovingAddressStatus where
-        parseXML x
-          = MovingAddressStatus' <$>
-              (x .@? "moveStatus") <*> (x .@? "publicIp")
-
--- | Describes a NAT gateway.
---
--- /See:/ 'natGateway' smart constructor.
-data NatGateway = NatGateway'
-    { _ngState               :: !(Maybe NatGatewayState)
-    , _ngFailureCode         :: !(Maybe Text)
-    , _ngVPCId               :: !(Maybe Text)
-    , _ngFailureMessage      :: !(Maybe Text)
-    , _ngNatGatewayId        :: !(Maybe Text)
-    , _ngSubnetId            :: !(Maybe Text)
-    , _ngDeleteTime          :: !(Maybe ISO8601)
-    , _ngNatGatewayAddresses :: !(Maybe [NatGatewayAddress])
-    , _ngCreateTime          :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NatGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ngState'
---
--- * 'ngFailureCode'
---
--- * 'ngVPCId'
---
--- * 'ngFailureMessage'
---
--- * 'ngNatGatewayId'
---
--- * 'ngSubnetId'
---
--- * 'ngDeleteTime'
---
--- * 'ngNatGatewayAddresses'
---
--- * 'ngCreateTime'
-natGateway
-    :: NatGateway
-natGateway =
-    NatGateway'
-    { _ngState = Nothing
-    , _ngFailureCode = Nothing
-    , _ngVPCId = Nothing
-    , _ngFailureMessage = Nothing
-    , _ngNatGatewayId = Nothing
-    , _ngSubnetId = Nothing
-    , _ngDeleteTime = Nothing
-    , _ngNatGatewayAddresses = Nothing
-    , _ngCreateTime = Nothing
-    }
-
--- | The state of the NAT gateway.
-ngState :: Lens' NatGateway (Maybe NatGatewayState)
-ngState = lens _ngState (\ s a -> s{_ngState = a});
-
--- | If the NAT gateway could not be created, specifies the error code for
--- the failure. ('InsufficientFreeAddressesInSubnet' |
--- 'Gateway.NotAttached' | 'InvalidAllocationID.NotFound' |
--- 'Resource.AlreadyAssociated' | 'InternalError')
-ngFailureCode :: Lens' NatGateway (Maybe Text)
-ngFailureCode = lens _ngFailureCode (\ s a -> s{_ngFailureCode = a});
-
--- | The ID of the VPC in which the NAT gateway is located.
-ngVPCId :: Lens' NatGateway (Maybe Text)
-ngVPCId = lens _ngVPCId (\ s a -> s{_ngVPCId = a});
-
--- | If the NAT gateway could not be created, specifies the error message for
--- the failure, that corresponds to the error code.
---
--- -   For InsufficientFreeAddressesInSubnet:
---     'Subnet has insufficient free addresses to create this NAT gateway'
--- -   For Gateway.NotAttached:
---     'Network vpc-xxxxxxxx has no Internet gateway attached'
--- -   For InvalidAllocationID.NotFound:
---     'Elastic IP address eipalloc-xxxxxxxx could not be associated with this NAT gateway'
--- -   For Resource.AlreadyAssociated:
---     'Elastic IP address eipalloc-xxxxxxxx is already associated'
--- -   For InternalError:
---     'Network interface eni-xxxxxxxx, created and used internally by this NAT gateway is in an invalid state. Please try again.'
-ngFailureMessage :: Lens' NatGateway (Maybe Text)
-ngFailureMessage = lens _ngFailureMessage (\ s a -> s{_ngFailureMessage = a});
-
--- | The ID of the NAT gateway.
-ngNatGatewayId :: Lens' NatGateway (Maybe Text)
-ngNatGatewayId = lens _ngNatGatewayId (\ s a -> s{_ngNatGatewayId = a});
-
--- | The ID of the subnet in which the NAT gateway is located.
-ngSubnetId :: Lens' NatGateway (Maybe Text)
-ngSubnetId = lens _ngSubnetId (\ s a -> s{_ngSubnetId = a});
-
--- | The date and time the NAT gateway was deleted, if applicable.
-ngDeleteTime :: Lens' NatGateway (Maybe UTCTime)
-ngDeleteTime = lens _ngDeleteTime (\ s a -> s{_ngDeleteTime = a}) . mapping _Time;
-
--- | Information about the IP addresses and network interface associated with
--- the NAT gateway.
-ngNatGatewayAddresses :: Lens' NatGateway [NatGatewayAddress]
-ngNatGatewayAddresses = lens _ngNatGatewayAddresses (\ s a -> s{_ngNatGatewayAddresses = a}) . _Default . _Coerce;
-
--- | The date and time the NAT gateway was created.
-ngCreateTime :: Lens' NatGateway (Maybe UTCTime)
-ngCreateTime = lens _ngCreateTime (\ s a -> s{_ngCreateTime = a}) . mapping _Time;
-
-instance FromXML NatGateway where
-        parseXML x
-          = NatGateway' <$>
-              (x .@? "state") <*> (x .@? "failureCode") <*>
-                (x .@? "vpcId")
-                <*> (x .@? "failureMessage")
-                <*> (x .@? "natGatewayId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "deleteTime")
-                <*>
-                (x .@? "natGatewayAddressSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "createTime")
-
--- | Describes the IP addresses and network interface associated with a NAT
--- gateway.
---
--- /See:/ 'natGatewayAddress' smart constructor.
-data NatGatewayAddress = NatGatewayAddress'
-    { _ngaPrivateIP          :: !(Maybe Text)
-    , _ngaAllocationId       :: !(Maybe Text)
-    , _ngaNetworkInterfaceId :: !(Maybe Text)
-    , _ngaPublicIP           :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NatGatewayAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ngaPrivateIP'
---
--- * 'ngaAllocationId'
---
--- * 'ngaNetworkInterfaceId'
---
--- * 'ngaPublicIP'
-natGatewayAddress
-    :: NatGatewayAddress
-natGatewayAddress =
-    NatGatewayAddress'
-    { _ngaPrivateIP = Nothing
-    , _ngaAllocationId = Nothing
-    , _ngaNetworkInterfaceId = Nothing
-    , _ngaPublicIP = Nothing
-    }
-
--- | The private IP address associated with the Elastic IP address.
-ngaPrivateIP :: Lens' NatGatewayAddress (Maybe Text)
-ngaPrivateIP = lens _ngaPrivateIP (\ s a -> s{_ngaPrivateIP = a});
-
--- | The allocation ID of the Elastic IP address that\'s associated with the
--- NAT gateway.
-ngaAllocationId :: Lens' NatGatewayAddress (Maybe Text)
-ngaAllocationId = lens _ngaAllocationId (\ s a -> s{_ngaAllocationId = a});
-
--- | The ID of the network interface associated with the NAT gateway.
-ngaNetworkInterfaceId :: Lens' NatGatewayAddress (Maybe Text)
-ngaNetworkInterfaceId = lens _ngaNetworkInterfaceId (\ s a -> s{_ngaNetworkInterfaceId = a});
-
--- | The Elastic IP address associated with the NAT gateway.
-ngaPublicIP :: Lens' NatGatewayAddress (Maybe Text)
-ngaPublicIP = lens _ngaPublicIP (\ s a -> s{_ngaPublicIP = a});
-
-instance FromXML NatGatewayAddress where
-        parseXML x
-          = NatGatewayAddress' <$>
-              (x .@? "privateIp") <*> (x .@? "allocationId") <*>
-                (x .@? "networkInterfaceId")
-                <*> (x .@? "publicIp")
-
--- | Describes a network ACL.
---
--- /See:/ 'networkACL' smart constructor.
-data NetworkACL = NetworkACL'
-    { _naEntries      :: !(Maybe [NetworkACLEntry])
-    , _naNetworkACLId :: !(Maybe Text)
-    , _naVPCId        :: !(Maybe Text)
-    , _naAssociations :: !(Maybe [NetworkACLAssociation])
-    , _naTags         :: !(Maybe [Tag])
-    , _naIsDefault    :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkACL' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'naEntries'
---
--- * 'naNetworkACLId'
---
--- * 'naVPCId'
---
--- * 'naAssociations'
---
--- * 'naTags'
---
--- * 'naIsDefault'
-networkACL
-    :: NetworkACL
-networkACL =
-    NetworkACL'
-    { _naEntries = Nothing
-    , _naNetworkACLId = Nothing
-    , _naVPCId = Nothing
-    , _naAssociations = Nothing
-    , _naTags = Nothing
-    , _naIsDefault = Nothing
-    }
-
--- | One or more entries (rules) in the network ACL.
-naEntries :: Lens' NetworkACL [NetworkACLEntry]
-naEntries = lens _naEntries (\ s a -> s{_naEntries = a}) . _Default . _Coerce;
-
--- | The ID of the network ACL.
-naNetworkACLId :: Lens' NetworkACL (Maybe Text)
-naNetworkACLId = lens _naNetworkACLId (\ s a -> s{_naNetworkACLId = a});
-
--- | The ID of the VPC for the network ACL.
-naVPCId :: Lens' NetworkACL (Maybe Text)
-naVPCId = lens _naVPCId (\ s a -> s{_naVPCId = a});
-
--- | Any associations between the network ACL and one or more subnets
-naAssociations :: Lens' NetworkACL [NetworkACLAssociation]
-naAssociations = lens _naAssociations (\ s a -> s{_naAssociations = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the network ACL.
-naTags :: Lens' NetworkACL [Tag]
-naTags = lens _naTags (\ s a -> s{_naTags = a}) . _Default . _Coerce;
-
--- | Indicates whether this is the default network ACL for the VPC.
-naIsDefault :: Lens' NetworkACL (Maybe Bool)
-naIsDefault = lens _naIsDefault (\ s a -> s{_naIsDefault = a});
-
-instance FromXML NetworkACL where
-        parseXML x
-          = NetworkACL' <$>
-              (x .@? "entrySet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "networkAclId")
-                <*> (x .@? "vpcId")
-                <*>
-                (x .@? "associationSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "default")
-
--- | Describes an association between a network ACL and a subnet.
---
--- /See:/ 'networkACLAssociation' smart constructor.
-data NetworkACLAssociation = NetworkACLAssociation'
-    { _naaNetworkACLId            :: !(Maybe Text)
-    , _naaSubnetId                :: !(Maybe Text)
-    , _naaNetworkACLAssociationId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkACLAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'naaNetworkACLId'
---
--- * 'naaSubnetId'
---
--- * 'naaNetworkACLAssociationId'
-networkACLAssociation
-    :: NetworkACLAssociation
-networkACLAssociation =
-    NetworkACLAssociation'
-    { _naaNetworkACLId = Nothing
-    , _naaSubnetId = Nothing
-    , _naaNetworkACLAssociationId = Nothing
-    }
-
--- | The ID of the network ACL.
-naaNetworkACLId :: Lens' NetworkACLAssociation (Maybe Text)
-naaNetworkACLId = lens _naaNetworkACLId (\ s a -> s{_naaNetworkACLId = a});
-
--- | The ID of the subnet.
-naaSubnetId :: Lens' NetworkACLAssociation (Maybe Text)
-naaSubnetId = lens _naaSubnetId (\ s a -> s{_naaSubnetId = a});
-
--- | The ID of the association between a network ACL and a subnet.
-naaNetworkACLAssociationId :: Lens' NetworkACLAssociation (Maybe Text)
-naaNetworkACLAssociationId = lens _naaNetworkACLAssociationId (\ s a -> s{_naaNetworkACLAssociationId = a});
-
-instance FromXML NetworkACLAssociation where
-        parseXML x
-          = NetworkACLAssociation' <$>
-              (x .@? "networkAclId") <*> (x .@? "subnetId") <*>
-                (x .@? "networkAclAssociationId")
-
--- | Describes an entry in a network ACL.
---
--- /See:/ 'networkACLEntry' smart constructor.
-data NetworkACLEntry = NetworkACLEntry'
-    { _naeICMPTypeCode :: !(Maybe ICMPTypeCode)
-    , _naeRuleNumber   :: !(Maybe Int)
-    , _naeRuleAction   :: !(Maybe RuleAction)
-    , _naeProtocol     :: !(Maybe Text)
-    , _naePortRange    :: !(Maybe PortRange)
-    , _naeCIdRBlock    :: !(Maybe Text)
-    , _naeEgress       :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkACLEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'naeICMPTypeCode'
---
--- * 'naeRuleNumber'
---
--- * 'naeRuleAction'
---
--- * 'naeProtocol'
---
--- * 'naePortRange'
---
--- * 'naeCIdRBlock'
---
--- * 'naeEgress'
-networkACLEntry
-    :: NetworkACLEntry
-networkACLEntry =
-    NetworkACLEntry'
-    { _naeICMPTypeCode = Nothing
-    , _naeRuleNumber = Nothing
-    , _naeRuleAction = Nothing
-    , _naeProtocol = Nothing
-    , _naePortRange = Nothing
-    , _naeCIdRBlock = Nothing
-    , _naeEgress = Nothing
-    }
-
--- | ICMP protocol: The ICMP type and code.
-naeICMPTypeCode :: Lens' NetworkACLEntry (Maybe ICMPTypeCode)
-naeICMPTypeCode = lens _naeICMPTypeCode (\ s a -> s{_naeICMPTypeCode = a});
-
--- | The rule number for the entry. ACL entries are processed in ascending
--- order by rule number.
-naeRuleNumber :: Lens' NetworkACLEntry (Maybe Int)
-naeRuleNumber = lens _naeRuleNumber (\ s a -> s{_naeRuleNumber = a});
-
--- | Indicates whether to allow or deny the traffic that matches the rule.
-naeRuleAction :: Lens' NetworkACLEntry (Maybe RuleAction)
-naeRuleAction = lens _naeRuleAction (\ s a -> s{_naeRuleAction = a});
-
--- | The protocol. A value of '-1' means all protocols.
-naeProtocol :: Lens' NetworkACLEntry (Maybe Text)
-naeProtocol = lens _naeProtocol (\ s a -> s{_naeProtocol = a});
-
--- | TCP or UDP protocols: The range of ports the rule applies to.
-naePortRange :: Lens' NetworkACLEntry (Maybe PortRange)
-naePortRange = lens _naePortRange (\ s a -> s{_naePortRange = a});
-
--- | The network range to allow or deny, in CIDR notation.
-naeCIdRBlock :: Lens' NetworkACLEntry (Maybe Text)
-naeCIdRBlock = lens _naeCIdRBlock (\ s a -> s{_naeCIdRBlock = a});
-
--- | Indicates whether the rule is an egress rule (applied to traffic leaving
--- the subnet).
-naeEgress :: Lens' NetworkACLEntry (Maybe Bool)
-naeEgress = lens _naeEgress (\ s a -> s{_naeEgress = a});
-
-instance FromXML NetworkACLEntry where
-        parseXML x
-          = NetworkACLEntry' <$>
-              (x .@? "icmpTypeCode") <*> (x .@? "ruleNumber") <*>
-                (x .@? "ruleAction")
-                <*> (x .@? "protocol")
-                <*> (x .@? "portRange")
-                <*> (x .@? "cidrBlock")
-                <*> (x .@? "egress")
-
--- | Describes a network interface.
---
--- /See:/ 'networkInterface' smart constructor.
-data NetworkInterface = NetworkInterface'
-    { _niGroups             :: !(Maybe [GroupIdentifier])
-    , _niStatus             :: !(Maybe NetworkInterfaceStatus)
-    , _niPrivateIPAddresses :: !(Maybe [NetworkInterfacePrivateIPAddress])
-    , _niSourceDestCheck    :: !(Maybe Bool)
-    , _niInterfaceType      :: !(Maybe NetworkInterfaceType)
-    , _niVPCId              :: !(Maybe Text)
-    , _niTagSet             :: !(Maybe [Tag])
-    , _niRequesterManaged   :: !(Maybe Bool)
-    , _niNetworkInterfaceId :: !(Maybe Text)
-    , _niSubnetId           :: !(Maybe Text)
-    , _niMACAddress         :: !(Maybe Text)
-    , _niAttachment         :: !(Maybe NetworkInterfaceAttachment)
-    , _niOwnerId            :: !(Maybe Text)
-    , _niAvailabilityZone   :: !(Maybe Text)
-    , _niPrivateIPAddress   :: !(Maybe Text)
-    , _niPrivateDNSName     :: !(Maybe Text)
-    , _niRequesterId        :: !(Maybe Text)
-    , _niDescription        :: !(Maybe Text)
-    , _niAssociation        :: !(Maybe NetworkInterfaceAssociation)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterface' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niGroups'
---
--- * 'niStatus'
---
--- * 'niPrivateIPAddresses'
---
--- * 'niSourceDestCheck'
---
--- * 'niInterfaceType'
---
--- * 'niVPCId'
---
--- * 'niTagSet'
---
--- * 'niRequesterManaged'
---
--- * 'niNetworkInterfaceId'
---
--- * 'niSubnetId'
---
--- * 'niMACAddress'
---
--- * 'niAttachment'
---
--- * 'niOwnerId'
---
--- * 'niAvailabilityZone'
---
--- * 'niPrivateIPAddress'
---
--- * 'niPrivateDNSName'
---
--- * 'niRequesterId'
---
--- * 'niDescription'
---
--- * 'niAssociation'
-networkInterface
-    :: NetworkInterface
-networkInterface =
-    NetworkInterface'
-    { _niGroups = Nothing
-    , _niStatus = Nothing
-    , _niPrivateIPAddresses = Nothing
-    , _niSourceDestCheck = Nothing
-    , _niInterfaceType = Nothing
-    , _niVPCId = Nothing
-    , _niTagSet = Nothing
-    , _niRequesterManaged = Nothing
-    , _niNetworkInterfaceId = Nothing
-    , _niSubnetId = Nothing
-    , _niMACAddress = Nothing
-    , _niAttachment = Nothing
-    , _niOwnerId = Nothing
-    , _niAvailabilityZone = Nothing
-    , _niPrivateIPAddress = Nothing
-    , _niPrivateDNSName = Nothing
-    , _niRequesterId = Nothing
-    , _niDescription = Nothing
-    , _niAssociation = Nothing
-    }
-
--- | Any security groups for the network interface.
-niGroups :: Lens' NetworkInterface [GroupIdentifier]
-niGroups = lens _niGroups (\ s a -> s{_niGroups = a}) . _Default . _Coerce;
-
--- | The status of the network interface.
-niStatus :: Lens' NetworkInterface (Maybe NetworkInterfaceStatus)
-niStatus = lens _niStatus (\ s a -> s{_niStatus = a});
-
--- | The private IP addresses associated with the network interface.
-niPrivateIPAddresses :: Lens' NetworkInterface [NetworkInterfacePrivateIPAddress]
-niPrivateIPAddresses = lens _niPrivateIPAddresses (\ s a -> s{_niPrivateIPAddresses = a}) . _Default . _Coerce;
-
--- | Indicates whether traffic to or from the instance is validated.
-niSourceDestCheck :: Lens' NetworkInterface (Maybe Bool)
-niSourceDestCheck = lens _niSourceDestCheck (\ s a -> s{_niSourceDestCheck = a});
-
--- | The type of interface.
-niInterfaceType :: Lens' NetworkInterface (Maybe NetworkInterfaceType)
-niInterfaceType = lens _niInterfaceType (\ s a -> s{_niInterfaceType = a});
-
--- | The ID of the VPC.
-niVPCId :: Lens' NetworkInterface (Maybe Text)
-niVPCId = lens _niVPCId (\ s a -> s{_niVPCId = a});
-
--- | Any tags assigned to the network interface.
-niTagSet :: Lens' NetworkInterface [Tag]
-niTagSet = lens _niTagSet (\ s a -> s{_niTagSet = a}) . _Default . _Coerce;
-
--- | Indicates whether the network interface is being managed by AWS.
-niRequesterManaged :: Lens' NetworkInterface (Maybe Bool)
-niRequesterManaged = lens _niRequesterManaged (\ s a -> s{_niRequesterManaged = a});
-
--- | The ID of the network interface.
-niNetworkInterfaceId :: Lens' NetworkInterface (Maybe Text)
-niNetworkInterfaceId = lens _niNetworkInterfaceId (\ s a -> s{_niNetworkInterfaceId = a});
-
--- | The ID of the subnet.
-niSubnetId :: Lens' NetworkInterface (Maybe Text)
-niSubnetId = lens _niSubnetId (\ s a -> s{_niSubnetId = a});
-
--- | The MAC address.
-niMACAddress :: Lens' NetworkInterface (Maybe Text)
-niMACAddress = lens _niMACAddress (\ s a -> s{_niMACAddress = a});
-
--- | The network interface attachment.
-niAttachment :: Lens' NetworkInterface (Maybe NetworkInterfaceAttachment)
-niAttachment = lens _niAttachment (\ s a -> s{_niAttachment = a});
-
--- | The AWS account ID of the owner of the network interface.
-niOwnerId :: Lens' NetworkInterface (Maybe Text)
-niOwnerId = lens _niOwnerId (\ s a -> s{_niOwnerId = a});
-
--- | The Availability Zone.
-niAvailabilityZone :: Lens' NetworkInterface (Maybe Text)
-niAvailabilityZone = lens _niAvailabilityZone (\ s a -> s{_niAvailabilityZone = a});
-
--- | The IP address of the network interface within the subnet.
-niPrivateIPAddress :: Lens' NetworkInterface (Maybe Text)
-niPrivateIPAddress = lens _niPrivateIPAddress (\ s a -> s{_niPrivateIPAddress = a});
-
--- | The private DNS name.
-niPrivateDNSName :: Lens' NetworkInterface (Maybe Text)
-niPrivateDNSName = lens _niPrivateDNSName (\ s a -> s{_niPrivateDNSName = a});
-
--- | The ID of the entity that launched the instance on your behalf (for
--- example, AWS Management Console or Auto Scaling).
-niRequesterId :: Lens' NetworkInterface (Maybe Text)
-niRequesterId = lens _niRequesterId (\ s a -> s{_niRequesterId = a});
-
--- | A description.
-niDescription :: Lens' NetworkInterface (Maybe Text)
-niDescription = lens _niDescription (\ s a -> s{_niDescription = a});
-
--- | The association information for an Elastic IP associated with the
--- network interface.
-niAssociation :: Lens' NetworkInterface (Maybe NetworkInterfaceAssociation)
-niAssociation = lens _niAssociation (\ s a -> s{_niAssociation = a});
-
-instance FromXML NetworkInterface where
-        parseXML x
-          = NetworkInterface' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "status")
-                <*>
-                (x .@? "privateIpAddressesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "sourceDestCheck")
-                <*> (x .@? "interfaceType")
-                <*> (x .@? "vpcId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "requesterManaged")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "macAddress")
-                <*> (x .@? "attachment")
-                <*> (x .@? "ownerId")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "privateIpAddress")
-                <*> (x .@? "privateDnsName")
-                <*> (x .@? "requesterId")
-                <*> (x .@? "description")
-                <*> (x .@? "association")
-
--- | Describes association information for an Elastic IP address.
---
--- /See:/ 'networkInterfaceAssociation' smart constructor.
-data NetworkInterfaceAssociation = NetworkInterfaceAssociation'
-    { _niaAssociationId :: !(Maybe Text)
-    , _niaPublicDNSName :: !(Maybe Text)
-    , _niaAllocationId  :: !(Maybe Text)
-    , _niaIPOwnerId     :: !(Maybe Text)
-    , _niaPublicIP      :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterfaceAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niaAssociationId'
---
--- * 'niaPublicDNSName'
---
--- * 'niaAllocationId'
---
--- * 'niaIPOwnerId'
---
--- * 'niaPublicIP'
-networkInterfaceAssociation
-    :: NetworkInterfaceAssociation
-networkInterfaceAssociation =
-    NetworkInterfaceAssociation'
-    { _niaAssociationId = Nothing
-    , _niaPublicDNSName = Nothing
-    , _niaAllocationId = Nothing
-    , _niaIPOwnerId = Nothing
-    , _niaPublicIP = Nothing
-    }
-
--- | The association ID.
-niaAssociationId :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaAssociationId = lens _niaAssociationId (\ s a -> s{_niaAssociationId = a});
-
--- | The public DNS name.
-niaPublicDNSName :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaPublicDNSName = lens _niaPublicDNSName (\ s a -> s{_niaPublicDNSName = a});
-
--- | The allocation ID.
-niaAllocationId :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaAllocationId = lens _niaAllocationId (\ s a -> s{_niaAllocationId = a});
-
--- | The ID of the Elastic IP address owner.
-niaIPOwnerId :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaIPOwnerId = lens _niaIPOwnerId (\ s a -> s{_niaIPOwnerId = a});
-
--- | The address of the Elastic IP address bound to the network interface.
-niaPublicIP :: Lens' NetworkInterfaceAssociation (Maybe Text)
-niaPublicIP = lens _niaPublicIP (\ s a -> s{_niaPublicIP = a});
-
-instance FromXML NetworkInterfaceAssociation where
-        parseXML x
-          = NetworkInterfaceAssociation' <$>
-              (x .@? "associationId") <*> (x .@? "publicDnsName")
-                <*> (x .@? "allocationId")
-                <*> (x .@? "ipOwnerId")
-                <*> (x .@? "publicIp")
-
--- | Describes a network interface attachment.
---
--- /See:/ 'networkInterfaceAttachment' smart constructor.
-data NetworkInterfaceAttachment = NetworkInterfaceAttachment'
-    { _niaInstanceId          :: !(Maybe Text)
-    , _niaStatus              :: !(Maybe AttachmentStatus)
-    , _niaDeleteOnTermination :: !(Maybe Bool)
-    , _niaAttachmentId        :: !(Maybe Text)
-    , _niaInstanceOwnerId     :: !(Maybe Text)
-    , _niaAttachTime          :: !(Maybe ISO8601)
-    , _niaDeviceIndex         :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterfaceAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niaInstanceId'
---
--- * 'niaStatus'
---
--- * 'niaDeleteOnTermination'
---
--- * 'niaAttachmentId'
---
--- * 'niaInstanceOwnerId'
---
--- * 'niaAttachTime'
---
--- * 'niaDeviceIndex'
-networkInterfaceAttachment
-    :: NetworkInterfaceAttachment
-networkInterfaceAttachment =
-    NetworkInterfaceAttachment'
-    { _niaInstanceId = Nothing
-    , _niaStatus = Nothing
-    , _niaDeleteOnTermination = Nothing
-    , _niaAttachmentId = Nothing
-    , _niaInstanceOwnerId = Nothing
-    , _niaAttachTime = Nothing
-    , _niaDeviceIndex = Nothing
-    }
-
--- | The ID of the instance.
-niaInstanceId :: Lens' NetworkInterfaceAttachment (Maybe Text)
-niaInstanceId = lens _niaInstanceId (\ s a -> s{_niaInstanceId = a});
-
--- | The attachment state.
-niaStatus :: Lens' NetworkInterfaceAttachment (Maybe AttachmentStatus)
-niaStatus = lens _niaStatus (\ s a -> s{_niaStatus = a});
-
--- | Indicates whether the network interface is deleted when the instance is
--- terminated.
-niaDeleteOnTermination :: Lens' NetworkInterfaceAttachment (Maybe Bool)
-niaDeleteOnTermination = lens _niaDeleteOnTermination (\ s a -> s{_niaDeleteOnTermination = a});
-
--- | The ID of the network interface attachment.
-niaAttachmentId :: Lens' NetworkInterfaceAttachment (Maybe Text)
-niaAttachmentId = lens _niaAttachmentId (\ s a -> s{_niaAttachmentId = a});
-
--- | The AWS account ID of the owner of the instance.
-niaInstanceOwnerId :: Lens' NetworkInterfaceAttachment (Maybe Text)
-niaInstanceOwnerId = lens _niaInstanceOwnerId (\ s a -> s{_niaInstanceOwnerId = a});
-
--- | The timestamp indicating when the attachment initiated.
-niaAttachTime :: Lens' NetworkInterfaceAttachment (Maybe UTCTime)
-niaAttachTime = lens _niaAttachTime (\ s a -> s{_niaAttachTime = a}) . mapping _Time;
-
--- | The device index of the network interface attachment on the instance.
-niaDeviceIndex :: Lens' NetworkInterfaceAttachment (Maybe Int)
-niaDeviceIndex = lens _niaDeviceIndex (\ s a -> s{_niaDeviceIndex = a});
-
-instance FromXML NetworkInterfaceAttachment where
-        parseXML x
-          = NetworkInterfaceAttachment' <$>
-              (x .@? "instanceId") <*> (x .@? "status") <*>
-                (x .@? "deleteOnTermination")
-                <*> (x .@? "attachmentId")
-                <*> (x .@? "instanceOwnerId")
-                <*> (x .@? "attachTime")
-                <*> (x .@? "deviceIndex")
-
--- | Describes an attachment change.
---
--- /See:/ 'networkInterfaceAttachmentChanges' smart constructor.
-data NetworkInterfaceAttachmentChanges = NetworkInterfaceAttachmentChanges'
-    { _niacDeleteOnTermination :: !(Maybe Bool)
-    , _niacAttachmentId        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterfaceAttachmentChanges' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'niacDeleteOnTermination'
---
--- * 'niacAttachmentId'
-networkInterfaceAttachmentChanges
-    :: NetworkInterfaceAttachmentChanges
-networkInterfaceAttachmentChanges =
-    NetworkInterfaceAttachmentChanges'
-    { _niacDeleteOnTermination = Nothing
-    , _niacAttachmentId = Nothing
-    }
-
--- | Indicates whether the network interface is deleted when the instance is
--- terminated.
-niacDeleteOnTermination :: Lens' NetworkInterfaceAttachmentChanges (Maybe Bool)
-niacDeleteOnTermination = lens _niacDeleteOnTermination (\ s a -> s{_niacDeleteOnTermination = a});
-
--- | The ID of the network interface attachment.
-niacAttachmentId :: Lens' NetworkInterfaceAttachmentChanges (Maybe Text)
-niacAttachmentId = lens _niacAttachmentId (\ s a -> s{_niacAttachmentId = a});
-
-instance ToQuery NetworkInterfaceAttachmentChanges
-         where
-        toQuery NetworkInterfaceAttachmentChanges'{..}
-          = mconcat
-              ["DeleteOnTermination" =: _niacDeleteOnTermination,
-               "AttachmentId" =: _niacAttachmentId]
-
--- | Describes the private IP address of a network interface.
---
--- /See:/ 'networkInterfacePrivateIPAddress' smart constructor.
-data NetworkInterfacePrivateIPAddress = NetworkInterfacePrivateIPAddress'
-    { _nipiaPrimary          :: !(Maybe Bool)
-    , _nipiaPrivateIPAddress :: !(Maybe Text)
-    , _nipiaPrivateDNSName   :: !(Maybe Text)
-    , _nipiaAssociation      :: !(Maybe NetworkInterfaceAssociation)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NetworkInterfacePrivateIPAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nipiaPrimary'
---
--- * 'nipiaPrivateIPAddress'
---
--- * 'nipiaPrivateDNSName'
---
--- * 'nipiaAssociation'
-networkInterfacePrivateIPAddress
-    :: NetworkInterfacePrivateIPAddress
-networkInterfacePrivateIPAddress =
-    NetworkInterfacePrivateIPAddress'
-    { _nipiaPrimary = Nothing
-    , _nipiaPrivateIPAddress = Nothing
-    , _nipiaPrivateDNSName = Nothing
-    , _nipiaAssociation = Nothing
-    }
-
--- | Indicates whether this IP address is the primary private IP address of
--- the network interface.
-nipiaPrimary :: Lens' NetworkInterfacePrivateIPAddress (Maybe Bool)
-nipiaPrimary = lens _nipiaPrimary (\ s a -> s{_nipiaPrimary = a});
-
--- | The private IP address.
-nipiaPrivateIPAddress :: Lens' NetworkInterfacePrivateIPAddress (Maybe Text)
-nipiaPrivateIPAddress = lens _nipiaPrivateIPAddress (\ s a -> s{_nipiaPrivateIPAddress = a});
-
--- | The private DNS name.
-nipiaPrivateDNSName :: Lens' NetworkInterfacePrivateIPAddress (Maybe Text)
-nipiaPrivateDNSName = lens _nipiaPrivateDNSName (\ s a -> s{_nipiaPrivateDNSName = a});
-
--- | The association information for an Elastic IP address associated with
--- the network interface.
-nipiaAssociation :: Lens' NetworkInterfacePrivateIPAddress (Maybe NetworkInterfaceAssociation)
-nipiaAssociation = lens _nipiaAssociation (\ s a -> s{_nipiaAssociation = a});
-
-instance FromXML NetworkInterfacePrivateIPAddress
-         where
-        parseXML x
-          = NetworkInterfacePrivateIPAddress' <$>
-              (x .@? "primary") <*> (x .@? "privateIpAddress") <*>
-                (x .@? "privateDnsName")
-                <*> (x .@? "association")
-
--- | /See:/ 'newDHCPConfiguration' smart constructor.
-data NewDHCPConfiguration = NewDHCPConfiguration'
-    { _ndcValues :: !(Maybe [Text])
-    , _ndcKey    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'NewDHCPConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ndcValues'
---
--- * 'ndcKey'
-newDHCPConfiguration
-    :: NewDHCPConfiguration
-newDHCPConfiguration =
-    NewDHCPConfiguration'
-    { _ndcValues = Nothing
-    , _ndcKey = Nothing
-    }
-
--- | Undocumented member.
-ndcValues :: Lens' NewDHCPConfiguration [Text]
-ndcValues = lens _ndcValues (\ s a -> s{_ndcValues = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-ndcKey :: Lens' NewDHCPConfiguration (Maybe Text)
-ndcKey = lens _ndcKey (\ s a -> s{_ndcKey = a});
-
-instance ToQuery NewDHCPConfiguration where
-        toQuery NewDHCPConfiguration'{..}
-          = mconcat
-              [toQuery (toQueryList "Value" <$> _ndcValues),
-               "Key" =: _ndcKey]
-
--- | Describes the placement for the instance.
---
--- /See:/ 'placement' smart constructor.
-data Placement = Placement'
-    { _pAffinity         :: !(Maybe Text)
-    , _pHostId           :: !(Maybe Text)
-    , _pAvailabilityZone :: !(Maybe Text)
-    , _pTenancy          :: !(Maybe Tenancy)
-    , _pGroupName        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Placement' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pAffinity'
---
--- * 'pHostId'
---
--- * 'pAvailabilityZone'
---
--- * 'pTenancy'
---
--- * 'pGroupName'
-placement
-    :: Placement
-placement =
-    Placement'
-    { _pAffinity = Nothing
-    , _pHostId = Nothing
-    , _pAvailabilityZone = Nothing
-    , _pTenancy = Nothing
-    , _pGroupName = Nothing
-    }
-
--- | The affinity setting for the instance on the Dedicated host. This
--- parameter is not supported for the ImportInstance command.
-pAffinity :: Lens' Placement (Maybe Text)
-pAffinity = lens _pAffinity (\ s a -> s{_pAffinity = a});
-
--- | The ID of the Dedicted host on which the instance resides. This
--- parameter is not support for the ImportInstance command.
-pHostId :: Lens' Placement (Maybe Text)
-pHostId = lens _pHostId (\ s a -> s{_pHostId = a});
-
--- | The Availability Zone of the instance.
-pAvailabilityZone :: Lens' Placement (Maybe Text)
-pAvailabilityZone = lens _pAvailabilityZone (\ s a -> s{_pAvailabilityZone = a});
-
--- | The tenancy of the instance (if the instance is running in a VPC). An
--- instance with a tenancy of 'dedicated' runs on single-tenant hardware.
--- The 'host' tenancy is not supported for the ImportInstance command.
-pTenancy :: Lens' Placement (Maybe Tenancy)
-pTenancy = lens _pTenancy (\ s a -> s{_pTenancy = a});
-
--- | The name of the placement group the instance is in (for cluster compute
--- instances).
-pGroupName :: Lens' Placement (Maybe Text)
-pGroupName = lens _pGroupName (\ s a -> s{_pGroupName = a});
-
-instance FromXML Placement where
-        parseXML x
-          = Placement' <$>
-              (x .@? "affinity") <*> (x .@? "hostId") <*>
-                (x .@? "availabilityZone")
-                <*> (x .@? "tenancy")
-                <*> (x .@? "groupName")
-
-instance ToQuery Placement where
-        toQuery Placement'{..}
-          = mconcat
-              ["Affinity" =: _pAffinity, "HostId" =: _pHostId,
-               "AvailabilityZone" =: _pAvailabilityZone,
-               "Tenancy" =: _pTenancy, "GroupName" =: _pGroupName]
-
--- | Describes a placement group.
---
--- /See:/ 'placementGroup' smart constructor.
-data PlacementGroup = PlacementGroup'
-    { _pgState     :: !(Maybe PlacementGroupState)
-    , _pgStrategy  :: !(Maybe PlacementStrategy)
-    , _pgGroupName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PlacementGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pgState'
---
--- * 'pgStrategy'
---
--- * 'pgGroupName'
-placementGroup
-    :: PlacementGroup
-placementGroup =
-    PlacementGroup'
-    { _pgState = Nothing
-    , _pgStrategy = Nothing
-    , _pgGroupName = Nothing
-    }
-
--- | The state of the placement group.
-pgState :: Lens' PlacementGroup (Maybe PlacementGroupState)
-pgState = lens _pgState (\ s a -> s{_pgState = a});
-
--- | The placement strategy.
-pgStrategy :: Lens' PlacementGroup (Maybe PlacementStrategy)
-pgStrategy = lens _pgStrategy (\ s a -> s{_pgStrategy = a});
-
--- | The name of the placement group.
-pgGroupName :: Lens' PlacementGroup (Maybe Text)
-pgGroupName = lens _pgGroupName (\ s a -> s{_pgGroupName = a});
-
-instance FromXML PlacementGroup where
-        parseXML x
-          = PlacementGroup' <$>
-              (x .@? "state") <*> (x .@? "strategy") <*>
-                (x .@? "groupName")
-
--- | Describes a range of ports.
---
--- /See:/ 'portRange' smart constructor.
-data PortRange = PortRange'
-    { _prTo   :: !(Maybe Int)
-    , _prFrom :: !(Maybe Int)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PortRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'prTo'
---
--- * 'prFrom'
-portRange
-    :: PortRange
-portRange =
-    PortRange'
-    { _prTo = Nothing
-    , _prFrom = Nothing
-    }
-
--- | The last port in the range.
-prTo :: Lens' PortRange (Maybe Int)
-prTo = lens _prTo (\ s a -> s{_prTo = a});
-
--- | The first port in the range.
-prFrom :: Lens' PortRange (Maybe Int)
-prFrom = lens _prFrom (\ s a -> s{_prFrom = a});
-
-instance FromXML PortRange where
-        parseXML x
-          = PortRange' <$> (x .@? "to") <*> (x .@? "from")
-
-instance ToQuery PortRange where
-        toQuery PortRange'{..}
-          = mconcat ["To" =: _prTo, "From" =: _prFrom]
-
--- | Describes prefixes for AWS services.
---
--- /See:/ 'prefixList' smart constructor.
-data PrefixList = PrefixList'
-    { _plCIdRs          :: !(Maybe [Text])
-    , _plPrefixListId   :: !(Maybe Text)
-    , _plPrefixListName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PrefixList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'plCIdRs'
---
--- * 'plPrefixListId'
---
--- * 'plPrefixListName'
-prefixList
-    :: PrefixList
-prefixList =
-    PrefixList'
-    { _plCIdRs = Nothing
-    , _plPrefixListId = Nothing
-    , _plPrefixListName = Nothing
-    }
-
--- | The IP address range of the AWS service.
-plCIdRs :: Lens' PrefixList [Text]
-plCIdRs = lens _plCIdRs (\ s a -> s{_plCIdRs = a}) . _Default . _Coerce;
-
--- | The ID of the prefix.
-plPrefixListId :: Lens' PrefixList (Maybe Text)
-plPrefixListId = lens _plPrefixListId (\ s a -> s{_plPrefixListId = a});
-
--- | The name of the prefix.
-plPrefixListName :: Lens' PrefixList (Maybe Text)
-plPrefixListName = lens _plPrefixListName (\ s a -> s{_plPrefixListName = a});
-
-instance FromXML PrefixList where
-        parseXML x
-          = PrefixList' <$>
-              (x .@? "cidrSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "prefixListId")
-                <*> (x .@? "prefixListName")
-
--- | The ID of the prefix.
---
--- /See:/ 'prefixListId' smart constructor.
-newtype PrefixListId = PrefixListId'
-    { _pliPrefixListId :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PrefixListId' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pliPrefixListId'
-prefixListId
-    :: PrefixListId
-prefixListId =
-    PrefixListId'
-    { _pliPrefixListId = Nothing
-    }
-
--- | The ID of the prefix.
-pliPrefixListId :: Lens' PrefixListId (Maybe Text)
-pliPrefixListId = lens _pliPrefixListId (\ s a -> s{_pliPrefixListId = a});
-
-instance FromXML PrefixListId where
-        parseXML x = PrefixListId' <$> (x .@? "prefixListId")
-
-instance ToQuery PrefixListId where
-        toQuery PrefixListId'{..}
-          = mconcat ["PrefixListId" =: _pliPrefixListId]
-
--- | Describes the price for a Reserved instance.
---
--- /See:/ 'priceSchedule' smart constructor.
-data PriceSchedule = PriceSchedule'
-    { _psCurrencyCode :: !(Maybe CurrencyCodeValues)
-    , _psTerm         :: !(Maybe Integer)
-    , _psActive       :: !(Maybe Bool)
-    , _psPrice        :: !(Maybe Double)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PriceSchedule' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'psCurrencyCode'
---
--- * 'psTerm'
---
--- * 'psActive'
---
--- * 'psPrice'
-priceSchedule
-    :: PriceSchedule
-priceSchedule =
-    PriceSchedule'
-    { _psCurrencyCode = Nothing
-    , _psTerm = Nothing
-    , _psActive = Nothing
-    , _psPrice = Nothing
-    }
-
--- | The currency for transacting the Reserved instance resale. At this time,
--- the only supported currency is 'USD'.
-psCurrencyCode :: Lens' PriceSchedule (Maybe CurrencyCodeValues)
-psCurrencyCode = lens _psCurrencyCode (\ s a -> s{_psCurrencyCode = a});
-
--- | The number of months remaining in the reservation. For example, 2 is the
--- second to the last month before the capacity reservation expires.
-psTerm :: Lens' PriceSchedule (Maybe Integer)
-psTerm = lens _psTerm (\ s a -> s{_psTerm = a});
-
--- | The current price schedule, as determined by the term remaining for the
--- Reserved instance in the listing.
---
--- A specific price schedule is always in effect, but only one price
--- schedule can be active at any time. Take, for example, a Reserved
--- instance listing that has five months remaining in its term. When you
--- specify price schedules for five months and two months, this means that
--- schedule 1, covering the first three months of the remaining term, will
--- be active during months 5, 4, and 3. Then schedule 2, covering the last
--- two months of the term, will be active for months 2 and 1.
-psActive :: Lens' PriceSchedule (Maybe Bool)
-psActive = lens _psActive (\ s a -> s{_psActive = a});
-
--- | The fixed price for the term.
-psPrice :: Lens' PriceSchedule (Maybe Double)
-psPrice = lens _psPrice (\ s a -> s{_psPrice = a});
-
-instance FromXML PriceSchedule where
-        parseXML x
-          = PriceSchedule' <$>
-              (x .@? "currencyCode") <*> (x .@? "term") <*>
-                (x .@? "active")
-                <*> (x .@? "price")
-
--- | Describes the price for a Reserved instance.
---
--- /See:/ 'priceScheduleSpecification' smart constructor.
-data PriceScheduleSpecification = PriceScheduleSpecification'
-    { _pssCurrencyCode :: !(Maybe CurrencyCodeValues)
-    , _pssTerm         :: !(Maybe Integer)
-    , _pssPrice        :: !(Maybe Double)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PriceScheduleSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pssCurrencyCode'
---
--- * 'pssTerm'
---
--- * 'pssPrice'
-priceScheduleSpecification
-    :: PriceScheduleSpecification
-priceScheduleSpecification =
-    PriceScheduleSpecification'
-    { _pssCurrencyCode = Nothing
-    , _pssTerm = Nothing
-    , _pssPrice = Nothing
-    }
-
--- | The currency for transacting the Reserved instance resale. At this time,
--- the only supported currency is 'USD'.
-pssCurrencyCode :: Lens' PriceScheduleSpecification (Maybe CurrencyCodeValues)
-pssCurrencyCode = lens _pssCurrencyCode (\ s a -> s{_pssCurrencyCode = a});
-
--- | The number of months remaining in the reservation. For example, 2 is the
--- second to the last month before the capacity reservation expires.
-pssTerm :: Lens' PriceScheduleSpecification (Maybe Integer)
-pssTerm = lens _pssTerm (\ s a -> s{_pssTerm = a});
-
--- | The fixed price for the term.
-pssPrice :: Lens' PriceScheduleSpecification (Maybe Double)
-pssPrice = lens _pssPrice (\ s a -> s{_pssPrice = a});
-
-instance ToQuery PriceScheduleSpecification where
-        toQuery PriceScheduleSpecification'{..}
-          = mconcat
-              ["CurrencyCode" =: _pssCurrencyCode,
-               "Term" =: _pssTerm, "Price" =: _pssPrice]
-
--- | Describes a Reserved instance offering.
---
--- /See:/ 'pricingDetail' smart constructor.
-data PricingDetail = PricingDetail'
-    { _pdCount :: !(Maybe Int)
-    , _pdPrice :: !(Maybe Double)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PricingDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pdCount'
---
--- * 'pdPrice'
-pricingDetail
-    :: PricingDetail
-pricingDetail =
-    PricingDetail'
-    { _pdCount = Nothing
-    , _pdPrice = Nothing
-    }
-
--- | The number of reservations available for the price.
-pdCount :: Lens' PricingDetail (Maybe Int)
-pdCount = lens _pdCount (\ s a -> s{_pdCount = a});
-
--- | The price per instance.
-pdPrice :: Lens' PricingDetail (Maybe Double)
-pdPrice = lens _pdPrice (\ s a -> s{_pdPrice = a});
-
-instance FromXML PricingDetail where
-        parseXML x
-          = PricingDetail' <$>
-              (x .@? "count") <*> (x .@? "price")
-
--- | Describes a secondary private IP address for a network interface.
---
--- /See:/ 'privateIPAddressSpecification' smart constructor.
-data PrivateIPAddressSpecification = PrivateIPAddressSpecification'
-    { _piasPrimary          :: !(Maybe Bool)
-    , _piasPrivateIPAddress :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PrivateIPAddressSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'piasPrimary'
---
--- * 'piasPrivateIPAddress'
-privateIPAddressSpecification
-    :: Text -- ^ 'piasPrivateIPAddress'
-    -> PrivateIPAddressSpecification
-privateIPAddressSpecification pPrivateIPAddress_ =
-    PrivateIPAddressSpecification'
-    { _piasPrimary = Nothing
-    , _piasPrivateIPAddress = pPrivateIPAddress_
-    }
-
--- | Indicates whether the private IP address is the primary private IP
--- address. Only one IP address can be designated as primary.
-piasPrimary :: Lens' PrivateIPAddressSpecification (Maybe Bool)
-piasPrimary = lens _piasPrimary (\ s a -> s{_piasPrimary = a});
-
--- | The private IP addresses.
-piasPrivateIPAddress :: Lens' PrivateIPAddressSpecification Text
-piasPrivateIPAddress = lens _piasPrivateIPAddress (\ s a -> s{_piasPrivateIPAddress = a});
-
-instance FromXML PrivateIPAddressSpecification where
-        parseXML x
-          = PrivateIPAddressSpecification' <$>
-              (x .@? "primary") <*> (x .@ "privateIpAddress")
-
-instance ToQuery PrivateIPAddressSpecification where
-        toQuery PrivateIPAddressSpecification'{..}
-          = mconcat
-              ["Primary" =: _piasPrimary,
-               "PrivateIpAddress" =: _piasPrivateIPAddress]
-
--- | Describes a product code.
---
--- /See:/ 'productCode' smart constructor.
-data ProductCode = ProductCode'
-    { _pcProductCodeType :: !(Maybe ProductCodeValues)
-    , _pcProductCodeId   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProductCode' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pcProductCodeType'
---
--- * 'pcProductCodeId'
-productCode
-    :: ProductCode
-productCode =
-    ProductCode'
-    { _pcProductCodeType = Nothing
-    , _pcProductCodeId = Nothing
-    }
-
--- | The type of product code.
-pcProductCodeType :: Lens' ProductCode (Maybe ProductCodeValues)
-pcProductCodeType = lens _pcProductCodeType (\ s a -> s{_pcProductCodeType = a});
-
--- | The product code.
-pcProductCodeId :: Lens' ProductCode (Maybe Text)
-pcProductCodeId = lens _pcProductCodeId (\ s a -> s{_pcProductCodeId = a});
-
-instance FromXML ProductCode where
-        parseXML x
-          = ProductCode' <$>
-              (x .@? "type") <*> (x .@? "productCode")
-
--- | Describes a virtual private gateway propagating route.
---
--- /See:/ 'propagatingVGW' smart constructor.
-newtype PropagatingVGW = PropagatingVGW'
-    { _pvGatewayId :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'PropagatingVGW' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pvGatewayId'
-propagatingVGW
-    :: PropagatingVGW
-propagatingVGW =
-    PropagatingVGW'
-    { _pvGatewayId = Nothing
-    }
-
--- | The ID of the virtual private gateway (VGW).
-pvGatewayId :: Lens' PropagatingVGW (Maybe Text)
-pvGatewayId = lens _pvGatewayId (\ s a -> s{_pvGatewayId = a});
-
-instance FromXML PropagatingVGW where
-        parseXML x = PropagatingVGW' <$> (x .@? "gatewayId")
-
--- | Describes a recurring charge.
---
--- /See:/ 'recurringCharge' smart constructor.
-data RecurringCharge = RecurringCharge'
-    { _rcAmount    :: !(Maybe Double)
-    , _rcFrequency :: !(Maybe RecurringChargeFrequency)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RecurringCharge' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rcAmount'
---
--- * 'rcFrequency'
-recurringCharge
-    :: RecurringCharge
-recurringCharge =
-    RecurringCharge'
-    { _rcAmount = Nothing
-    , _rcFrequency = Nothing
-    }
-
--- | The amount of the recurring charge.
-rcAmount :: Lens' RecurringCharge (Maybe Double)
-rcAmount = lens _rcAmount (\ s a -> s{_rcAmount = a});
-
--- | The frequency of the recurring charge.
-rcFrequency :: Lens' RecurringCharge (Maybe RecurringChargeFrequency)
-rcFrequency = lens _rcFrequency (\ s a -> s{_rcFrequency = a});
-
-instance FromXML RecurringCharge where
-        parseXML x
-          = RecurringCharge' <$>
-              (x .@? "amount") <*> (x .@? "frequency")
-
--- | Describes a region.
---
--- /See:/ 'regionInfo' smart constructor.
-data RegionInfo = RegionInfo'
-    { _riRegionName :: !(Maybe Text)
-    , _riEndpoint   :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RegionInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riRegionName'
---
--- * 'riEndpoint'
-regionInfo
-    :: RegionInfo
-regionInfo =
-    RegionInfo'
-    { _riRegionName = Nothing
-    , _riEndpoint = Nothing
-    }
-
--- | The name of the region.
-riRegionName :: Lens' RegionInfo (Maybe Text)
-riRegionName = lens _riRegionName (\ s a -> s{_riRegionName = a});
-
--- | The region service endpoint.
-riEndpoint :: Lens' RegionInfo (Maybe Text)
-riEndpoint = lens _riEndpoint (\ s a -> s{_riEndpoint = a});
-
-instance FromXML RegionInfo where
-        parseXML x
-          = RegionInfo' <$>
-              (x .@? "regionName") <*> (x .@? "regionEndpoint")
-
--- | Describes the launch specification for an instance.
---
--- /See:/ 'requestSpotLaunchSpecification' smart constructor.
-data RequestSpotLaunchSpecification = RequestSpotLaunchSpecification'
-    { _rslsSecurityGroupIds    :: !(Maybe [Text])
-    , _rslsSecurityGroups      :: !(Maybe [Text])
-    , _rslsKeyName             :: !(Maybe Text)
-    , _rslsNetworkInterfaces   :: !(Maybe [InstanceNetworkInterfaceSpecification])
-    , _rslsRAMDiskId           :: !(Maybe Text)
-    , _rslsSubnetId            :: !(Maybe Text)
-    , _rslsKernelId            :: !(Maybe Text)
-    , _rslsInstanceType        :: !(Maybe InstanceType)
-    , _rslsEBSOptimized        :: !(Maybe Bool)
-    , _rslsUserData            :: !(Maybe Text)
-    , _rslsMonitoring          :: !(Maybe RunInstancesMonitoringEnabled)
-    , _rslsIAMInstanceProfile  :: !(Maybe IAMInstanceProfileSpecification)
-    , _rslsImageId             :: !(Maybe Text)
-    , _rslsAddressingType      :: !(Maybe Text)
-    , _rslsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _rslsPlacement           :: !(Maybe SpotPlacement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RequestSpotLaunchSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rslsSecurityGroupIds'
---
--- * 'rslsSecurityGroups'
---
--- * 'rslsKeyName'
---
--- * 'rslsNetworkInterfaces'
---
--- * 'rslsRAMDiskId'
---
--- * 'rslsSubnetId'
---
--- * 'rslsKernelId'
---
--- * 'rslsInstanceType'
---
--- * 'rslsEBSOptimized'
---
--- * 'rslsUserData'
---
--- * 'rslsMonitoring'
---
--- * 'rslsIAMInstanceProfile'
---
--- * 'rslsImageId'
---
--- * 'rslsAddressingType'
---
--- * 'rslsBlockDeviceMappings'
---
--- * 'rslsPlacement'
-requestSpotLaunchSpecification
-    :: RequestSpotLaunchSpecification
-requestSpotLaunchSpecification =
-    RequestSpotLaunchSpecification'
-    { _rslsSecurityGroupIds = Nothing
-    , _rslsSecurityGroups = Nothing
-    , _rslsKeyName = Nothing
-    , _rslsNetworkInterfaces = Nothing
-    , _rslsRAMDiskId = Nothing
-    , _rslsSubnetId = Nothing
-    , _rslsKernelId = Nothing
-    , _rslsInstanceType = Nothing
-    , _rslsEBSOptimized = Nothing
-    , _rslsUserData = Nothing
-    , _rslsMonitoring = Nothing
-    , _rslsIAMInstanceProfile = Nothing
-    , _rslsImageId = Nothing
-    , _rslsAddressingType = Nothing
-    , _rslsBlockDeviceMappings = Nothing
-    , _rslsPlacement = Nothing
-    }
-
--- | Undocumented member.
-rslsSecurityGroupIds :: Lens' RequestSpotLaunchSpecification [Text]
-rslsSecurityGroupIds = lens _rslsSecurityGroupIds (\ s a -> s{_rslsSecurityGroupIds = a}) . _Default . _Coerce;
-
--- | Undocumented member.
-rslsSecurityGroups :: Lens' RequestSpotLaunchSpecification [Text]
-rslsSecurityGroups = lens _rslsSecurityGroups (\ s a -> s{_rslsSecurityGroups = a}) . _Default . _Coerce;
-
--- | The name of the key pair.
-rslsKeyName :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsKeyName = lens _rslsKeyName (\ s a -> s{_rslsKeyName = a});
-
--- | One or more network interfaces.
-rslsNetworkInterfaces :: Lens' RequestSpotLaunchSpecification [InstanceNetworkInterfaceSpecification]
-rslsNetworkInterfaces = lens _rslsNetworkInterfaces (\ s a -> s{_rslsNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The ID of the RAM disk.
-rslsRAMDiskId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsRAMDiskId = lens _rslsRAMDiskId (\ s a -> s{_rslsRAMDiskId = a});
-
--- | The ID of the subnet in which to launch the instance.
-rslsSubnetId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsSubnetId = lens _rslsSubnetId (\ s a -> s{_rslsSubnetId = a});
-
--- | The ID of the kernel.
-rslsKernelId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsKernelId = lens _rslsKernelId (\ s a -> s{_rslsKernelId = a});
-
--- | The instance type.
-rslsInstanceType :: Lens' RequestSpotLaunchSpecification (Maybe InstanceType)
-rslsInstanceType = lens _rslsInstanceType (\ s a -> s{_rslsInstanceType = a});
-
--- | Indicates whether the instance is optimized for EBS I\/O. This
--- optimization provides dedicated throughput to Amazon EBS and an
--- optimized configuration stack to provide optimal EBS I\/O performance.
--- This optimization isn\'t available with all instance types. Additional
--- usage charges apply when using an EBS Optimized instance.
---
--- Default: 'false'
-rslsEBSOptimized :: Lens' RequestSpotLaunchSpecification (Maybe Bool)
-rslsEBSOptimized = lens _rslsEBSOptimized (\ s a -> s{_rslsEBSOptimized = a});
-
--- | The Base64-encoded MIME user data to make available to the instances.
-rslsUserData :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsUserData = lens _rslsUserData (\ s a -> s{_rslsUserData = a});
-
--- | Undocumented member.
-rslsMonitoring :: Lens' RequestSpotLaunchSpecification (Maybe RunInstancesMonitoringEnabled)
-rslsMonitoring = lens _rslsMonitoring (\ s a -> s{_rslsMonitoring = a});
-
--- | The IAM instance profile.
-rslsIAMInstanceProfile :: Lens' RequestSpotLaunchSpecification (Maybe IAMInstanceProfileSpecification)
-rslsIAMInstanceProfile = lens _rslsIAMInstanceProfile (\ s a -> s{_rslsIAMInstanceProfile = a});
-
--- | The ID of the AMI.
-rslsImageId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsImageId = lens _rslsImageId (\ s a -> s{_rslsImageId = a});
-
--- | Deprecated.
-rslsAddressingType :: Lens' RequestSpotLaunchSpecification (Maybe Text)
-rslsAddressingType = lens _rslsAddressingType (\ s a -> s{_rslsAddressingType = a});
-
--- | One or more block device mapping entries.
-rslsBlockDeviceMappings :: Lens' RequestSpotLaunchSpecification [BlockDeviceMapping]
-rslsBlockDeviceMappings = lens _rslsBlockDeviceMappings (\ s a -> s{_rslsBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | The placement information for the instance.
-rslsPlacement :: Lens' RequestSpotLaunchSpecification (Maybe SpotPlacement)
-rslsPlacement = lens _rslsPlacement (\ s a -> s{_rslsPlacement = a});
-
-instance ToQuery RequestSpotLaunchSpecification where
-        toQuery RequestSpotLaunchSpecification'{..}
-          = mconcat
-              [toQuery
-                 (toQueryList "SecurityGroupId" <$>
-                    _rslsSecurityGroupIds),
-               toQuery
-                 (toQueryList "SecurityGroup" <$>
-                    _rslsSecurityGroups),
-               "KeyName" =: _rslsKeyName,
-               toQuery
-                 (toQueryList "NetworkInterface" <$>
-                    _rslsNetworkInterfaces),
-               "RamdiskId" =: _rslsRAMDiskId,
-               "SubnetId" =: _rslsSubnetId,
-               "KernelId" =: _rslsKernelId,
-               "InstanceType" =: _rslsInstanceType,
-               "EbsOptimized" =: _rslsEBSOptimized,
-               "UserData" =: _rslsUserData,
-               "Monitoring" =: _rslsMonitoring,
-               "IamInstanceProfile" =: _rslsIAMInstanceProfile,
-               "ImageId" =: _rslsImageId,
-               "AddressingType" =: _rslsAddressingType,
-               toQuery
-                 (toQueryList "BlockDeviceMapping" <$>
-                    _rslsBlockDeviceMappings),
-               "Placement" =: _rslsPlacement]
-
--- | Describes a reservation.
---
--- /See:/ 'reservation' smart constructor.
-data Reservation = Reservation'
-    { _rGroups        :: !(Maybe [GroupIdentifier])
-    , _rInstances     :: !(Maybe [Instance])
-    , _rRequesterId   :: !(Maybe Text)
-    , _rReservationId :: !Text
-    , _rOwnerId       :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Reservation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rGroups'
---
--- * 'rInstances'
---
--- * 'rRequesterId'
---
--- * 'rReservationId'
---
--- * 'rOwnerId'
-reservation
-    :: Text -- ^ 'rReservationId'
-    -> Text -- ^ 'rOwnerId'
-    -> Reservation
-reservation pReservationId_ pOwnerId_ =
-    Reservation'
-    { _rGroups = Nothing
-    , _rInstances = Nothing
-    , _rRequesterId = Nothing
-    , _rReservationId = pReservationId_
-    , _rOwnerId = pOwnerId_
-    }
-
--- | One or more security groups.
-rGroups :: Lens' Reservation [GroupIdentifier]
-rGroups = lens _rGroups (\ s a -> s{_rGroups = a}) . _Default . _Coerce;
-
--- | One or more instances.
-rInstances :: Lens' Reservation [Instance]
-rInstances = lens _rInstances (\ s a -> s{_rInstances = a}) . _Default . _Coerce;
-
--- | The ID of the requester that launched the instances on your behalf (for
--- example, AWS Management Console or Auto Scaling).
-rRequesterId :: Lens' Reservation (Maybe Text)
-rRequesterId = lens _rRequesterId (\ s a -> s{_rRequesterId = a});
-
--- | The ID of the reservation.
-rReservationId :: Lens' Reservation Text
-rReservationId = lens _rReservationId (\ s a -> s{_rReservationId = a});
-
--- | The ID of the AWS account that owns the reservation.
-rOwnerId :: Lens' Reservation Text
-rOwnerId = lens _rOwnerId (\ s a -> s{_rOwnerId = a});
-
-instance FromXML Reservation where
-        parseXML x
-          = Reservation' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*>
-                (x .@? "instancesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "requesterId")
-                <*> (x .@ "reservationId")
-                <*> (x .@ "ownerId")
-
--- | Describes the limit price of a Reserved instance offering.
---
--- /See:/ 'reservedInstanceLimitPrice' smart constructor.
-data ReservedInstanceLimitPrice = ReservedInstanceLimitPrice'
-    { _rilpAmount       :: !(Maybe Double)
-    , _rilpCurrencyCode :: !(Maybe CurrencyCodeValues)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstanceLimitPrice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rilpAmount'
---
--- * 'rilpCurrencyCode'
-reservedInstanceLimitPrice
-    :: ReservedInstanceLimitPrice
-reservedInstanceLimitPrice =
-    ReservedInstanceLimitPrice'
-    { _rilpAmount = Nothing
-    , _rilpCurrencyCode = Nothing
-    }
-
--- | Used for Reserved Instance Marketplace offerings. Specifies the limit
--- price on the total order (instanceCount * price).
-rilpAmount :: Lens' ReservedInstanceLimitPrice (Maybe Double)
-rilpAmount = lens _rilpAmount (\ s a -> s{_rilpAmount = a});
-
--- | The currency in which the 'limitPrice' amount is specified. At this
--- time, the only supported currency is 'USD'.
-rilpCurrencyCode :: Lens' ReservedInstanceLimitPrice (Maybe CurrencyCodeValues)
-rilpCurrencyCode = lens _rilpCurrencyCode (\ s a -> s{_rilpCurrencyCode = a});
-
-instance ToQuery ReservedInstanceLimitPrice where
-        toQuery ReservedInstanceLimitPrice'{..}
-          = mconcat
-              ["Amount" =: _rilpAmount,
-               "CurrencyCode" =: _rilpCurrencyCode]
-
--- | Describes a Reserved instance.
---
--- /See:/ 'reservedInstances' smart constructor.
-data ReservedInstances = ReservedInstances'
-    { _riState               :: !(Maybe ReservedInstanceState)
-    , _riCurrencyCode        :: !(Maybe CurrencyCodeValues)
-    , _riInstanceCount       :: !(Maybe Int)
-    , _riProductDescription  :: !(Maybe RIProductDescription)
-    , _riStart               :: !(Maybe ISO8601)
-    , _riInstanceType        :: !(Maybe InstanceType)
-    , _riEnd                 :: !(Maybe ISO8601)
-    , _riAvailabilityZone    :: !(Maybe Text)
-    , _riRecurringCharges    :: !(Maybe [RecurringCharge])
-    , _riOfferingType        :: !(Maybe OfferingTypeValues)
-    , _riUsagePrice          :: !(Maybe Double)
-    , _riFixedPrice          :: !(Maybe Double)
-    , _riReservedInstancesId :: !(Maybe Text)
-    , _riInstanceTenancy     :: !(Maybe Tenancy)
-    , _riDuration            :: !(Maybe Integer)
-    , _riTags                :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstances' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riState'
---
--- * 'riCurrencyCode'
---
--- * 'riInstanceCount'
---
--- * 'riProductDescription'
---
--- * 'riStart'
---
--- * 'riInstanceType'
---
--- * 'riEnd'
---
--- * 'riAvailabilityZone'
---
--- * 'riRecurringCharges'
---
--- * 'riOfferingType'
---
--- * 'riUsagePrice'
---
--- * 'riFixedPrice'
---
--- * 'riReservedInstancesId'
---
--- * 'riInstanceTenancy'
---
--- * 'riDuration'
---
--- * 'riTags'
-reservedInstances
-    :: ReservedInstances
-reservedInstances =
-    ReservedInstances'
-    { _riState = Nothing
-    , _riCurrencyCode = Nothing
-    , _riInstanceCount = Nothing
-    , _riProductDescription = Nothing
-    , _riStart = Nothing
-    , _riInstanceType = Nothing
-    , _riEnd = Nothing
-    , _riAvailabilityZone = Nothing
-    , _riRecurringCharges = Nothing
-    , _riOfferingType = Nothing
-    , _riUsagePrice = Nothing
-    , _riFixedPrice = Nothing
-    , _riReservedInstancesId = Nothing
-    , _riInstanceTenancy = Nothing
-    , _riDuration = Nothing
-    , _riTags = Nothing
-    }
-
--- | The state of the Reserved instance purchase.
-riState :: Lens' ReservedInstances (Maybe ReservedInstanceState)
-riState = lens _riState (\ s a -> s{_riState = a});
-
--- | The currency of the Reserved instance. It\'s specified using ISO 4217
--- standard currency codes. At this time, the only supported currency is
--- 'USD'.
-riCurrencyCode :: Lens' ReservedInstances (Maybe CurrencyCodeValues)
-riCurrencyCode = lens _riCurrencyCode (\ s a -> s{_riCurrencyCode = a});
-
--- | The number of reservations purchased.
-riInstanceCount :: Lens' ReservedInstances (Maybe Int)
-riInstanceCount = lens _riInstanceCount (\ s a -> s{_riInstanceCount = a});
-
--- | The Reserved instance product platform description.
-riProductDescription :: Lens' ReservedInstances (Maybe RIProductDescription)
-riProductDescription = lens _riProductDescription (\ s a -> s{_riProductDescription = a});
-
--- | The date and time the Reserved instance started.
-riStart :: Lens' ReservedInstances (Maybe UTCTime)
-riStart = lens _riStart (\ s a -> s{_riStart = a}) . mapping _Time;
-
--- | The instance type on which the Reserved instance can be used.
-riInstanceType :: Lens' ReservedInstances (Maybe InstanceType)
-riInstanceType = lens _riInstanceType (\ s a -> s{_riInstanceType = a});
-
--- | The time when the Reserved instance expires.
-riEnd :: Lens' ReservedInstances (Maybe UTCTime)
-riEnd = lens _riEnd (\ s a -> s{_riEnd = a}) . mapping _Time;
-
--- | The Availability Zone in which the Reserved instance can be used.
-riAvailabilityZone :: Lens' ReservedInstances (Maybe Text)
-riAvailabilityZone = lens _riAvailabilityZone (\ s a -> s{_riAvailabilityZone = a});
-
--- | The recurring charge tag assigned to the resource.
-riRecurringCharges :: Lens' ReservedInstances [RecurringCharge]
-riRecurringCharges = lens _riRecurringCharges (\ s a -> s{_riRecurringCharges = a}) . _Default . _Coerce;
-
--- | The Reserved instance offering type.
-riOfferingType :: Lens' ReservedInstances (Maybe OfferingTypeValues)
-riOfferingType = lens _riOfferingType (\ s a -> s{_riOfferingType = a});
-
--- | The usage price of the Reserved instance, per hour.
-riUsagePrice :: Lens' ReservedInstances (Maybe Double)
-riUsagePrice = lens _riUsagePrice (\ s a -> s{_riUsagePrice = a});
-
--- | The purchase price of the Reserved instance.
-riFixedPrice :: Lens' ReservedInstances (Maybe Double)
-riFixedPrice = lens _riFixedPrice (\ s a -> s{_riFixedPrice = a});
-
--- | The ID of the Reserved instance.
-riReservedInstancesId :: Lens' ReservedInstances (Maybe Text)
-riReservedInstancesId = lens _riReservedInstancesId (\ s a -> s{_riReservedInstancesId = a});
-
--- | The tenancy of the reserved instance.
-riInstanceTenancy :: Lens' ReservedInstances (Maybe Tenancy)
-riInstanceTenancy = lens _riInstanceTenancy (\ s a -> s{_riInstanceTenancy = a});
-
--- | The duration of the Reserved instance, in seconds.
-riDuration :: Lens' ReservedInstances (Maybe Integer)
-riDuration = lens _riDuration (\ s a -> s{_riDuration = a});
-
--- | Any tags assigned to the resource.
-riTags :: Lens' ReservedInstances [Tag]
-riTags = lens _riTags (\ s a -> s{_riTags = a}) . _Default . _Coerce;
-
-instance FromXML ReservedInstances where
-        parseXML x
-          = ReservedInstances' <$>
-              (x .@? "state") <*> (x .@? "currencyCode") <*>
-                (x .@? "instanceCount")
-                <*> (x .@? "productDescription")
-                <*> (x .@? "start")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "end")
-                <*> (x .@? "availabilityZone")
-                <*>
-                (x .@? "recurringCharges" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "offeringType")
-                <*> (x .@? "usagePrice")
-                <*> (x .@? "fixedPrice")
-                <*> (x .@? "reservedInstancesId")
-                <*> (x .@? "instanceTenancy")
-                <*> (x .@? "duration")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes the configuration settings for the modified Reserved
--- instances.
---
--- /See:/ 'reservedInstancesConfiguration' smart constructor.
-data ReservedInstancesConfiguration = ReservedInstancesConfiguration'
-    { _ricPlatform         :: !(Maybe Text)
-    , _ricInstanceCount    :: !(Maybe Int)
-    , _ricInstanceType     :: !(Maybe InstanceType)
-    , _ricAvailabilityZone :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesConfiguration' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ricPlatform'
---
--- * 'ricInstanceCount'
---
--- * 'ricInstanceType'
---
--- * 'ricAvailabilityZone'
-reservedInstancesConfiguration
-    :: ReservedInstancesConfiguration
-reservedInstancesConfiguration =
-    ReservedInstancesConfiguration'
-    { _ricPlatform = Nothing
-    , _ricInstanceCount = Nothing
-    , _ricInstanceType = Nothing
-    , _ricAvailabilityZone = Nothing
-    }
-
--- | The network platform of the modified Reserved instances, which is either
--- EC2-Classic or EC2-VPC.
-ricPlatform :: Lens' ReservedInstancesConfiguration (Maybe Text)
-ricPlatform = lens _ricPlatform (\ s a -> s{_ricPlatform = a});
-
--- | The number of modified Reserved instances.
-ricInstanceCount :: Lens' ReservedInstancesConfiguration (Maybe Int)
-ricInstanceCount = lens _ricInstanceCount (\ s a -> s{_ricInstanceCount = a});
-
--- | The instance type for the modified Reserved instances.
-ricInstanceType :: Lens' ReservedInstancesConfiguration (Maybe InstanceType)
-ricInstanceType = lens _ricInstanceType (\ s a -> s{_ricInstanceType = a});
-
--- | The Availability Zone for the modified Reserved instances.
-ricAvailabilityZone :: Lens' ReservedInstancesConfiguration (Maybe Text)
-ricAvailabilityZone = lens _ricAvailabilityZone (\ s a -> s{_ricAvailabilityZone = a});
-
-instance FromXML ReservedInstancesConfiguration where
-        parseXML x
-          = ReservedInstancesConfiguration' <$>
-              (x .@? "platform") <*> (x .@? "instanceCount") <*>
-                (x .@? "instanceType")
-                <*> (x .@? "availabilityZone")
-
-instance ToQuery ReservedInstancesConfiguration where
-        toQuery ReservedInstancesConfiguration'{..}
-          = mconcat
-              ["Platform" =: _ricPlatform,
-               "InstanceCount" =: _ricInstanceCount,
-               "InstanceType" =: _ricInstanceType,
-               "AvailabilityZone" =: _ricAvailabilityZone]
-
--- | Describes the ID of a Reserved instance.
---
--- /See:/ 'reservedInstancesId' smart constructor.
-newtype ReservedInstancesId = ReservedInstancesId'
-    { _riiReservedInstancesId :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesId' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riiReservedInstancesId'
-reservedInstancesId
-    :: ReservedInstancesId
-reservedInstancesId =
-    ReservedInstancesId'
-    { _riiReservedInstancesId = Nothing
-    }
-
--- | The ID of the Reserved instance.
-riiReservedInstancesId :: Lens' ReservedInstancesId (Maybe Text)
-riiReservedInstancesId = lens _riiReservedInstancesId (\ s a -> s{_riiReservedInstancesId = a});
-
-instance FromXML ReservedInstancesId where
-        parseXML x
-          = ReservedInstancesId' <$>
-              (x .@? "reservedInstancesId")
-
--- | Describes a Reserved instance listing.
---
--- /See:/ 'reservedInstancesListing' smart constructor.
-data ReservedInstancesListing = ReservedInstancesListing'
-    { _rilStatus                     :: !(Maybe ListingStatus)
-    , _rilClientToken                :: !(Maybe Text)
-    , _rilUpdateDate                 :: !(Maybe ISO8601)
-    , _rilCreateDate                 :: !(Maybe ISO8601)
-    , _rilPriceSchedules             :: !(Maybe [PriceSchedule])
-    , _rilStatusMessage              :: !(Maybe Text)
-    , _rilReservedInstancesId        :: !(Maybe Text)
-    , _rilTags                       :: !(Maybe [Tag])
-    , _rilInstanceCounts             :: !(Maybe [InstanceCount])
-    , _rilReservedInstancesListingId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesListing' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rilStatus'
---
--- * 'rilClientToken'
---
--- * 'rilUpdateDate'
---
--- * 'rilCreateDate'
---
--- * 'rilPriceSchedules'
---
--- * 'rilStatusMessage'
---
--- * 'rilReservedInstancesId'
---
--- * 'rilTags'
---
--- * 'rilInstanceCounts'
---
--- * 'rilReservedInstancesListingId'
-reservedInstancesListing
-    :: ReservedInstancesListing
-reservedInstancesListing =
-    ReservedInstancesListing'
-    { _rilStatus = Nothing
-    , _rilClientToken = Nothing
-    , _rilUpdateDate = Nothing
-    , _rilCreateDate = Nothing
-    , _rilPriceSchedules = Nothing
-    , _rilStatusMessage = Nothing
-    , _rilReservedInstancesId = Nothing
-    , _rilTags = Nothing
-    , _rilInstanceCounts = Nothing
-    , _rilReservedInstancesListingId = Nothing
-    }
-
--- | The status of the Reserved instance listing.
-rilStatus :: Lens' ReservedInstancesListing (Maybe ListingStatus)
-rilStatus = lens _rilStatus (\ s a -> s{_rilStatus = a});
-
--- | A unique, case-sensitive key supplied by the client to ensure that the
--- request is idempotent. For more information, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
-rilClientToken :: Lens' ReservedInstancesListing (Maybe Text)
-rilClientToken = lens _rilClientToken (\ s a -> s{_rilClientToken = a});
-
--- | The last modified timestamp of the listing.
-rilUpdateDate :: Lens' ReservedInstancesListing (Maybe UTCTime)
-rilUpdateDate = lens _rilUpdateDate (\ s a -> s{_rilUpdateDate = a}) . mapping _Time;
-
--- | The time the listing was created.
-rilCreateDate :: Lens' ReservedInstancesListing (Maybe UTCTime)
-rilCreateDate = lens _rilCreateDate (\ s a -> s{_rilCreateDate = a}) . mapping _Time;
-
--- | The price of the Reserved instance listing.
-rilPriceSchedules :: Lens' ReservedInstancesListing [PriceSchedule]
-rilPriceSchedules = lens _rilPriceSchedules (\ s a -> s{_rilPriceSchedules = a}) . _Default . _Coerce;
-
--- | The reason for the current status of the Reserved instance listing. The
--- response can be blank.
-rilStatusMessage :: Lens' ReservedInstancesListing (Maybe Text)
-rilStatusMessage = lens _rilStatusMessage (\ s a -> s{_rilStatusMessage = a});
-
--- | The ID of the Reserved instance.
-rilReservedInstancesId :: Lens' ReservedInstancesListing (Maybe Text)
-rilReservedInstancesId = lens _rilReservedInstancesId (\ s a -> s{_rilReservedInstancesId = a});
-
--- | Any tags assigned to the resource.
-rilTags :: Lens' ReservedInstancesListing [Tag]
-rilTags = lens _rilTags (\ s a -> s{_rilTags = a}) . _Default . _Coerce;
-
--- | The number of instances in this state.
-rilInstanceCounts :: Lens' ReservedInstancesListing [InstanceCount]
-rilInstanceCounts = lens _rilInstanceCounts (\ s a -> s{_rilInstanceCounts = a}) . _Default . _Coerce;
-
--- | The ID of the Reserved instance listing.
-rilReservedInstancesListingId :: Lens' ReservedInstancesListing (Maybe Text)
-rilReservedInstancesListingId = lens _rilReservedInstancesListingId (\ s a -> s{_rilReservedInstancesListingId = a});
-
-instance FromXML ReservedInstancesListing where
-        parseXML x
-          = ReservedInstancesListing' <$>
-              (x .@? "status") <*> (x .@? "clientToken") <*>
-                (x .@? "updateDate")
-                <*> (x .@? "createDate")
-                <*>
-                (x .@? "priceSchedules" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "reservedInstancesId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "instanceCounts" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "reservedInstancesListingId")
-
--- | Describes a Reserved instance modification.
---
--- /See:/ 'reservedInstancesModification' smart constructor.
-data ReservedInstancesModification = ReservedInstancesModification'
-    { _rimModificationResults             :: !(Maybe [ReservedInstancesModificationResult])
-    , _rimStatus                          :: !(Maybe Text)
-    , _rimClientToken                     :: !(Maybe Text)
-    , _rimUpdateDate                      :: !(Maybe ISO8601)
-    , _rimCreateDate                      :: !(Maybe ISO8601)
-    , _rimEffectiveDate                   :: !(Maybe ISO8601)
-    , _rimStatusMessage                   :: !(Maybe Text)
-    , _rimReservedInstancesModificationId :: !(Maybe Text)
-    , _rimReservedInstancesIds            :: !(Maybe [ReservedInstancesId])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesModification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rimModificationResults'
---
--- * 'rimStatus'
---
--- * 'rimClientToken'
---
--- * 'rimUpdateDate'
---
--- * 'rimCreateDate'
---
--- * 'rimEffectiveDate'
---
--- * 'rimStatusMessage'
---
--- * 'rimReservedInstancesModificationId'
---
--- * 'rimReservedInstancesIds'
-reservedInstancesModification
-    :: ReservedInstancesModification
-reservedInstancesModification =
-    ReservedInstancesModification'
-    { _rimModificationResults = Nothing
-    , _rimStatus = Nothing
-    , _rimClientToken = Nothing
-    , _rimUpdateDate = Nothing
-    , _rimCreateDate = Nothing
-    , _rimEffectiveDate = Nothing
-    , _rimStatusMessage = Nothing
-    , _rimReservedInstancesModificationId = Nothing
-    , _rimReservedInstancesIds = Nothing
-    }
-
--- | Contains target configurations along with their corresponding new
--- Reserved instance IDs.
-rimModificationResults :: Lens' ReservedInstancesModification [ReservedInstancesModificationResult]
-rimModificationResults = lens _rimModificationResults (\ s a -> s{_rimModificationResults = a}) . _Default . _Coerce;
-
--- | The status of the Reserved instances modification request.
-rimStatus :: Lens' ReservedInstancesModification (Maybe Text)
-rimStatus = lens _rimStatus (\ s a -> s{_rimStatus = a});
-
--- | A unique, case-sensitive key supplied by the client to ensure that the
--- request is idempotent. For more information, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
-rimClientToken :: Lens' ReservedInstancesModification (Maybe Text)
-rimClientToken = lens _rimClientToken (\ s a -> s{_rimClientToken = a});
-
--- | The time when the modification request was last updated.
-rimUpdateDate :: Lens' ReservedInstancesModification (Maybe UTCTime)
-rimUpdateDate = lens _rimUpdateDate (\ s a -> s{_rimUpdateDate = a}) . mapping _Time;
-
--- | The time when the modification request was created.
-rimCreateDate :: Lens' ReservedInstancesModification (Maybe UTCTime)
-rimCreateDate = lens _rimCreateDate (\ s a -> s{_rimCreateDate = a}) . mapping _Time;
-
--- | The time for the modification to become effective.
-rimEffectiveDate :: Lens' ReservedInstancesModification (Maybe UTCTime)
-rimEffectiveDate = lens _rimEffectiveDate (\ s a -> s{_rimEffectiveDate = a}) . mapping _Time;
-
--- | The reason for the status.
-rimStatusMessage :: Lens' ReservedInstancesModification (Maybe Text)
-rimStatusMessage = lens _rimStatusMessage (\ s a -> s{_rimStatusMessage = a});
-
--- | A unique ID for the Reserved instance modification.
-rimReservedInstancesModificationId :: Lens' ReservedInstancesModification (Maybe Text)
-rimReservedInstancesModificationId = lens _rimReservedInstancesModificationId (\ s a -> s{_rimReservedInstancesModificationId = a});
-
--- | The IDs of one or more Reserved instances.
-rimReservedInstancesIds :: Lens' ReservedInstancesModification [ReservedInstancesId]
-rimReservedInstancesIds = lens _rimReservedInstancesIds (\ s a -> s{_rimReservedInstancesIds = a}) . _Default . _Coerce;
-
-instance FromXML ReservedInstancesModification where
-        parseXML x
-          = ReservedInstancesModification' <$>
-              (x .@? "modificationResultSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "status")
-                <*> (x .@? "clientToken")
-                <*> (x .@? "updateDate")
-                <*> (x .@? "createDate")
-                <*> (x .@? "effectiveDate")
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "reservedInstancesModificationId")
-                <*>
-                (x .@? "reservedInstancesSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | /See:/ 'reservedInstancesModificationResult' smart constructor.
-data ReservedInstancesModificationResult = ReservedInstancesModificationResult'
-    { _rimrReservedInstancesId :: !(Maybe Text)
-    , _rimrTargetConfiguration :: !(Maybe ReservedInstancesConfiguration)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesModificationResult' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rimrReservedInstancesId'
---
--- * 'rimrTargetConfiguration'
-reservedInstancesModificationResult
-    :: ReservedInstancesModificationResult
-reservedInstancesModificationResult =
-    ReservedInstancesModificationResult'
-    { _rimrReservedInstancesId = Nothing
-    , _rimrTargetConfiguration = Nothing
-    }
-
--- | The ID for the Reserved instances that were created as part of the
--- modification request. This field is only available when the modification
--- is fulfilled.
-rimrReservedInstancesId :: Lens' ReservedInstancesModificationResult (Maybe Text)
-rimrReservedInstancesId = lens _rimrReservedInstancesId (\ s a -> s{_rimrReservedInstancesId = a});
-
--- | The target Reserved instances configurations supplied as part of the
--- modification request.
-rimrTargetConfiguration :: Lens' ReservedInstancesModificationResult (Maybe ReservedInstancesConfiguration)
-rimrTargetConfiguration = lens _rimrTargetConfiguration (\ s a -> s{_rimrTargetConfiguration = a});
-
-instance FromXML ReservedInstancesModificationResult
-         where
-        parseXML x
-          = ReservedInstancesModificationResult' <$>
-              (x .@? "reservedInstancesId") <*>
-                (x .@? "targetConfiguration")
-
--- | Describes a Reserved instance offering.
---
--- /See:/ 'reservedInstancesOffering' smart constructor.
-data ReservedInstancesOffering = ReservedInstancesOffering'
-    { _rioMarketplace                 :: !(Maybe Bool)
-    , _rioCurrencyCode                :: !(Maybe CurrencyCodeValues)
-    , _rioProductDescription          :: !(Maybe RIProductDescription)
-    , _rioInstanceType                :: !(Maybe InstanceType)
-    , _rioAvailabilityZone            :: !(Maybe Text)
-    , _rioPricingDetails              :: !(Maybe [PricingDetail])
-    , _rioRecurringCharges            :: !(Maybe [RecurringCharge])
-    , _rioOfferingType                :: !(Maybe OfferingTypeValues)
-    , _rioUsagePrice                  :: !(Maybe Double)
-    , _rioFixedPrice                  :: !(Maybe Double)
-    , _rioInstanceTenancy             :: !(Maybe Tenancy)
-    , _rioReservedInstancesOfferingId :: !(Maybe Text)
-    , _rioDuration                    :: !(Maybe Integer)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ReservedInstancesOffering' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rioMarketplace'
---
--- * 'rioCurrencyCode'
---
--- * 'rioProductDescription'
---
--- * 'rioInstanceType'
---
--- * 'rioAvailabilityZone'
---
--- * 'rioPricingDetails'
---
--- * 'rioRecurringCharges'
---
--- * 'rioOfferingType'
---
--- * 'rioUsagePrice'
---
--- * 'rioFixedPrice'
---
--- * 'rioInstanceTenancy'
---
--- * 'rioReservedInstancesOfferingId'
---
--- * 'rioDuration'
-reservedInstancesOffering
-    :: ReservedInstancesOffering
-reservedInstancesOffering =
-    ReservedInstancesOffering'
-    { _rioMarketplace = Nothing
-    , _rioCurrencyCode = Nothing
-    , _rioProductDescription = Nothing
-    , _rioInstanceType = Nothing
-    , _rioAvailabilityZone = Nothing
-    , _rioPricingDetails = Nothing
-    , _rioRecurringCharges = Nothing
-    , _rioOfferingType = Nothing
-    , _rioUsagePrice = Nothing
-    , _rioFixedPrice = Nothing
-    , _rioInstanceTenancy = Nothing
-    , _rioReservedInstancesOfferingId = Nothing
-    , _rioDuration = Nothing
-    }
-
--- | Indicates whether the offering is available through the Reserved
--- Instance Marketplace (resale) or AWS. If it\'s a Reserved Instance
--- Marketplace offering, this is 'true'.
-rioMarketplace :: Lens' ReservedInstancesOffering (Maybe Bool)
-rioMarketplace = lens _rioMarketplace (\ s a -> s{_rioMarketplace = a});
-
--- | The currency of the Reserved instance offering you are purchasing. It\'s
--- specified using ISO 4217 standard currency codes. At this time, the only
--- supported currency is 'USD'.
-rioCurrencyCode :: Lens' ReservedInstancesOffering (Maybe CurrencyCodeValues)
-rioCurrencyCode = lens _rioCurrencyCode (\ s a -> s{_rioCurrencyCode = a});
-
--- | The Reserved instance product platform description.
-rioProductDescription :: Lens' ReservedInstancesOffering (Maybe RIProductDescription)
-rioProductDescription = lens _rioProductDescription (\ s a -> s{_rioProductDescription = a});
-
--- | The instance type on which the Reserved instance can be used.
-rioInstanceType :: Lens' ReservedInstancesOffering (Maybe InstanceType)
-rioInstanceType = lens _rioInstanceType (\ s a -> s{_rioInstanceType = a});
-
--- | The Availability Zone in which the Reserved instance can be used.
-rioAvailabilityZone :: Lens' ReservedInstancesOffering (Maybe Text)
-rioAvailabilityZone = lens _rioAvailabilityZone (\ s a -> s{_rioAvailabilityZone = a});
-
--- | The pricing details of the Reserved instance offering.
-rioPricingDetails :: Lens' ReservedInstancesOffering [PricingDetail]
-rioPricingDetails = lens _rioPricingDetails (\ s a -> s{_rioPricingDetails = a}) . _Default . _Coerce;
-
--- | The recurring charge tag assigned to the resource.
-rioRecurringCharges :: Lens' ReservedInstancesOffering [RecurringCharge]
-rioRecurringCharges = lens _rioRecurringCharges (\ s a -> s{_rioRecurringCharges = a}) . _Default . _Coerce;
-
--- | The Reserved instance offering type.
-rioOfferingType :: Lens' ReservedInstancesOffering (Maybe OfferingTypeValues)
-rioOfferingType = lens _rioOfferingType (\ s a -> s{_rioOfferingType = a});
-
--- | The usage price of the Reserved instance, per hour.
-rioUsagePrice :: Lens' ReservedInstancesOffering (Maybe Double)
-rioUsagePrice = lens _rioUsagePrice (\ s a -> s{_rioUsagePrice = a});
-
--- | The purchase price of the Reserved instance.
-rioFixedPrice :: Lens' ReservedInstancesOffering (Maybe Double)
-rioFixedPrice = lens _rioFixedPrice (\ s a -> s{_rioFixedPrice = a});
-
--- | The tenancy of the reserved instance.
-rioInstanceTenancy :: Lens' ReservedInstancesOffering (Maybe Tenancy)
-rioInstanceTenancy = lens _rioInstanceTenancy (\ s a -> s{_rioInstanceTenancy = a});
-
--- | The ID of the Reserved instance offering.
-rioReservedInstancesOfferingId :: Lens' ReservedInstancesOffering (Maybe Text)
-rioReservedInstancesOfferingId = lens _rioReservedInstancesOfferingId (\ s a -> s{_rioReservedInstancesOfferingId = a});
-
--- | The duration of the Reserved instance, in seconds.
-rioDuration :: Lens' ReservedInstancesOffering (Maybe Integer)
-rioDuration = lens _rioDuration (\ s a -> s{_rioDuration = a});
-
-instance FromXML ReservedInstancesOffering where
-        parseXML x
-          = ReservedInstancesOffering' <$>
-              (x .@? "marketplace") <*> (x .@? "currencyCode") <*>
-                (x .@? "productDescription")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "availabilityZone")
-                <*>
-                (x .@? "pricingDetailsSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "recurringCharges" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "offeringType")
-                <*> (x .@? "usagePrice")
-                <*> (x .@? "fixedPrice")
-                <*> (x .@? "instanceTenancy")
-                <*> (x .@? "reservedInstancesOfferingId")
-                <*> (x .@? "duration")
-
--- | Describes a route in a route table.
---
--- /See:/ 'route' smart constructor.
-data Route = Route'
-    { _rVPCPeeringConnectionId  :: !(Maybe Text)
-    , _rInstanceId              :: !(Maybe Text)
-    , _rOrigin                  :: !(Maybe RouteOrigin)
-    , _rState                   :: !(Maybe RouteState)
-    , _rNatGatewayId            :: !(Maybe Text)
-    , _rNetworkInterfaceId      :: !(Maybe Text)
-    , _rGatewayId               :: !(Maybe Text)
-    , _rInstanceOwnerId         :: !(Maybe Text)
-    , _rDestinationPrefixListId :: !(Maybe Text)
-    , _rDestinationCIdRBlock    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Route' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rVPCPeeringConnectionId'
---
--- * 'rInstanceId'
---
--- * 'rOrigin'
---
--- * 'rState'
---
--- * 'rNatGatewayId'
---
--- * 'rNetworkInterfaceId'
---
--- * 'rGatewayId'
---
--- * 'rInstanceOwnerId'
---
--- * 'rDestinationPrefixListId'
---
--- * 'rDestinationCIdRBlock'
-route
-    :: Route
-route =
-    Route'
-    { _rVPCPeeringConnectionId = Nothing
-    , _rInstanceId = Nothing
-    , _rOrigin = Nothing
-    , _rState = Nothing
-    , _rNatGatewayId = Nothing
-    , _rNetworkInterfaceId = Nothing
-    , _rGatewayId = Nothing
-    , _rInstanceOwnerId = Nothing
-    , _rDestinationPrefixListId = Nothing
-    , _rDestinationCIdRBlock = Nothing
-    }
-
--- | The ID of the VPC peering connection.
-rVPCPeeringConnectionId :: Lens' Route (Maybe Text)
-rVPCPeeringConnectionId = lens _rVPCPeeringConnectionId (\ s a -> s{_rVPCPeeringConnectionId = a});
-
--- | The ID of a NAT instance in your VPC.
-rInstanceId :: Lens' Route (Maybe Text)
-rInstanceId = lens _rInstanceId (\ s a -> s{_rInstanceId = a});
-
--- | Describes how the route was created.
---
--- -   'CreateRouteTable' indicates that route was automatically created
---     when the route table was created.
--- -   'CreateRoute' indicates that the route was manually added to the
---     route table.
--- -   'EnableVgwRoutePropagation' indicates that the route was propagated
---     by route propagation.
-rOrigin :: Lens' Route (Maybe RouteOrigin)
-rOrigin = lens _rOrigin (\ s a -> s{_rOrigin = a});
-
--- | The state of the route. The 'blackhole' state indicates that the
--- route\'s target isn\'t available (for example, the specified gateway
--- isn\'t attached to the VPC, or the specified NAT instance has been
--- terminated).
-rState :: Lens' Route (Maybe RouteState)
-rState = lens _rState (\ s a -> s{_rState = a});
-
--- | The ID of a NAT gateway.
-rNatGatewayId :: Lens' Route (Maybe Text)
-rNatGatewayId = lens _rNatGatewayId (\ s a -> s{_rNatGatewayId = a});
-
--- | The ID of the network interface.
-rNetworkInterfaceId :: Lens' Route (Maybe Text)
-rNetworkInterfaceId = lens _rNetworkInterfaceId (\ s a -> s{_rNetworkInterfaceId = a});
-
--- | The ID of a gateway attached to your VPC.
-rGatewayId :: Lens' Route (Maybe Text)
-rGatewayId = lens _rGatewayId (\ s a -> s{_rGatewayId = a});
-
--- | The AWS account ID of the owner of the instance.
-rInstanceOwnerId :: Lens' Route (Maybe Text)
-rInstanceOwnerId = lens _rInstanceOwnerId (\ s a -> s{_rInstanceOwnerId = a});
-
--- | The prefix of the AWS service.
-rDestinationPrefixListId :: Lens' Route (Maybe Text)
-rDestinationPrefixListId = lens _rDestinationPrefixListId (\ s a -> s{_rDestinationPrefixListId = a});
-
--- | The CIDR block used for the destination match.
-rDestinationCIdRBlock :: Lens' Route (Maybe Text)
-rDestinationCIdRBlock = lens _rDestinationCIdRBlock (\ s a -> s{_rDestinationCIdRBlock = a});
-
-instance FromXML Route where
-        parseXML x
-          = Route' <$>
-              (x .@? "vpcPeeringConnectionId") <*>
-                (x .@? "instanceId")
-                <*> (x .@? "origin")
-                <*> (x .@? "state")
-                <*> (x .@? "natGatewayId")
-                <*> (x .@? "networkInterfaceId")
-                <*> (x .@? "gatewayId")
-                <*> (x .@? "instanceOwnerId")
-                <*> (x .@? "destinationPrefixListId")
-                <*> (x .@? "destinationCidrBlock")
-
--- | Describes a route table.
---
--- /See:/ 'routeTable' smart constructor.
-data RouteTable = RouteTable'
-    { _rtRouteTableId    :: !(Maybe Text)
-    , _rtRoutes          :: !(Maybe [Route])
-    , _rtVPCId           :: !(Maybe Text)
-    , _rtPropagatingVGWs :: !(Maybe [PropagatingVGW])
-    , _rtAssociations    :: !(Maybe [RouteTableAssociation])
-    , _rtTags            :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RouteTable' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rtRouteTableId'
---
--- * 'rtRoutes'
---
--- * 'rtVPCId'
---
--- * 'rtPropagatingVGWs'
---
--- * 'rtAssociations'
---
--- * 'rtTags'
-routeTable
-    :: RouteTable
-routeTable =
-    RouteTable'
-    { _rtRouteTableId = Nothing
-    , _rtRoutes = Nothing
-    , _rtVPCId = Nothing
-    , _rtPropagatingVGWs = Nothing
-    , _rtAssociations = Nothing
-    , _rtTags = Nothing
-    }
-
--- | The ID of the route table.
-rtRouteTableId :: Lens' RouteTable (Maybe Text)
-rtRouteTableId = lens _rtRouteTableId (\ s a -> s{_rtRouteTableId = a});
-
--- | The routes in the route table.
-rtRoutes :: Lens' RouteTable [Route]
-rtRoutes = lens _rtRoutes (\ s a -> s{_rtRoutes = a}) . _Default . _Coerce;
-
--- | The ID of the VPC.
-rtVPCId :: Lens' RouteTable (Maybe Text)
-rtVPCId = lens _rtVPCId (\ s a -> s{_rtVPCId = a});
-
--- | Any virtual private gateway (VGW) propagating routes.
-rtPropagatingVGWs :: Lens' RouteTable [PropagatingVGW]
-rtPropagatingVGWs = lens _rtPropagatingVGWs (\ s a -> s{_rtPropagatingVGWs = a}) . _Default . _Coerce;
-
--- | The associations between the route table and one or more subnets.
-rtAssociations :: Lens' RouteTable [RouteTableAssociation]
-rtAssociations = lens _rtAssociations (\ s a -> s{_rtAssociations = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the route table.
-rtTags :: Lens' RouteTable [Tag]
-rtTags = lens _rtTags (\ s a -> s{_rtTags = a}) . _Default . _Coerce;
-
-instance FromXML RouteTable where
-        parseXML x
-          = RouteTable' <$>
-              (x .@? "routeTableId") <*>
-                (x .@? "routeSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "vpcId")
-                <*>
-                (x .@? "propagatingVgwSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "associationSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes an association between a route table and a subnet.
---
--- /See:/ 'routeTableAssociation' smart constructor.
-data RouteTableAssociation = RouteTableAssociation'
-    { _rtaRouteTableId            :: !(Maybe Text)
-    , _rtaRouteTableAssociationId :: !(Maybe Text)
-    , _rtaMain                    :: !(Maybe Bool)
-    , _rtaSubnetId                :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RouteTableAssociation' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rtaRouteTableId'
---
--- * 'rtaRouteTableAssociationId'
---
--- * 'rtaMain'
---
--- * 'rtaSubnetId'
-routeTableAssociation
-    :: RouteTableAssociation
-routeTableAssociation =
-    RouteTableAssociation'
-    { _rtaRouteTableId = Nothing
-    , _rtaRouteTableAssociationId = Nothing
-    , _rtaMain = Nothing
-    , _rtaSubnetId = Nothing
-    }
-
--- | The ID of the route table.
-rtaRouteTableId :: Lens' RouteTableAssociation (Maybe Text)
-rtaRouteTableId = lens _rtaRouteTableId (\ s a -> s{_rtaRouteTableId = a});
-
--- | The ID of the association between a route table and a subnet.
-rtaRouteTableAssociationId :: Lens' RouteTableAssociation (Maybe Text)
-rtaRouteTableAssociationId = lens _rtaRouteTableAssociationId (\ s a -> s{_rtaRouteTableAssociationId = a});
-
--- | Indicates whether this is the main route table.
-rtaMain :: Lens' RouteTableAssociation (Maybe Bool)
-rtaMain = lens _rtaMain (\ s a -> s{_rtaMain = a});
-
--- | The ID of the subnet. A subnet ID is not returned for an implicit
--- association.
-rtaSubnetId :: Lens' RouteTableAssociation (Maybe Text)
-rtaSubnetId = lens _rtaSubnetId (\ s a -> s{_rtaSubnetId = a});
-
-instance FromXML RouteTableAssociation where
-        parseXML x
-          = RouteTableAssociation' <$>
-              (x .@? "routeTableId") <*>
-                (x .@? "routeTableAssociationId")
-                <*> (x .@? "main")
-                <*> (x .@? "subnetId")
-
--- | Describes the monitoring for the instance.
---
--- /See:/ 'runInstancesMonitoringEnabled' smart constructor.
-newtype RunInstancesMonitoringEnabled = RunInstancesMonitoringEnabled'
-    { _rimeEnabled :: Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'RunInstancesMonitoringEnabled' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rimeEnabled'
-runInstancesMonitoringEnabled
-    :: Bool -- ^ 'rimeEnabled'
-    -> RunInstancesMonitoringEnabled
-runInstancesMonitoringEnabled pEnabled_ =
-    RunInstancesMonitoringEnabled'
-    { _rimeEnabled = pEnabled_
-    }
-
--- | Indicates whether monitoring is enabled for the instance.
-rimeEnabled :: Lens' RunInstancesMonitoringEnabled Bool
-rimeEnabled = lens _rimeEnabled (\ s a -> s{_rimeEnabled = a});
-
-instance FromXML RunInstancesMonitoringEnabled where
-        parseXML x
-          = RunInstancesMonitoringEnabled' <$> (x .@ "enabled")
-
-instance ToQuery RunInstancesMonitoringEnabled where
-        toQuery RunInstancesMonitoringEnabled'{..}
-          = mconcat ["Enabled" =: _rimeEnabled]
-
--- | Describes the storage parameters for S3 and S3 buckets for an instance
--- store-backed AMI.
---
--- /See:/ 's3Storage' smart constructor.
-data S3Storage = S3Storage'
-    { _ssPrefix                :: !(Maybe Text)
-    , _ssUploadPolicy          :: !(Maybe Base64)
-    , _ssBucket                :: !(Maybe Text)
-    , _ssUploadPolicySignature :: !(Maybe Text)
-    , _ssAWSAccessKeyId        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'S3Storage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ssPrefix'
---
--- * 'ssUploadPolicy'
---
--- * 'ssBucket'
---
--- * 'ssUploadPolicySignature'
---
--- * 'ssAWSAccessKeyId'
-s3Storage
-    :: S3Storage
-s3Storage =
-    S3Storage'
-    { _ssPrefix = Nothing
-    , _ssUploadPolicy = Nothing
-    , _ssBucket = Nothing
-    , _ssUploadPolicySignature = Nothing
-    , _ssAWSAccessKeyId = Nothing
-    }
-
--- | The beginning of the file name of the AMI.
-ssPrefix :: Lens' S3Storage (Maybe Text)
-ssPrefix = lens _ssPrefix (\ s a -> s{_ssPrefix = a});
-
--- | A Base64-encoded Amazon S3 upload policy that gives Amazon EC2
--- permission to upload items into Amazon S3 on your behalf.
---
--- /Note:/ This 'Lens' automatically encodes and decodes Base64 data,
--- despite what the AWS documentation might say.
--- The underlying isomorphism will encode to Base64 representation during
--- serialisation, and decode from Base64 representation during deserialisation.
--- This 'Lens' accepts and returns only raw unencoded data.
-ssUploadPolicy :: Lens' S3Storage (Maybe ByteString)
-ssUploadPolicy = lens _ssUploadPolicy (\ s a -> s{_ssUploadPolicy = a}) . mapping _Base64;
-
--- | The bucket in which to store the AMI. You can specify a bucket that you
--- already own or a new bucket that Amazon EC2 creates on your behalf. If
--- you specify a bucket that belongs to someone else, Amazon EC2 returns an
--- error.
-ssBucket :: Lens' S3Storage (Maybe Text)
-ssBucket = lens _ssBucket (\ s a -> s{_ssBucket = a});
-
--- | The signature of the Base64 encoded JSON document.
-ssUploadPolicySignature :: Lens' S3Storage (Maybe Text)
-ssUploadPolicySignature = lens _ssUploadPolicySignature (\ s a -> s{_ssUploadPolicySignature = a});
-
--- | The access key ID of the owner of the bucket. Before you specify a value
--- for your access key ID, review and follow the guidance in
--- <http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html Best Practices for Managing AWS Access Keys>.
-ssAWSAccessKeyId :: Lens' S3Storage (Maybe Text)
-ssAWSAccessKeyId = lens _ssAWSAccessKeyId (\ s a -> s{_ssAWSAccessKeyId = a});
-
-instance FromXML S3Storage where
-        parseXML x
-          = S3Storage' <$>
-              (x .@? "prefix") <*> (x .@? "uploadPolicy") <*>
-                (x .@? "bucket")
-                <*> (x .@? "uploadPolicySignature")
-                <*> (x .@? "AWSAccessKeyId")
-
-instance ToQuery S3Storage where
-        toQuery S3Storage'{..}
-          = mconcat
-              ["Prefix" =: _ssPrefix,
-               "UploadPolicy" =: _ssUploadPolicy,
-               "Bucket" =: _ssBucket,
-               "UploadPolicySignature" =: _ssUploadPolicySignature,
-               "AWSAccessKeyId" =: _ssAWSAccessKeyId]
-
--- | Describes a security group
---
--- /See:/ 'securityGroup' smart constructor.
-data SecurityGroup = SecurityGroup'
-    { _sgVPCId               :: !(Maybe Text)
-    , _sgIPPermissions       :: !(Maybe [IPPermission])
-    , _sgIPPermissionsEgress :: !(Maybe [IPPermission])
-    , _sgTags                :: !(Maybe [Tag])
-    , _sgOwnerId             :: !Text
-    , _sgGroupId             :: !Text
-    , _sgGroupName           :: !Text
-    , _sgDescription         :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SecurityGroup' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sgVPCId'
---
--- * 'sgIPPermissions'
---
--- * 'sgIPPermissionsEgress'
---
--- * 'sgTags'
---
--- * 'sgOwnerId'
---
--- * 'sgGroupId'
---
--- * 'sgGroupName'
---
--- * 'sgDescription'
-securityGroup
-    :: Text -- ^ 'sgOwnerId'
-    -> Text -- ^ 'sgGroupId'
-    -> Text -- ^ 'sgGroupName'
-    -> Text -- ^ 'sgDescription'
-    -> SecurityGroup
-securityGroup pOwnerId_ pGroupId_ pGroupName_ pDescription_ =
-    SecurityGroup'
-    { _sgVPCId = Nothing
-    , _sgIPPermissions = Nothing
-    , _sgIPPermissionsEgress = Nothing
-    , _sgTags = Nothing
-    , _sgOwnerId = pOwnerId_
-    , _sgGroupId = pGroupId_
-    , _sgGroupName = pGroupName_
-    , _sgDescription = pDescription_
-    }
-
--- | [EC2-VPC] The ID of the VPC for the security group.
-sgVPCId :: Lens' SecurityGroup (Maybe Text)
-sgVPCId = lens _sgVPCId (\ s a -> s{_sgVPCId = a});
-
--- | One or more inbound rules associated with the security group.
-sgIPPermissions :: Lens' SecurityGroup [IPPermission]
-sgIPPermissions = lens _sgIPPermissions (\ s a -> s{_sgIPPermissions = a}) . _Default . _Coerce;
-
--- | [EC2-VPC] One or more outbound rules associated with the security group.
-sgIPPermissionsEgress :: Lens' SecurityGroup [IPPermission]
-sgIPPermissionsEgress = lens _sgIPPermissionsEgress (\ s a -> s{_sgIPPermissionsEgress = a}) . _Default . _Coerce;
-
--- | Any tags assigned to the security group.
-sgTags :: Lens' SecurityGroup [Tag]
-sgTags = lens _sgTags (\ s a -> s{_sgTags = a}) . _Default . _Coerce;
-
--- | The AWS account ID of the owner of the security group.
-sgOwnerId :: Lens' SecurityGroup Text
-sgOwnerId = lens _sgOwnerId (\ s a -> s{_sgOwnerId = a});
-
--- | The ID of the security group.
-sgGroupId :: Lens' SecurityGroup Text
-sgGroupId = lens _sgGroupId (\ s a -> s{_sgGroupId = a});
-
--- | The name of the security group.
-sgGroupName :: Lens' SecurityGroup Text
-sgGroupName = lens _sgGroupName (\ s a -> s{_sgGroupName = a});
-
--- | A description of the security group.
-sgDescription :: Lens' SecurityGroup Text
-sgDescription = lens _sgDescription (\ s a -> s{_sgDescription = a});
-
-instance FromXML SecurityGroup where
-        parseXML x
-          = SecurityGroup' <$>
-              (x .@? "vpcId") <*>
-                (x .@? "ipPermissions" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "ipPermissionsEgress" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "ownerId")
-                <*> (x .@ "groupId")
-                <*> (x .@ "groupName")
-                <*> (x .@ "groupDescription")
-
--- | Describes a snapshot.
---
--- /See:/ 'snapshot' smart constructor.
-data Snapshot = Snapshot'
-    { _sStateMessage        :: !(Maybe Text)
-    , _sOwnerAlias          :: !(Maybe Text)
-    , _sDataEncryptionKeyId :: !(Maybe Text)
-    , _sKMSKeyId            :: !(Maybe Text)
-    , _sTags                :: !(Maybe [Tag])
-    , _sSnapshotId          :: !Text
-    , _sOwnerId             :: !Text
-    , _sVolumeId            :: !Text
-    , _sVolumeSize          :: !Int
-    , _sDescription         :: !Text
-    , _sStartTime           :: !ISO8601
-    , _sProgress            :: !Text
-    , _sState               :: !SnapshotState
-    , _sEncrypted           :: !Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Snapshot' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sStateMessage'
---
--- * 'sOwnerAlias'
---
--- * 'sDataEncryptionKeyId'
---
--- * 'sKMSKeyId'
---
--- * 'sTags'
---
--- * 'sSnapshotId'
---
--- * 'sOwnerId'
---
--- * 'sVolumeId'
---
--- * 'sVolumeSize'
---
--- * 'sDescription'
---
--- * 'sStartTime'
---
--- * 'sProgress'
---
--- * 'sState'
---
--- * 'sEncrypted'
-snapshot
-    :: Text -- ^ 'sSnapshotId'
-    -> Text -- ^ 'sOwnerId'
-    -> Text -- ^ 'sVolumeId'
-    -> Int -- ^ 'sVolumeSize'
-    -> Text -- ^ 'sDescription'
-    -> UTCTime -- ^ 'sStartTime'
-    -> Text -- ^ 'sProgress'
-    -> SnapshotState -- ^ 'sState'
-    -> Bool -- ^ 'sEncrypted'
-    -> Snapshot
-snapshot pSnapshotId_ pOwnerId_ pVolumeId_ pVolumeSize_ pDescription_ pStartTime_ pProgress_ pState_ pEncrypted_ =
-    Snapshot'
-    { _sStateMessage = Nothing
-    , _sOwnerAlias = Nothing
-    , _sDataEncryptionKeyId = Nothing
-    , _sKMSKeyId = Nothing
-    , _sTags = Nothing
-    , _sSnapshotId = pSnapshotId_
-    , _sOwnerId = pOwnerId_
-    , _sVolumeId = pVolumeId_
-    , _sVolumeSize = pVolumeSize_
-    , _sDescription = pDescription_
-    , _sStartTime = _Time # pStartTime_
-    , _sProgress = pProgress_
-    , _sState = pState_
-    , _sEncrypted = pEncrypted_
-    }
-
--- | Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot
--- copy operation fails (for example, if the proper AWS Key Management
--- Service (AWS KMS) permissions are not obtained) this field displays
--- error state details to help you diagnose why the error occurred. This
--- parameter is only returned by the DescribeSnapshots API operation.
-sStateMessage :: Lens' Snapshot (Maybe Text)
-sStateMessage = lens _sStateMessage (\ s a -> s{_sStateMessage = a});
-
--- | The AWS account alias (for example, 'amazon', 'self') or AWS account ID
--- that owns the snapshot.
-sOwnerAlias :: Lens' Snapshot (Maybe Text)
-sOwnerAlias = lens _sOwnerAlias (\ s a -> s{_sOwnerAlias = a});
-
--- | The data encryption key identifier for the snapshot. This value is a
--- unique identifier that corresponds to the data encryption key that was
--- used to encrypt the original volume or snapshot copy. Because data
--- encryption keys are inherited by volumes created from snapshots, and
--- vice versa, if snapshots share the same data encryption key identifier,
--- then they belong to the same volume\/snapshot lineage. This parameter is
--- only returned by the DescribeSnapshots API operation.
-sDataEncryptionKeyId :: Lens' Snapshot (Maybe Text)
-sDataEncryptionKeyId = lens _sDataEncryptionKeyId (\ s a -> s{_sDataEncryptionKeyId = a});
-
--- | The full ARN of the AWS Key Management Service (AWS KMS) customer master
--- key (CMK) that was used to protect the volume encryption key for the
--- parent volume.
-sKMSKeyId :: Lens' Snapshot (Maybe Text)
-sKMSKeyId = lens _sKMSKeyId (\ s a -> s{_sKMSKeyId = a});
-
--- | Any tags assigned to the snapshot.
-sTags :: Lens' Snapshot [Tag]
-sTags = lens _sTags (\ s a -> s{_sTags = a}) . _Default . _Coerce;
-
--- | The ID of the snapshot. Each snapshot receives a unique identifier when
--- it is created.
-sSnapshotId :: Lens' Snapshot Text
-sSnapshotId = lens _sSnapshotId (\ s a -> s{_sSnapshotId = a});
-
--- | The AWS account ID of the EBS snapshot owner.
-sOwnerId :: Lens' Snapshot Text
-sOwnerId = lens _sOwnerId (\ s a -> s{_sOwnerId = a});
-
--- | The ID of the volume that was used to create the snapshot.
-sVolumeId :: Lens' Snapshot Text
-sVolumeId = lens _sVolumeId (\ s a -> s{_sVolumeId = a});
-
--- | The size of the volume, in GiB.
-sVolumeSize :: Lens' Snapshot Int
-sVolumeSize = lens _sVolumeSize (\ s a -> s{_sVolumeSize = a});
-
--- | The description for the snapshot.
-sDescription :: Lens' Snapshot Text
-sDescription = lens _sDescription (\ s a -> s{_sDescription = a});
-
--- | The time stamp when the snapshot was initiated.
-sStartTime :: Lens' Snapshot UTCTime
-sStartTime = lens _sStartTime (\ s a -> s{_sStartTime = a}) . _Time;
-
--- | The progress of the snapshot, as a percentage.
-sProgress :: Lens' Snapshot Text
-sProgress = lens _sProgress (\ s a -> s{_sProgress = a});
-
--- | The snapshot state.
-sState :: Lens' Snapshot SnapshotState
-sState = lens _sState (\ s a -> s{_sState = a});
-
--- | Indicates whether the snapshot is encrypted.
-sEncrypted :: Lens' Snapshot Bool
-sEncrypted = lens _sEncrypted (\ s a -> s{_sEncrypted = a});
-
-instance FromXML Snapshot where
-        parseXML x
-          = Snapshot' <$>
-              (x .@? "statusMessage") <*> (x .@? "ownerAlias") <*>
-                (x .@? "dataEncryptionKeyId")
-                <*> (x .@? "kmsKeyId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "snapshotId")
-                <*> (x .@ "ownerId")
-                <*> (x .@ "volumeId")
-                <*> (x .@ "volumeSize")
-                <*> (x .@ "description")
-                <*> (x .@ "startTime")
-                <*> (x .@ "progress")
-                <*> (x .@ "status")
-                <*> (x .@ "encrypted")
-
--- | Describes the snapshot created from the imported disk.
---
--- /See:/ 'snapshotDetail' smart constructor.
-data SnapshotDetail = SnapshotDetail'
-    { _sdStatus        :: !(Maybe Text)
-    , _sdProgress      :: !(Maybe Text)
-    , _sdFormat        :: !(Maybe Text)
-    , _sdURL           :: !(Maybe Text)
-    , _sdDeviceName    :: !(Maybe Text)
-    , _sdStatusMessage :: !(Maybe Text)
-    , _sdUserBucket    :: !(Maybe UserBucketDetails)
-    , _sdDiskImageSize :: !(Maybe Double)
-    , _sdDescription   :: !(Maybe Text)
-    , _sdSnapshotId    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SnapshotDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdStatus'
---
--- * 'sdProgress'
---
--- * 'sdFormat'
---
--- * 'sdURL'
---
--- * 'sdDeviceName'
---
--- * 'sdStatusMessage'
---
--- * 'sdUserBucket'
---
--- * 'sdDiskImageSize'
---
--- * 'sdDescription'
---
--- * 'sdSnapshotId'
-snapshotDetail
-    :: SnapshotDetail
-snapshotDetail =
-    SnapshotDetail'
-    { _sdStatus = Nothing
-    , _sdProgress = Nothing
-    , _sdFormat = Nothing
-    , _sdURL = Nothing
-    , _sdDeviceName = Nothing
-    , _sdStatusMessage = Nothing
-    , _sdUserBucket = Nothing
-    , _sdDiskImageSize = Nothing
-    , _sdDescription = Nothing
-    , _sdSnapshotId = Nothing
-    }
-
--- | A brief status of the snapshot creation.
-sdStatus :: Lens' SnapshotDetail (Maybe Text)
-sdStatus = lens _sdStatus (\ s a -> s{_sdStatus = a});
-
--- | The percentage of progress for the task.
-sdProgress :: Lens' SnapshotDetail (Maybe Text)
-sdProgress = lens _sdProgress (\ s a -> s{_sdProgress = a});
-
--- | The format of the disk image from which the snapshot is created.
-sdFormat :: Lens' SnapshotDetail (Maybe Text)
-sdFormat = lens _sdFormat (\ s a -> s{_sdFormat = a});
-
--- | The URL used to access the disk image.
-sdURL :: Lens' SnapshotDetail (Maybe Text)
-sdURL = lens _sdURL (\ s a -> s{_sdURL = a});
-
--- | The block device mapping for the snapshot.
-sdDeviceName :: Lens' SnapshotDetail (Maybe Text)
-sdDeviceName = lens _sdDeviceName (\ s a -> s{_sdDeviceName = a});
-
--- | A detailed status message for the snapshot creation.
-sdStatusMessage :: Lens' SnapshotDetail (Maybe Text)
-sdStatusMessage = lens _sdStatusMessage (\ s a -> s{_sdStatusMessage = a});
-
--- | Undocumented member.
-sdUserBucket :: Lens' SnapshotDetail (Maybe UserBucketDetails)
-sdUserBucket = lens _sdUserBucket (\ s a -> s{_sdUserBucket = a});
-
--- | The size of the disk in the snapshot, in GiB.
-sdDiskImageSize :: Lens' SnapshotDetail (Maybe Double)
-sdDiskImageSize = lens _sdDiskImageSize (\ s a -> s{_sdDiskImageSize = a});
-
--- | A description for the snapshot.
-sdDescription :: Lens' SnapshotDetail (Maybe Text)
-sdDescription = lens _sdDescription (\ s a -> s{_sdDescription = a});
-
--- | The snapshot ID of the disk being imported.
-sdSnapshotId :: Lens' SnapshotDetail (Maybe Text)
-sdSnapshotId = lens _sdSnapshotId (\ s a -> s{_sdSnapshotId = a});
-
-instance FromXML SnapshotDetail where
-        parseXML x
-          = SnapshotDetail' <$>
-              (x .@? "status") <*> (x .@? "progress") <*>
-                (x .@? "format")
-                <*> (x .@? "url")
-                <*> (x .@? "deviceName")
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "userBucket")
-                <*> (x .@? "diskImageSize")
-                <*> (x .@? "description")
-                <*> (x .@? "snapshotId")
-
--- | The disk container object for the import snapshot request.
---
--- /See:/ 'snapshotDiskContainer' smart constructor.
-data SnapshotDiskContainer = SnapshotDiskContainer'
-    { _sdcFormat      :: !(Maybe Text)
-    , _sdcURL         :: !(Maybe Text)
-    , _sdcUserBucket  :: !(Maybe UserBucket)
-    , _sdcDescription :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SnapshotDiskContainer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdcFormat'
---
--- * 'sdcURL'
---
--- * 'sdcUserBucket'
---
--- * 'sdcDescription'
-snapshotDiskContainer
-    :: SnapshotDiskContainer
-snapshotDiskContainer =
-    SnapshotDiskContainer'
-    { _sdcFormat = Nothing
-    , _sdcURL = Nothing
-    , _sdcUserBucket = Nothing
-    , _sdcDescription = Nothing
-    }
-
--- | The format of the disk image being imported.
---
--- Valid values: 'RAW' | 'VHD' | 'VMDK' | 'OVA'
-sdcFormat :: Lens' SnapshotDiskContainer (Maybe Text)
-sdcFormat = lens _sdcFormat (\ s a -> s{_sdcFormat = a});
-
--- | The URL to the Amazon S3-based disk image being imported. It can either
--- be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..).
-sdcURL :: Lens' SnapshotDiskContainer (Maybe Text)
-sdcURL = lens _sdcURL (\ s a -> s{_sdcURL = a});
-
--- | Undocumented member.
-sdcUserBucket :: Lens' SnapshotDiskContainer (Maybe UserBucket)
-sdcUserBucket = lens _sdcUserBucket (\ s a -> s{_sdcUserBucket = a});
-
--- | The description of the disk image being imported.
-sdcDescription :: Lens' SnapshotDiskContainer (Maybe Text)
-sdcDescription = lens _sdcDescription (\ s a -> s{_sdcDescription = a});
-
-instance ToQuery SnapshotDiskContainer where
-        toQuery SnapshotDiskContainer'{..}
-          = mconcat
-              ["Format" =: _sdcFormat, "Url" =: _sdcURL,
-               "UserBucket" =: _sdcUserBucket,
-               "Description" =: _sdcDescription]
-
--- | Details about the import snapshot task.
---
--- /See:/ 'snapshotTaskDetail' smart constructor.
-data SnapshotTaskDetail = SnapshotTaskDetail'
-    { _stdStatus        :: !(Maybe Text)
-    , _stdProgress      :: !(Maybe Text)
-    , _stdFormat        :: !(Maybe Text)
-    , _stdURL           :: !(Maybe Text)
-    , _stdStatusMessage :: !(Maybe Text)
-    , _stdUserBucket    :: !(Maybe UserBucketDetails)
-    , _stdDiskImageSize :: !(Maybe Double)
-    , _stdDescription   :: !(Maybe Text)
-    , _stdSnapshotId    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SnapshotTaskDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'stdStatus'
---
--- * 'stdProgress'
---
--- * 'stdFormat'
---
--- * 'stdURL'
---
--- * 'stdStatusMessage'
---
--- * 'stdUserBucket'
---
--- * 'stdDiskImageSize'
---
--- * 'stdDescription'
---
--- * 'stdSnapshotId'
-snapshotTaskDetail
-    :: SnapshotTaskDetail
-snapshotTaskDetail =
-    SnapshotTaskDetail'
-    { _stdStatus = Nothing
-    , _stdProgress = Nothing
-    , _stdFormat = Nothing
-    , _stdURL = Nothing
-    , _stdStatusMessage = Nothing
-    , _stdUserBucket = Nothing
-    , _stdDiskImageSize = Nothing
-    , _stdDescription = Nothing
-    , _stdSnapshotId = Nothing
-    }
-
--- | A brief status for the import snapshot task.
-stdStatus :: Lens' SnapshotTaskDetail (Maybe Text)
-stdStatus = lens _stdStatus (\ s a -> s{_stdStatus = a});
-
--- | The percentage of completion for the import snapshot task.
-stdProgress :: Lens' SnapshotTaskDetail (Maybe Text)
-stdProgress = lens _stdProgress (\ s a -> s{_stdProgress = a});
-
--- | The format of the disk image from which the snapshot is created.
-stdFormat :: Lens' SnapshotTaskDetail (Maybe Text)
-stdFormat = lens _stdFormat (\ s a -> s{_stdFormat = a});
-
--- | The URL of the disk image from which the snapshot is created.
-stdURL :: Lens' SnapshotTaskDetail (Maybe Text)
-stdURL = lens _stdURL (\ s a -> s{_stdURL = a});
-
--- | A detailed status message for the import snapshot task.
-stdStatusMessage :: Lens' SnapshotTaskDetail (Maybe Text)
-stdStatusMessage = lens _stdStatusMessage (\ s a -> s{_stdStatusMessage = a});
-
--- | The S3 bucket for the disk image.
-stdUserBucket :: Lens' SnapshotTaskDetail (Maybe UserBucketDetails)
-stdUserBucket = lens _stdUserBucket (\ s a -> s{_stdUserBucket = a});
-
--- | The size of the disk in the snapshot, in GiB.
-stdDiskImageSize :: Lens' SnapshotTaskDetail (Maybe Double)
-stdDiskImageSize = lens _stdDiskImageSize (\ s a -> s{_stdDiskImageSize = a});
-
--- | The description of the snapshot.
-stdDescription :: Lens' SnapshotTaskDetail (Maybe Text)
-stdDescription = lens _stdDescription (\ s a -> s{_stdDescription = a});
-
--- | The snapshot ID of the disk being imported.
-stdSnapshotId :: Lens' SnapshotTaskDetail (Maybe Text)
-stdSnapshotId = lens _stdSnapshotId (\ s a -> s{_stdSnapshotId = a});
-
-instance FromXML SnapshotTaskDetail where
-        parseXML x
-          = SnapshotTaskDetail' <$>
-              (x .@? "status") <*> (x .@? "progress") <*>
-                (x .@? "format")
-                <*> (x .@? "url")
-                <*> (x .@? "statusMessage")
-                <*> (x .@? "userBucket")
-                <*> (x .@? "diskImageSize")
-                <*> (x .@? "description")
-                <*> (x .@? "snapshotId")
-
--- | Describes the data feed for a Spot instance.
---
--- /See:/ 'spotDatafeedSubscription' smart constructor.
-data SpotDatafeedSubscription = SpotDatafeedSubscription'
-    { _sdsState   :: !(Maybe DatafeedSubscriptionState)
-    , _sdsPrefix  :: !(Maybe Text)
-    , _sdsBucket  :: !(Maybe Text)
-    , _sdsOwnerId :: !(Maybe Text)
-    , _sdsFault   :: !(Maybe SpotInstanceStateFault)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotDatafeedSubscription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdsState'
---
--- * 'sdsPrefix'
---
--- * 'sdsBucket'
---
--- * 'sdsOwnerId'
---
--- * 'sdsFault'
-spotDatafeedSubscription
-    :: SpotDatafeedSubscription
-spotDatafeedSubscription =
-    SpotDatafeedSubscription'
-    { _sdsState = Nothing
-    , _sdsPrefix = Nothing
-    , _sdsBucket = Nothing
-    , _sdsOwnerId = Nothing
-    , _sdsFault = Nothing
-    }
-
--- | The state of the Spot instance data feed subscription.
-sdsState :: Lens' SpotDatafeedSubscription (Maybe DatafeedSubscriptionState)
-sdsState = lens _sdsState (\ s a -> s{_sdsState = a});
-
--- | The prefix that is prepended to data feed files.
-sdsPrefix :: Lens' SpotDatafeedSubscription (Maybe Text)
-sdsPrefix = lens _sdsPrefix (\ s a -> s{_sdsPrefix = a});
-
--- | The Amazon S3 bucket where the Spot instance data feed is located.
-sdsBucket :: Lens' SpotDatafeedSubscription (Maybe Text)
-sdsBucket = lens _sdsBucket (\ s a -> s{_sdsBucket = a});
-
--- | The AWS account ID of the account.
-sdsOwnerId :: Lens' SpotDatafeedSubscription (Maybe Text)
-sdsOwnerId = lens _sdsOwnerId (\ s a -> s{_sdsOwnerId = a});
-
--- | The fault codes for the Spot instance request, if any.
-sdsFault :: Lens' SpotDatafeedSubscription (Maybe SpotInstanceStateFault)
-sdsFault = lens _sdsFault (\ s a -> s{_sdsFault = a});
-
-instance FromXML SpotDatafeedSubscription where
-        parseXML x
-          = SpotDatafeedSubscription' <$>
-              (x .@? "state") <*> (x .@? "prefix") <*>
-                (x .@? "bucket")
-                <*> (x .@? "ownerId")
-                <*> (x .@? "fault")
-
--- | Describes the launch specification for one or more Spot instances.
---
--- /See:/ 'spotFleetLaunchSpecification' smart constructor.
-data SpotFleetLaunchSpecification = SpotFleetLaunchSpecification'
-    { _sflsSecurityGroups      :: !(Maybe [GroupIdentifier])
-    , _sflsSpotPrice           :: !(Maybe Text)
-    , _sflsWeightedCapacity    :: !(Maybe Double)
-    , _sflsKeyName             :: !(Maybe Text)
-    , _sflsNetworkInterfaces   :: !(Maybe [InstanceNetworkInterfaceSpecification])
-    , _sflsRAMDiskId           :: !(Maybe Text)
-    , _sflsSubnetId            :: !(Maybe Text)
-    , _sflsKernelId            :: !(Maybe Text)
-    , _sflsInstanceType        :: !(Maybe InstanceType)
-    , _sflsEBSOptimized        :: !(Maybe Bool)
-    , _sflsUserData            :: !(Maybe Text)
-    , _sflsMonitoring          :: !(Maybe SpotFleetMonitoring)
-    , _sflsIAMInstanceProfile  :: !(Maybe IAMInstanceProfileSpecification)
-    , _sflsImageId             :: !(Maybe Text)
-    , _sflsAddressingType      :: !(Maybe Text)
-    , _sflsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
-    , _sflsPlacement           :: !(Maybe SpotPlacement)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotFleetLaunchSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sflsSecurityGroups'
---
--- * 'sflsSpotPrice'
---
--- * 'sflsWeightedCapacity'
---
--- * 'sflsKeyName'
---
--- * 'sflsNetworkInterfaces'
---
--- * 'sflsRAMDiskId'
---
--- * 'sflsSubnetId'
---
--- * 'sflsKernelId'
---
--- * 'sflsInstanceType'
---
--- * 'sflsEBSOptimized'
---
--- * 'sflsUserData'
---
--- * 'sflsMonitoring'
---
--- * 'sflsIAMInstanceProfile'
---
--- * 'sflsImageId'
---
--- * 'sflsAddressingType'
---
--- * 'sflsBlockDeviceMappings'
---
--- * 'sflsPlacement'
-spotFleetLaunchSpecification
-    :: SpotFleetLaunchSpecification
-spotFleetLaunchSpecification =
-    SpotFleetLaunchSpecification'
-    { _sflsSecurityGroups = Nothing
-    , _sflsSpotPrice = Nothing
-    , _sflsWeightedCapacity = Nothing
-    , _sflsKeyName = Nothing
-    , _sflsNetworkInterfaces = Nothing
-    , _sflsRAMDiskId = Nothing
-    , _sflsSubnetId = Nothing
-    , _sflsKernelId = Nothing
-    , _sflsInstanceType = Nothing
-    , _sflsEBSOptimized = Nothing
-    , _sflsUserData = Nothing
-    , _sflsMonitoring = Nothing
-    , _sflsIAMInstanceProfile = Nothing
-    , _sflsImageId = Nothing
-    , _sflsAddressingType = Nothing
-    , _sflsBlockDeviceMappings = Nothing
-    , _sflsPlacement = Nothing
-    }
-
--- | One or more security groups. When requesting instances in a VPC, you
--- must specify the IDs of the security groups. When requesting instances
--- in EC2-Classic, you can specify the names or the IDs of the security
--- groups.
-sflsSecurityGroups :: Lens' SpotFleetLaunchSpecification [GroupIdentifier]
-sflsSecurityGroups = lens _sflsSecurityGroups (\ s a -> s{_sflsSecurityGroups = a}) . _Default . _Coerce;
-
--- | The bid price per unit hour for the specified instance type. If this
--- value is not specified, the default is the Spot bid price specified for
--- the fleet. To determine the bid price per unit hour, divide the Spot bid
--- price by the value of 'WeightedCapacity'.
-sflsSpotPrice :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsSpotPrice = lens _sflsSpotPrice (\ s a -> s{_sflsSpotPrice = a});
-
--- | The number of units provided by the specified instance type. These are
--- the same units that you chose to set the target capacity in terms
--- (instances or a performance characteristic such as vCPUs, memory, or
--- I\/O).
---
--- If the target capacity divided by this value is not a whole number, we
--- round the number of instances to the next whole number. If this value is
--- not specified, the default is 1.
-sflsWeightedCapacity :: Lens' SpotFleetLaunchSpecification (Maybe Double)
-sflsWeightedCapacity = lens _sflsWeightedCapacity (\ s a -> s{_sflsWeightedCapacity = a});
-
--- | The name of the key pair.
-sflsKeyName :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsKeyName = lens _sflsKeyName (\ s a -> s{_sflsKeyName = a});
-
--- | One or more network interfaces.
-sflsNetworkInterfaces :: Lens' SpotFleetLaunchSpecification [InstanceNetworkInterfaceSpecification]
-sflsNetworkInterfaces = lens _sflsNetworkInterfaces (\ s a -> s{_sflsNetworkInterfaces = a}) . _Default . _Coerce;
-
--- | The ID of the RAM disk.
-sflsRAMDiskId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsRAMDiskId = lens _sflsRAMDiskId (\ s a -> s{_sflsRAMDiskId = a});
-
--- | The ID of the subnet in which to launch the instances. To specify
--- multiple subnets, separate them using commas; for example,
--- \"subnet-a61dafcf, subnet-65ea5f08\".
-sflsSubnetId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsSubnetId = lens _sflsSubnetId (\ s a -> s{_sflsSubnetId = a});
-
--- | The ID of the kernel.
-sflsKernelId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsKernelId = lens _sflsKernelId (\ s a -> s{_sflsKernelId = a});
-
--- | The instance type.
-sflsInstanceType :: Lens' SpotFleetLaunchSpecification (Maybe InstanceType)
-sflsInstanceType = lens _sflsInstanceType (\ s a -> s{_sflsInstanceType = a});
-
--- | Indicates whether the instances are optimized for EBS I\/O. This
--- optimization provides dedicated throughput to Amazon EBS and an
--- optimized configuration stack to provide optimal EBS I\/O performance.
--- This optimization isn\'t available with all instance types. Additional
--- usage charges apply when using an EBS Optimized instance.
---
--- Default: 'false'
-sflsEBSOptimized :: Lens' SpotFleetLaunchSpecification (Maybe Bool)
-sflsEBSOptimized = lens _sflsEBSOptimized (\ s a -> s{_sflsEBSOptimized = a});
-
--- | The Base64-encoded MIME user data to make available to the instances.
-sflsUserData :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsUserData = lens _sflsUserData (\ s a -> s{_sflsUserData = a});
-
--- | Enable or disable monitoring for the instances.
-sflsMonitoring :: Lens' SpotFleetLaunchSpecification (Maybe SpotFleetMonitoring)
-sflsMonitoring = lens _sflsMonitoring (\ s a -> s{_sflsMonitoring = a});
-
--- | The IAM instance profile.
-sflsIAMInstanceProfile :: Lens' SpotFleetLaunchSpecification (Maybe IAMInstanceProfileSpecification)
-sflsIAMInstanceProfile = lens _sflsIAMInstanceProfile (\ s a -> s{_sflsIAMInstanceProfile = a});
-
--- | The ID of the AMI.
-sflsImageId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsImageId = lens _sflsImageId (\ s a -> s{_sflsImageId = a});
-
--- | Deprecated.
-sflsAddressingType :: Lens' SpotFleetLaunchSpecification (Maybe Text)
-sflsAddressingType = lens _sflsAddressingType (\ s a -> s{_sflsAddressingType = a});
-
--- | One or more block device mapping entries.
-sflsBlockDeviceMappings :: Lens' SpotFleetLaunchSpecification [BlockDeviceMapping]
-sflsBlockDeviceMappings = lens _sflsBlockDeviceMappings (\ s a -> s{_sflsBlockDeviceMappings = a}) . _Default . _Coerce;
-
--- | The placement information.
-sflsPlacement :: Lens' SpotFleetLaunchSpecification (Maybe SpotPlacement)
-sflsPlacement = lens _sflsPlacement (\ s a -> s{_sflsPlacement = a});
-
-instance FromXML SpotFleetLaunchSpecification where
-        parseXML x
-          = SpotFleetLaunchSpecification' <$>
-              (x .@? "groupSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "spotPrice")
-                <*> (x .@? "weightedCapacity")
-                <*> (x .@? "keyName")
-                <*>
-                (x .@? "networkInterfaceSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "ramdiskId")
-                <*> (x .@? "subnetId")
-                <*> (x .@? "kernelId")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "ebsOptimized")
-                <*> (x .@? "userData")
-                <*> (x .@? "monitoring")
-                <*> (x .@? "iamInstanceProfile")
-                <*> (x .@? "imageId")
-                <*> (x .@? "addressingType")
-                <*>
-                (x .@? "blockDeviceMapping" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "placement")
-
-instance ToQuery SpotFleetLaunchSpecification where
-        toQuery SpotFleetLaunchSpecification'{..}
-          = mconcat
-              [toQuery
-                 (toQueryList "GroupSet" <$> _sflsSecurityGroups),
-               "SpotPrice" =: _sflsSpotPrice,
-               "WeightedCapacity" =: _sflsWeightedCapacity,
-               "KeyName" =: _sflsKeyName,
-               toQuery
-                 (toQueryList "NetworkInterfaceSet" <$>
-                    _sflsNetworkInterfaces),
-               "RamdiskId" =: _sflsRAMDiskId,
-               "SubnetId" =: _sflsSubnetId,
-               "KernelId" =: _sflsKernelId,
-               "InstanceType" =: _sflsInstanceType,
-               "EbsOptimized" =: _sflsEBSOptimized,
-               "UserData" =: _sflsUserData,
-               "Monitoring" =: _sflsMonitoring,
-               "IamInstanceProfile" =: _sflsIAMInstanceProfile,
-               "ImageId" =: _sflsImageId,
-               "AddressingType" =: _sflsAddressingType,
-               toQuery
-                 (toQueryList "BlockDeviceMapping" <$>
-                    _sflsBlockDeviceMappings),
-               "Placement" =: _sflsPlacement]
-
--- | Describes whether monitoring is enabled.
---
--- /See:/ 'spotFleetMonitoring' smart constructor.
-newtype SpotFleetMonitoring = SpotFleetMonitoring'
-    { _sfmEnabled :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotFleetMonitoring' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfmEnabled'
-spotFleetMonitoring
-    :: SpotFleetMonitoring
-spotFleetMonitoring =
-    SpotFleetMonitoring'
-    { _sfmEnabled = Nothing
-    }
-
--- | Enables monitoring for the instance.
---
--- Default: 'false'
-sfmEnabled :: Lens' SpotFleetMonitoring (Maybe Bool)
-sfmEnabled = lens _sfmEnabled (\ s a -> s{_sfmEnabled = a});
-
-instance FromXML SpotFleetMonitoring where
-        parseXML x
-          = SpotFleetMonitoring' <$> (x .@? "enabled")
-
-instance ToQuery SpotFleetMonitoring where
-        toQuery SpotFleetMonitoring'{..}
-          = mconcat ["Enabled" =: _sfmEnabled]
-
--- | Describes a Spot fleet request.
---
--- /See:/ 'spotFleetRequestConfig' smart constructor.
-data SpotFleetRequestConfig = SpotFleetRequestConfig'
-    { _sfrcSpotFleetRequestId     :: !Text
-    , _sfrcSpotFleetRequestState  :: !BatchState
-    , _sfrcSpotFleetRequestConfig :: !SpotFleetRequestConfigData
-    , _sfrcCreateTime             :: !ISO8601
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotFleetRequestConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfrcSpotFleetRequestId'
---
--- * 'sfrcSpotFleetRequestState'
---
--- * 'sfrcSpotFleetRequestConfig'
---
--- * 'sfrcCreateTime'
-spotFleetRequestConfig
-    :: Text -- ^ 'sfrcSpotFleetRequestId'
-    -> BatchState -- ^ 'sfrcSpotFleetRequestState'
-    -> SpotFleetRequestConfigData -- ^ 'sfrcSpotFleetRequestConfig'
-    -> UTCTime -- ^ 'sfrcCreateTime'
-    -> SpotFleetRequestConfig
-spotFleetRequestConfig pSpotFleetRequestId_ pSpotFleetRequestState_ pSpotFleetRequestConfig_ pCreateTime_ =
-    SpotFleetRequestConfig'
-    { _sfrcSpotFleetRequestId = pSpotFleetRequestId_
-    , _sfrcSpotFleetRequestState = pSpotFleetRequestState_
-    , _sfrcSpotFleetRequestConfig = pSpotFleetRequestConfig_
-    , _sfrcCreateTime = _Time # pCreateTime_
-    }
-
--- | The ID of the Spot fleet request.
-sfrcSpotFleetRequestId :: Lens' SpotFleetRequestConfig Text
-sfrcSpotFleetRequestId = lens _sfrcSpotFleetRequestId (\ s a -> s{_sfrcSpotFleetRequestId = a});
-
--- | The state of the Spot fleet request.
-sfrcSpotFleetRequestState :: Lens' SpotFleetRequestConfig BatchState
-sfrcSpotFleetRequestState = lens _sfrcSpotFleetRequestState (\ s a -> s{_sfrcSpotFleetRequestState = a});
-
--- | Information about the configuration of the Spot fleet request.
-sfrcSpotFleetRequestConfig :: Lens' SpotFleetRequestConfig SpotFleetRequestConfigData
-sfrcSpotFleetRequestConfig = lens _sfrcSpotFleetRequestConfig (\ s a -> s{_sfrcSpotFleetRequestConfig = a});
-
--- | The creation date and time of the request.
-sfrcCreateTime :: Lens' SpotFleetRequestConfig UTCTime
-sfrcCreateTime = lens _sfrcCreateTime (\ s a -> s{_sfrcCreateTime = a}) . _Time;
-
-instance FromXML SpotFleetRequestConfig where
-        parseXML x
-          = SpotFleetRequestConfig' <$>
-              (x .@ "spotFleetRequestId") <*>
-                (x .@ "spotFleetRequestState")
-                <*> (x .@ "spotFleetRequestConfig")
-                <*> (x .@ "createTime")
-
--- | Describes the configuration of a Spot fleet request.
---
--- /See:/ 'spotFleetRequestConfigData' smart constructor.
-data SpotFleetRequestConfigData = SpotFleetRequestConfigData'
-    { _sfrcdClientToken                      :: !(Maybe Text)
-    , _sfrcdExcessCapacityTerminationPolicy  :: !(Maybe ExcessCapacityTerminationPolicy)
-    , _sfrcdValidUntil                       :: !(Maybe ISO8601)
-    , _sfrcdTerminateInstancesWithExpiration :: !(Maybe Bool)
-    , _sfrcdValidFrom                        :: !(Maybe ISO8601)
-    , _sfrcdAllocationStrategy               :: !(Maybe AllocationStrategy)
-    , _sfrcdSpotPrice                        :: !Text
-    , _sfrcdTargetCapacity                   :: !Int
-    , _sfrcdIAMFleetRole                     :: !Text
-    , _sfrcdLaunchSpecifications             :: !(List1 SpotFleetLaunchSpecification)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotFleetRequestConfigData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfrcdClientToken'
---
--- * 'sfrcdExcessCapacityTerminationPolicy'
---
--- * 'sfrcdValidUntil'
---
--- * 'sfrcdTerminateInstancesWithExpiration'
---
--- * 'sfrcdValidFrom'
---
--- * 'sfrcdAllocationStrategy'
---
--- * 'sfrcdSpotPrice'
---
--- * 'sfrcdTargetCapacity'
---
--- * 'sfrcdIAMFleetRole'
---
--- * 'sfrcdLaunchSpecifications'
-spotFleetRequestConfigData
-    :: Text -- ^ 'sfrcdSpotPrice'
-    -> Int -- ^ 'sfrcdTargetCapacity'
-    -> Text -- ^ 'sfrcdIAMFleetRole'
-    -> NonEmpty SpotFleetLaunchSpecification -- ^ 'sfrcdLaunchSpecifications'
-    -> SpotFleetRequestConfigData
-spotFleetRequestConfigData pSpotPrice_ pTargetCapacity_ pIAMFleetRole_ pLaunchSpecifications_ =
-    SpotFleetRequestConfigData'
-    { _sfrcdClientToken = Nothing
-    , _sfrcdExcessCapacityTerminationPolicy = Nothing
-    , _sfrcdValidUntil = Nothing
-    , _sfrcdTerminateInstancesWithExpiration = Nothing
-    , _sfrcdValidFrom = Nothing
-    , _sfrcdAllocationStrategy = Nothing
-    , _sfrcdSpotPrice = pSpotPrice_
-    , _sfrcdTargetCapacity = pTargetCapacity_
-    , _sfrcdIAMFleetRole = pIAMFleetRole_
-    , _sfrcdLaunchSpecifications = _List1 # pLaunchSpecifications_
-    }
-
--- | A unique, case-sensitive identifier you provide to ensure idempotency of
--- your listings. This helps avoid duplicate listings. For more
--- information, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
-sfrcdClientToken :: Lens' SpotFleetRequestConfigData (Maybe Text)
-sfrcdClientToken = lens _sfrcdClientToken (\ s a -> s{_sfrcdClientToken = a});
-
--- | Indicates whether running Spot instances should be terminated if the
--- target capacity of the Spot fleet request is decreased below the current
--- size of the Spot fleet.
-sfrcdExcessCapacityTerminationPolicy :: Lens' SpotFleetRequestConfigData (Maybe ExcessCapacityTerminationPolicy)
-sfrcdExcessCapacityTerminationPolicy = lens _sfrcdExcessCapacityTerminationPolicy (\ s a -> s{_sfrcdExcessCapacityTerminationPolicy = a});
-
--- | The end date and time of the request, in UTC format (for example,
--- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). At this point, no new Spot instance
--- requests are placed or enabled to fulfill the request.
-sfrcdValidUntil :: Lens' SpotFleetRequestConfigData (Maybe UTCTime)
-sfrcdValidUntil = lens _sfrcdValidUntil (\ s a -> s{_sfrcdValidUntil = a}) . mapping _Time;
-
--- | Indicates whether running Spot instances should be terminated when the
--- Spot fleet request expires.
-sfrcdTerminateInstancesWithExpiration :: Lens' SpotFleetRequestConfigData (Maybe Bool)
-sfrcdTerminateInstancesWithExpiration = lens _sfrcdTerminateInstancesWithExpiration (\ s a -> s{_sfrcdTerminateInstancesWithExpiration = a});
-
--- | The start date and time of the request, in UTC format (for example,
--- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The default is to start fulfilling
--- the request immediately.
-sfrcdValidFrom :: Lens' SpotFleetRequestConfigData (Maybe UTCTime)
-sfrcdValidFrom = lens _sfrcdValidFrom (\ s a -> s{_sfrcdValidFrom = a}) . mapping _Time;
-
--- | Indicates how to allocate the target capacity across the Spot pools
--- specified by the Spot fleet request. The default is 'lowestPrice'.
-sfrcdAllocationStrategy :: Lens' SpotFleetRequestConfigData (Maybe AllocationStrategy)
-sfrcdAllocationStrategy = lens _sfrcdAllocationStrategy (\ s a -> s{_sfrcdAllocationStrategy = a});
-
--- | The bid price per unit hour.
-sfrcdSpotPrice :: Lens' SpotFleetRequestConfigData Text
-sfrcdSpotPrice = lens _sfrcdSpotPrice (\ s a -> s{_sfrcdSpotPrice = a});
-
--- | The number of units to request. You can choose to set the target
--- capacity in terms of instances or a performance characteristic that is
--- important to your application workload, such as vCPUs, memory, or I\/O.
-sfrcdTargetCapacity :: Lens' SpotFleetRequestConfigData Int
-sfrcdTargetCapacity = lens _sfrcdTargetCapacity (\ s a -> s{_sfrcdTargetCapacity = a});
-
--- | Grants the Spot fleet permission to terminate Spot instances on your
--- behalf when you cancel its Spot fleet request using
--- CancelSpotFleetRequests or when the Spot fleet request expires, if you
--- set 'terminateInstancesWithExpiration'.
-sfrcdIAMFleetRole :: Lens' SpotFleetRequestConfigData Text
-sfrcdIAMFleetRole = lens _sfrcdIAMFleetRole (\ s a -> s{_sfrcdIAMFleetRole = a});
-
--- | Information about the launch specifications for the Spot fleet request.
-sfrcdLaunchSpecifications :: Lens' SpotFleetRequestConfigData (NonEmpty SpotFleetLaunchSpecification)
-sfrcdLaunchSpecifications = lens _sfrcdLaunchSpecifications (\ s a -> s{_sfrcdLaunchSpecifications = a}) . _List1;
-
-instance FromXML SpotFleetRequestConfigData where
-        parseXML x
-          = SpotFleetRequestConfigData' <$>
-              (x .@? "clientToken") <*>
-                (x .@? "excessCapacityTerminationPolicy")
-                <*> (x .@? "validUntil")
-                <*> (x .@? "terminateInstancesWithExpiration")
-                <*> (x .@? "validFrom")
-                <*> (x .@? "allocationStrategy")
-                <*> (x .@ "spotPrice")
-                <*> (x .@ "targetCapacity")
-                <*> (x .@ "iamFleetRole")
-                <*>
-                (x .@? "launchSpecifications" .!@ mempty >>=
-                   parseXMLList1 "item")
-
-instance ToQuery SpotFleetRequestConfigData where
-        toQuery SpotFleetRequestConfigData'{..}
-          = mconcat
-              ["ClientToken" =: _sfrcdClientToken,
-               "ExcessCapacityTerminationPolicy" =:
-                 _sfrcdExcessCapacityTerminationPolicy,
-               "ValidUntil" =: _sfrcdValidUntil,
-               "TerminateInstancesWithExpiration" =:
-                 _sfrcdTerminateInstancesWithExpiration,
-               "ValidFrom" =: _sfrcdValidFrom,
-               "AllocationStrategy" =: _sfrcdAllocationStrategy,
-               "SpotPrice" =: _sfrcdSpotPrice,
-               "TargetCapacity" =: _sfrcdTargetCapacity,
-               "IamFleetRole" =: _sfrcdIAMFleetRole,
-               toQueryList "LaunchSpecifications"
-                 _sfrcdLaunchSpecifications]
-
--- | Describes a Spot instance request.
---
--- /See:/ 'spotInstanceRequest' smart constructor.
-data SpotInstanceRequest = SpotInstanceRequest'
-    { _sirInstanceId               :: !(Maybe Text)
-    , _sirStatus                   :: !(Maybe SpotInstanceStatus)
-    , _sirState                    :: !(Maybe SpotInstanceState)
-    , _sirActualBlockHourlyPrice   :: !(Maybe Text)
-    , _sirBlockDurationMinutes     :: !(Maybe Int)
-    , _sirProductDescription       :: !(Maybe RIProductDescription)
-    , _sirSpotPrice                :: !(Maybe Text)
-    , _sirLaunchSpecification      :: !(Maybe LaunchSpecification)
-    , _sirAvailabilityZoneGroup    :: !(Maybe Text)
-    , _sirLaunchedAvailabilityZone :: !(Maybe Text)
-    , _sirValidUntil               :: !(Maybe ISO8601)
-    , _sirLaunchGroup              :: !(Maybe Text)
-    , _sirFault                    :: !(Maybe SpotInstanceStateFault)
-    , _sirSpotInstanceRequestId    :: !(Maybe Text)
-    , _sirType                     :: !(Maybe SpotInstanceType)
-    , _sirValidFrom                :: !(Maybe ISO8601)
-    , _sirCreateTime               :: !(Maybe ISO8601)
-    , _sirTags                     :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotInstanceRequest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sirInstanceId'
---
--- * 'sirStatus'
---
--- * 'sirState'
---
--- * 'sirActualBlockHourlyPrice'
---
--- * 'sirBlockDurationMinutes'
---
--- * 'sirProductDescription'
---
--- * 'sirSpotPrice'
---
--- * 'sirLaunchSpecification'
---
--- * 'sirAvailabilityZoneGroup'
---
--- * 'sirLaunchedAvailabilityZone'
---
--- * 'sirValidUntil'
---
--- * 'sirLaunchGroup'
---
--- * 'sirFault'
---
--- * 'sirSpotInstanceRequestId'
---
--- * 'sirType'
---
--- * 'sirValidFrom'
---
--- * 'sirCreateTime'
---
--- * 'sirTags'
-spotInstanceRequest
-    :: SpotInstanceRequest
-spotInstanceRequest =
-    SpotInstanceRequest'
-    { _sirInstanceId = Nothing
-    , _sirStatus = Nothing
-    , _sirState = Nothing
-    , _sirActualBlockHourlyPrice = Nothing
-    , _sirBlockDurationMinutes = Nothing
-    , _sirProductDescription = Nothing
-    , _sirSpotPrice = Nothing
-    , _sirLaunchSpecification = Nothing
-    , _sirAvailabilityZoneGroup = Nothing
-    , _sirLaunchedAvailabilityZone = Nothing
-    , _sirValidUntil = Nothing
-    , _sirLaunchGroup = Nothing
-    , _sirFault = Nothing
-    , _sirSpotInstanceRequestId = Nothing
-    , _sirType = Nothing
-    , _sirValidFrom = Nothing
-    , _sirCreateTime = Nothing
-    , _sirTags = Nothing
-    }
-
--- | The instance ID, if an instance has been launched to fulfill the Spot
--- instance request.
-sirInstanceId :: Lens' SpotInstanceRequest (Maybe Text)
-sirInstanceId = lens _sirInstanceId (\ s a -> s{_sirInstanceId = a});
-
--- | The status code and status message describing the Spot instance request.
-sirStatus :: Lens' SpotInstanceRequest (Maybe SpotInstanceStatus)
-sirStatus = lens _sirStatus (\ s a -> s{_sirStatus = a});
-
--- | The state of the Spot instance request. Spot bid status information can
--- help you track your Spot instance requests. For more information, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html Spot Bid Status>
--- in the /Amazon Elastic Compute Cloud User Guide/.
-sirState :: Lens' SpotInstanceRequest (Maybe SpotInstanceState)
-sirState = lens _sirState (\ s a -> s{_sirState = a});
-
--- | If you specified a duration and your Spot instance request was
--- fulfilled, this is the fixed hourly price in effect for the Spot
--- instance while it runs.
-sirActualBlockHourlyPrice :: Lens' SpotInstanceRequest (Maybe Text)
-sirActualBlockHourlyPrice = lens _sirActualBlockHourlyPrice (\ s a -> s{_sirActualBlockHourlyPrice = a});
-
--- | The duration for the Spot instance, in minutes.
-sirBlockDurationMinutes :: Lens' SpotInstanceRequest (Maybe Int)
-sirBlockDurationMinutes = lens _sirBlockDurationMinutes (\ s a -> s{_sirBlockDurationMinutes = a});
-
--- | The product description associated with the Spot instance.
-sirProductDescription :: Lens' SpotInstanceRequest (Maybe RIProductDescription)
-sirProductDescription = lens _sirProductDescription (\ s a -> s{_sirProductDescription = a});
-
--- | The maximum hourly price (bid) for the Spot instance launched to fulfill
--- the request.
-sirSpotPrice :: Lens' SpotInstanceRequest (Maybe Text)
-sirSpotPrice = lens _sirSpotPrice (\ s a -> s{_sirSpotPrice = a});
-
--- | Additional information for launching instances.
-sirLaunchSpecification :: Lens' SpotInstanceRequest (Maybe LaunchSpecification)
-sirLaunchSpecification = lens _sirLaunchSpecification (\ s a -> s{_sirLaunchSpecification = a});
-
--- | The Availability Zone group. If you specify the same Availability Zone
--- group for all Spot instance requests, all Spot instances are launched in
--- the same Availability Zone.
-sirAvailabilityZoneGroup :: Lens' SpotInstanceRequest (Maybe Text)
-sirAvailabilityZoneGroup = lens _sirAvailabilityZoneGroup (\ s a -> s{_sirAvailabilityZoneGroup = a});
-
--- | The Availability Zone in which the bid is launched.
-sirLaunchedAvailabilityZone :: Lens' SpotInstanceRequest (Maybe Text)
-sirLaunchedAvailabilityZone = lens _sirLaunchedAvailabilityZone (\ s a -> s{_sirLaunchedAvailabilityZone = a});
-
--- | The end date of the request, in UTC format (for example,
--- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). If this is a one-time request, it
--- remains active until all instances launch, the request is canceled, or
--- this date is reached. If the request is persistent, it remains active
--- until it is canceled or this date is reached.
-sirValidUntil :: Lens' SpotInstanceRequest (Maybe UTCTime)
-sirValidUntil = lens _sirValidUntil (\ s a -> s{_sirValidUntil = a}) . mapping _Time;
-
--- | The instance launch group. Launch groups are Spot instances that launch
--- together and terminate together.
-sirLaunchGroup :: Lens' SpotInstanceRequest (Maybe Text)
-sirLaunchGroup = lens _sirLaunchGroup (\ s a -> s{_sirLaunchGroup = a});
-
--- | The fault codes for the Spot instance request, if any.
-sirFault :: Lens' SpotInstanceRequest (Maybe SpotInstanceStateFault)
-sirFault = lens _sirFault (\ s a -> s{_sirFault = a});
-
--- | The ID of the Spot instance request.
-sirSpotInstanceRequestId :: Lens' SpotInstanceRequest (Maybe Text)
-sirSpotInstanceRequestId = lens _sirSpotInstanceRequestId (\ s a -> s{_sirSpotInstanceRequestId = a});
-
--- | The Spot instance request type.
-sirType :: Lens' SpotInstanceRequest (Maybe SpotInstanceType)
-sirType = lens _sirType (\ s a -> s{_sirType = a});
-
--- | The start date of the request, in UTC format (for example,
--- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The request becomes active at this
--- date and time.
-sirValidFrom :: Lens' SpotInstanceRequest (Maybe UTCTime)
-sirValidFrom = lens _sirValidFrom (\ s a -> s{_sirValidFrom = a}) . mapping _Time;
-
--- | The date and time when the Spot instance request was created, in UTC
--- format (for example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
-sirCreateTime :: Lens' SpotInstanceRequest (Maybe UTCTime)
-sirCreateTime = lens _sirCreateTime (\ s a -> s{_sirCreateTime = a}) . mapping _Time;
-
--- | Any tags assigned to the resource.
-sirTags :: Lens' SpotInstanceRequest [Tag]
-sirTags = lens _sirTags (\ s a -> s{_sirTags = a}) . _Default . _Coerce;
-
-instance FromXML SpotInstanceRequest where
-        parseXML x
-          = SpotInstanceRequest' <$>
-              (x .@? "instanceId") <*> (x .@? "status") <*>
-                (x .@? "state")
-                <*> (x .@? "actualBlockHourlyPrice")
-                <*> (x .@? "blockDurationMinutes")
-                <*> (x .@? "productDescription")
-                <*> (x .@? "spotPrice")
-                <*> (x .@? "launchSpecification")
-                <*> (x .@? "availabilityZoneGroup")
-                <*> (x .@? "launchedAvailabilityZone")
-                <*> (x .@? "validUntil")
-                <*> (x .@? "launchGroup")
-                <*> (x .@? "fault")
-                <*> (x .@? "spotInstanceRequestId")
-                <*> (x .@? "type")
-                <*> (x .@? "validFrom")
-                <*> (x .@? "createTime")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes a Spot instance state change.
---
--- /See:/ 'spotInstanceStateFault' smart constructor.
-data SpotInstanceStateFault = SpotInstanceStateFault'
-    { _sisfCode    :: !(Maybe Text)
-    , _sisfMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotInstanceStateFault' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sisfCode'
---
--- * 'sisfMessage'
-spotInstanceStateFault
-    :: SpotInstanceStateFault
-spotInstanceStateFault =
-    SpotInstanceStateFault'
-    { _sisfCode = Nothing
-    , _sisfMessage = Nothing
-    }
-
--- | The reason code for the Spot instance state change.
-sisfCode :: Lens' SpotInstanceStateFault (Maybe Text)
-sisfCode = lens _sisfCode (\ s a -> s{_sisfCode = a});
-
--- | The message for the Spot instance state change.
-sisfMessage :: Lens' SpotInstanceStateFault (Maybe Text)
-sisfMessage = lens _sisfMessage (\ s a -> s{_sisfMessage = a});
-
-instance FromXML SpotInstanceStateFault where
-        parseXML x
-          = SpotInstanceStateFault' <$>
-              (x .@? "code") <*> (x .@? "message")
-
--- | Describes the status of a Spot instance request.
---
--- /See:/ 'spotInstanceStatus' smart constructor.
-data SpotInstanceStatus = SpotInstanceStatus'
-    { _sisUpdateTime :: !(Maybe ISO8601)
-    , _sisCode       :: !(Maybe Text)
-    , _sisMessage    :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotInstanceStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sisUpdateTime'
---
--- * 'sisCode'
---
--- * 'sisMessage'
-spotInstanceStatus
-    :: SpotInstanceStatus
-spotInstanceStatus =
-    SpotInstanceStatus'
-    { _sisUpdateTime = Nothing
-    , _sisCode = Nothing
-    , _sisMessage = Nothing
-    }
-
--- | The date and time of the most recent status update, in UTC format (for
--- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
-sisUpdateTime :: Lens' SpotInstanceStatus (Maybe UTCTime)
-sisUpdateTime = lens _sisUpdateTime (\ s a -> s{_sisUpdateTime = a}) . mapping _Time;
-
--- | The status code. For a list of status codes, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html#spot-instance-bid-status-understand Spot Bid Status Codes>
--- in the /Amazon Elastic Compute Cloud User Guide/.
-sisCode :: Lens' SpotInstanceStatus (Maybe Text)
-sisCode = lens _sisCode (\ s a -> s{_sisCode = a});
-
--- | The description for the status code.
-sisMessage :: Lens' SpotInstanceStatus (Maybe Text)
-sisMessage = lens _sisMessage (\ s a -> s{_sisMessage = a});
-
-instance FromXML SpotInstanceStatus where
-        parseXML x
-          = SpotInstanceStatus' <$>
-              (x .@? "updateTime") <*> (x .@? "code") <*>
-                (x .@? "message")
-
--- | Describes Spot instance placement.
---
--- /See:/ 'spotPlacement' smart constructor.
-data SpotPlacement = SpotPlacement'
-    { _spAvailabilityZone :: !(Maybe Text)
-    , _spGroupName        :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotPlacement' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'spAvailabilityZone'
---
--- * 'spGroupName'
-spotPlacement
-    :: SpotPlacement
-spotPlacement =
-    SpotPlacement'
-    { _spAvailabilityZone = Nothing
-    , _spGroupName = Nothing
-    }
-
--- | The Availability Zones. To specify multiple Availability Zones, separate
--- them using commas; for example, \"us-west-2a, us-west-2b\".
-spAvailabilityZone :: Lens' SpotPlacement (Maybe Text)
-spAvailabilityZone = lens _spAvailabilityZone (\ s a -> s{_spAvailabilityZone = a});
-
--- | The name of the placement group (for cluster instances).
-spGroupName :: Lens' SpotPlacement (Maybe Text)
-spGroupName = lens _spGroupName (\ s a -> s{_spGroupName = a});
-
-instance FromXML SpotPlacement where
-        parseXML x
-          = SpotPlacement' <$>
-              (x .@? "availabilityZone") <*> (x .@? "groupName")
-
-instance ToQuery SpotPlacement where
-        toQuery SpotPlacement'{..}
-          = mconcat
-              ["AvailabilityZone" =: _spAvailabilityZone,
-               "GroupName" =: _spGroupName]
-
--- | Describes the maximum hourly price (bid) for any Spot instance launched
--- to fulfill the request.
---
--- /See:/ 'spotPrice' smart constructor.
-data SpotPrice = SpotPrice'
-    { _sProductDescription :: !(Maybe RIProductDescription)
-    , _sSpotPrice          :: !(Maybe Text)
-    , _sInstanceType       :: !(Maybe InstanceType)
-    , _sAvailabilityZone   :: !(Maybe Text)
-    , _sTimestamp          :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'SpotPrice' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sProductDescription'
---
--- * 'sSpotPrice'
---
--- * 'sInstanceType'
---
--- * 'sAvailabilityZone'
---
--- * 'sTimestamp'
-spotPrice
-    :: SpotPrice
-spotPrice =
-    SpotPrice'
-    { _sProductDescription = Nothing
-    , _sSpotPrice = Nothing
-    , _sInstanceType = Nothing
-    , _sAvailabilityZone = Nothing
-    , _sTimestamp = Nothing
-    }
-
--- | A general description of the AMI.
-sProductDescription :: Lens' SpotPrice (Maybe RIProductDescription)
-sProductDescription = lens _sProductDescription (\ s a -> s{_sProductDescription = a});
-
--- | The maximum price (bid) that you are willing to pay for a Spot instance.
-sSpotPrice :: Lens' SpotPrice (Maybe Text)
-sSpotPrice = lens _sSpotPrice (\ s a -> s{_sSpotPrice = a});
-
--- | The instance type.
-sInstanceType :: Lens' SpotPrice (Maybe InstanceType)
-sInstanceType = lens _sInstanceType (\ s a -> s{_sInstanceType = a});
-
--- | The Availability Zone.
-sAvailabilityZone :: Lens' SpotPrice (Maybe Text)
-sAvailabilityZone = lens _sAvailabilityZone (\ s a -> s{_sAvailabilityZone = a});
-
--- | The date and time the request was created, in UTC format (for example,
--- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
-sTimestamp :: Lens' SpotPrice (Maybe UTCTime)
-sTimestamp = lens _sTimestamp (\ s a -> s{_sTimestamp = a}) . mapping _Time;
-
-instance FromXML SpotPrice where
-        parseXML x
-          = SpotPrice' <$>
-              (x .@? "productDescription") <*> (x .@? "spotPrice")
-                <*> (x .@? "instanceType")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "timestamp")
-
--- | Describes a state change.
---
--- /See:/ 'stateReason' smart constructor.
-data StateReason = StateReason'
-    { _srCode    :: !(Maybe Text)
-    , _srMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'StateReason' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srCode'
---
--- * 'srMessage'
-stateReason
-    :: StateReason
-stateReason =
-    StateReason'
-    { _srCode = Nothing
-    , _srMessage = Nothing
-    }
-
--- | The reason code for the state change.
-srCode :: Lens' StateReason (Maybe Text)
-srCode = lens _srCode (\ s a -> s{_srCode = a});
-
--- | The message for the state change.
---
--- -   'Server.SpotInstanceTermination': A Spot instance was terminated due
---     to an increase in the market price.
---
--- -   'Server.InternalError': An internal error occurred during instance
---     launch, resulting in termination.
---
--- -   'Server.InsufficientInstanceCapacity': There was insufficient
---     instance capacity to satisfy the launch request.
---
--- -   'Client.InternalError': A client error caused the instance to
---     terminate on launch.
---
--- -   'Client.InstanceInitiatedShutdown': The instance was shut down using
---     the 'shutdown -h' command from the instance.
---
--- -   'Client.UserInitiatedShutdown': The instance was shut down using the
---     Amazon EC2 API.
---
--- -   'Client.VolumeLimitExceeded': The volume limit was exceeded.
---
--- -   'Client.InvalidSnapshot.NotFound': The specified snapshot was not
---     found.
---
-srMessage :: Lens' StateReason (Maybe Text)
-srMessage = lens _srMessage (\ s a -> s{_srMessage = a});
-
-instance FromXML StateReason where
-        parseXML x
-          = StateReason' <$>
-              (x .@? "code") <*> (x .@? "message")
-
--- | Describes the storage location for an instance store-backed AMI.
---
--- /See:/ 'storage' smart constructor.
-newtype Storage = Storage'
-    { _sS3 :: Maybe S3Storage
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Storage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sS3'
-storage
-    :: Storage
-storage =
-    Storage'
-    { _sS3 = Nothing
-    }
-
--- | An Amazon S3 storage location.
-sS3 :: Lens' Storage (Maybe S3Storage)
-sS3 = lens _sS3 (\ s a -> s{_sS3 = a});
-
-instance FromXML Storage where
-        parseXML x = Storage' <$> (x .@? "S3")
-
-instance ToQuery Storage where
-        toQuery Storage'{..} = mconcat ["S3" =: _sS3]
-
--- | Describes a subnet.
---
--- /See:/ 'subnet' smart constructor.
-data Subnet = Subnet'
-    { _subMapPublicIPOnLaunch     :: !(Maybe Bool)
-    , _subDefaultForAz            :: !(Maybe Bool)
-    , _subTags                    :: !(Maybe [Tag])
-    , _subAvailabilityZone        :: !Text
-    , _subAvailableIPAddressCount :: !Int
-    , _subCIdRBlock               :: !Text
-    , _subState                   :: !SubnetState
-    , _subSubnetId                :: !Text
-    , _subVPCId                   :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Subnet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'subMapPublicIPOnLaunch'
---
--- * 'subDefaultForAz'
---
--- * 'subTags'
---
--- * 'subAvailabilityZone'
---
--- * 'subAvailableIPAddressCount'
---
--- * 'subCIdRBlock'
---
--- * 'subState'
---
--- * 'subSubnetId'
---
--- * 'subVPCId'
-subnet
-    :: Text -- ^ 'subAvailabilityZone'
-    -> Int -- ^ 'subAvailableIPAddressCount'
-    -> Text -- ^ 'subCIdRBlock'
-    -> SubnetState -- ^ 'subState'
-    -> Text -- ^ 'subSubnetId'
-    -> Text -- ^ 'subVPCId'
-    -> Subnet
-subnet pAvailabilityZone_ pAvailableIPAddressCount_ pCIdRBlock_ pState_ pSubnetId_ pVPCId_ =
-    Subnet'
-    { _subMapPublicIPOnLaunch = Nothing
-    , _subDefaultForAz = Nothing
-    , _subTags = Nothing
-    , _subAvailabilityZone = pAvailabilityZone_
-    , _subAvailableIPAddressCount = pAvailableIPAddressCount_
-    , _subCIdRBlock = pCIdRBlock_
-    , _subState = pState_
-    , _subSubnetId = pSubnetId_
-    , _subVPCId = pVPCId_
-    }
-
--- | Indicates whether instances launched in this subnet receive a public IP
--- address.
-subMapPublicIPOnLaunch :: Lens' Subnet (Maybe Bool)
-subMapPublicIPOnLaunch = lens _subMapPublicIPOnLaunch (\ s a -> s{_subMapPublicIPOnLaunch = a});
-
--- | Indicates whether this is the default subnet for the Availability Zone.
-subDefaultForAz :: Lens' Subnet (Maybe Bool)
-subDefaultForAz = lens _subDefaultForAz (\ s a -> s{_subDefaultForAz = a});
-
--- | Any tags assigned to the subnet.
-subTags :: Lens' Subnet [Tag]
-subTags = lens _subTags (\ s a -> s{_subTags = a}) . _Default . _Coerce;
-
--- | The Availability Zone of the subnet.
-subAvailabilityZone :: Lens' Subnet Text
-subAvailabilityZone = lens _subAvailabilityZone (\ s a -> s{_subAvailabilityZone = a});
-
--- | The number of unused IP addresses in the subnet. Note that the IP
--- addresses for any stopped instances are considered unavailable.
-subAvailableIPAddressCount :: Lens' Subnet Int
-subAvailableIPAddressCount = lens _subAvailableIPAddressCount (\ s a -> s{_subAvailableIPAddressCount = a});
-
--- | The CIDR block assigned to the subnet.
-subCIdRBlock :: Lens' Subnet Text
-subCIdRBlock = lens _subCIdRBlock (\ s a -> s{_subCIdRBlock = a});
-
--- | The current state of the subnet.
-subState :: Lens' Subnet SubnetState
-subState = lens _subState (\ s a -> s{_subState = a});
-
--- | The ID of the subnet.
-subSubnetId :: Lens' Subnet Text
-subSubnetId = lens _subSubnetId (\ s a -> s{_subSubnetId = a});
-
--- | The ID of the VPC the subnet is in.
-subVPCId :: Lens' Subnet Text
-subVPCId = lens _subVPCId (\ s a -> s{_subVPCId = a});
-
-instance FromXML Subnet where
-        parseXML x
-          = Subnet' <$>
-              (x .@? "mapPublicIpOnLaunch") <*>
-                (x .@? "defaultForAz")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "availabilityZone")
-                <*> (x .@ "availableIpAddressCount")
-                <*> (x .@ "cidrBlock")
-                <*> (x .@ "state")
-                <*> (x .@ "subnetId")
-                <*> (x .@ "vpcId")
-
--- | Describes a tag.
---
--- /See:/ 'tag' smart constructor.
-data Tag = Tag'
-    { _tagKey   :: !Text
-    , _tagValue :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Tag' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tagKey'
---
--- * 'tagValue'
-tag
-    :: Text -- ^ 'tagKey'
-    -> Text -- ^ 'tagValue'
-    -> Tag
-tag pKey_ pValue_ =
-    Tag'
-    { _tagKey = pKey_
-    , _tagValue = pValue_
-    }
-
--- | The key of the tag.
---
--- Constraints: Tag keys are case-sensitive and accept a maximum of 127
--- Unicode characters. May not begin with 'aws:'
-tagKey :: Lens' Tag Text
-tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
-
--- | The value of the tag.
---
--- Constraints: Tag values are case-sensitive and accept a maximum of 255
--- Unicode characters.
-tagValue :: Lens' Tag Text
-tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
-
-instance FromXML Tag where
-        parseXML x = Tag' <$> (x .@ "key") <*> (x .@ "value")
-
-instance ToQuery Tag where
-        toQuery Tag'{..}
-          = mconcat ["Key" =: _tagKey, "Value" =: _tagValue]
-
--- | Describes a tag.
---
--- /See:/ 'tagDescription' smart constructor.
-data TagDescription = TagDescription'
-    { _tdResourceId   :: !Text
-    , _tdResourceType :: !ResourceType
-    , _tdKey          :: !Text
-    , _tdValue        :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TagDescription' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tdResourceId'
---
--- * 'tdResourceType'
---
--- * 'tdKey'
---
--- * 'tdValue'
-tagDescription
-    :: Text -- ^ 'tdResourceId'
-    -> ResourceType -- ^ 'tdResourceType'
-    -> Text -- ^ 'tdKey'
-    -> Text -- ^ 'tdValue'
-    -> TagDescription
-tagDescription pResourceId_ pResourceType_ pKey_ pValue_ =
-    TagDescription'
-    { _tdResourceId = pResourceId_
-    , _tdResourceType = pResourceType_
-    , _tdKey = pKey_
-    , _tdValue = pValue_
-    }
-
--- | The ID of the resource. For example, 'ami-1a2b3c4d'.
-tdResourceId :: Lens' TagDescription Text
-tdResourceId = lens _tdResourceId (\ s a -> s{_tdResourceId = a});
-
--- | The resource type.
-tdResourceType :: Lens' TagDescription ResourceType
-tdResourceType = lens _tdResourceType (\ s a -> s{_tdResourceType = a});
-
--- | The tag key.
-tdKey :: Lens' TagDescription Text
-tdKey = lens _tdKey (\ s a -> s{_tdKey = a});
-
--- | The tag value.
-tdValue :: Lens' TagDescription Text
-tdValue = lens _tdValue (\ s a -> s{_tdValue = a});
-
-instance FromXML TagDescription where
-        parseXML x
-          = TagDescription' <$>
-              (x .@ "resourceId") <*> (x .@ "resourceType") <*>
-                (x .@ "key")
-                <*> (x .@ "value")
-
--- | Information about items that were not successfully processed in a batch
--- call.
---
--- /See:/ 'unsuccessfulItem' smart constructor.
-data UnsuccessfulItem = UnsuccessfulItem'
-    { _uiResourceId :: !(Maybe Text)
-    , _uiError      :: !UnsuccessfulItemError
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnsuccessfulItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uiResourceId'
---
--- * 'uiError'
-unsuccessfulItem
-    :: UnsuccessfulItemError -- ^ 'uiError'
-    -> UnsuccessfulItem
-unsuccessfulItem pError_ =
-    UnsuccessfulItem'
-    { _uiResourceId = Nothing
-    , _uiError = pError_
-    }
-
--- | The ID of the resource.
-uiResourceId :: Lens' UnsuccessfulItem (Maybe Text)
-uiResourceId = lens _uiResourceId (\ s a -> s{_uiResourceId = a});
-
--- | Information about the error.
-uiError :: Lens' UnsuccessfulItem UnsuccessfulItemError
-uiError = lens _uiError (\ s a -> s{_uiError = a});
-
-instance FromXML UnsuccessfulItem where
-        parseXML x
-          = UnsuccessfulItem' <$>
-              (x .@? "resourceId") <*> (x .@ "error")
-
--- | Information about the error that occurred. For more information about
--- errors, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error Codes>.
---
--- /See:/ 'unsuccessfulItemError' smart constructor.
-data UnsuccessfulItemError = UnsuccessfulItemError'
-    { _uieCode    :: !Text
-    , _uieMessage :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UnsuccessfulItemError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uieCode'
---
--- * 'uieMessage'
-unsuccessfulItemError
-    :: Text -- ^ 'uieCode'
-    -> Text -- ^ 'uieMessage'
-    -> UnsuccessfulItemError
-unsuccessfulItemError pCode_ pMessage_ =
-    UnsuccessfulItemError'
-    { _uieCode = pCode_
-    , _uieMessage = pMessage_
-    }
-
--- | The error code.
-uieCode :: Lens' UnsuccessfulItemError Text
-uieCode = lens _uieCode (\ s a -> s{_uieCode = a});
-
--- | The error message accompanying the error code.
-uieMessage :: Lens' UnsuccessfulItemError Text
-uieMessage = lens _uieMessage (\ s a -> s{_uieMessage = a});
-
-instance FromXML UnsuccessfulItemError where
-        parseXML x
-          = UnsuccessfulItemError' <$>
-              (x .@ "code") <*> (x .@ "message")
-
--- | Describes the S3 bucket for the disk image.
---
--- /See:/ 'userBucket' smart constructor.
-data UserBucket = UserBucket'
-    { _ubS3Key    :: !(Maybe Text)
-    , _ubS3Bucket :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserBucket' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ubS3Key'
---
--- * 'ubS3Bucket'
-userBucket
-    :: UserBucket
-userBucket =
-    UserBucket'
-    { _ubS3Key = Nothing
-    , _ubS3Bucket = Nothing
-    }
-
--- | The key for the disk image.
-ubS3Key :: Lens' UserBucket (Maybe Text)
-ubS3Key = lens _ubS3Key (\ s a -> s{_ubS3Key = a});
-
--- | The name of the S3 bucket where the disk image is located.
-ubS3Bucket :: Lens' UserBucket (Maybe Text)
-ubS3Bucket = lens _ubS3Bucket (\ s a -> s{_ubS3Bucket = a});
-
-instance ToQuery UserBucket where
-        toQuery UserBucket'{..}
-          = mconcat
-              ["S3Key" =: _ubS3Key, "S3Bucket" =: _ubS3Bucket]
-
--- | Describes the S3 bucket for the disk image.
---
--- /See:/ 'userBucketDetails' smart constructor.
-data UserBucketDetails = UserBucketDetails'
-    { _ubdS3Key    :: !(Maybe Text)
-    , _ubdS3Bucket :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserBucketDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ubdS3Key'
---
--- * 'ubdS3Bucket'
-userBucketDetails
-    :: UserBucketDetails
-userBucketDetails =
-    UserBucketDetails'
-    { _ubdS3Key = Nothing
-    , _ubdS3Bucket = Nothing
-    }
-
--- | The key from which the disk image was created.
-ubdS3Key :: Lens' UserBucketDetails (Maybe Text)
-ubdS3Key = lens _ubdS3Key (\ s a -> s{_ubdS3Key = a});
-
--- | The S3 bucket from which the disk image was created.
-ubdS3Bucket :: Lens' UserBucketDetails (Maybe Text)
-ubdS3Bucket = lens _ubdS3Bucket (\ s a -> s{_ubdS3Bucket = a});
-
-instance FromXML UserBucketDetails where
-        parseXML x
-          = UserBucketDetails' <$>
-              (x .@? "s3Key") <*> (x .@? "s3Bucket")
-
--- | Describes the user data to be made available to an instance.
---
--- /See:/ 'userData' smart constructor.
-newtype UserData = UserData'
-    { _udData :: Maybe Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserData' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'udData'
-userData
-    :: UserData
-userData =
-    UserData'
-    { _udData = Nothing
-    }
-
--- | The Base64-encoded MIME user data for the instance.
-udData :: Lens' UserData (Maybe Text)
-udData = lens _udData (\ s a -> s{_udData = a});
-
-instance ToQuery UserData where
-        toQuery UserData'{..} = mconcat ["Data" =: _udData]
-
--- | Describes a security group and AWS account ID pair.
---
--- /See:/ 'userIdGroupPair' smart constructor.
-data UserIdGroupPair = UserIdGroupPair'
-    { _uigpUserId    :: !(Maybe Text)
-    , _uigpGroupId   :: !(Maybe Text)
-    , _uigpGroupName :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'UserIdGroupPair' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uigpUserId'
---
--- * 'uigpGroupId'
---
--- * 'uigpGroupName'
-userIdGroupPair
-    :: UserIdGroupPair
-userIdGroupPair =
-    UserIdGroupPair'
-    { _uigpUserId = Nothing
-    , _uigpGroupId = Nothing
-    , _uigpGroupName = Nothing
-    }
-
--- | The ID of an AWS account. EC2-Classic only.
-uigpUserId :: Lens' UserIdGroupPair (Maybe Text)
-uigpUserId = lens _uigpUserId (\ s a -> s{_uigpUserId = a});
-
--- | The ID of the security group.
-uigpGroupId :: Lens' UserIdGroupPair (Maybe Text)
-uigpGroupId = lens _uigpGroupId (\ s a -> s{_uigpGroupId = a});
-
--- | The name of the security group. In a request, use this parameter for a
--- security group in EC2-Classic or a default VPC only. For a security
--- group in a nondefault VPC, use 'GroupId'.
-uigpGroupName :: Lens' UserIdGroupPair (Maybe Text)
-uigpGroupName = lens _uigpGroupName (\ s a -> s{_uigpGroupName = a});
-
-instance FromXML UserIdGroupPair where
-        parseXML x
-          = UserIdGroupPair' <$>
-              (x .@? "userId") <*> (x .@? "groupId") <*>
-                (x .@? "groupName")
-
-instance ToQuery UserIdGroupPair where
-        toQuery UserIdGroupPair'{..}
-          = mconcat
-              ["UserId" =: _uigpUserId, "GroupId" =: _uigpGroupId,
-               "GroupName" =: _uigpGroupName]
-
--- | Describes telemetry for a VPN tunnel.
---
--- /See:/ 'vgwTelemetry' smart constructor.
-data VGWTelemetry = VGWTelemetry'
-    { _vtStatus             :: !(Maybe TelemetryStatus)
-    , _vtOutsideIPAddress   :: !(Maybe Text)
-    , _vtLastStatusChange   :: !(Maybe ISO8601)
-    , _vtAcceptedRouteCount :: !(Maybe Int)
-    , _vtStatusMessage      :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VGWTelemetry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vtStatus'
---
--- * 'vtOutsideIPAddress'
---
--- * 'vtLastStatusChange'
---
--- * 'vtAcceptedRouteCount'
---
--- * 'vtStatusMessage'
-vgwTelemetry
-    :: VGWTelemetry
-vgwTelemetry =
-    VGWTelemetry'
-    { _vtStatus = Nothing
-    , _vtOutsideIPAddress = Nothing
-    , _vtLastStatusChange = Nothing
-    , _vtAcceptedRouteCount = Nothing
-    , _vtStatusMessage = Nothing
-    }
-
--- | The status of the VPN tunnel.
-vtStatus :: Lens' VGWTelemetry (Maybe TelemetryStatus)
-vtStatus = lens _vtStatus (\ s a -> s{_vtStatus = a});
-
--- | The Internet-routable IP address of the virtual private gateway\'s
--- outside interface.
-vtOutsideIPAddress :: Lens' VGWTelemetry (Maybe Text)
-vtOutsideIPAddress = lens _vtOutsideIPAddress (\ s a -> s{_vtOutsideIPAddress = a});
-
--- | The date and time of the last change in status.
-vtLastStatusChange :: Lens' VGWTelemetry (Maybe UTCTime)
-vtLastStatusChange = lens _vtLastStatusChange (\ s a -> s{_vtLastStatusChange = a}) . mapping _Time;
-
--- | The number of accepted routes.
-vtAcceptedRouteCount :: Lens' VGWTelemetry (Maybe Int)
-vtAcceptedRouteCount = lens _vtAcceptedRouteCount (\ s a -> s{_vtAcceptedRouteCount = a});
-
--- | If an error occurs, a description of the error.
-vtStatusMessage :: Lens' VGWTelemetry (Maybe Text)
-vtStatusMessage = lens _vtStatusMessage (\ s a -> s{_vtStatusMessage = a});
-
-instance FromXML VGWTelemetry where
-        parseXML x
-          = VGWTelemetry' <$>
-              (x .@? "status") <*> (x .@? "outsideIpAddress") <*>
-                (x .@? "lastStatusChange")
-                <*> (x .@? "acceptedRouteCount")
-                <*> (x .@? "statusMessage")
-
--- | Describes a VPC.
---
--- /See:/ 'vpc' smart constructor.
-data VPC = VPC'
-    { _vpcTags            :: !(Maybe [Tag])
-    , _vpcIsDefault       :: !(Maybe Bool)
-    , _vpcCIdRBlock       :: !Text
-    , _vpcDHCPOptionsId   :: !Text
-    , _vpcInstanceTenancy :: !Tenancy
-    , _vpcState           :: !VPCState
-    , _vpcVPCId           :: !Text
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPC' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vpcTags'
---
--- * 'vpcIsDefault'
---
--- * 'vpcCIdRBlock'
---
--- * 'vpcDHCPOptionsId'
---
--- * 'vpcInstanceTenancy'
---
--- * 'vpcState'
---
--- * 'vpcVPCId'
-vpc
-    :: Text -- ^ 'vpcCIdRBlock'
-    -> Text -- ^ 'vpcDHCPOptionsId'
-    -> Tenancy -- ^ 'vpcInstanceTenancy'
-    -> VPCState -- ^ 'vpcState'
-    -> Text -- ^ 'vpcVPCId'
-    -> VPC
-vpc pCIdRBlock_ pDHCPOptionsId_ pInstanceTenancy_ pState_ pVPCId_ =
-    VPC'
-    { _vpcTags = Nothing
-    , _vpcIsDefault = Nothing
-    , _vpcCIdRBlock = pCIdRBlock_
-    , _vpcDHCPOptionsId = pDHCPOptionsId_
-    , _vpcInstanceTenancy = pInstanceTenancy_
-    , _vpcState = pState_
-    , _vpcVPCId = pVPCId_
-    }
-
--- | Any tags assigned to the VPC.
-vpcTags :: Lens' VPC [Tag]
-vpcTags = lens _vpcTags (\ s a -> s{_vpcTags = a}) . _Default . _Coerce;
-
--- | Indicates whether the VPC is the default VPC.
-vpcIsDefault :: Lens' VPC (Maybe Bool)
-vpcIsDefault = lens _vpcIsDefault (\ s a -> s{_vpcIsDefault = a});
-
--- | The CIDR block for the VPC.
-vpcCIdRBlock :: Lens' VPC Text
-vpcCIdRBlock = lens _vpcCIdRBlock (\ s a -> s{_vpcCIdRBlock = a});
-
--- | The ID of the set of DHCP options you\'ve associated with the VPC (or
--- 'default' if the default options are associated with the VPC).
-vpcDHCPOptionsId :: Lens' VPC Text
-vpcDHCPOptionsId = lens _vpcDHCPOptionsId (\ s a -> s{_vpcDHCPOptionsId = a});
-
--- | The allowed tenancy of instances launched into the VPC.
-vpcInstanceTenancy :: Lens' VPC Tenancy
-vpcInstanceTenancy = lens _vpcInstanceTenancy (\ s a -> s{_vpcInstanceTenancy = a});
-
--- | The current state of the VPC.
-vpcState :: Lens' VPC VPCState
-vpcState = lens _vpcState (\ s a -> s{_vpcState = a});
-
--- | The ID of the VPC.
-vpcVPCId :: Lens' VPC Text
-vpcVPCId = lens _vpcVPCId (\ s a -> s{_vpcVPCId = a});
-
-instance FromXML VPC where
-        parseXML x
-          = VPC' <$>
-              (x .@? "tagSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "isDefault")
-                <*> (x .@ "cidrBlock")
-                <*> (x .@ "dhcpOptionsId")
-                <*> (x .@ "instanceTenancy")
-                <*> (x .@ "state")
-                <*> (x .@ "vpcId")
-
--- | Describes an attachment between a virtual private gateway and a VPC.
---
--- /See:/ 'vpcAttachment' smart constructor.
-data VPCAttachment = VPCAttachment'
-    { _vaState :: !(Maybe AttachmentStatus)
-    , _vaVPCId :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vaState'
---
--- * 'vaVPCId'
-vpcAttachment
-    :: VPCAttachment
-vpcAttachment =
-    VPCAttachment'
-    { _vaState = Nothing
-    , _vaVPCId = Nothing
-    }
-
--- | The current state of the attachment.
-vaState :: Lens' VPCAttachment (Maybe AttachmentStatus)
-vaState = lens _vaState (\ s a -> s{_vaState = a});
-
--- | The ID of the VPC.
-vaVPCId :: Lens' VPCAttachment (Maybe Text)
-vaVPCId = lens _vaVPCId (\ s a -> s{_vaVPCId = a});
-
-instance FromXML VPCAttachment where
-        parseXML x
-          = VPCAttachment' <$>
-              (x .@? "state") <*> (x .@? "vpcId")
-
--- | Describes whether a VPC is enabled for ClassicLink.
---
--- /See:/ 'vpcClassicLink' smart constructor.
-data VPCClassicLink = VPCClassicLink'
-    { _vclVPCId              :: !(Maybe Text)
-    , _vclTags               :: !(Maybe [Tag])
-    , _vclClassicLinkEnabled :: !(Maybe Bool)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCClassicLink' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vclVPCId'
---
--- * 'vclTags'
---
--- * 'vclClassicLinkEnabled'
-vpcClassicLink
-    :: VPCClassicLink
-vpcClassicLink =
-    VPCClassicLink'
-    { _vclVPCId = Nothing
-    , _vclTags = Nothing
-    , _vclClassicLinkEnabled = Nothing
-    }
-
--- | The ID of the VPC.
-vclVPCId :: Lens' VPCClassicLink (Maybe Text)
-vclVPCId = lens _vclVPCId (\ s a -> s{_vclVPCId = a});
-
--- | Any tags assigned to the VPC.
-vclTags :: Lens' VPCClassicLink [Tag]
-vclTags = lens _vclTags (\ s a -> s{_vclTags = a}) . _Default . _Coerce;
-
--- | Indicates whether the VPC is enabled for ClassicLink.
-vclClassicLinkEnabled :: Lens' VPCClassicLink (Maybe Bool)
-vclClassicLinkEnabled = lens _vclClassicLinkEnabled (\ s a -> s{_vclClassicLinkEnabled = a});
-
-instance FromXML VPCClassicLink where
-        parseXML x
-          = VPCClassicLink' <$>
-              (x .@? "vpcId") <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "classicLinkEnabled")
-
--- | Describes a VPC endpoint.
---
--- /See:/ 'vpcEndpoint' smart constructor.
-data VPCEndpoint = VPCEndpoint'
-    { _veState             :: !(Maybe State)
-    , _vePolicyDocument    :: !(Maybe Text)
-    , _veVPCId             :: !(Maybe Text)
-    , _veCreationTimestamp :: !(Maybe ISO8601)
-    , _veServiceName       :: !(Maybe Text)
-    , _veVPCEndpointId     :: !(Maybe Text)
-    , _veRouteTableIds     :: !(Maybe [Text])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCEndpoint' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'veState'
---
--- * 'vePolicyDocument'
---
--- * 'veVPCId'
---
--- * 'veCreationTimestamp'
---
--- * 'veServiceName'
---
--- * 'veVPCEndpointId'
---
--- * 'veRouteTableIds'
-vpcEndpoint
-    :: VPCEndpoint
-vpcEndpoint =
-    VPCEndpoint'
-    { _veState = Nothing
-    , _vePolicyDocument = Nothing
-    , _veVPCId = Nothing
-    , _veCreationTimestamp = Nothing
-    , _veServiceName = Nothing
-    , _veVPCEndpointId = Nothing
-    , _veRouteTableIds = Nothing
-    }
-
--- | The state of the VPC endpoint.
-veState :: Lens' VPCEndpoint (Maybe State)
-veState = lens _veState (\ s a -> s{_veState = a});
-
--- | The policy document associated with the endpoint.
-vePolicyDocument :: Lens' VPCEndpoint (Maybe Text)
-vePolicyDocument = lens _vePolicyDocument (\ s a -> s{_vePolicyDocument = a});
-
--- | The ID of the VPC to which the endpoint is associated.
-veVPCId :: Lens' VPCEndpoint (Maybe Text)
-veVPCId = lens _veVPCId (\ s a -> s{_veVPCId = a});
-
--- | The date and time the VPC endpoint was created.
-veCreationTimestamp :: Lens' VPCEndpoint (Maybe UTCTime)
-veCreationTimestamp = lens _veCreationTimestamp (\ s a -> s{_veCreationTimestamp = a}) . mapping _Time;
-
--- | The name of the AWS service to which the endpoint is associated.
-veServiceName :: Lens' VPCEndpoint (Maybe Text)
-veServiceName = lens _veServiceName (\ s a -> s{_veServiceName = a});
-
--- | The ID of the VPC endpoint.
-veVPCEndpointId :: Lens' VPCEndpoint (Maybe Text)
-veVPCEndpointId = lens _veVPCEndpointId (\ s a -> s{_veVPCEndpointId = a});
-
--- | One or more route tables associated with the endpoint.
-veRouteTableIds :: Lens' VPCEndpoint [Text]
-veRouteTableIds = lens _veRouteTableIds (\ s a -> s{_veRouteTableIds = a}) . _Default . _Coerce;
-
-instance FromXML VPCEndpoint where
-        parseXML x
-          = VPCEndpoint' <$>
-              (x .@? "state") <*> (x .@? "policyDocument") <*>
-                (x .@? "vpcId")
-                <*> (x .@? "creationTimestamp")
-                <*> (x .@? "serviceName")
-                <*> (x .@? "vpcEndpointId")
-                <*>
-                (x .@? "routeTableIdSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes a VPC peering connection.
---
--- /See:/ 'vpcPeeringConnection' smart constructor.
-data VPCPeeringConnection = VPCPeeringConnection'
-    { _vpcpcVPCPeeringConnectionId :: !(Maybe Text)
-    , _vpcpcStatus                 :: !(Maybe VPCPeeringConnectionStateReason)
-    , _vpcpcAccepterVPCInfo        :: !(Maybe VPCPeeringConnectionVPCInfo)
-    , _vpcpcRequesterVPCInfo       :: !(Maybe VPCPeeringConnectionVPCInfo)
-    , _vpcpcExpirationTime         :: !(Maybe ISO8601)
-    , _vpcpcTags                   :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCPeeringConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vpcpcVPCPeeringConnectionId'
---
--- * 'vpcpcStatus'
---
--- * 'vpcpcAccepterVPCInfo'
---
--- * 'vpcpcRequesterVPCInfo'
---
--- * 'vpcpcExpirationTime'
---
--- * 'vpcpcTags'
-vpcPeeringConnection
-    :: VPCPeeringConnection
-vpcPeeringConnection =
-    VPCPeeringConnection'
-    { _vpcpcVPCPeeringConnectionId = Nothing
-    , _vpcpcStatus = Nothing
-    , _vpcpcAccepterVPCInfo = Nothing
-    , _vpcpcRequesterVPCInfo = Nothing
-    , _vpcpcExpirationTime = Nothing
-    , _vpcpcTags = Nothing
-    }
-
--- | The ID of the VPC peering connection.
-vpcpcVPCPeeringConnectionId :: Lens' VPCPeeringConnection (Maybe Text)
-vpcpcVPCPeeringConnectionId = lens _vpcpcVPCPeeringConnectionId (\ s a -> s{_vpcpcVPCPeeringConnectionId = a});
-
--- | The status of the VPC peering connection.
-vpcpcStatus :: Lens' VPCPeeringConnection (Maybe VPCPeeringConnectionStateReason)
-vpcpcStatus = lens _vpcpcStatus (\ s a -> s{_vpcpcStatus = a});
-
--- | The information of the peer VPC.
-vpcpcAccepterVPCInfo :: Lens' VPCPeeringConnection (Maybe VPCPeeringConnectionVPCInfo)
-vpcpcAccepterVPCInfo = lens _vpcpcAccepterVPCInfo (\ s a -> s{_vpcpcAccepterVPCInfo = a});
-
--- | The information of the requester VPC.
-vpcpcRequesterVPCInfo :: Lens' VPCPeeringConnection (Maybe VPCPeeringConnectionVPCInfo)
-vpcpcRequesterVPCInfo = lens _vpcpcRequesterVPCInfo (\ s a -> s{_vpcpcRequesterVPCInfo = a});
-
--- | The time that an unaccepted VPC peering connection will expire.
-vpcpcExpirationTime :: Lens' VPCPeeringConnection (Maybe UTCTime)
-vpcpcExpirationTime = lens _vpcpcExpirationTime (\ s a -> s{_vpcpcExpirationTime = a}) . mapping _Time;
-
--- | Any tags assigned to the resource.
-vpcpcTags :: Lens' VPCPeeringConnection [Tag]
-vpcpcTags = lens _vpcpcTags (\ s a -> s{_vpcpcTags = a}) . _Default . _Coerce;
-
-instance FromXML VPCPeeringConnection where
-        parseXML x
-          = VPCPeeringConnection' <$>
-              (x .@? "vpcPeeringConnectionId") <*> (x .@? "status")
-                <*> (x .@? "accepterVpcInfo")
-                <*> (x .@? "requesterVpcInfo")
-                <*> (x .@? "expirationTime")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes the status of a VPC peering connection.
---
--- /See:/ 'vpcPeeringConnectionStateReason' smart constructor.
-data VPCPeeringConnectionStateReason = VPCPeeringConnectionStateReason'
-    { _vpcsrCode    :: !(Maybe VPCPeeringConnectionStateReasonCode)
-    , _vpcsrMessage :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCPeeringConnectionStateReason' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vpcsrCode'
---
--- * 'vpcsrMessage'
-vpcPeeringConnectionStateReason
-    :: VPCPeeringConnectionStateReason
-vpcPeeringConnectionStateReason =
-    VPCPeeringConnectionStateReason'
-    { _vpcsrCode = Nothing
-    , _vpcsrMessage = Nothing
-    }
-
--- | The status of the VPC peering connection.
-vpcsrCode :: Lens' VPCPeeringConnectionStateReason (Maybe VPCPeeringConnectionStateReasonCode)
-vpcsrCode = lens _vpcsrCode (\ s a -> s{_vpcsrCode = a});
-
--- | A message that provides more information about the status, if
--- applicable.
-vpcsrMessage :: Lens' VPCPeeringConnectionStateReason (Maybe Text)
-vpcsrMessage = lens _vpcsrMessage (\ s a -> s{_vpcsrMessage = a});
-
-instance FromXML VPCPeeringConnectionStateReason
-         where
-        parseXML x
-          = VPCPeeringConnectionStateReason' <$>
-              (x .@? "code") <*> (x .@? "message")
-
--- | Describes a VPC in a VPC peering connection.
---
--- /See:/ 'vpcPeeringConnectionVPCInfo' smart constructor.
-data VPCPeeringConnectionVPCInfo = VPCPeeringConnectionVPCInfo'
-    { _vpcviVPCId     :: !(Maybe Text)
-    , _vpcviOwnerId   :: !(Maybe Text)
-    , _vpcviCIdRBlock :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPCPeeringConnectionVPCInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vpcviVPCId'
---
--- * 'vpcviOwnerId'
---
--- * 'vpcviCIdRBlock'
-vpcPeeringConnectionVPCInfo
-    :: VPCPeeringConnectionVPCInfo
-vpcPeeringConnectionVPCInfo =
-    VPCPeeringConnectionVPCInfo'
-    { _vpcviVPCId = Nothing
-    , _vpcviOwnerId = Nothing
-    , _vpcviCIdRBlock = Nothing
-    }
-
--- | The ID of the VPC.
-vpcviVPCId :: Lens' VPCPeeringConnectionVPCInfo (Maybe Text)
-vpcviVPCId = lens _vpcviVPCId (\ s a -> s{_vpcviVPCId = a});
-
--- | The AWS account ID of the VPC owner.
-vpcviOwnerId :: Lens' VPCPeeringConnectionVPCInfo (Maybe Text)
-vpcviOwnerId = lens _vpcviOwnerId (\ s a -> s{_vpcviOwnerId = a});
-
--- | The CIDR block for the VPC.
-vpcviCIdRBlock :: Lens' VPCPeeringConnectionVPCInfo (Maybe Text)
-vpcviCIdRBlock = lens _vpcviCIdRBlock (\ s a -> s{_vpcviCIdRBlock = a});
-
-instance FromXML VPCPeeringConnectionVPCInfo where
-        parseXML x
-          = VPCPeeringConnectionVPCInfo' <$>
-              (x .@? "vpcId") <*> (x .@? "ownerId") <*>
-                (x .@? "cidrBlock")
-
--- | Describes a VPN connection.
---
--- /See:/ 'vpnConnection' smart constructor.
-data VPNConnection = VPNConnection'
-    { _vcCustomerGatewayConfiguration :: !(Maybe Text)
-    , _vcRoutes                       :: !(Maybe [VPNStaticRoute])
-    , _vcVPNGatewayId                 :: !(Maybe Text)
-    , _vcOptions                      :: !(Maybe VPNConnectionOptions)
-    , _vcTags                         :: !(Maybe [Tag])
-    , _vcVGWTelemetry                 :: !(Maybe [VGWTelemetry])
-    , _vcVPNConnectionId              :: !Text
-    , _vcCustomerGatewayId            :: !Text
-    , _vcState                        :: !VPNState
-    , _vcType                         :: !GatewayType
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNConnection' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcCustomerGatewayConfiguration'
---
--- * 'vcRoutes'
---
--- * 'vcVPNGatewayId'
---
--- * 'vcOptions'
---
--- * 'vcTags'
---
--- * 'vcVGWTelemetry'
---
--- * 'vcVPNConnectionId'
---
--- * 'vcCustomerGatewayId'
---
--- * 'vcState'
---
--- * 'vcType'
-vpnConnection
-    :: Text -- ^ 'vcVPNConnectionId'
-    -> Text -- ^ 'vcCustomerGatewayId'
-    -> VPNState -- ^ 'vcState'
-    -> GatewayType -- ^ 'vcType'
-    -> VPNConnection
-vpnConnection pVPNConnectionId_ pCustomerGatewayId_ pState_ pType_ =
-    VPNConnection'
-    { _vcCustomerGatewayConfiguration = Nothing
-    , _vcRoutes = Nothing
-    , _vcVPNGatewayId = Nothing
-    , _vcOptions = Nothing
-    , _vcTags = Nothing
-    , _vcVGWTelemetry = Nothing
-    , _vcVPNConnectionId = pVPNConnectionId_
-    , _vcCustomerGatewayId = pCustomerGatewayId_
-    , _vcState = pState_
-    , _vcType = pType_
-    }
-
--- | The configuration information for the VPN connection\'s customer gateway
--- (in the native XML format). This element is always present in the
--- CreateVpnConnection response; however, it\'s present in the
--- DescribeVpnConnections response only if the VPN connection is in the
--- 'pending' or 'available' state.
-vcCustomerGatewayConfiguration :: Lens' VPNConnection (Maybe Text)
-vcCustomerGatewayConfiguration = lens _vcCustomerGatewayConfiguration (\ s a -> s{_vcCustomerGatewayConfiguration = a});
-
--- | The static routes associated with the VPN connection.
-vcRoutes :: Lens' VPNConnection [VPNStaticRoute]
-vcRoutes = lens _vcRoutes (\ s a -> s{_vcRoutes = a}) . _Default . _Coerce;
-
--- | The ID of the virtual private gateway at the AWS side of the VPN
--- connection.
-vcVPNGatewayId :: Lens' VPNConnection (Maybe Text)
-vcVPNGatewayId = lens _vcVPNGatewayId (\ s a -> s{_vcVPNGatewayId = a});
-
--- | The VPN connection options.
-vcOptions :: Lens' VPNConnection (Maybe VPNConnectionOptions)
-vcOptions = lens _vcOptions (\ s a -> s{_vcOptions = a});
-
--- | Any tags assigned to the VPN connection.
-vcTags :: Lens' VPNConnection [Tag]
-vcTags = lens _vcTags (\ s a -> s{_vcTags = a}) . _Default . _Coerce;
-
--- | Information about the VPN tunnel.
-vcVGWTelemetry :: Lens' VPNConnection [VGWTelemetry]
-vcVGWTelemetry = lens _vcVGWTelemetry (\ s a -> s{_vcVGWTelemetry = a}) . _Default . _Coerce;
-
--- | The ID of the VPN connection.
-vcVPNConnectionId :: Lens' VPNConnection Text
-vcVPNConnectionId = lens _vcVPNConnectionId (\ s a -> s{_vcVPNConnectionId = a});
-
--- | The ID of the customer gateway at your end of the VPN connection.
-vcCustomerGatewayId :: Lens' VPNConnection Text
-vcCustomerGatewayId = lens _vcCustomerGatewayId (\ s a -> s{_vcCustomerGatewayId = a});
-
--- | The current state of the VPN connection.
-vcState :: Lens' VPNConnection VPNState
-vcState = lens _vcState (\ s a -> s{_vcState = a});
-
--- | The type of VPN connection.
-vcType :: Lens' VPNConnection GatewayType
-vcType = lens _vcType (\ s a -> s{_vcType = a});
-
-instance FromXML VPNConnection where
-        parseXML x
-          = VPNConnection' <$>
-              (x .@? "customerGatewayConfiguration") <*>
-                (x .@? "routes" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "vpnGatewayId")
-                <*> (x .@? "options")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "vgwTelemetry" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "vpnConnectionId")
-                <*> (x .@ "customerGatewayId")
-                <*> (x .@ "state")
-                <*> (x .@ "type")
-
--- | Describes VPN connection options.
---
--- /See:/ 'vpnConnectionOptions' smart constructor.
-newtype VPNConnectionOptions = VPNConnectionOptions'
-    { _vcoStaticRoutesOnly :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNConnectionOptions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcoStaticRoutesOnly'
-vpnConnectionOptions
-    :: VPNConnectionOptions
-vpnConnectionOptions =
-    VPNConnectionOptions'
-    { _vcoStaticRoutesOnly = Nothing
-    }
-
--- | Indicates whether the VPN connection uses static routes only. Static
--- routes must be used for devices that don\'t support BGP.
-vcoStaticRoutesOnly :: Lens' VPNConnectionOptions (Maybe Bool)
-vcoStaticRoutesOnly = lens _vcoStaticRoutesOnly (\ s a -> s{_vcoStaticRoutesOnly = a});
-
-instance FromXML VPNConnectionOptions where
-        parseXML x
-          = VPNConnectionOptions' <$>
-              (x .@? "staticRoutesOnly")
-
--- | Describes VPN connection options.
---
--- /See:/ 'vpnConnectionOptionsSpecification' smart constructor.
-newtype VPNConnectionOptionsSpecification = VPNConnectionOptionsSpecification'
-    { _vcosStaticRoutesOnly :: Maybe Bool
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNConnectionOptionsSpecification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcosStaticRoutesOnly'
-vpnConnectionOptionsSpecification
-    :: VPNConnectionOptionsSpecification
-vpnConnectionOptionsSpecification =
-    VPNConnectionOptionsSpecification'
-    { _vcosStaticRoutesOnly = Nothing
-    }
-
--- | Indicates whether the VPN connection uses static routes only. Static
--- routes must be used for devices that don\'t support BGP.
-vcosStaticRoutesOnly :: Lens' VPNConnectionOptionsSpecification (Maybe Bool)
-vcosStaticRoutesOnly = lens _vcosStaticRoutesOnly (\ s a -> s{_vcosStaticRoutesOnly = a});
-
-instance ToQuery VPNConnectionOptionsSpecification
-         where
-        toQuery VPNConnectionOptionsSpecification'{..}
-          = mconcat
-              ["StaticRoutesOnly" =: _vcosStaticRoutesOnly]
-
--- | Describes a virtual private gateway.
---
--- /See:/ 'vpnGateway' smart constructor.
-data VPNGateway = VPNGateway'
-    { _vgState            :: !(Maybe VPNState)
-    , _vgVPCAttachments   :: !(Maybe [VPCAttachment])
-    , _vgVPNGatewayId     :: !(Maybe Text)
-    , _vgAvailabilityZone :: !(Maybe Text)
-    , _vgType             :: !(Maybe GatewayType)
-    , _vgTags             :: !(Maybe [Tag])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNGateway' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vgState'
---
--- * 'vgVPCAttachments'
---
--- * 'vgVPNGatewayId'
---
--- * 'vgAvailabilityZone'
---
--- * 'vgType'
---
--- * 'vgTags'
-vpnGateway
-    :: VPNGateway
-vpnGateway =
-    VPNGateway'
-    { _vgState = Nothing
-    , _vgVPCAttachments = Nothing
-    , _vgVPNGatewayId = Nothing
-    , _vgAvailabilityZone = Nothing
-    , _vgType = Nothing
-    , _vgTags = Nothing
-    }
-
--- | The current state of the virtual private gateway.
-vgState :: Lens' VPNGateway (Maybe VPNState)
-vgState = lens _vgState (\ s a -> s{_vgState = a});
-
--- | Any VPCs attached to the virtual private gateway.
-vgVPCAttachments :: Lens' VPNGateway [VPCAttachment]
-vgVPCAttachments = lens _vgVPCAttachments (\ s a -> s{_vgVPCAttachments = a}) . _Default . _Coerce;
-
--- | The ID of the virtual private gateway.
-vgVPNGatewayId :: Lens' VPNGateway (Maybe Text)
-vgVPNGatewayId = lens _vgVPNGatewayId (\ s a -> s{_vgVPNGatewayId = a});
-
--- | The Availability Zone where the virtual private gateway was created.
-vgAvailabilityZone :: Lens' VPNGateway (Maybe Text)
-vgAvailabilityZone = lens _vgAvailabilityZone (\ s a -> s{_vgAvailabilityZone = a});
-
--- | The type of VPN connection the virtual private gateway supports.
-vgType :: Lens' VPNGateway (Maybe GatewayType)
-vgType = lens _vgType (\ s a -> s{_vgType = a});
-
--- | Any tags assigned to the virtual private gateway.
-vgTags :: Lens' VPNGateway [Tag]
-vgTags = lens _vgTags (\ s a -> s{_vgTags = a}) . _Default . _Coerce;
-
-instance FromXML VPNGateway where
-        parseXML x
-          = VPNGateway' <$>
-              (x .@? "state") <*>
-                (x .@? "attachments" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "vpnGatewayId")
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "type")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes a static route for a VPN connection.
---
--- /See:/ 'vpnStaticRoute' smart constructor.
-data VPNStaticRoute = VPNStaticRoute'
-    { _vsrState                :: !(Maybe VPNState)
-    , _vsrSource               :: !(Maybe VPNStaticRouteSource)
-    , _vsrDestinationCIdRBlock :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VPNStaticRoute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsrState'
---
--- * 'vsrSource'
---
--- * 'vsrDestinationCIdRBlock'
-vpnStaticRoute
-    :: VPNStaticRoute
-vpnStaticRoute =
-    VPNStaticRoute'
-    { _vsrState = Nothing
-    , _vsrSource = Nothing
-    , _vsrDestinationCIdRBlock = Nothing
-    }
-
--- | The current state of the static route.
-vsrState :: Lens' VPNStaticRoute (Maybe VPNState)
-vsrState = lens _vsrState (\ s a -> s{_vsrState = a});
-
--- | Indicates how the routes were provided.
-vsrSource :: Lens' VPNStaticRoute (Maybe VPNStaticRouteSource)
-vsrSource = lens _vsrSource (\ s a -> s{_vsrSource = a});
-
--- | The CIDR block associated with the local subnet of the customer data
--- center.
-vsrDestinationCIdRBlock :: Lens' VPNStaticRoute (Maybe Text)
-vsrDestinationCIdRBlock = lens _vsrDestinationCIdRBlock (\ s a -> s{_vsrDestinationCIdRBlock = a});
-
-instance FromXML VPNStaticRoute where
-        parseXML x
-          = VPNStaticRoute' <$>
-              (x .@? "state") <*> (x .@? "source") <*>
-                (x .@? "destinationCidrBlock")
-
--- | Describes a volume.
---
--- /See:/ 'volume' smart constructor.
-data Volume = Volume'
-    { _vAttachments      :: !(Maybe [VolumeAttachment])
-    , _vIOPS             :: !(Maybe Int)
-    , _vKMSKeyId         :: !(Maybe Text)
-    , _vTags             :: !(Maybe [Tag])
-    , _vAvailabilityZone :: !Text
-    , _vCreateTime       :: !ISO8601
-    , _vEncrypted        :: !Bool
-    , _vSize             :: !Int
-    , _vSnapshotId       :: !Text
-    , _vState            :: !VolumeState
-    , _vVolumeId         :: !Text
-    , _vVolumeType       :: !VolumeType
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Volume' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vAttachments'
---
--- * 'vIOPS'
---
--- * 'vKMSKeyId'
---
--- * 'vTags'
---
--- * 'vAvailabilityZone'
---
--- * 'vCreateTime'
---
--- * 'vEncrypted'
---
--- * 'vSize'
---
--- * 'vSnapshotId'
---
--- * 'vState'
---
--- * 'vVolumeId'
---
--- * 'vVolumeType'
-volume
-    :: Text -- ^ 'vAvailabilityZone'
-    -> UTCTime -- ^ 'vCreateTime'
-    -> Bool -- ^ 'vEncrypted'
-    -> Int -- ^ 'vSize'
-    -> Text -- ^ 'vSnapshotId'
-    -> VolumeState -- ^ 'vState'
-    -> Text -- ^ 'vVolumeId'
-    -> VolumeType -- ^ 'vVolumeType'
-    -> Volume
-volume pAvailabilityZone_ pCreateTime_ pEncrypted_ pSize_ pSnapshotId_ pState_ pVolumeId_ pVolumeType_ =
-    Volume'
-    { _vAttachments = Nothing
-    , _vIOPS = Nothing
-    , _vKMSKeyId = Nothing
-    , _vTags = Nothing
-    , _vAvailabilityZone = pAvailabilityZone_
-    , _vCreateTime = _Time # pCreateTime_
-    , _vEncrypted = pEncrypted_
-    , _vSize = pSize_
-    , _vSnapshotId = pSnapshotId_
-    , _vState = pState_
-    , _vVolumeId = pVolumeId_
-    , _vVolumeType = pVolumeType_
-    }
-
--- | Information about the volume attachments.
-vAttachments :: Lens' Volume [VolumeAttachment]
-vAttachments = lens _vAttachments (\ s a -> s{_vAttachments = a}) . _Default . _Coerce;
-
--- | The number of I\/O operations per second (IOPS) that the volume
--- supports. For Provisioned IOPS (SSD) volumes, this represents the number
--- of IOPS that are provisioned for the volume. For General Purpose (SSD)
--- volumes, this represents the baseline performance of the volume and the
--- rate at which the volume accumulates I\/O credits for bursting. For more
--- information on General Purpose (SSD) baseline performance, I\/O credits,
--- and bursting, see
--- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types>
--- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- Constraint: Range is 100 to 20000 for Provisioned IOPS (SSD) volumes and
--- 3 to 10000 for General Purpose (SSD) volumes.
---
--- Condition: This parameter is required for requests to create 'io1'
--- volumes; it is not used in requests to create 'standard' or 'gp2'
--- volumes.
-vIOPS :: Lens' Volume (Maybe Int)
-vIOPS = lens _vIOPS (\ s a -> s{_vIOPS = a});
-
--- | The full ARN of the AWS Key Management Service (AWS KMS) customer master
--- key (CMK) that was used to protect the volume encryption key for the
--- volume.
-vKMSKeyId :: Lens' Volume (Maybe Text)
-vKMSKeyId = lens _vKMSKeyId (\ s a -> s{_vKMSKeyId = a});
-
--- | Any tags assigned to the volume.
-vTags :: Lens' Volume [Tag]
-vTags = lens _vTags (\ s a -> s{_vTags = a}) . _Default . _Coerce;
-
--- | The Availability Zone for the volume.
-vAvailabilityZone :: Lens' Volume Text
-vAvailabilityZone = lens _vAvailabilityZone (\ s a -> s{_vAvailabilityZone = a});
-
--- | The time stamp when volume creation was initiated.
-vCreateTime :: Lens' Volume UTCTime
-vCreateTime = lens _vCreateTime (\ s a -> s{_vCreateTime = a}) . _Time;
-
--- | Indicates whether the volume will be encrypted.
-vEncrypted :: Lens' Volume Bool
-vEncrypted = lens _vEncrypted (\ s a -> s{_vEncrypted = a});
-
--- | The size of the volume, in GiBs.
-vSize :: Lens' Volume Int
-vSize = lens _vSize (\ s a -> s{_vSize = a});
-
--- | The snapshot from which the volume was created, if applicable.
-vSnapshotId :: Lens' Volume Text
-vSnapshotId = lens _vSnapshotId (\ s a -> s{_vSnapshotId = a});
-
--- | The volume state.
-vState :: Lens' Volume VolumeState
-vState = lens _vState (\ s a -> s{_vState = a});
-
--- | The ID of the volume.
-vVolumeId :: Lens' Volume Text
-vVolumeId = lens _vVolumeId (\ s a -> s{_vVolumeId = a});
-
--- | The volume type. This can be 'gp2' for General Purpose (SSD) volumes,
--- 'io1' for Provisioned IOPS (SSD) volumes, or 'standard' for Magnetic
--- volumes.
-vVolumeType :: Lens' Volume VolumeType
-vVolumeType = lens _vVolumeType (\ s a -> s{_vVolumeType = a});
-
-instance FromXML Volume where
-        parseXML x
-          = Volume' <$>
-              (x .@? "attachmentSet" .!@ mempty >>=
-                 may (parseXMLList "item"))
-                <*> (x .@? "iops")
-                <*> (x .@? "kmsKeyId")
-                <*>
-                (x .@? "tagSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@ "availabilityZone")
-                <*> (x .@ "createTime")
-                <*> (x .@ "encrypted")
-                <*> (x .@ "size")
-                <*> (x .@ "snapshotId")
-                <*> (x .@ "status")
-                <*> (x .@ "volumeId")
-                <*> (x .@ "volumeType")
-
--- | Describes volume attachment details.
---
--- /See:/ 'volumeAttachment' smart constructor.
-data VolumeAttachment = VolumeAttachment'
-    { _volInstanceId          :: !(Maybe Text)
-    , _volDeleteOnTermination :: !(Maybe Bool)
-    , _volState               :: !(Maybe VolumeAttachmentState)
-    , _volDevice              :: !(Maybe Text)
-    , _volVolumeId            :: !(Maybe Text)
-    , _volAttachTime          :: !(Maybe ISO8601)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeAttachment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'volInstanceId'
---
--- * 'volDeleteOnTermination'
---
--- * 'volState'
---
--- * 'volDevice'
---
--- * 'volVolumeId'
---
--- * 'volAttachTime'
-volumeAttachment
-    :: VolumeAttachment
-volumeAttachment =
-    VolumeAttachment'
-    { _volInstanceId = Nothing
-    , _volDeleteOnTermination = Nothing
-    , _volState = Nothing
-    , _volDevice = Nothing
-    , _volVolumeId = Nothing
-    , _volAttachTime = Nothing
-    }
-
--- | The ID of the instance.
-volInstanceId :: Lens' VolumeAttachment (Maybe Text)
-volInstanceId = lens _volInstanceId (\ s a -> s{_volInstanceId = a});
-
--- | Indicates whether the EBS volume is deleted on instance termination.
-volDeleteOnTermination :: Lens' VolumeAttachment (Maybe Bool)
-volDeleteOnTermination = lens _volDeleteOnTermination (\ s a -> s{_volDeleteOnTermination = a});
-
--- | The attachment state of the volume.
-volState :: Lens' VolumeAttachment (Maybe VolumeAttachmentState)
-volState = lens _volState (\ s a -> s{_volState = a});
-
--- | The device name.
-volDevice :: Lens' VolumeAttachment (Maybe Text)
-volDevice = lens _volDevice (\ s a -> s{_volDevice = a});
-
--- | The ID of the volume.
-volVolumeId :: Lens' VolumeAttachment (Maybe Text)
-volVolumeId = lens _volVolumeId (\ s a -> s{_volVolumeId = a});
-
--- | The time stamp when the attachment initiated.
-volAttachTime :: Lens' VolumeAttachment (Maybe UTCTime)
-volAttachTime = lens _volAttachTime (\ s a -> s{_volAttachTime = a}) . mapping _Time;
-
-instance FromXML VolumeAttachment where
-        parseXML x
-          = VolumeAttachment' <$>
-              (x .@? "instanceId") <*>
-                (x .@? "deleteOnTermination")
-                <*> (x .@? "status")
-                <*> (x .@? "device")
-                <*> (x .@? "volumeId")
-                <*> (x .@? "attachTime")
-
--- | Describes an EBS volume.
---
--- /See:/ 'volumeDetail' smart constructor.
-newtype VolumeDetail = VolumeDetail'
-    { _vdSize :: Integer
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeDetail' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vdSize'
-volumeDetail
-    :: Integer -- ^ 'vdSize'
-    -> VolumeDetail
-volumeDetail pSize_ =
-    VolumeDetail'
-    { _vdSize = pSize_
-    }
-
--- | The size of the volume, in GiB.
-vdSize :: Lens' VolumeDetail Integer
-vdSize = lens _vdSize (\ s a -> s{_vdSize = a});
-
-instance ToQuery VolumeDetail where
-        toQuery VolumeDetail'{..}
-          = mconcat ["Size" =: _vdSize]
-
--- | Describes a volume status operation code.
---
--- /See:/ 'volumeStatusAction' smart constructor.
-data VolumeStatusAction = VolumeStatusAction'
-    { _vsaEventType   :: !(Maybe Text)
-    , _vsaCode        :: !(Maybe Text)
-    , _vsaDescription :: !(Maybe Text)
-    , _vsaEventId     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusAction' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsaEventType'
---
--- * 'vsaCode'
---
--- * 'vsaDescription'
---
--- * 'vsaEventId'
-volumeStatusAction
-    :: VolumeStatusAction
-volumeStatusAction =
-    VolumeStatusAction'
-    { _vsaEventType = Nothing
-    , _vsaCode = Nothing
-    , _vsaDescription = Nothing
-    , _vsaEventId = Nothing
-    }
-
--- | The event type associated with this operation.
-vsaEventType :: Lens' VolumeStatusAction (Maybe Text)
-vsaEventType = lens _vsaEventType (\ s a -> s{_vsaEventType = a});
-
--- | The code identifying the operation, for example, 'enable-volume-io'.
-vsaCode :: Lens' VolumeStatusAction (Maybe Text)
-vsaCode = lens _vsaCode (\ s a -> s{_vsaCode = a});
-
--- | A description of the operation.
-vsaDescription :: Lens' VolumeStatusAction (Maybe Text)
-vsaDescription = lens _vsaDescription (\ s a -> s{_vsaDescription = a});
-
--- | The ID of the event associated with this operation.
-vsaEventId :: Lens' VolumeStatusAction (Maybe Text)
-vsaEventId = lens _vsaEventId (\ s a -> s{_vsaEventId = a});
-
-instance FromXML VolumeStatusAction where
-        parseXML x
-          = VolumeStatusAction' <$>
-              (x .@? "eventType") <*> (x .@? "code") <*>
-                (x .@? "description")
-                <*> (x .@? "eventId")
-
--- | Describes a volume status.
---
--- /See:/ 'volumeStatusDetails' smart constructor.
-data VolumeStatusDetails = VolumeStatusDetails'
-    { _vsdStatus :: !(Maybe Text)
-    , _vsdName   :: !(Maybe VolumeStatusName)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsdStatus'
---
--- * 'vsdName'
-volumeStatusDetails
-    :: VolumeStatusDetails
-volumeStatusDetails =
-    VolumeStatusDetails'
-    { _vsdStatus = Nothing
-    , _vsdName = Nothing
-    }
-
--- | The intended status of the volume status.
-vsdStatus :: Lens' VolumeStatusDetails (Maybe Text)
-vsdStatus = lens _vsdStatus (\ s a -> s{_vsdStatus = a});
-
--- | The name of the volume status.
-vsdName :: Lens' VolumeStatusDetails (Maybe VolumeStatusName)
-vsdName = lens _vsdName (\ s a -> s{_vsdName = a});
-
-instance FromXML VolumeStatusDetails where
-        parseXML x
-          = VolumeStatusDetails' <$>
-              (x .@? "status") <*> (x .@? "name")
-
--- | Describes a volume status event.
---
--- /See:/ 'volumeStatusEvent' smart constructor.
-data VolumeStatusEvent = VolumeStatusEvent'
-    { _vseNotBefore   :: !(Maybe ISO8601)
-    , _vseEventType   :: !(Maybe Text)
-    , _vseDescription :: !(Maybe Text)
-    , _vseNotAfter    :: !(Maybe ISO8601)
-    , _vseEventId     :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusEvent' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vseNotBefore'
---
--- * 'vseEventType'
---
--- * 'vseDescription'
---
--- * 'vseNotAfter'
---
--- * 'vseEventId'
-volumeStatusEvent
-    :: VolumeStatusEvent
-volumeStatusEvent =
-    VolumeStatusEvent'
-    { _vseNotBefore = Nothing
-    , _vseEventType = Nothing
-    , _vseDescription = Nothing
-    , _vseNotAfter = Nothing
-    , _vseEventId = Nothing
-    }
-
--- | The earliest start time of the event.
-vseNotBefore :: Lens' VolumeStatusEvent (Maybe UTCTime)
-vseNotBefore = lens _vseNotBefore (\ s a -> s{_vseNotBefore = a}) . mapping _Time;
-
--- | The type of this event.
-vseEventType :: Lens' VolumeStatusEvent (Maybe Text)
-vseEventType = lens _vseEventType (\ s a -> s{_vseEventType = a});
-
--- | A description of the event.
-vseDescription :: Lens' VolumeStatusEvent (Maybe Text)
-vseDescription = lens _vseDescription (\ s a -> s{_vseDescription = a});
-
--- | The latest end time of the event.
-vseNotAfter :: Lens' VolumeStatusEvent (Maybe UTCTime)
-vseNotAfter = lens _vseNotAfter (\ s a -> s{_vseNotAfter = a}) . mapping _Time;
-
--- | The ID of this event.
-vseEventId :: Lens' VolumeStatusEvent (Maybe Text)
-vseEventId = lens _vseEventId (\ s a -> s{_vseEventId = a});
-
-instance FromXML VolumeStatusEvent where
-        parseXML x
-          = VolumeStatusEvent' <$>
-              (x .@? "notBefore") <*> (x .@? "eventType") <*>
-                (x .@? "description")
-                <*> (x .@? "notAfter")
-                <*> (x .@? "eventId")
-
--- | Describes the status of a volume.
---
--- /See:/ 'volumeStatusInfo' smart constructor.
-data VolumeStatusInfo = VolumeStatusInfo'
-    { _vsiStatus  :: !(Maybe VolumeStatusInfoStatus)
-    , _vsiDetails :: !(Maybe [VolumeStatusDetails])
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsiStatus'
---
--- * 'vsiDetails'
-volumeStatusInfo
-    :: VolumeStatusInfo
-volumeStatusInfo =
-    VolumeStatusInfo'
-    { _vsiStatus = Nothing
-    , _vsiDetails = Nothing
-    }
-
--- | The status of the volume.
-vsiStatus :: Lens' VolumeStatusInfo (Maybe VolumeStatusInfoStatus)
-vsiStatus = lens _vsiStatus (\ s a -> s{_vsiStatus = a});
-
--- | The details of the volume status.
-vsiDetails :: Lens' VolumeStatusInfo [VolumeStatusDetails]
-vsiDetails = lens _vsiDetails (\ s a -> s{_vsiDetails = a}) . _Default . _Coerce;
-
-instance FromXML VolumeStatusInfo where
-        parseXML x
-          = VolumeStatusInfo' <$>
-              (x .@? "status") <*>
-                (x .@? "details" .!@ mempty >>=
-                   may (parseXMLList "item"))
-
--- | Describes the volume status.
---
--- /See:/ 'volumeStatusItem' smart constructor.
-data VolumeStatusItem = VolumeStatusItem'
-    { _vsiVolumeStatus     :: !(Maybe VolumeStatusInfo)
-    , _vsiActions          :: !(Maybe [VolumeStatusAction])
-    , _vsiEvents           :: !(Maybe [VolumeStatusEvent])
-    , _vsiAvailabilityZone :: !(Maybe Text)
-    , _vsiVolumeId         :: !(Maybe Text)
-    } deriving (Eq,Read,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'VolumeStatusItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vsiVolumeStatus'
---
--- * 'vsiActions'
---
--- * 'vsiEvents'
---
--- * 'vsiAvailabilityZone'
---
--- * 'vsiVolumeId'
-volumeStatusItem
-    :: VolumeStatusItem
-volumeStatusItem =
-    VolumeStatusItem'
-    { _vsiVolumeStatus = Nothing
-    , _vsiActions = Nothing
-    , _vsiEvents = Nothing
-    , _vsiAvailabilityZone = Nothing
-    , _vsiVolumeId = Nothing
-    }
-
--- | The volume status.
-vsiVolumeStatus :: Lens' VolumeStatusItem (Maybe VolumeStatusInfo)
-vsiVolumeStatus = lens _vsiVolumeStatus (\ s a -> s{_vsiVolumeStatus = a});
-
--- | The details of the operation.
-vsiActions :: Lens' VolumeStatusItem [VolumeStatusAction]
-vsiActions = lens _vsiActions (\ s a -> s{_vsiActions = a}) . _Default . _Coerce;
-
--- | A list of events associated with the volume.
-vsiEvents :: Lens' VolumeStatusItem [VolumeStatusEvent]
-vsiEvents = lens _vsiEvents (\ s a -> s{_vsiEvents = a}) . _Default . _Coerce;
-
--- | The Availability Zone of the volume.
-vsiAvailabilityZone :: Lens' VolumeStatusItem (Maybe Text)
-vsiAvailabilityZone = lens _vsiAvailabilityZone (\ s a -> s{_vsiAvailabilityZone = a});
-
--- | The volume ID.
-vsiVolumeId :: Lens' VolumeStatusItem (Maybe Text)
-vsiVolumeId = lens _vsiVolumeId (\ s a -> s{_vsiVolumeId = a});
-
-instance FromXML VolumeStatusItem where
-        parseXML x
-          = VolumeStatusItem' <$>
-              (x .@? "volumeStatus") <*>
-                (x .@? "actionsSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*>
-                (x .@? "eventsSet" .!@ mempty >>=
-                   may (parseXMLList "item"))
-                <*> (x .@? "availabilityZone")
-                <*> (x .@? "volumeId")
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.EC2.Types.Product where
+
+import           Network.AWS.EC2.Internal
+import           Network.AWS.EC2.Types.Sum
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+
+-- | Describes an account attribute.
+--
+-- /See:/ 'accountAttribute' smart constructor.
+data AccountAttribute = AccountAttribute'
+    { _aaAttributeValues :: !(Maybe [AccountAttributeValue])
+    , _aaAttributeName   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AccountAttribute' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aaAttributeValues'
+--
+-- * 'aaAttributeName'
+accountAttribute
+    :: AccountAttribute
+accountAttribute =
+    AccountAttribute'
+    { _aaAttributeValues = Nothing
+    , _aaAttributeName = Nothing
+    }
+
+-- | One or more values for the account attribute.
+aaAttributeValues :: Lens' AccountAttribute [AccountAttributeValue]
+aaAttributeValues = lens _aaAttributeValues (\ s a -> s{_aaAttributeValues = a}) . _Default . _Coerce;
+
+-- | The name of the account attribute.
+aaAttributeName :: Lens' AccountAttribute (Maybe Text)
+aaAttributeName = lens _aaAttributeName (\ s a -> s{_aaAttributeName = a});
+
+instance FromXML AccountAttribute where
+        parseXML x
+          = AccountAttribute' <$>
+              (x .@? "attributeValueSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "attributeName")
+
+instance Hashable AccountAttribute
+
+-- | Describes a value of an account attribute.
+--
+-- /See:/ 'accountAttributeValue' smart constructor.
+newtype AccountAttributeValue = AccountAttributeValue'
+    { _aavAttributeValue :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AccountAttributeValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aavAttributeValue'
+accountAttributeValue
+    :: AccountAttributeValue
+accountAttributeValue =
+    AccountAttributeValue'
+    { _aavAttributeValue = Nothing
+    }
+
+-- | The value of the attribute.
+aavAttributeValue :: Lens' AccountAttributeValue (Maybe Text)
+aavAttributeValue = lens _aavAttributeValue (\ s a -> s{_aavAttributeValue = a});
+
+instance FromXML AccountAttributeValue where
+        parseXML x
+          = AccountAttributeValue' <$> (x .@? "attributeValue")
+
+instance Hashable AccountAttributeValue
+
+-- | Describes a running instance in a Spot fleet.
+--
+-- /See:/ 'activeInstance' smart constructor.
+data ActiveInstance = ActiveInstance'
+    { _aiInstanceId            :: !(Maybe Text)
+    , _aiInstanceType          :: !(Maybe Text)
+    , _aiSpotInstanceRequestId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ActiveInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aiInstanceId'
+--
+-- * 'aiInstanceType'
+--
+-- * 'aiSpotInstanceRequestId'
+activeInstance
+    :: ActiveInstance
+activeInstance =
+    ActiveInstance'
+    { _aiInstanceId = Nothing
+    , _aiInstanceType = Nothing
+    , _aiSpotInstanceRequestId = Nothing
+    }
+
+-- | The ID of the instance.
+aiInstanceId :: Lens' ActiveInstance (Maybe Text)
+aiInstanceId = lens _aiInstanceId (\ s a -> s{_aiInstanceId = a});
+
+-- | The instance type.
+aiInstanceType :: Lens' ActiveInstance (Maybe Text)
+aiInstanceType = lens _aiInstanceType (\ s a -> s{_aiInstanceType = a});
+
+-- | The ID of the Spot instance request.
+aiSpotInstanceRequestId :: Lens' ActiveInstance (Maybe Text)
+aiSpotInstanceRequestId = lens _aiSpotInstanceRequestId (\ s a -> s{_aiSpotInstanceRequestId = a});
+
+instance FromXML ActiveInstance where
+        parseXML x
+          = ActiveInstance' <$>
+              (x .@? "instanceId") <*> (x .@? "instanceType") <*>
+                (x .@? "spotInstanceRequestId")
+
+instance Hashable ActiveInstance
+
+-- | Describes an Elastic IP address.
+--
+-- /See:/ 'address' smart constructor.
+data Address = Address'
+    { _aAssociationId           :: !(Maybe Text)
+    , _aInstanceId              :: !(Maybe Text)
+    , _aNetworkInterfaceOwnerId :: !(Maybe Text)
+    , _aAllocationId            :: !(Maybe Text)
+    , _aDomain                  :: !(Maybe DomainType)
+    , _aNetworkInterfaceId      :: !(Maybe Text)
+    , _aPrivateIPAddress        :: !(Maybe Text)
+    , _aPublicIP                :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Address' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aAssociationId'
+--
+-- * 'aInstanceId'
+--
+-- * 'aNetworkInterfaceOwnerId'
+--
+-- * 'aAllocationId'
+--
+-- * 'aDomain'
+--
+-- * 'aNetworkInterfaceId'
+--
+-- * 'aPrivateIPAddress'
+--
+-- * 'aPublicIP'
+address
+    :: Address
+address =
+    Address'
+    { _aAssociationId = Nothing
+    , _aInstanceId = Nothing
+    , _aNetworkInterfaceOwnerId = Nothing
+    , _aAllocationId = Nothing
+    , _aDomain = Nothing
+    , _aNetworkInterfaceId = Nothing
+    , _aPrivateIPAddress = Nothing
+    , _aPublicIP = Nothing
+    }
+
+-- | The ID representing the association of the address with an instance in a
+-- VPC.
+aAssociationId :: Lens' Address (Maybe Text)
+aAssociationId = lens _aAssociationId (\ s a -> s{_aAssociationId = a});
+
+-- | The ID of the instance that the address is associated with (if any).
+aInstanceId :: Lens' Address (Maybe Text)
+aInstanceId = lens _aInstanceId (\ s a -> s{_aInstanceId = a});
+
+-- | The ID of the AWS account that owns the network interface.
+aNetworkInterfaceOwnerId :: Lens' Address (Maybe Text)
+aNetworkInterfaceOwnerId = lens _aNetworkInterfaceOwnerId (\ s a -> s{_aNetworkInterfaceOwnerId = a});
+
+-- | The ID representing the allocation of the address for use with EC2-VPC.
+aAllocationId :: Lens' Address (Maybe Text)
+aAllocationId = lens _aAllocationId (\ s a -> s{_aAllocationId = a});
+
+-- | Indicates whether this Elastic IP address is for use with instances in
+-- EC2-Classic ('standard') or instances in a VPC ('vpc').
+aDomain :: Lens' Address (Maybe DomainType)
+aDomain = lens _aDomain (\ s a -> s{_aDomain = a});
+
+-- | The ID of the network interface.
+aNetworkInterfaceId :: Lens' Address (Maybe Text)
+aNetworkInterfaceId = lens _aNetworkInterfaceId (\ s a -> s{_aNetworkInterfaceId = a});
+
+-- | The private IP address associated with the Elastic IP address.
+aPrivateIPAddress :: Lens' Address (Maybe Text)
+aPrivateIPAddress = lens _aPrivateIPAddress (\ s a -> s{_aPrivateIPAddress = a});
+
+-- | The Elastic IP address.
+aPublicIP :: Lens' Address (Maybe Text)
+aPublicIP = lens _aPublicIP (\ s a -> s{_aPublicIP = a});
+
+instance FromXML Address where
+        parseXML x
+          = Address' <$>
+              (x .@? "associationId") <*> (x .@? "instanceId") <*>
+                (x .@? "networkInterfaceOwnerId")
+                <*> (x .@? "allocationId")
+                <*> (x .@? "domain")
+                <*> (x .@? "networkInterfaceId")
+                <*> (x .@? "privateIpAddress")
+                <*> (x .@? "publicIp")
+
+instance Hashable Address
+
+-- | The value to use when a resource attribute accepts a Boolean value.
+--
+-- /See:/ 'attributeBooleanValue' smart constructor.
+newtype AttributeBooleanValue = AttributeBooleanValue'
+    { _abvValue :: Maybe Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AttributeBooleanValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'abvValue'
+attributeBooleanValue
+    :: AttributeBooleanValue
+attributeBooleanValue =
+    AttributeBooleanValue'
+    { _abvValue = Nothing
+    }
+
+-- | Valid values are 'true' or 'false'.
+abvValue :: Lens' AttributeBooleanValue (Maybe Bool)
+abvValue = lens _abvValue (\ s a -> s{_abvValue = a});
+
+instance FromXML AttributeBooleanValue where
+        parseXML x
+          = AttributeBooleanValue' <$> (x .@? "value")
+
+instance Hashable AttributeBooleanValue
+
+instance ToQuery AttributeBooleanValue where
+        toQuery AttributeBooleanValue'{..}
+          = mconcat ["Value" =: _abvValue]
+
+-- | The value to use for a resource attribute.
+--
+-- /See:/ 'attributeValue' smart constructor.
+newtype AttributeValue = AttributeValue'
+    { _avValue :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AttributeValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'avValue'
+attributeValue
+    :: AttributeValue
+attributeValue =
+    AttributeValue'
+    { _avValue = Nothing
+    }
+
+-- | Valid values are case-sensitive and vary by action.
+avValue :: Lens' AttributeValue (Maybe Text)
+avValue = lens _avValue (\ s a -> s{_avValue = a});
+
+instance FromXML AttributeValue where
+        parseXML x = AttributeValue' <$> (x .@? "value")
+
+instance Hashable AttributeValue
+
+instance ToQuery AttributeValue where
+        toQuery AttributeValue'{..}
+          = mconcat ["Value" =: _avValue]
+
+-- | Describes an Availability Zone.
+--
+-- /See:/ 'availabilityZone' smart constructor.
+data AvailabilityZone = AvailabilityZone'
+    { _azState      :: !(Maybe AvailabilityZoneState)
+    , _azRegionName :: !(Maybe Text)
+    , _azZoneName   :: !(Maybe Text)
+    , _azMessages   :: !(Maybe [AvailabilityZoneMessage])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AvailabilityZone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'azState'
+--
+-- * 'azRegionName'
+--
+-- * 'azZoneName'
+--
+-- * 'azMessages'
+availabilityZone
+    :: AvailabilityZone
+availabilityZone =
+    AvailabilityZone'
+    { _azState = Nothing
+    , _azRegionName = Nothing
+    , _azZoneName = Nothing
+    , _azMessages = Nothing
+    }
+
+-- | The state of the Availability Zone.
+azState :: Lens' AvailabilityZone (Maybe AvailabilityZoneState)
+azState = lens _azState (\ s a -> s{_azState = a});
+
+-- | The name of the region.
+azRegionName :: Lens' AvailabilityZone (Maybe Text)
+azRegionName = lens _azRegionName (\ s a -> s{_azRegionName = a});
+
+-- | The name of the Availability Zone.
+azZoneName :: Lens' AvailabilityZone (Maybe Text)
+azZoneName = lens _azZoneName (\ s a -> s{_azZoneName = a});
+
+-- | Any messages about the Availability Zone.
+azMessages :: Lens' AvailabilityZone [AvailabilityZoneMessage]
+azMessages = lens _azMessages (\ s a -> s{_azMessages = a}) . _Default . _Coerce;
+
+instance FromXML AvailabilityZone where
+        parseXML x
+          = AvailabilityZone' <$>
+              (x .@? "zoneState") <*> (x .@? "regionName") <*>
+                (x .@? "zoneName")
+                <*>
+                (x .@? "messageSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable AvailabilityZone
+
+-- | Describes a message about an Availability Zone.
+--
+-- /See:/ 'availabilityZoneMessage' smart constructor.
+newtype AvailabilityZoneMessage = AvailabilityZoneMessage'
+    { _azmMessage :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AvailabilityZoneMessage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'azmMessage'
+availabilityZoneMessage
+    :: AvailabilityZoneMessage
+availabilityZoneMessage =
+    AvailabilityZoneMessage'
+    { _azmMessage = Nothing
+    }
+
+-- | The message about the Availability Zone.
+azmMessage :: Lens' AvailabilityZoneMessage (Maybe Text)
+azmMessage = lens _azmMessage (\ s a -> s{_azmMessage = a});
+
+instance FromXML AvailabilityZoneMessage where
+        parseXML x
+          = AvailabilityZoneMessage' <$> (x .@? "message")
+
+instance Hashable AvailabilityZoneMessage
+
+-- | The capacity information for instances launched onto the Dedicated host.
+--
+-- /See:/ 'availableCapacity' smart constructor.
+data AvailableCapacity = AvailableCapacity'
+    { _acAvailableInstanceCapacity :: !(Maybe [InstanceCapacity])
+    , _acAvailableVCPUs            :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AvailableCapacity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acAvailableInstanceCapacity'
+--
+-- * 'acAvailableVCPUs'
+availableCapacity
+    :: AvailableCapacity
+availableCapacity =
+    AvailableCapacity'
+    { _acAvailableInstanceCapacity = Nothing
+    , _acAvailableVCPUs = Nothing
+    }
+
+-- | The total number of instances that the Dedicated host supports.
+acAvailableInstanceCapacity :: Lens' AvailableCapacity [InstanceCapacity]
+acAvailableInstanceCapacity = lens _acAvailableInstanceCapacity (\ s a -> s{_acAvailableInstanceCapacity = a}) . _Default . _Coerce;
+
+-- | The number of vCPUs available on the Dedicated host.
+acAvailableVCPUs :: Lens' AvailableCapacity (Maybe Int)
+acAvailableVCPUs = lens _acAvailableVCPUs (\ s a -> s{_acAvailableVCPUs = a});
+
+instance FromXML AvailableCapacity where
+        parseXML x
+          = AvailableCapacity' <$>
+              (x .@? "availableInstanceCapacity" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "availableVCpus")
+
+instance Hashable AvailableCapacity
+
+-- | /See:/ 'blobAttributeValue' smart constructor.
+newtype BlobAttributeValue = BlobAttributeValue'
+    { _bavValue :: Maybe Base64
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlobAttributeValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bavValue'
+blobAttributeValue
+    :: BlobAttributeValue
+blobAttributeValue =
+    BlobAttributeValue'
+    { _bavValue = Nothing
+    }
+
+-- | Undocumented member.
+--
+-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data,
+-- despite what the AWS documentation might say.
+-- The underlying isomorphism will encode to Base64 representation during
+-- serialisation, and decode from Base64 representation during deserialisation.
+-- This 'Lens' accepts and returns only raw unencoded data.
+bavValue :: Lens' BlobAttributeValue (Maybe ByteString)
+bavValue = lens _bavValue (\ s a -> s{_bavValue = a}) . mapping _Base64;
+
+instance Hashable BlobAttributeValue
+
+instance ToQuery BlobAttributeValue where
+        toQuery BlobAttributeValue'{..}
+          = mconcat ["Value" =: _bavValue]
+
+-- | Describes a block device mapping.
+--
+-- /See:/ 'blockDeviceMapping' smart constructor.
+data BlockDeviceMapping = BlockDeviceMapping'
+    { _bdmVirtualName :: !(Maybe Text)
+    , _bdmNoDevice    :: !(Maybe Text)
+    , _bdmEBS         :: !(Maybe EBSBlockDevice)
+    , _bdmDeviceName  :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BlockDeviceMapping' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bdmVirtualName'
+--
+-- * 'bdmNoDevice'
+--
+-- * 'bdmEBS'
+--
+-- * 'bdmDeviceName'
+blockDeviceMapping
+    :: Text -- ^ 'bdmDeviceName'
+    -> BlockDeviceMapping
+blockDeviceMapping pDeviceName_ =
+    BlockDeviceMapping'
+    { _bdmVirtualName = Nothing
+    , _bdmNoDevice = Nothing
+    , _bdmEBS = Nothing
+    , _bdmDeviceName = pDeviceName_
+    }
+
+-- | The virtual device name ('ephemeral'N). Instance store volumes are
+-- numbered starting from 0. An instance type with 2 available instance
+-- store volumes can specify mappings for 'ephemeral0' and 'ephemeral1'.The
+-- number of available instance store volumes depends on the instance type.
+-- After you connect to the instance, you must mount the volume.
+--
+-- Constraints: For M3 instances, you must specify instance store volumes
+-- in the block device mapping for the instance. When you launch an M3
+-- instance, we ignore any instance store volumes specified in the block
+-- device mapping for the AMI.
+bdmVirtualName :: Lens' BlockDeviceMapping (Maybe Text)
+bdmVirtualName = lens _bdmVirtualName (\ s a -> s{_bdmVirtualName = a});
+
+-- | Suppresses the specified device included in the block device mapping of
+-- the AMI.
+bdmNoDevice :: Lens' BlockDeviceMapping (Maybe Text)
+bdmNoDevice = lens _bdmNoDevice (\ s a -> s{_bdmNoDevice = a});
+
+-- | Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+bdmEBS :: Lens' BlockDeviceMapping (Maybe EBSBlockDevice)
+bdmEBS = lens _bdmEBS (\ s a -> s{_bdmEBS = a});
+
+-- | The device name exposed to the instance (for example, '\/dev\/sdh' or
+-- 'xvdh').
+bdmDeviceName :: Lens' BlockDeviceMapping Text
+bdmDeviceName = lens _bdmDeviceName (\ s a -> s{_bdmDeviceName = a});
+
+instance FromXML BlockDeviceMapping where
+        parseXML x
+          = BlockDeviceMapping' <$>
+              (x .@? "virtualName") <*> (x .@? "noDevice") <*>
+                (x .@? "ebs")
+                <*> (x .@ "deviceName")
+
+instance Hashable BlockDeviceMapping
+
+instance ToQuery BlockDeviceMapping where
+        toQuery BlockDeviceMapping'{..}
+          = mconcat
+              ["VirtualName" =: _bdmVirtualName,
+               "NoDevice" =: _bdmNoDevice, "Ebs" =: _bdmEBS,
+               "DeviceName" =: _bdmDeviceName]
+
+-- | Describes a bundle task.
+--
+-- /See:/ 'bundleTask' smart constructor.
+data BundleTask = BundleTask'
+    { _btBundleTaskError :: !(Maybe BundleTaskError)
+    , _btBundleId        :: !Text
+    , _btInstanceId      :: !Text
+    , _btProgress        :: !Text
+    , _btStartTime       :: !ISO8601
+    , _btState           :: !BundleTaskState
+    , _btStorage         :: !Storage
+    , _btUpdateTime      :: !ISO8601
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BundleTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'btBundleTaskError'
+--
+-- * 'btBundleId'
+--
+-- * 'btInstanceId'
+--
+-- * 'btProgress'
+--
+-- * 'btStartTime'
+--
+-- * 'btState'
+--
+-- * 'btStorage'
+--
+-- * 'btUpdateTime'
+bundleTask
+    :: Text -- ^ 'btBundleId'
+    -> Text -- ^ 'btInstanceId'
+    -> Text -- ^ 'btProgress'
+    -> UTCTime -- ^ 'btStartTime'
+    -> BundleTaskState -- ^ 'btState'
+    -> Storage -- ^ 'btStorage'
+    -> UTCTime -- ^ 'btUpdateTime'
+    -> BundleTask
+bundleTask pBundleId_ pInstanceId_ pProgress_ pStartTime_ pState_ pStorage_ pUpdateTime_ =
+    BundleTask'
+    { _btBundleTaskError = Nothing
+    , _btBundleId = pBundleId_
+    , _btInstanceId = pInstanceId_
+    , _btProgress = pProgress_
+    , _btStartTime = _Time # pStartTime_
+    , _btState = pState_
+    , _btStorage = pStorage_
+    , _btUpdateTime = _Time # pUpdateTime_
+    }
+
+-- | If the task fails, a description of the error.
+btBundleTaskError :: Lens' BundleTask (Maybe BundleTaskError)
+btBundleTaskError = lens _btBundleTaskError (\ s a -> s{_btBundleTaskError = a});
+
+-- | The ID of the bundle task.
+btBundleId :: Lens' BundleTask Text
+btBundleId = lens _btBundleId (\ s a -> s{_btBundleId = a});
+
+-- | The ID of the instance associated with this bundle task.
+btInstanceId :: Lens' BundleTask Text
+btInstanceId = lens _btInstanceId (\ s a -> s{_btInstanceId = a});
+
+-- | The level of task completion, as a percent (for example, 20%).
+btProgress :: Lens' BundleTask Text
+btProgress = lens _btProgress (\ s a -> s{_btProgress = a});
+
+-- | The time this task started.
+btStartTime :: Lens' BundleTask UTCTime
+btStartTime = lens _btStartTime (\ s a -> s{_btStartTime = a}) . _Time;
+
+-- | The state of the task.
+btState :: Lens' BundleTask BundleTaskState
+btState = lens _btState (\ s a -> s{_btState = a});
+
+-- | The Amazon S3 storage locations.
+btStorage :: Lens' BundleTask Storage
+btStorage = lens _btStorage (\ s a -> s{_btStorage = a});
+
+-- | The time of the most recent update for the task.
+btUpdateTime :: Lens' BundleTask UTCTime
+btUpdateTime = lens _btUpdateTime (\ s a -> s{_btUpdateTime = a}) . _Time;
+
+instance FromXML BundleTask where
+        parseXML x
+          = BundleTask' <$>
+              (x .@? "error") <*> (x .@ "bundleId") <*>
+                (x .@ "instanceId")
+                <*> (x .@ "progress")
+                <*> (x .@ "startTime")
+                <*> (x .@ "state")
+                <*> (x .@ "storage")
+                <*> (x .@ "updateTime")
+
+instance Hashable BundleTask
+
+-- | Describes an error for < BundleInstance>.
+--
+-- /See:/ 'bundleTaskError' smart constructor.
+data BundleTaskError = BundleTaskError'
+    { _bteCode    :: !(Maybe Text)
+    , _bteMessage :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BundleTaskError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bteCode'
+--
+-- * 'bteMessage'
+bundleTaskError
+    :: BundleTaskError
+bundleTaskError =
+    BundleTaskError'
+    { _bteCode = Nothing
+    , _bteMessage = Nothing
+    }
+
+-- | The error code.
+bteCode :: Lens' BundleTaskError (Maybe Text)
+bteCode = lens _bteCode (\ s a -> s{_bteCode = a});
+
+-- | The error message.
+bteMessage :: Lens' BundleTaskError (Maybe Text)
+bteMessage = lens _bteMessage (\ s a -> s{_bteMessage = a});
+
+instance FromXML BundleTaskError where
+        parseXML x
+          = BundleTaskError' <$>
+              (x .@? "code") <*> (x .@? "message")
+
+instance Hashable BundleTaskError
+
+-- | Describes a Spot fleet error.
+--
+-- /See:/ 'cancelSpotFleetRequestsError' smart constructor.
+data CancelSpotFleetRequestsError = CancelSpotFleetRequestsError'
+    { _csfreCode    :: !CancelBatchErrorCode
+    , _csfreMessage :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelSpotFleetRequestsError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csfreCode'
+--
+-- * 'csfreMessage'
+cancelSpotFleetRequestsError
+    :: CancelBatchErrorCode -- ^ 'csfreCode'
+    -> Text -- ^ 'csfreMessage'
+    -> CancelSpotFleetRequestsError
+cancelSpotFleetRequestsError pCode_ pMessage_ =
+    CancelSpotFleetRequestsError'
+    { _csfreCode = pCode_
+    , _csfreMessage = pMessage_
+    }
+
+-- | The error code.
+csfreCode :: Lens' CancelSpotFleetRequestsError CancelBatchErrorCode
+csfreCode = lens _csfreCode (\ s a -> s{_csfreCode = a});
+
+-- | The description for the error code.
+csfreMessage :: Lens' CancelSpotFleetRequestsError Text
+csfreMessage = lens _csfreMessage (\ s a -> s{_csfreMessage = a});
+
+instance FromXML CancelSpotFleetRequestsError where
+        parseXML x
+          = CancelSpotFleetRequestsError' <$>
+              (x .@ "code") <*> (x .@ "message")
+
+instance Hashable CancelSpotFleetRequestsError
+
+-- | Describes a Spot fleet request that was not successfully canceled.
+--
+-- /See:/ 'cancelSpotFleetRequestsErrorItem' smart constructor.
+data CancelSpotFleetRequestsErrorItem = CancelSpotFleetRequestsErrorItem'
+    { _csfreiSpotFleetRequestId :: !Text
+    , _csfreiError              :: !CancelSpotFleetRequestsError
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelSpotFleetRequestsErrorItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csfreiSpotFleetRequestId'
+--
+-- * 'csfreiError'
+cancelSpotFleetRequestsErrorItem
+    :: Text -- ^ 'csfreiSpotFleetRequestId'
+    -> CancelSpotFleetRequestsError -- ^ 'csfreiError'
+    -> CancelSpotFleetRequestsErrorItem
+cancelSpotFleetRequestsErrorItem pSpotFleetRequestId_ pError_ =
+    CancelSpotFleetRequestsErrorItem'
+    { _csfreiSpotFleetRequestId = pSpotFleetRequestId_
+    , _csfreiError = pError_
+    }
+
+-- | The ID of the Spot fleet request.
+csfreiSpotFleetRequestId :: Lens' CancelSpotFleetRequestsErrorItem Text
+csfreiSpotFleetRequestId = lens _csfreiSpotFleetRequestId (\ s a -> s{_csfreiSpotFleetRequestId = a});
+
+-- | The error.
+csfreiError :: Lens' CancelSpotFleetRequestsErrorItem CancelSpotFleetRequestsError
+csfreiError = lens _csfreiError (\ s a -> s{_csfreiError = a});
+
+instance FromXML CancelSpotFleetRequestsErrorItem
+         where
+        parseXML x
+          = CancelSpotFleetRequestsErrorItem' <$>
+              (x .@ "spotFleetRequestId") <*> (x .@ "error")
+
+instance Hashable CancelSpotFleetRequestsErrorItem
+
+-- | Describes a Spot fleet request that was successfully canceled.
+--
+-- /See:/ 'cancelSpotFleetRequestsSuccessItem' smart constructor.
+data CancelSpotFleetRequestsSuccessItem = CancelSpotFleetRequestsSuccessItem'
+    { _csfrsiSpotFleetRequestId            :: !Text
+    , _csfrsiCurrentSpotFleetRequestState  :: !BatchState
+    , _csfrsiPreviousSpotFleetRequestState :: !BatchState
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelSpotFleetRequestsSuccessItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csfrsiSpotFleetRequestId'
+--
+-- * 'csfrsiCurrentSpotFleetRequestState'
+--
+-- * 'csfrsiPreviousSpotFleetRequestState'
+cancelSpotFleetRequestsSuccessItem
+    :: Text -- ^ 'csfrsiSpotFleetRequestId'
+    -> BatchState -- ^ 'csfrsiCurrentSpotFleetRequestState'
+    -> BatchState -- ^ 'csfrsiPreviousSpotFleetRequestState'
+    -> CancelSpotFleetRequestsSuccessItem
+cancelSpotFleetRequestsSuccessItem pSpotFleetRequestId_ pCurrentSpotFleetRequestState_ pPreviousSpotFleetRequestState_ =
+    CancelSpotFleetRequestsSuccessItem'
+    { _csfrsiSpotFleetRequestId = pSpotFleetRequestId_
+    , _csfrsiCurrentSpotFleetRequestState = pCurrentSpotFleetRequestState_
+    , _csfrsiPreviousSpotFleetRequestState = pPreviousSpotFleetRequestState_
+    }
+
+-- | The ID of the Spot fleet request.
+csfrsiSpotFleetRequestId :: Lens' CancelSpotFleetRequestsSuccessItem Text
+csfrsiSpotFleetRequestId = lens _csfrsiSpotFleetRequestId (\ s a -> s{_csfrsiSpotFleetRequestId = a});
+
+-- | The current state of the Spot fleet request.
+csfrsiCurrentSpotFleetRequestState :: Lens' CancelSpotFleetRequestsSuccessItem BatchState
+csfrsiCurrentSpotFleetRequestState = lens _csfrsiCurrentSpotFleetRequestState (\ s a -> s{_csfrsiCurrentSpotFleetRequestState = a});
+
+-- | The previous state of the Spot fleet request.
+csfrsiPreviousSpotFleetRequestState :: Lens' CancelSpotFleetRequestsSuccessItem BatchState
+csfrsiPreviousSpotFleetRequestState = lens _csfrsiPreviousSpotFleetRequestState (\ s a -> s{_csfrsiPreviousSpotFleetRequestState = a});
+
+instance FromXML CancelSpotFleetRequestsSuccessItem
+         where
+        parseXML x
+          = CancelSpotFleetRequestsSuccessItem' <$>
+              (x .@ "spotFleetRequestId") <*>
+                (x .@ "currentSpotFleetRequestState")
+                <*> (x .@ "previousSpotFleetRequestState")
+
+instance Hashable CancelSpotFleetRequestsSuccessItem
+
+-- | Describes a request to cancel a Spot instance.
+--
+-- /See:/ 'cancelledSpotInstanceRequest' smart constructor.
+data CancelledSpotInstanceRequest = CancelledSpotInstanceRequest'
+    { _csirState                 :: !(Maybe CancelSpotInstanceRequestState)
+    , _csirSpotInstanceRequestId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CancelledSpotInstanceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csirState'
+--
+-- * 'csirSpotInstanceRequestId'
+cancelledSpotInstanceRequest
+    :: CancelledSpotInstanceRequest
+cancelledSpotInstanceRequest =
+    CancelledSpotInstanceRequest'
+    { _csirState = Nothing
+    , _csirSpotInstanceRequestId = Nothing
+    }
+
+-- | The state of the Spot instance request.
+csirState :: Lens' CancelledSpotInstanceRequest (Maybe CancelSpotInstanceRequestState)
+csirState = lens _csirState (\ s a -> s{_csirState = a});
+
+-- | The ID of the Spot instance request.
+csirSpotInstanceRequestId :: Lens' CancelledSpotInstanceRequest (Maybe Text)
+csirSpotInstanceRequestId = lens _csirSpotInstanceRequestId (\ s a -> s{_csirSpotInstanceRequestId = a});
+
+instance FromXML CancelledSpotInstanceRequest where
+        parseXML x
+          = CancelledSpotInstanceRequest' <$>
+              (x .@? "state") <*> (x .@? "spotInstanceRequestId")
+
+instance Hashable CancelledSpotInstanceRequest
+
+-- | Describes the ClassicLink DNS support status of a VPC.
+--
+-- /See:/ 'classicLinkDNSSupport' smart constructor.
+data ClassicLinkDNSSupport = ClassicLinkDNSSupport'
+    { _cldsVPCId                   :: !(Maybe Text)
+    , _cldsClassicLinkDNSSupported :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClassicLinkDNSSupport' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cldsVPCId'
+--
+-- * 'cldsClassicLinkDNSSupported'
+classicLinkDNSSupport
+    :: ClassicLinkDNSSupport
+classicLinkDNSSupport =
+    ClassicLinkDNSSupport'
+    { _cldsVPCId = Nothing
+    , _cldsClassicLinkDNSSupported = Nothing
+    }
+
+-- | The ID of the VPC.
+cldsVPCId :: Lens' ClassicLinkDNSSupport (Maybe Text)
+cldsVPCId = lens _cldsVPCId (\ s a -> s{_cldsVPCId = a});
+
+-- | Indicates whether ClassicLink DNS support is enabled for the VPC.
+cldsClassicLinkDNSSupported :: Lens' ClassicLinkDNSSupport (Maybe Bool)
+cldsClassicLinkDNSSupported = lens _cldsClassicLinkDNSSupported (\ s a -> s{_cldsClassicLinkDNSSupported = a});
+
+instance FromXML ClassicLinkDNSSupport where
+        parseXML x
+          = ClassicLinkDNSSupport' <$>
+              (x .@? "vpcId") <*> (x .@? "classicLinkDnsSupported")
+
+instance Hashable ClassicLinkDNSSupport
+
+-- | Describes a linked EC2-Classic instance.
+--
+-- /See:/ 'classicLinkInstance' smart constructor.
+data ClassicLinkInstance = ClassicLinkInstance'
+    { _cliInstanceId :: !(Maybe Text)
+    , _cliGroups     :: !(Maybe [GroupIdentifier])
+    , _cliVPCId      :: !(Maybe Text)
+    , _cliTags       :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClassicLinkInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cliInstanceId'
+--
+-- * 'cliGroups'
+--
+-- * 'cliVPCId'
+--
+-- * 'cliTags'
+classicLinkInstance
+    :: ClassicLinkInstance
+classicLinkInstance =
+    ClassicLinkInstance'
+    { _cliInstanceId = Nothing
+    , _cliGroups = Nothing
+    , _cliVPCId = Nothing
+    , _cliTags = Nothing
+    }
+
+-- | The ID of the instance.
+cliInstanceId :: Lens' ClassicLinkInstance (Maybe Text)
+cliInstanceId = lens _cliInstanceId (\ s a -> s{_cliInstanceId = a});
+
+-- | A list of security groups.
+cliGroups :: Lens' ClassicLinkInstance [GroupIdentifier]
+cliGroups = lens _cliGroups (\ s a -> s{_cliGroups = a}) . _Default . _Coerce;
+
+-- | The ID of the VPC.
+cliVPCId :: Lens' ClassicLinkInstance (Maybe Text)
+cliVPCId = lens _cliVPCId (\ s a -> s{_cliVPCId = a});
+
+-- | Any tags assigned to the instance.
+cliTags :: Lens' ClassicLinkInstance [Tag]
+cliTags = lens _cliTags (\ s a -> s{_cliTags = a}) . _Default . _Coerce;
+
+instance FromXML ClassicLinkInstance where
+        parseXML x
+          = ClassicLinkInstance' <$>
+              (x .@? "instanceId") <*>
+                (x .@? "groupSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "vpcId")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable ClassicLinkInstance
+
+-- | Describes the client-specific data.
+--
+-- /See:/ 'clientData' smart constructor.
+data ClientData = ClientData'
+    { _cdUploadStart :: !(Maybe ISO8601)
+    , _cdUploadSize  :: !(Maybe Double)
+    , _cdUploadEnd   :: !(Maybe ISO8601)
+    , _cdComment     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ClientData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdUploadStart'
+--
+-- * 'cdUploadSize'
+--
+-- * 'cdUploadEnd'
+--
+-- * 'cdComment'
+clientData
+    :: ClientData
+clientData =
+    ClientData'
+    { _cdUploadStart = Nothing
+    , _cdUploadSize = Nothing
+    , _cdUploadEnd = Nothing
+    , _cdComment = Nothing
+    }
+
+-- | The time that the disk upload starts.
+cdUploadStart :: Lens' ClientData (Maybe UTCTime)
+cdUploadStart = lens _cdUploadStart (\ s a -> s{_cdUploadStart = a}) . mapping _Time;
+
+-- | The size of the uploaded disk image, in GiB.
+cdUploadSize :: Lens' ClientData (Maybe Double)
+cdUploadSize = lens _cdUploadSize (\ s a -> s{_cdUploadSize = a});
+
+-- | The time that the disk upload ends.
+cdUploadEnd :: Lens' ClientData (Maybe UTCTime)
+cdUploadEnd = lens _cdUploadEnd (\ s a -> s{_cdUploadEnd = a}) . mapping _Time;
+
+-- | A user-defined comment about the disk upload.
+cdComment :: Lens' ClientData (Maybe Text)
+cdComment = lens _cdComment (\ s a -> s{_cdComment = a});
+
+instance Hashable ClientData
+
+instance ToQuery ClientData where
+        toQuery ClientData'{..}
+          = mconcat
+              ["UploadStart" =: _cdUploadStart,
+               "UploadSize" =: _cdUploadSize,
+               "UploadEnd" =: _cdUploadEnd, "Comment" =: _cdComment]
+
+-- | Describes a conversion task.
+--
+-- /See:/ 'conversionTask' smart constructor.
+data ConversionTask = ConversionTask'
+    { _ctImportInstance   :: !(Maybe ImportInstanceTaskDetails)
+    , _ctStatusMessage    :: !(Maybe Text)
+    , _ctImportVolume     :: !(Maybe ImportVolumeTaskDetails)
+    , _ctExpirationTime   :: !(Maybe Text)
+    , _ctTags             :: !(Maybe [Tag])
+    , _ctConversionTaskId :: !Text
+    , _ctState            :: !ConversionTaskState
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ConversionTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctImportInstance'
+--
+-- * 'ctStatusMessage'
+--
+-- * 'ctImportVolume'
+--
+-- * 'ctExpirationTime'
+--
+-- * 'ctTags'
+--
+-- * 'ctConversionTaskId'
+--
+-- * 'ctState'
+conversionTask
+    :: Text -- ^ 'ctConversionTaskId'
+    -> ConversionTaskState -- ^ 'ctState'
+    -> ConversionTask
+conversionTask pConversionTaskId_ pState_ =
+    ConversionTask'
+    { _ctImportInstance = Nothing
+    , _ctStatusMessage = Nothing
+    , _ctImportVolume = Nothing
+    , _ctExpirationTime = Nothing
+    , _ctTags = Nothing
+    , _ctConversionTaskId = pConversionTaskId_
+    , _ctState = pState_
+    }
+
+-- | If the task is for importing an instance, this contains information
+-- about the import instance task.
+ctImportInstance :: Lens' ConversionTask (Maybe ImportInstanceTaskDetails)
+ctImportInstance = lens _ctImportInstance (\ s a -> s{_ctImportInstance = a});
+
+-- | The status message related to the conversion task.
+ctStatusMessage :: Lens' ConversionTask (Maybe Text)
+ctStatusMessage = lens _ctStatusMessage (\ s a -> s{_ctStatusMessage = a});
+
+-- | If the task is for importing a volume, this contains information about
+-- the import volume task.
+ctImportVolume :: Lens' ConversionTask (Maybe ImportVolumeTaskDetails)
+ctImportVolume = lens _ctImportVolume (\ s a -> s{_ctImportVolume = a});
+
+-- | The time when the task expires. If the upload isn\'t complete before the
+-- expiration time, we automatically cancel the task.
+ctExpirationTime :: Lens' ConversionTask (Maybe Text)
+ctExpirationTime = lens _ctExpirationTime (\ s a -> s{_ctExpirationTime = a});
+
+-- | Any tags assigned to the task.
+ctTags :: Lens' ConversionTask [Tag]
+ctTags = lens _ctTags (\ s a -> s{_ctTags = a}) . _Default . _Coerce;
+
+-- | The ID of the conversion task.
+ctConversionTaskId :: Lens' ConversionTask Text
+ctConversionTaskId = lens _ctConversionTaskId (\ s a -> s{_ctConversionTaskId = a});
+
+-- | The state of the conversion task.
+ctState :: Lens' ConversionTask ConversionTaskState
+ctState = lens _ctState (\ s a -> s{_ctState = a});
+
+instance FromXML ConversionTask where
+        parseXML x
+          = ConversionTask' <$>
+              (x .@? "importInstance") <*> (x .@? "statusMessage")
+                <*> (x .@? "importVolume")
+                <*> (x .@? "expirationTime")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "conversionTaskId")
+                <*> (x .@ "state")
+
+instance Hashable ConversionTask
+
+-- | Describes the user or group to be added or removed from the permissions
+-- for a volume.
+--
+-- /See:/ 'createVolumePermission' smart constructor.
+data CreateVolumePermission = CreateVolumePermission'
+    { _cvpGroup  :: !(Maybe PermissionGroup)
+    , _cvpUserId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateVolumePermission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cvpGroup'
+--
+-- * 'cvpUserId'
+createVolumePermission
+    :: CreateVolumePermission
+createVolumePermission =
+    CreateVolumePermission'
+    { _cvpGroup = Nothing
+    , _cvpUserId = Nothing
+    }
+
+-- | The specific group that is to be added or removed from a volume\'s list
+-- of create volume permissions.
+cvpGroup :: Lens' CreateVolumePermission (Maybe PermissionGroup)
+cvpGroup = lens _cvpGroup (\ s a -> s{_cvpGroup = a});
+
+-- | The specific AWS account ID that is to be added or removed from a
+-- volume\'s list of create volume permissions.
+cvpUserId :: Lens' CreateVolumePermission (Maybe Text)
+cvpUserId = lens _cvpUserId (\ s a -> s{_cvpUserId = a});
+
+instance FromXML CreateVolumePermission where
+        parseXML x
+          = CreateVolumePermission' <$>
+              (x .@? "group") <*> (x .@? "userId")
+
+instance Hashable CreateVolumePermission
+
+instance ToQuery CreateVolumePermission where
+        toQuery CreateVolumePermission'{..}
+          = mconcat
+              ["Group" =: _cvpGroup, "UserId" =: _cvpUserId]
+
+-- | Describes modifications to the permissions for a volume.
+--
+-- /See:/ 'createVolumePermissionModifications' smart constructor.
+data CreateVolumePermissionModifications = CreateVolumePermissionModifications'
+    { _cvpmRemove :: !(Maybe [CreateVolumePermission])
+    , _cvpmAdd    :: !(Maybe [CreateVolumePermission])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateVolumePermissionModifications' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cvpmRemove'
+--
+-- * 'cvpmAdd'
+createVolumePermissionModifications
+    :: CreateVolumePermissionModifications
+createVolumePermissionModifications =
+    CreateVolumePermissionModifications'
+    { _cvpmRemove = Nothing
+    , _cvpmAdd = Nothing
+    }
+
+-- | Removes a specific AWS account ID or group from a volume\'s list of
+-- create volume permissions.
+cvpmRemove :: Lens' CreateVolumePermissionModifications [CreateVolumePermission]
+cvpmRemove = lens _cvpmRemove (\ s a -> s{_cvpmRemove = a}) . _Default . _Coerce;
+
+-- | Adds a specific AWS account ID or group to a volume\'s list of create
+-- volume permissions.
+cvpmAdd :: Lens' CreateVolumePermissionModifications [CreateVolumePermission]
+cvpmAdd = lens _cvpmAdd (\ s a -> s{_cvpmAdd = a}) . _Default . _Coerce;
+
+instance Hashable CreateVolumePermissionModifications
+
+instance ToQuery CreateVolumePermissionModifications
+         where
+        toQuery CreateVolumePermissionModifications'{..}
+          = mconcat
+              [toQuery (toQueryList "Remove" <$> _cvpmRemove),
+               toQuery (toQueryList "Add" <$> _cvpmAdd)]
+
+-- | Describes a customer gateway.
+--
+-- /See:/ 'customerGateway' smart constructor.
+data CustomerGateway = CustomerGateway'
+    { _cgTags              :: !(Maybe [Tag])
+    , _cgBGPASN            :: !Text
+    , _cgCustomerGatewayId :: !Text
+    , _cgIPAddress         :: !Text
+    , _cgState             :: !Text
+    , _cgType              :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CustomerGateway' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgTags'
+--
+-- * 'cgBGPASN'
+--
+-- * 'cgCustomerGatewayId'
+--
+-- * 'cgIPAddress'
+--
+-- * 'cgState'
+--
+-- * 'cgType'
+customerGateway
+    :: Text -- ^ 'cgBGPASN'
+    -> Text -- ^ 'cgCustomerGatewayId'
+    -> Text -- ^ 'cgIPAddress'
+    -> Text -- ^ 'cgState'
+    -> Text -- ^ 'cgType'
+    -> CustomerGateway
+customerGateway pBGPASN_ pCustomerGatewayId_ pIPAddress_ pState_ pType_ =
+    CustomerGateway'
+    { _cgTags = Nothing
+    , _cgBGPASN = pBGPASN_
+    , _cgCustomerGatewayId = pCustomerGatewayId_
+    , _cgIPAddress = pIPAddress_
+    , _cgState = pState_
+    , _cgType = pType_
+    }
+
+-- | Any tags assigned to the customer gateway.
+cgTags :: Lens' CustomerGateway [Tag]
+cgTags = lens _cgTags (\ s a -> s{_cgTags = a}) . _Default . _Coerce;
+
+-- | The customer gateway\'s Border Gateway Protocol (BGP) Autonomous System
+-- Number (ASN).
+cgBGPASN :: Lens' CustomerGateway Text
+cgBGPASN = lens _cgBGPASN (\ s a -> s{_cgBGPASN = a});
+
+-- | The ID of the customer gateway.
+cgCustomerGatewayId :: Lens' CustomerGateway Text
+cgCustomerGatewayId = lens _cgCustomerGatewayId (\ s a -> s{_cgCustomerGatewayId = a});
+
+-- | The Internet-routable IP address of the customer gateway\'s outside
+-- interface.
+cgIPAddress :: Lens' CustomerGateway Text
+cgIPAddress = lens _cgIPAddress (\ s a -> s{_cgIPAddress = a});
+
+-- | The current state of the customer gateway
+-- ('pending | available | deleting | deleted').
+cgState :: Lens' CustomerGateway Text
+cgState = lens _cgState (\ s a -> s{_cgState = a});
+
+-- | The type of VPN connection the customer gateway supports ('ipsec.1').
+cgType :: Lens' CustomerGateway Text
+cgType = lens _cgType (\ s a -> s{_cgType = a});
+
+instance FromXML CustomerGateway where
+        parseXML x
+          = CustomerGateway' <$>
+              (x .@? "tagSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@ "bgpAsn")
+                <*> (x .@ "customerGatewayId")
+                <*> (x .@ "ipAddress")
+                <*> (x .@ "state")
+                <*> (x .@ "type")
+
+instance Hashable CustomerGateway
+
+-- | Describes a DHCP configuration option.
+--
+-- /See:/ 'dhcpConfiguration' smart constructor.
+data DHCPConfiguration = DHCPConfiguration'
+    { _dcValues :: !(Maybe [AttributeValue])
+    , _dcKey    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DHCPConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcValues'
+--
+-- * 'dcKey'
+dhcpConfiguration
+    :: DHCPConfiguration
+dhcpConfiguration =
+    DHCPConfiguration'
+    { _dcValues = Nothing
+    , _dcKey = Nothing
+    }
+
+-- | One or more values for the DHCP option.
+dcValues :: Lens' DHCPConfiguration [AttributeValue]
+dcValues = lens _dcValues (\ s a -> s{_dcValues = a}) . _Default . _Coerce;
+
+-- | The name of a DHCP option.
+dcKey :: Lens' DHCPConfiguration (Maybe Text)
+dcKey = lens _dcKey (\ s a -> s{_dcKey = a});
+
+instance FromXML DHCPConfiguration where
+        parseXML x
+          = DHCPConfiguration' <$>
+              (x .@? "valueSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "key")
+
+instance Hashable DHCPConfiguration
+
+-- | Describes a set of DHCP options.
+--
+-- /See:/ 'dhcpOptions' smart constructor.
+data DHCPOptions = DHCPOptions'
+    { _doDHCPConfigurations :: !(Maybe [DHCPConfiguration])
+    , _doDHCPOptionsId      :: !(Maybe Text)
+    , _doTags               :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DHCPOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'doDHCPConfigurations'
+--
+-- * 'doDHCPOptionsId'
+--
+-- * 'doTags'
+dhcpOptions
+    :: DHCPOptions
+dhcpOptions =
+    DHCPOptions'
+    { _doDHCPConfigurations = Nothing
+    , _doDHCPOptionsId = Nothing
+    , _doTags = Nothing
+    }
+
+-- | One or more DHCP options in the set.
+doDHCPConfigurations :: Lens' DHCPOptions [DHCPConfiguration]
+doDHCPConfigurations = lens _doDHCPConfigurations (\ s a -> s{_doDHCPConfigurations = a}) . _Default . _Coerce;
+
+-- | The ID of the set of DHCP options.
+doDHCPOptionsId :: Lens' DHCPOptions (Maybe Text)
+doDHCPOptionsId = lens _doDHCPOptionsId (\ s a -> s{_doDHCPOptionsId = a});
+
+-- | Any tags assigned to the DHCP options set.
+doTags :: Lens' DHCPOptions [Tag]
+doTags = lens _doTags (\ s a -> s{_doTags = a}) . _Default . _Coerce;
+
+instance FromXML DHCPOptions where
+        parseXML x
+          = DHCPOptions' <$>
+              (x .@? "dhcpConfigurationSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "dhcpOptionsId")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable DHCPOptions
+
+-- | Describes a disk image.
+--
+-- /See:/ 'diskImage' smart constructor.
+data DiskImage = DiskImage'
+    { _diImage       :: !(Maybe DiskImageDetail)
+    , _diVolume      :: !(Maybe VolumeDetail)
+    , _diDescription :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskImage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diImage'
+--
+-- * 'diVolume'
+--
+-- * 'diDescription'
+diskImage
+    :: DiskImage
+diskImage =
+    DiskImage'
+    { _diImage = Nothing
+    , _diVolume = Nothing
+    , _diDescription = Nothing
+    }
+
+-- | Information about the disk image.
+diImage :: Lens' DiskImage (Maybe DiskImageDetail)
+diImage = lens _diImage (\ s a -> s{_diImage = a});
+
+-- | Information about the volume.
+diVolume :: Lens' DiskImage (Maybe VolumeDetail)
+diVolume = lens _diVolume (\ s a -> s{_diVolume = a});
+
+-- | A description of the disk image.
+diDescription :: Lens' DiskImage (Maybe Text)
+diDescription = lens _diDescription (\ s a -> s{_diDescription = a});
+
+instance Hashable DiskImage
+
+instance ToQuery DiskImage where
+        toQuery DiskImage'{..}
+          = mconcat
+              ["Image" =: _diImage, "Volume" =: _diVolume,
+               "Description" =: _diDescription]
+
+-- | Describes a disk image.
+--
+-- /See:/ 'diskImageDescription' smart constructor.
+data DiskImageDescription = DiskImageDescription'
+    { _dChecksum          :: !(Maybe Text)
+    , _dFormat            :: !DiskImageFormat
+    , _dSize              :: !Integer
+    , _dImportManifestURL :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskImageDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dChecksum'
+--
+-- * 'dFormat'
+--
+-- * 'dSize'
+--
+-- * 'dImportManifestURL'
+diskImageDescription
+    :: DiskImageFormat -- ^ 'dFormat'
+    -> Integer -- ^ 'dSize'
+    -> Text -- ^ 'dImportManifestURL'
+    -> DiskImageDescription
+diskImageDescription pFormat_ pSize_ pImportManifestURL_ =
+    DiskImageDescription'
+    { _dChecksum = Nothing
+    , _dFormat = pFormat_
+    , _dSize = pSize_
+    , _dImportManifestURL = pImportManifestURL_
+    }
+
+-- | The checksum computed for the disk image.
+dChecksum :: Lens' DiskImageDescription (Maybe Text)
+dChecksum = lens _dChecksum (\ s a -> s{_dChecksum = a});
+
+-- | The disk image format.
+dFormat :: Lens' DiskImageDescription DiskImageFormat
+dFormat = lens _dFormat (\ s a -> s{_dFormat = a});
+
+-- | The size of the disk image, in GiB.
+dSize :: Lens' DiskImageDescription Integer
+dSize = lens _dSize (\ s a -> s{_dSize = a});
+
+-- | A presigned URL for the import manifest stored in Amazon S3. For
+-- information about creating a presigned URL for an Amazon S3 object, read
+-- the \"Query String Request Authentication Alternative\" section of the
+-- <http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
+-- topic in the /Amazon Simple Storage Service Developer Guide/.
+--
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+dImportManifestURL :: Lens' DiskImageDescription Text
+dImportManifestURL = lens _dImportManifestURL (\ s a -> s{_dImportManifestURL = a});
+
+instance FromXML DiskImageDescription where
+        parseXML x
+          = DiskImageDescription' <$>
+              (x .@? "checksum") <*> (x .@ "format") <*>
+                (x .@ "size")
+                <*> (x .@ "importManifestUrl")
+
+instance Hashable DiskImageDescription
+
+-- | Describes a disk image.
+--
+-- /See:/ 'diskImageDetail' smart constructor.
+data DiskImageDetail = DiskImageDetail'
+    { _didFormat            :: !DiskImageFormat
+    , _didBytes             :: !Integer
+    , _didImportManifestURL :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskImageDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'didFormat'
+--
+-- * 'didBytes'
+--
+-- * 'didImportManifestURL'
+diskImageDetail
+    :: DiskImageFormat -- ^ 'didFormat'
+    -> Integer -- ^ 'didBytes'
+    -> Text -- ^ 'didImportManifestURL'
+    -> DiskImageDetail
+diskImageDetail pFormat_ pBytes_ pImportManifestURL_ =
+    DiskImageDetail'
+    { _didFormat = pFormat_
+    , _didBytes = pBytes_
+    , _didImportManifestURL = pImportManifestURL_
+    }
+
+-- | The disk image format.
+didFormat :: Lens' DiskImageDetail DiskImageFormat
+didFormat = lens _didFormat (\ s a -> s{_didFormat = a});
+
+-- | The size of the disk image, in GiB.
+didBytes :: Lens' DiskImageDetail Integer
+didBytes = lens _didBytes (\ s a -> s{_didBytes = a});
+
+-- | A presigned URL for the import manifest stored in Amazon S3 and
+-- presented here as an Amazon S3 presigned URL. For information about
+-- creating a presigned URL for an Amazon S3 object, read the \"Query
+-- String Request Authentication Alternative\" section of the
+-- <http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html Authenticating REST Requests>
+-- topic in the /Amazon Simple Storage Service Developer Guide/.
+--
+-- For information about the import manifest referenced by this API action,
+-- see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/manifest.html VM Import Manifest>.
+didImportManifestURL :: Lens' DiskImageDetail Text
+didImportManifestURL = lens _didImportManifestURL (\ s a -> s{_didImportManifestURL = a});
+
+instance Hashable DiskImageDetail
+
+instance ToQuery DiskImageDetail where
+        toQuery DiskImageDetail'{..}
+          = mconcat
+              ["Format" =: _didFormat, "Bytes" =: _didBytes,
+               "ImportManifestUrl" =: _didImportManifestURL]
+
+-- | Describes a disk image volume.
+--
+-- /See:/ 'diskImageVolumeDescription' smart constructor.
+data DiskImageVolumeDescription = DiskImageVolumeDescription'
+    { _divdSize :: !(Maybe Integer)
+    , _divdId   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DiskImageVolumeDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'divdSize'
+--
+-- * 'divdId'
+diskImageVolumeDescription
+    :: Text -- ^ 'divdId'
+    -> DiskImageVolumeDescription
+diskImageVolumeDescription pId_ =
+    DiskImageVolumeDescription'
+    { _divdSize = Nothing
+    , _divdId = pId_
+    }
+
+-- | The size of the volume, in GiB.
+divdSize :: Lens' DiskImageVolumeDescription (Maybe Integer)
+divdSize = lens _divdSize (\ s a -> s{_divdSize = a});
+
+-- | The volume identifier.
+divdId :: Lens' DiskImageVolumeDescription Text
+divdId = lens _divdId (\ s a -> s{_divdId = a});
+
+instance FromXML DiskImageVolumeDescription where
+        parseXML x
+          = DiskImageVolumeDescription' <$>
+              (x .@? "size") <*> (x .@ "id")
+
+instance Hashable DiskImageVolumeDescription
+
+-- | Describes a block device for an EBS volume.
+--
+-- /See:/ 'ebsBlockDevice' smart constructor.
+data EBSBlockDevice = EBSBlockDevice'
+    { _ebdDeleteOnTermination :: !(Maybe Bool)
+    , _ebdVolumeSize          :: !(Maybe Int)
+    , _ebdIOPS                :: !(Maybe Int)
+    , _ebdEncrypted           :: !(Maybe Bool)
+    , _ebdVolumeType          :: !(Maybe VolumeType)
+    , _ebdSnapshotId          :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EBSBlockDevice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ebdDeleteOnTermination'
+--
+-- * 'ebdVolumeSize'
+--
+-- * 'ebdIOPS'
+--
+-- * 'ebdEncrypted'
+--
+-- * 'ebdVolumeType'
+--
+-- * 'ebdSnapshotId'
+ebsBlockDevice
+    :: EBSBlockDevice
+ebsBlockDevice =
+    EBSBlockDevice'
+    { _ebdDeleteOnTermination = Nothing
+    , _ebdVolumeSize = Nothing
+    , _ebdIOPS = Nothing
+    , _ebdEncrypted = Nothing
+    , _ebdVolumeType = Nothing
+    , _ebdSnapshotId = Nothing
+    }
+
+-- | Indicates whether the EBS volume is deleted on instance termination.
+ebdDeleteOnTermination :: Lens' EBSBlockDevice (Maybe Bool)
+ebdDeleteOnTermination = lens _ebdDeleteOnTermination (\ s a -> s{_ebdDeleteOnTermination = a});
+
+-- | The size of the volume, in GiB.
+--
+-- Constraints: '1-1024' for 'standard' volumes, '1-16384' for 'gp2'
+-- volumes, and '4-16384' for 'io1' volumes. If you specify a snapshot, the
+-- volume size must be equal to or larger than the snapshot size.
+--
+-- Default: If you\'re creating the volume from a snapshot and don\'t
+-- specify a volume size, the default is the snapshot size.
+ebdVolumeSize :: Lens' EBSBlockDevice (Maybe Int)
+ebdVolumeSize = lens _ebdVolumeSize (\ s a -> s{_ebdVolumeSize = a});
+
+-- | The number of I\/O operations per second (IOPS) that the volume
+-- supports. For Provisioned IOPS (SSD) volumes, this represents the number
+-- of IOPS that are provisioned for the volume. For General Purpose (SSD)
+-- volumes, this represents the baseline performance of the volume and the
+-- rate at which the volume accumulates I\/O credits for bursting. For more
+-- information on General Purpose (SSD) baseline performance, I\/O credits,
+-- and bursting, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Constraint: Range is 100 to 20000 for Provisioned IOPS (SSD) volumes and
+-- 3 to 10000 for General Purpose (SSD) volumes.
+--
+-- Condition: This parameter is required for requests to create 'io1'
+-- volumes; it is not used in requests to create 'standard' or 'gp2'
+-- volumes.
+ebdIOPS :: Lens' EBSBlockDevice (Maybe Int)
+ebdIOPS = lens _ebdIOPS (\ s a -> s{_ebdIOPS = a});
+
+-- | Indicates whether the EBS volume is encrypted. Encrypted Amazon EBS
+-- volumes may only be attached to instances that support Amazon EBS
+-- encryption.
+ebdEncrypted :: Lens' EBSBlockDevice (Maybe Bool)
+ebdEncrypted = lens _ebdEncrypted (\ s a -> s{_ebdEncrypted = a});
+
+-- | The volume type. 'gp2' for General Purpose (SSD) volumes, 'io1' for
+-- Provisioned IOPS (SSD) volumes, and 'standard' for Magnetic volumes.
+--
+-- Default: 'standard'
+ebdVolumeType :: Lens' EBSBlockDevice (Maybe VolumeType)
+ebdVolumeType = lens _ebdVolumeType (\ s a -> s{_ebdVolumeType = a});
+
+-- | The ID of the snapshot.
+ebdSnapshotId :: Lens' EBSBlockDevice (Maybe Text)
+ebdSnapshotId = lens _ebdSnapshotId (\ s a -> s{_ebdSnapshotId = a});
+
+instance FromXML EBSBlockDevice where
+        parseXML x
+          = EBSBlockDevice' <$>
+              (x .@? "deleteOnTermination") <*>
+                (x .@? "volumeSize")
+                <*> (x .@? "iops")
+                <*> (x .@? "encrypted")
+                <*> (x .@? "volumeType")
+                <*> (x .@? "snapshotId")
+
+instance Hashable EBSBlockDevice
+
+instance ToQuery EBSBlockDevice where
+        toQuery EBSBlockDevice'{..}
+          = mconcat
+              ["DeleteOnTermination" =: _ebdDeleteOnTermination,
+               "VolumeSize" =: _ebdVolumeSize, "Iops" =: _ebdIOPS,
+               "Encrypted" =: _ebdEncrypted,
+               "VolumeType" =: _ebdVolumeType,
+               "SnapshotId" =: _ebdSnapshotId]
+
+-- | Describes a parameter used to set up an EBS volume in a block device
+-- mapping.
+--
+-- /See:/ 'ebsInstanceBlockDevice' smart constructor.
+data EBSInstanceBlockDevice = EBSInstanceBlockDevice'
+    { _eibdStatus              :: !(Maybe AttachmentStatus)
+    , _eibdDeleteOnTermination :: !(Maybe Bool)
+    , _eibdVolumeId            :: !(Maybe Text)
+    , _eibdAttachTime          :: !(Maybe ISO8601)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EBSInstanceBlockDevice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eibdStatus'
+--
+-- * 'eibdDeleteOnTermination'
+--
+-- * 'eibdVolumeId'
+--
+-- * 'eibdAttachTime'
+ebsInstanceBlockDevice
+    :: EBSInstanceBlockDevice
+ebsInstanceBlockDevice =
+    EBSInstanceBlockDevice'
+    { _eibdStatus = Nothing
+    , _eibdDeleteOnTermination = Nothing
+    , _eibdVolumeId = Nothing
+    , _eibdAttachTime = Nothing
+    }
+
+-- | The attachment state.
+eibdStatus :: Lens' EBSInstanceBlockDevice (Maybe AttachmentStatus)
+eibdStatus = lens _eibdStatus (\ s a -> s{_eibdStatus = a});
+
+-- | Indicates whether the volume is deleted on instance termination.
+eibdDeleteOnTermination :: Lens' EBSInstanceBlockDevice (Maybe Bool)
+eibdDeleteOnTermination = lens _eibdDeleteOnTermination (\ s a -> s{_eibdDeleteOnTermination = a});
+
+-- | The ID of the EBS volume.
+eibdVolumeId :: Lens' EBSInstanceBlockDevice (Maybe Text)
+eibdVolumeId = lens _eibdVolumeId (\ s a -> s{_eibdVolumeId = a});
+
+-- | The time stamp when the attachment initiated.
+eibdAttachTime :: Lens' EBSInstanceBlockDevice (Maybe UTCTime)
+eibdAttachTime = lens _eibdAttachTime (\ s a -> s{_eibdAttachTime = a}) . mapping _Time;
+
+instance FromXML EBSInstanceBlockDevice where
+        parseXML x
+          = EBSInstanceBlockDevice' <$>
+              (x .@? "status") <*> (x .@? "deleteOnTermination")
+                <*> (x .@? "volumeId")
+                <*> (x .@? "attachTime")
+
+instance Hashable EBSInstanceBlockDevice
+
+-- | /See:/ 'ebsInstanceBlockDeviceSpecification' smart constructor.
+data EBSInstanceBlockDeviceSpecification = EBSInstanceBlockDeviceSpecification'
+    { _eibdsDeleteOnTermination :: !(Maybe Bool)
+    , _eibdsVolumeId            :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EBSInstanceBlockDeviceSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eibdsDeleteOnTermination'
+--
+-- * 'eibdsVolumeId'
+ebsInstanceBlockDeviceSpecification
+    :: EBSInstanceBlockDeviceSpecification
+ebsInstanceBlockDeviceSpecification =
+    EBSInstanceBlockDeviceSpecification'
+    { _eibdsDeleteOnTermination = Nothing
+    , _eibdsVolumeId = Nothing
+    }
+
+-- | Indicates whether the volume is deleted on instance termination.
+eibdsDeleteOnTermination :: Lens' EBSInstanceBlockDeviceSpecification (Maybe Bool)
+eibdsDeleteOnTermination = lens _eibdsDeleteOnTermination (\ s a -> s{_eibdsDeleteOnTermination = a});
+
+-- | The ID of the EBS volume.
+eibdsVolumeId :: Lens' EBSInstanceBlockDeviceSpecification (Maybe Text)
+eibdsVolumeId = lens _eibdsVolumeId (\ s a -> s{_eibdsVolumeId = a});
+
+instance Hashable EBSInstanceBlockDeviceSpecification
+
+instance ToQuery EBSInstanceBlockDeviceSpecification
+         where
+        toQuery EBSInstanceBlockDeviceSpecification'{..}
+          = mconcat
+              ["DeleteOnTermination" =: _eibdsDeleteOnTermination,
+               "VolumeId" =: _eibdsVolumeId]
+
+-- | Describes a Spot fleet event.
+--
+-- /See:/ 'eventInformation' smart constructor.
+data EventInformation = EventInformation'
+    { _eiInstanceId       :: !(Maybe Text)
+    , _eiEventDescription :: !(Maybe Text)
+    , _eiEventSubType     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EventInformation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eiInstanceId'
+--
+-- * 'eiEventDescription'
+--
+-- * 'eiEventSubType'
+eventInformation
+    :: EventInformation
+eventInformation =
+    EventInformation'
+    { _eiInstanceId = Nothing
+    , _eiEventDescription = Nothing
+    , _eiEventSubType = Nothing
+    }
+
+-- | The ID of the instance. This information is available only for
+-- 'instanceChange' events.
+eiInstanceId :: Lens' EventInformation (Maybe Text)
+eiInstanceId = lens _eiInstanceId (\ s a -> s{_eiInstanceId = a});
+
+-- | The description of the event.
+eiEventDescription :: Lens' EventInformation (Maybe Text)
+eiEventDescription = lens _eiEventDescription (\ s a -> s{_eiEventDescription = a});
+
+-- | The event.
+--
+-- The following are the 'error' events.
+--
+-- -   'iamFleetRoleInvalid' - The Spot fleet did not have the required
+--     permissions either to launch or terminate an instance.
+--
+-- -   'launchSpecTemporarilyBlacklisted' - The configuration is not valid
+--     and several attempts to launch instances have failed. For more
+--     information, see the description of the event.
+--
+-- -   'spotFleetRequestConfigurationInvalid' - The configuration is not
+--     valid. For more information, see the description of the event.
+--
+-- -   'spotInstanceCountLimitExceeded' - You\'ve reached the limit on the
+--     number of Spot instances that you can launch.
+--
+-- The following are the 'fleetRequestChange' events.
+--
+-- -   'active' - The Spot fleet has been validated and Amazon EC2 is
+--     attempting to maintain the target number of running Spot instances.
+--
+-- -   'cancelled' - The Spot fleet is canceled and has no running Spot
+--     instances. The Spot fleet will be deleted two days after its
+--     instances were terminated.
+--
+-- -   'cancelled_running' - The Spot fleet is canceled and will not launch
+--     additional Spot instances, but its existing Spot instances continue
+--     to run until they are interrupted or terminated.
+--
+-- -   'cancelled_terminating' - The Spot fleet is canceled and its Spot
+--     instances are terminating.
+--
+-- -   'expired' - The Spot fleet request has expired. A subsequent event
+--     indicates that the instances were terminated, if the request was
+--     created with 'TerminateInstancesWithExpiration' set.
+--
+-- -   'modify_in_progress' - A request to modify the Spot fleet request
+--     was accepted and is in progress.
+--
+-- -   'modify_successful' - The Spot fleet request was modified.
+--
+-- -   'price_update' - The bid price for a launch configuration was
+--     adjusted because it was too high. This change is permanent.
+--
+-- -   'submitted' - The Spot fleet request is being evaluated and Amazon
+--     EC2 is preparing to launch the target number of Spot instances.
+--
+-- The following are the 'instanceChange' events.
+--
+-- -   'launched' - A bid was fulfilled and a new instance was launched.
+--
+-- -   'terminated' - An instance was terminated by the user.
+--
+eiEventSubType :: Lens' EventInformation (Maybe Text)
+eiEventSubType = lens _eiEventSubType (\ s a -> s{_eiEventSubType = a});
+
+instance FromXML EventInformation where
+        parseXML x
+          = EventInformation' <$>
+              (x .@? "instanceId") <*> (x .@? "eventDescription")
+                <*> (x .@? "eventSubType")
+
+instance Hashable EventInformation
+
+-- | Describes an instance export task.
+--
+-- /See:/ 'exportTask' smart constructor.
+data ExportTask = ExportTask'
+    { _etDescription           :: !Text
+    , _etExportTaskId          :: !Text
+    , _etExportToS3Task        :: !ExportToS3Task
+    , _etInstanceExportDetails :: !InstanceExportDetails
+    , _etState                 :: !ExportTaskState
+    , _etStatusMessage         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExportTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'etDescription'
+--
+-- * 'etExportTaskId'
+--
+-- * 'etExportToS3Task'
+--
+-- * 'etInstanceExportDetails'
+--
+-- * 'etState'
+--
+-- * 'etStatusMessage'
+exportTask
+    :: Text -- ^ 'etDescription'
+    -> Text -- ^ 'etExportTaskId'
+    -> ExportToS3Task -- ^ 'etExportToS3Task'
+    -> InstanceExportDetails -- ^ 'etInstanceExportDetails'
+    -> ExportTaskState -- ^ 'etState'
+    -> Text -- ^ 'etStatusMessage'
+    -> ExportTask
+exportTask pDescription_ pExportTaskId_ pExportToS3Task_ pInstanceExportDetails_ pState_ pStatusMessage_ =
+    ExportTask'
+    { _etDescription = pDescription_
+    , _etExportTaskId = pExportTaskId_
+    , _etExportToS3Task = pExportToS3Task_
+    , _etInstanceExportDetails = pInstanceExportDetails_
+    , _etState = pState_
+    , _etStatusMessage = pStatusMessage_
+    }
+
+-- | A description of the resource being exported.
+etDescription :: Lens' ExportTask Text
+etDescription = lens _etDescription (\ s a -> s{_etDescription = a});
+
+-- | The ID of the export task.
+etExportTaskId :: Lens' ExportTask Text
+etExportTaskId = lens _etExportTaskId (\ s a -> s{_etExportTaskId = a});
+
+-- | Information about the export task.
+etExportToS3Task :: Lens' ExportTask ExportToS3Task
+etExportToS3Task = lens _etExportToS3Task (\ s a -> s{_etExportToS3Task = a});
+
+-- | Information about the instance to export.
+etInstanceExportDetails :: Lens' ExportTask InstanceExportDetails
+etInstanceExportDetails = lens _etInstanceExportDetails (\ s a -> s{_etInstanceExportDetails = a});
+
+-- | The state of the export task.
+etState :: Lens' ExportTask ExportTaskState
+etState = lens _etState (\ s a -> s{_etState = a});
+
+-- | The status message related to the export task.
+etStatusMessage :: Lens' ExportTask Text
+etStatusMessage = lens _etStatusMessage (\ s a -> s{_etStatusMessage = a});
+
+instance FromXML ExportTask where
+        parseXML x
+          = ExportTask' <$>
+              (x .@ "description") <*> (x .@ "exportTaskId") <*>
+                (x .@ "exportToS3")
+                <*> (x .@ "instanceExport")
+                <*> (x .@ "state")
+                <*> (x .@ "statusMessage")
+
+instance Hashable ExportTask
+
+-- | Describes the format and location for an instance export task.
+--
+-- /See:/ 'exportToS3Task' smart constructor.
+data ExportToS3Task = ExportToS3Task'
+    { _etstS3Key           :: !(Maybe Text)
+    , _etstContainerFormat :: !(Maybe ContainerFormat)
+    , _etstS3Bucket        :: !(Maybe Text)
+    , _etstDiskImageFormat :: !(Maybe DiskImageFormat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExportToS3Task' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'etstS3Key'
+--
+-- * 'etstContainerFormat'
+--
+-- * 'etstS3Bucket'
+--
+-- * 'etstDiskImageFormat'
+exportToS3Task
+    :: ExportToS3Task
+exportToS3Task =
+    ExportToS3Task'
+    { _etstS3Key = Nothing
+    , _etstContainerFormat = Nothing
+    , _etstS3Bucket = Nothing
+    , _etstDiskImageFormat = Nothing
+    }
+
+-- | The encryption key for your S3 bucket.
+etstS3Key :: Lens' ExportToS3Task (Maybe Text)
+etstS3Key = lens _etstS3Key (\ s a -> s{_etstS3Key = a});
+
+-- | The container format used to combine disk images with metadata (such as
+-- OVF). If absent, only the disk image is exported.
+etstContainerFormat :: Lens' ExportToS3Task (Maybe ContainerFormat)
+etstContainerFormat = lens _etstContainerFormat (\ s a -> s{_etstContainerFormat = a});
+
+-- | The S3 bucket for the destination image. The destination bucket must
+-- exist and grant WRITE and READ_ACP permissions to the AWS account
+-- 'vm-import-export\'amazon.com'.
+etstS3Bucket :: Lens' ExportToS3Task (Maybe Text)
+etstS3Bucket = lens _etstS3Bucket (\ s a -> s{_etstS3Bucket = a});
+
+-- | The format for the exported image.
+etstDiskImageFormat :: Lens' ExportToS3Task (Maybe DiskImageFormat)
+etstDiskImageFormat = lens _etstDiskImageFormat (\ s a -> s{_etstDiskImageFormat = a});
+
+instance FromXML ExportToS3Task where
+        parseXML x
+          = ExportToS3Task' <$>
+              (x .@? "s3Key") <*> (x .@? "containerFormat") <*>
+                (x .@? "s3Bucket")
+                <*> (x .@? "diskImageFormat")
+
+instance Hashable ExportToS3Task
+
+-- | Describes an instance export task.
+--
+-- /See:/ 'exportToS3TaskSpecification' smart constructor.
+data ExportToS3TaskSpecification = ExportToS3TaskSpecification'
+    { _etstsContainerFormat :: !(Maybe ContainerFormat)
+    , _etstsS3Prefix        :: !(Maybe Text)
+    , _etstsS3Bucket        :: !(Maybe Text)
+    , _etstsDiskImageFormat :: !(Maybe DiskImageFormat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ExportToS3TaskSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'etstsContainerFormat'
+--
+-- * 'etstsS3Prefix'
+--
+-- * 'etstsS3Bucket'
+--
+-- * 'etstsDiskImageFormat'
+exportToS3TaskSpecification
+    :: ExportToS3TaskSpecification
+exportToS3TaskSpecification =
+    ExportToS3TaskSpecification'
+    { _etstsContainerFormat = Nothing
+    , _etstsS3Prefix = Nothing
+    , _etstsS3Bucket = Nothing
+    , _etstsDiskImageFormat = Nothing
+    }
+
+-- | The container format used to combine disk images with metadata (such as
+-- OVF). If absent, only the disk image is exported.
+etstsContainerFormat :: Lens' ExportToS3TaskSpecification (Maybe ContainerFormat)
+etstsContainerFormat = lens _etstsContainerFormat (\ s a -> s{_etstsContainerFormat = a});
+
+-- | The image is written to a single object in the S3 bucket at the S3 key
+-- s3prefix + exportTaskId + \'.\' + diskImageFormat.
+etstsS3Prefix :: Lens' ExportToS3TaskSpecification (Maybe Text)
+etstsS3Prefix = lens _etstsS3Prefix (\ s a -> s{_etstsS3Prefix = a});
+
+-- | The S3 bucket for the destination image. The destination bucket must
+-- exist and grant WRITE and READ_ACP permissions to the AWS account
+-- 'vm-import-export\'amazon.com'.
+etstsS3Bucket :: Lens' ExportToS3TaskSpecification (Maybe Text)
+etstsS3Bucket = lens _etstsS3Bucket (\ s a -> s{_etstsS3Bucket = a});
+
+-- | The format for the exported image.
+etstsDiskImageFormat :: Lens' ExportToS3TaskSpecification (Maybe DiskImageFormat)
+etstsDiskImageFormat = lens _etstsDiskImageFormat (\ s a -> s{_etstsDiskImageFormat = a});
+
+instance Hashable ExportToS3TaskSpecification
+
+instance ToQuery ExportToS3TaskSpecification where
+        toQuery ExportToS3TaskSpecification'{..}
+          = mconcat
+              ["ContainerFormat" =: _etstsContainerFormat,
+               "S3Prefix" =: _etstsS3Prefix,
+               "S3Bucket" =: _etstsS3Bucket,
+               "DiskImageFormat" =: _etstsDiskImageFormat]
+
+-- | A filter name and value pair that is used to return a more specific list
+-- of results. Filters can be used to match a set of resources by various
+-- criteria, such as tags, attributes, or IDs.
+--
+-- /See:/ 'filter'' smart constructor.
+data Filter = Filter'
+    { _fValues :: !(Maybe [Text])
+    , _fName   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Filter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fValues'
+--
+-- * 'fName'
+filter'
+    :: Text -- ^ 'fName'
+    -> Filter
+filter' pName_ =
+    Filter'
+    { _fValues = Nothing
+    , _fName = pName_
+    }
+
+-- | One or more filter values. Filter values are case-sensitive.
+fValues :: Lens' Filter [Text]
+fValues = lens _fValues (\ s a -> s{_fValues = a}) . _Default . _Coerce;
+
+-- | The name of the filter. Filter names are case-sensitive.
+fName :: Lens' Filter Text
+fName = lens _fName (\ s a -> s{_fName = a});
+
+instance Hashable Filter
+
+instance ToQuery Filter where
+        toQuery Filter'{..}
+          = mconcat
+              [toQuery (toQueryList "Value" <$> _fValues),
+               "Name" =: _fName]
+
+-- | Describes a flow log.
+--
+-- /See:/ 'flowLog' smart constructor.
+data FlowLog = FlowLog'
+    { _flCreationTime             :: !(Maybe ISO8601)
+    , _flResourceId               :: !(Maybe Text)
+    , _flFlowLogStatus            :: !(Maybe Text)
+    , _flTrafficType              :: !(Maybe TrafficType)
+    , _flDeliverLogsStatus        :: !(Maybe Text)
+    , _flDeliverLogsErrorMessage  :: !(Maybe Text)
+    , _flLogGroupName             :: !(Maybe Text)
+    , _flDeliverLogsPermissionARN :: !(Maybe Text)
+    , _flFlowLogId                :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FlowLog' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'flCreationTime'
+--
+-- * 'flResourceId'
+--
+-- * 'flFlowLogStatus'
+--
+-- * 'flTrafficType'
+--
+-- * 'flDeliverLogsStatus'
+--
+-- * 'flDeliverLogsErrorMessage'
+--
+-- * 'flLogGroupName'
+--
+-- * 'flDeliverLogsPermissionARN'
+--
+-- * 'flFlowLogId'
+flowLog
+    :: FlowLog
+flowLog =
+    FlowLog'
+    { _flCreationTime = Nothing
+    , _flResourceId = Nothing
+    , _flFlowLogStatus = Nothing
+    , _flTrafficType = Nothing
+    , _flDeliverLogsStatus = Nothing
+    , _flDeliverLogsErrorMessage = Nothing
+    , _flLogGroupName = Nothing
+    , _flDeliverLogsPermissionARN = Nothing
+    , _flFlowLogId = Nothing
+    }
+
+-- | The date and time the flow log was created.
+flCreationTime :: Lens' FlowLog (Maybe UTCTime)
+flCreationTime = lens _flCreationTime (\ s a -> s{_flCreationTime = a}) . mapping _Time;
+
+-- | The ID of the resource on which the flow log was created.
+flResourceId :: Lens' FlowLog (Maybe Text)
+flResourceId = lens _flResourceId (\ s a -> s{_flResourceId = a});
+
+-- | The status of the flow log ('ACTIVE').
+flFlowLogStatus :: Lens' FlowLog (Maybe Text)
+flFlowLogStatus = lens _flFlowLogStatus (\ s a -> s{_flFlowLogStatus = a});
+
+-- | The type of traffic captured for the flow log.
+flTrafficType :: Lens' FlowLog (Maybe TrafficType)
+flTrafficType = lens _flTrafficType (\ s a -> s{_flTrafficType = a});
+
+-- | The status of the logs delivery ('SUCCESS' | 'FAILED').
+flDeliverLogsStatus :: Lens' FlowLog (Maybe Text)
+flDeliverLogsStatus = lens _flDeliverLogsStatus (\ s a -> s{_flDeliverLogsStatus = a});
+
+-- | Information about the error that occurred. 'Rate limited' indicates that
+-- CloudWatch logs throttling has been applied for one or more network
+-- interfaces, or that you\'ve reached the limit on the number of
+-- CloudWatch Logs log groups that you can create. 'Access error' indicates
+-- that the IAM role associated with the flow log does not have sufficient
+-- permissions to publish to CloudWatch Logs. 'Unknown error' indicates an
+-- internal error.
+flDeliverLogsErrorMessage :: Lens' FlowLog (Maybe Text)
+flDeliverLogsErrorMessage = lens _flDeliverLogsErrorMessage (\ s a -> s{_flDeliverLogsErrorMessage = a});
+
+-- | The name of the flow log group.
+flLogGroupName :: Lens' FlowLog (Maybe Text)
+flLogGroupName = lens _flLogGroupName (\ s a -> s{_flLogGroupName = a});
+
+-- | The ARN of the IAM role that posts logs to CloudWatch Logs.
+flDeliverLogsPermissionARN :: Lens' FlowLog (Maybe Text)
+flDeliverLogsPermissionARN = lens _flDeliverLogsPermissionARN (\ s a -> s{_flDeliverLogsPermissionARN = a});
+
+-- | The flow log ID.
+flFlowLogId :: Lens' FlowLog (Maybe Text)
+flFlowLogId = lens _flFlowLogId (\ s a -> s{_flFlowLogId = a});
+
+instance FromXML FlowLog where
+        parseXML x
+          = FlowLog' <$>
+              (x .@? "creationTime") <*> (x .@? "resourceId") <*>
+                (x .@? "flowLogStatus")
+                <*> (x .@? "trafficType")
+                <*> (x .@? "deliverLogsStatus")
+                <*> (x .@? "deliverLogsErrorMessage")
+                <*> (x .@? "logGroupName")
+                <*> (x .@? "deliverLogsPermissionArn")
+                <*> (x .@? "flowLogId")
+
+instance Hashable FlowLog
+
+-- | Describes a security group.
+--
+-- /See:/ 'groupIdentifier' smart constructor.
+data GroupIdentifier = GroupIdentifier'
+    { _giGroupId   :: !(Maybe Text)
+    , _giGroupName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GroupIdentifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'giGroupId'
+--
+-- * 'giGroupName'
+groupIdentifier
+    :: GroupIdentifier
+groupIdentifier =
+    GroupIdentifier'
+    { _giGroupId = Nothing
+    , _giGroupName = Nothing
+    }
+
+-- | The ID of the security group.
+giGroupId :: Lens' GroupIdentifier (Maybe Text)
+giGroupId = lens _giGroupId (\ s a -> s{_giGroupId = a});
+
+-- | The name of the security group.
+giGroupName :: Lens' GroupIdentifier (Maybe Text)
+giGroupName = lens _giGroupName (\ s a -> s{_giGroupName = a});
+
+instance FromXML GroupIdentifier where
+        parseXML x
+          = GroupIdentifier' <$>
+              (x .@? "groupId") <*> (x .@? "groupName")
+
+instance Hashable GroupIdentifier
+
+instance ToQuery GroupIdentifier where
+        toQuery GroupIdentifier'{..}
+          = mconcat
+              ["GroupId" =: _giGroupId,
+               "GroupName" =: _giGroupName]
+
+-- | Describes an event in the history of the Spot fleet request.
+--
+-- /See:/ 'historyRecord' smart constructor.
+data HistoryRecord = HistoryRecord'
+    { _hrTimestamp        :: !ISO8601
+    , _hrEventType        :: !EventType
+    , _hrEventInformation :: !EventInformation
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HistoryRecord' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hrTimestamp'
+--
+-- * 'hrEventType'
+--
+-- * 'hrEventInformation'
+historyRecord
+    :: UTCTime -- ^ 'hrTimestamp'
+    -> EventType -- ^ 'hrEventType'
+    -> EventInformation -- ^ 'hrEventInformation'
+    -> HistoryRecord
+historyRecord pTimestamp_ pEventType_ pEventInformation_ =
+    HistoryRecord'
+    { _hrTimestamp = _Time # pTimestamp_
+    , _hrEventType = pEventType_
+    , _hrEventInformation = pEventInformation_
+    }
+
+-- | The date and time of the event, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+hrTimestamp :: Lens' HistoryRecord UTCTime
+hrTimestamp = lens _hrTimestamp (\ s a -> s{_hrTimestamp = a}) . _Time;
+
+-- | The event type.
+--
+-- -   'error' - Indicates an error with the Spot fleet request.
+--
+-- -   'fleetRequestChange' - Indicates a change in the status or
+--     configuration of the Spot fleet request.
+--
+-- -   'instanceChange' - Indicates that an instance was launched or
+--     terminated.
+--
+hrEventType :: Lens' HistoryRecord EventType
+hrEventType = lens _hrEventType (\ s a -> s{_hrEventType = a});
+
+-- | Information about the event.
+hrEventInformation :: Lens' HistoryRecord EventInformation
+hrEventInformation = lens _hrEventInformation (\ s a -> s{_hrEventInformation = a});
+
+instance FromXML HistoryRecord where
+        parseXML x
+          = HistoryRecord' <$>
+              (x .@ "timestamp") <*> (x .@ "eventType") <*>
+                (x .@ "eventInformation")
+
+instance Hashable HistoryRecord
+
+-- | Describes the properties of the Dedicated host.
+--
+-- /See:/ 'host' smart constructor.
+data Host = Host'
+    { _hState             :: !(Maybe AllocationState)
+    , _hClientToken       :: !(Maybe Text)
+    , _hHostId            :: !(Maybe Text)
+    , _hAvailableCapacity :: !(Maybe AvailableCapacity)
+    , _hHostReservationId :: !(Maybe Text)
+    , _hHostProperties    :: !(Maybe HostProperties)
+    , _hAvailabilityZone  :: !(Maybe Text)
+    , _hInstances         :: !(Maybe [HostInstance])
+    , _hAutoPlacement     :: !(Maybe AutoPlacement)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Host' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hState'
+--
+-- * 'hClientToken'
+--
+-- * 'hHostId'
+--
+-- * 'hAvailableCapacity'
+--
+-- * 'hHostReservationId'
+--
+-- * 'hHostProperties'
+--
+-- * 'hAvailabilityZone'
+--
+-- * 'hInstances'
+--
+-- * 'hAutoPlacement'
+host
+    :: Host
+host =
+    Host'
+    { _hState = Nothing
+    , _hClientToken = Nothing
+    , _hHostId = Nothing
+    , _hAvailableCapacity = Nothing
+    , _hHostReservationId = Nothing
+    , _hHostProperties = Nothing
+    , _hAvailabilityZone = Nothing
+    , _hInstances = Nothing
+    , _hAutoPlacement = Nothing
+    }
+
+-- | The Dedicated host\'s state.
+hState :: Lens' Host (Maybe AllocationState)
+hState = lens _hState (\ s a -> s{_hState = a});
+
+-- | Unique, case-sensitive identifier you provide to ensure idempotency of
+-- the request. For more information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Run_Instance_Idempotency.html How to Ensure Idempotency>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+hClientToken :: Lens' Host (Maybe Text)
+hClientToken = lens _hClientToken (\ s a -> s{_hClientToken = a});
+
+-- | The ID of the Dedicated host.
+hHostId :: Lens' Host (Maybe Text)
+hHostId = lens _hHostId (\ s a -> s{_hHostId = a});
+
+-- | The number of new instances that can be launched onto the Dedicated
+-- host.
+hAvailableCapacity :: Lens' Host (Maybe AvailableCapacity)
+hAvailableCapacity = lens _hAvailableCapacity (\ s a -> s{_hAvailableCapacity = a});
+
+-- | The reservation ID of the Dedicated host. This returns a 'null' response
+-- if the Dedicated host doesn\'t have an associated reservation.
+hHostReservationId :: Lens' Host (Maybe Text)
+hHostReservationId = lens _hHostReservationId (\ s a -> s{_hHostReservationId = a});
+
+-- | The hardware specifications of the Dedicated host.
+hHostProperties :: Lens' Host (Maybe HostProperties)
+hHostProperties = lens _hHostProperties (\ s a -> s{_hHostProperties = a});
+
+-- | The Availability Zone of the Dedicated host.
+hAvailabilityZone :: Lens' Host (Maybe Text)
+hAvailabilityZone = lens _hAvailabilityZone (\ s a -> s{_hAvailabilityZone = a});
+
+-- | The IDs and instance type that are currently running on the Dedicated
+-- host.
+hInstances :: Lens' Host [HostInstance]
+hInstances = lens _hInstances (\ s a -> s{_hInstances = a}) . _Default . _Coerce;
+
+-- | Whether auto-placement is on or off.
+hAutoPlacement :: Lens' Host (Maybe AutoPlacement)
+hAutoPlacement = lens _hAutoPlacement (\ s a -> s{_hAutoPlacement = a});
+
+instance FromXML Host where
+        parseXML x
+          = Host' <$>
+              (x .@? "state") <*> (x .@? "clientToken") <*>
+                (x .@? "hostId")
+                <*> (x .@? "availableCapacity")
+                <*> (x .@? "hostReservationId")
+                <*> (x .@? "hostProperties")
+                <*> (x .@? "availabilityZone")
+                <*>
+                (x .@? "instances" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "autoPlacement")
+
+instance Hashable Host
+
+-- | /See:/ 'hostInstance' smart constructor.
+data HostInstance = HostInstance'
+    { _hiInstanceId   :: !(Maybe Text)
+    , _hiInstanceType :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HostInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hiInstanceId'
+--
+-- * 'hiInstanceType'
+hostInstance
+    :: HostInstance
+hostInstance =
+    HostInstance'
+    { _hiInstanceId = Nothing
+    , _hiInstanceType = Nothing
+    }
+
+-- | the IDs of instances that are running on the Dedicated host.
+hiInstanceId :: Lens' HostInstance (Maybe Text)
+hiInstanceId = lens _hiInstanceId (\ s a -> s{_hiInstanceId = a});
+
+-- | The instance type size (e.g., m3.medium) of the running instance.
+hiInstanceType :: Lens' HostInstance (Maybe Text)
+hiInstanceType = lens _hiInstanceType (\ s a -> s{_hiInstanceType = a});
+
+instance FromXML HostInstance where
+        parseXML x
+          = HostInstance' <$>
+              (x .@? "instanceId") <*> (x .@? "instanceType")
+
+instance Hashable HostInstance
+
+-- | /See:/ 'hostProperties' smart constructor.
+data HostProperties = HostProperties'
+    { _hpInstanceType :: !(Maybe Text)
+    , _hpTotalVCPUs   :: !(Maybe Int)
+    , _hpCores        :: !(Maybe Int)
+    , _hpSockets      :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'HostProperties' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'hpInstanceType'
+--
+-- * 'hpTotalVCPUs'
+--
+-- * 'hpCores'
+--
+-- * 'hpSockets'
+hostProperties
+    :: HostProperties
+hostProperties =
+    HostProperties'
+    { _hpInstanceType = Nothing
+    , _hpTotalVCPUs = Nothing
+    , _hpCores = Nothing
+    , _hpSockets = Nothing
+    }
+
+-- | The instance type size that the Dedicated host supports (e.g.,
+-- m3.medium).
+hpInstanceType :: Lens' HostProperties (Maybe Text)
+hpInstanceType = lens _hpInstanceType (\ s a -> s{_hpInstanceType = a});
+
+-- | The number of vCPUs on the Dedicated host.
+hpTotalVCPUs :: Lens' HostProperties (Maybe Int)
+hpTotalVCPUs = lens _hpTotalVCPUs (\ s a -> s{_hpTotalVCPUs = a});
+
+-- | The number of cores on the Dedicated host.
+hpCores :: Lens' HostProperties (Maybe Int)
+hpCores = lens _hpCores (\ s a -> s{_hpCores = a});
+
+-- | The number of sockets on the Dedicated host.
+hpSockets :: Lens' HostProperties (Maybe Int)
+hpSockets = lens _hpSockets (\ s a -> s{_hpSockets = a});
+
+instance FromXML HostProperties where
+        parseXML x
+          = HostProperties' <$>
+              (x .@? "instanceType") <*> (x .@? "totalVCpus") <*>
+                (x .@? "cores")
+                <*> (x .@? "sockets")
+
+instance Hashable HostProperties
+
+-- | Describes an IAM instance profile.
+--
+-- /See:/ 'iamInstanceProfile' smart constructor.
+data IAMInstanceProfile = IAMInstanceProfile'
+    { _iapARN :: !(Maybe Text)
+    , _iapId  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IAMInstanceProfile' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iapARN'
+--
+-- * 'iapId'
+iamInstanceProfile
+    :: IAMInstanceProfile
+iamInstanceProfile =
+    IAMInstanceProfile'
+    { _iapARN = Nothing
+    , _iapId = Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the instance profile.
+iapARN :: Lens' IAMInstanceProfile (Maybe Text)
+iapARN = lens _iapARN (\ s a -> s{_iapARN = a});
+
+-- | The ID of the instance profile.
+iapId :: Lens' IAMInstanceProfile (Maybe Text)
+iapId = lens _iapId (\ s a -> s{_iapId = a});
+
+instance FromXML IAMInstanceProfile where
+        parseXML x
+          = IAMInstanceProfile' <$>
+              (x .@? "arn") <*> (x .@? "id")
+
+instance Hashable IAMInstanceProfile
+
+-- | Describes an IAM instance profile.
+--
+-- /See:/ 'iamInstanceProfileSpecification' smart constructor.
+data IAMInstanceProfileSpecification = IAMInstanceProfileSpecification'
+    { _iapsARN  :: !(Maybe Text)
+    , _iapsName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IAMInstanceProfileSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iapsARN'
+--
+-- * 'iapsName'
+iamInstanceProfileSpecification
+    :: IAMInstanceProfileSpecification
+iamInstanceProfileSpecification =
+    IAMInstanceProfileSpecification'
+    { _iapsARN = Nothing
+    , _iapsName = Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the instance profile.
+iapsARN :: Lens' IAMInstanceProfileSpecification (Maybe Text)
+iapsARN = lens _iapsARN (\ s a -> s{_iapsARN = a});
+
+-- | The name of the instance profile.
+iapsName :: Lens' IAMInstanceProfileSpecification (Maybe Text)
+iapsName = lens _iapsName (\ s a -> s{_iapsName = a});
+
+instance FromXML IAMInstanceProfileSpecification
+         where
+        parseXML x
+          = IAMInstanceProfileSpecification' <$>
+              (x .@? "arn") <*> (x .@? "name")
+
+instance Hashable IAMInstanceProfileSpecification
+
+instance ToQuery IAMInstanceProfileSpecification
+         where
+        toQuery IAMInstanceProfileSpecification'{..}
+          = mconcat ["Arn" =: _iapsARN, "Name" =: _iapsName]
+
+-- | Describes the ICMP type and code.
+--
+-- /See:/ 'icmpTypeCode' smart constructor.
+data ICMPTypeCode = ICMPTypeCode'
+    { _itcCode :: !(Maybe Int)
+    , _itcType :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ICMPTypeCode' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'itcCode'
+--
+-- * 'itcType'
+icmpTypeCode
+    :: ICMPTypeCode
+icmpTypeCode =
+    ICMPTypeCode'
+    { _itcCode = Nothing
+    , _itcType = Nothing
+    }
+
+-- | The ICMP type. A value of -1 means all types.
+itcCode :: Lens' ICMPTypeCode (Maybe Int)
+itcCode = lens _itcCode (\ s a -> s{_itcCode = a});
+
+-- | The ICMP code. A value of -1 means all codes for the specified ICMP
+-- type.
+itcType :: Lens' ICMPTypeCode (Maybe Int)
+itcType = lens _itcType (\ s a -> s{_itcType = a});
+
+instance FromXML ICMPTypeCode where
+        parseXML x
+          = ICMPTypeCode' <$> (x .@? "code") <*> (x .@? "type")
+
+instance Hashable ICMPTypeCode
+
+instance ToQuery ICMPTypeCode where
+        toQuery ICMPTypeCode'{..}
+          = mconcat ["Code" =: _itcCode, "Type" =: _itcType]
+
+-- | Describes a security group rule.
+--
+-- /See:/ 'ipPermission' smart constructor.
+data IPPermission = IPPermission'
+    { _ipFromPort         :: !(Maybe Int)
+    , _ipUserIdGroupPairs :: !(Maybe [UserIdGroupPair])
+    , _ipPrefixListIds    :: !(Maybe [PrefixListId])
+    , _ipToPort           :: !(Maybe Int)
+    , _ipIPRanges         :: !(Maybe [IPRange])
+    , _ipIPProtocol       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IPPermission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ipFromPort'
+--
+-- * 'ipUserIdGroupPairs'
+--
+-- * 'ipPrefixListIds'
+--
+-- * 'ipToPort'
+--
+-- * 'ipIPRanges'
+--
+-- * 'ipIPProtocol'
+ipPermission
+    :: Text -- ^ 'ipIPProtocol'
+    -> IPPermission
+ipPermission pIPProtocol_ =
+    IPPermission'
+    { _ipFromPort = Nothing
+    , _ipUserIdGroupPairs = Nothing
+    , _ipPrefixListIds = Nothing
+    , _ipToPort = Nothing
+    , _ipIPRanges = Nothing
+    , _ipIPProtocol = pIPProtocol_
+    }
+
+-- | The start of port range for the TCP and UDP protocols, or an ICMP type
+-- number. A value of '-1' indicates all ICMP types.
+ipFromPort :: Lens' IPPermission (Maybe Int)
+ipFromPort = lens _ipFromPort (\ s a -> s{_ipFromPort = a});
+
+-- | One or more security group and AWS account ID pairs.
+ipUserIdGroupPairs :: Lens' IPPermission [UserIdGroupPair]
+ipUserIdGroupPairs = lens _ipUserIdGroupPairs (\ s a -> s{_ipUserIdGroupPairs = a}) . _Default . _Coerce;
+
+-- | (Valid for < AuthorizeSecurityGroupEgress>, < RevokeSecurityGroupEgress>
+-- and < DescribeSecurityGroups> only) One or more prefix list IDs for an
+-- AWS service. In an < AuthorizeSecurityGroupEgress> request, this is the
+-- AWS service that you want to access through a VPC endpoint from
+-- instances associated with the security group.
+ipPrefixListIds :: Lens' IPPermission [PrefixListId]
+ipPrefixListIds = lens _ipPrefixListIds (\ s a -> s{_ipPrefixListIds = a}) . _Default . _Coerce;
+
+-- | The end of port range for the TCP and UDP protocols, or an ICMP code. A
+-- value of '-1' indicates all ICMP codes for the specified ICMP type.
+ipToPort :: Lens' IPPermission (Maybe Int)
+ipToPort = lens _ipToPort (\ s a -> s{_ipToPort = a});
+
+-- | One or more IP ranges.
+ipIPRanges :: Lens' IPPermission [IPRange]
+ipIPRanges = lens _ipIPRanges (\ s a -> s{_ipIPRanges = a}) . _Default . _Coerce;
+
+-- | The IP protocol name (for 'tcp', 'udp', and 'icmp') or number (see
+-- <http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml Protocol Numbers>).
+--
+-- [EC2-VPC only] When you authorize or revoke security group rules, you
+-- can use '-1' to specify all.
+ipIPProtocol :: Lens' IPPermission Text
+ipIPProtocol = lens _ipIPProtocol (\ s a -> s{_ipIPProtocol = a});
+
+instance FromXML IPPermission where
+        parseXML x
+          = IPPermission' <$>
+              (x .@? "fromPort") <*>
+                (x .@? "groups" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "prefixListIds" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "toPort")
+                <*>
+                (x .@? "ipRanges" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "ipProtocol")
+
+instance Hashable IPPermission
+
+instance ToQuery IPPermission where
+        toQuery IPPermission'{..}
+          = mconcat
+              ["FromPort" =: _ipFromPort,
+               toQuery
+                 (toQueryList "Groups" <$> _ipUserIdGroupPairs),
+               toQuery
+                 (toQueryList "PrefixListIds" <$> _ipPrefixListIds),
+               "ToPort" =: _ipToPort,
+               toQuery (toQueryList "IpRanges" <$> _ipIPRanges),
+               "IpProtocol" =: _ipIPProtocol]
+
+-- | Describes an IP range.
+--
+-- /See:/ 'ipRange' smart constructor.
+newtype IPRange = IPRange'
+    { _irCIdRIP :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IPRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'irCIdRIP'
+ipRange
+    :: Text -- ^ 'irCIdRIP'
+    -> IPRange
+ipRange pCIdRIP_ =
+    IPRange'
+    { _irCIdRIP = pCIdRIP_
+    }
+
+-- | The CIDR range. You can either specify a CIDR range or a source security
+-- group, not both.
+irCIdRIP :: Lens' IPRange Text
+irCIdRIP = lens _irCIdRIP (\ s a -> s{_irCIdRIP = a});
+
+instance FromXML IPRange where
+        parseXML x = IPRange' <$> (x .@ "cidrIp")
+
+instance Hashable IPRange
+
+instance ToQuery IPRange where
+        toQuery IPRange'{..}
+          = mconcat ["CidrIp" =: _irCIdRIP]
+
+-- | Describes the ID format for a resource.
+--
+-- /See:/ 'idFormat' smart constructor.
+data IdFormat = IdFormat'
+    { _ifUseLongIds :: !(Maybe Bool)
+    , _ifDeadline   :: !(Maybe ISO8601)
+    , _ifResource   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IdFormat' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ifUseLongIds'
+--
+-- * 'ifDeadline'
+--
+-- * 'ifResource'
+idFormat
+    :: IdFormat
+idFormat =
+    IdFormat'
+    { _ifUseLongIds = Nothing
+    , _ifDeadline = Nothing
+    , _ifResource = Nothing
+    }
+
+-- | Indicates whether longer IDs (17-character IDs) are enabled for the
+-- resource.
+ifUseLongIds :: Lens' IdFormat (Maybe Bool)
+ifUseLongIds = lens _ifUseLongIds (\ s a -> s{_ifUseLongIds = a});
+
+-- | The date in UTC at which you are permanently switched over to using
+-- longer IDs. If a deadline is not yet available for this resource type,
+-- this field is not returned.
+ifDeadline :: Lens' IdFormat (Maybe UTCTime)
+ifDeadline = lens _ifDeadline (\ s a -> s{_ifDeadline = a}) . mapping _Time;
+
+-- | The type of resource.
+ifResource :: Lens' IdFormat (Maybe Text)
+ifResource = lens _ifResource (\ s a -> s{_ifResource = a});
+
+instance FromXML IdFormat where
+        parseXML x
+          = IdFormat' <$>
+              (x .@? "useLongIds") <*> (x .@? "deadline") <*>
+                (x .@? "resource")
+
+instance Hashable IdFormat
+
+-- | Describes an image.
+--
+-- /See:/ 'image' smart constructor.
+data Image = Image'
+    { _iPlatform            :: !(Maybe PlatformValues)
+    , _iImageOwnerAlias     :: !(Maybe Text)
+    , _iRAMDiskId           :: !(Maybe Text)
+    , _iKernelId            :: !(Maybe Text)
+    , _iRootDeviceName      :: !(Maybe Text)
+    , _iSRIOVNetSupport     :: !(Maybe Text)
+    , _iName                :: !(Maybe Text)
+    , _iCreationDate        :: !(Maybe Text)
+    , _iProductCodes        :: !(Maybe [ProductCode])
+    , _iStateReason         :: !(Maybe StateReason)
+    , _iDescription         :: !(Maybe Text)
+    , _iBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
+    , _iTags                :: !(Maybe [Tag])
+    , _iImageId             :: !Text
+    , _iImageLocation       :: !Text
+    , _iState               :: !ImageState
+    , _iOwnerId             :: !Text
+    , _iPublic              :: !Bool
+    , _iArchitecture        :: !ArchitectureValues
+    , _iImageType           :: !ImageTypeValues
+    , _iRootDeviceType      :: !DeviceType
+    , _iVirtualizationType  :: !VirtualizationType
+    , _iHypervisor          :: !HypervisorType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Image' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iPlatform'
+--
+-- * 'iImageOwnerAlias'
+--
+-- * 'iRAMDiskId'
+--
+-- * 'iKernelId'
+--
+-- * 'iRootDeviceName'
+--
+-- * 'iSRIOVNetSupport'
+--
+-- * 'iName'
+--
+-- * 'iCreationDate'
+--
+-- * 'iProductCodes'
+--
+-- * 'iStateReason'
+--
+-- * 'iDescription'
+--
+-- * 'iBlockDeviceMappings'
+--
+-- * 'iTags'
+--
+-- * 'iImageId'
+--
+-- * 'iImageLocation'
+--
+-- * 'iState'
+--
+-- * 'iOwnerId'
+--
+-- * 'iPublic'
+--
+-- * 'iArchitecture'
+--
+-- * 'iImageType'
+--
+-- * 'iRootDeviceType'
+--
+-- * 'iVirtualizationType'
+--
+-- * 'iHypervisor'
+image
+    :: Text -- ^ 'iImageId'
+    -> Text -- ^ 'iImageLocation'
+    -> ImageState -- ^ 'iState'
+    -> Text -- ^ 'iOwnerId'
+    -> Bool -- ^ 'iPublic'
+    -> ArchitectureValues -- ^ 'iArchitecture'
+    -> ImageTypeValues -- ^ 'iImageType'
+    -> DeviceType -- ^ 'iRootDeviceType'
+    -> VirtualizationType -- ^ 'iVirtualizationType'
+    -> HypervisorType -- ^ 'iHypervisor'
+    -> Image
+image pImageId_ pImageLocation_ pState_ pOwnerId_ pPublic_ pArchitecture_ pImageType_ pRootDeviceType_ pVirtualizationType_ pHypervisor_ =
+    Image'
+    { _iPlatform = Nothing
+    , _iImageOwnerAlias = Nothing
+    , _iRAMDiskId = Nothing
+    , _iKernelId = Nothing
+    , _iRootDeviceName = Nothing
+    , _iSRIOVNetSupport = Nothing
+    , _iName = Nothing
+    , _iCreationDate = Nothing
+    , _iProductCodes = Nothing
+    , _iStateReason = Nothing
+    , _iDescription = Nothing
+    , _iBlockDeviceMappings = Nothing
+    , _iTags = Nothing
+    , _iImageId = pImageId_
+    , _iImageLocation = pImageLocation_
+    , _iState = pState_
+    , _iOwnerId = pOwnerId_
+    , _iPublic = pPublic_
+    , _iArchitecture = pArchitecture_
+    , _iImageType = pImageType_
+    , _iRootDeviceType = pRootDeviceType_
+    , _iVirtualizationType = pVirtualizationType_
+    , _iHypervisor = pHypervisor_
+    }
+
+-- | The value is 'Windows' for Windows AMIs; otherwise blank.
+iPlatform :: Lens' Image (Maybe PlatformValues)
+iPlatform = lens _iPlatform (\ s a -> s{_iPlatform = a});
+
+-- | The AWS account alias (for example, 'amazon', 'self') or the AWS account
+-- ID of the AMI owner.
+iImageOwnerAlias :: Lens' Image (Maybe Text)
+iImageOwnerAlias = lens _iImageOwnerAlias (\ s a -> s{_iImageOwnerAlias = a});
+
+-- | The RAM disk associated with the image, if any. Only applicable for
+-- machine images.
+iRAMDiskId :: Lens' Image (Maybe Text)
+iRAMDiskId = lens _iRAMDiskId (\ s a -> s{_iRAMDiskId = a});
+
+-- | The kernel associated with the image, if any. Only applicable for
+-- machine images.
+iKernelId :: Lens' Image (Maybe Text)
+iKernelId = lens _iKernelId (\ s a -> s{_iKernelId = a});
+
+-- | The device name of the root device (for example, '\/dev\/sda1' or
+-- '\/dev\/xvda').
+iRootDeviceName :: Lens' Image (Maybe Text)
+iRootDeviceName = lens _iRootDeviceName (\ s a -> s{_iRootDeviceName = a});
+
+-- | Specifies whether enhanced networking is enabled.
+iSRIOVNetSupport :: Lens' Image (Maybe Text)
+iSRIOVNetSupport = lens _iSRIOVNetSupport (\ s a -> s{_iSRIOVNetSupport = a});
+
+-- | The name of the AMI that was provided during image creation.
+iName :: Lens' Image (Maybe Text)
+iName = lens _iName (\ s a -> s{_iName = a});
+
+-- | The date and time the image was created.
+iCreationDate :: Lens' Image (Maybe Text)
+iCreationDate = lens _iCreationDate (\ s a -> s{_iCreationDate = a});
+
+-- | Any product codes associated with the AMI.
+iProductCodes :: Lens' Image [ProductCode]
+iProductCodes = lens _iProductCodes (\ s a -> s{_iProductCodes = a}) . _Default . _Coerce;
+
+-- | The reason for the state change.
+iStateReason :: Lens' Image (Maybe StateReason)
+iStateReason = lens _iStateReason (\ s a -> s{_iStateReason = a});
+
+-- | The description of the AMI that was provided during image creation.
+iDescription :: Lens' Image (Maybe Text)
+iDescription = lens _iDescription (\ s a -> s{_iDescription = a});
+
+-- | Any block device mapping entries.
+iBlockDeviceMappings :: Lens' Image [BlockDeviceMapping]
+iBlockDeviceMappings = lens _iBlockDeviceMappings (\ s a -> s{_iBlockDeviceMappings = a}) . _Default . _Coerce;
+
+-- | Any tags assigned to the image.
+iTags :: Lens' Image [Tag]
+iTags = lens _iTags (\ s a -> s{_iTags = a}) . _Default . _Coerce;
+
+-- | The ID of the AMI.
+iImageId :: Lens' Image Text
+iImageId = lens _iImageId (\ s a -> s{_iImageId = a});
+
+-- | The location of the AMI.
+iImageLocation :: Lens' Image Text
+iImageLocation = lens _iImageLocation (\ s a -> s{_iImageLocation = a});
+
+-- | The current state of the AMI. If the state is 'available', the image is
+-- successfully registered and can be used to launch an instance.
+iState :: Lens' Image ImageState
+iState = lens _iState (\ s a -> s{_iState = a});
+
+-- | The AWS account ID of the image owner.
+iOwnerId :: Lens' Image Text
+iOwnerId = lens _iOwnerId (\ s a -> s{_iOwnerId = a});
+
+-- | Indicates whether the image has public launch permissions. The value is
+-- 'true' if this image has public launch permissions or 'false' if it has
+-- only implicit and explicit launch permissions.
+iPublic :: Lens' Image Bool
+iPublic = lens _iPublic (\ s a -> s{_iPublic = a});
+
+-- | The architecture of the image.
+iArchitecture :: Lens' Image ArchitectureValues
+iArchitecture = lens _iArchitecture (\ s a -> s{_iArchitecture = a});
+
+-- | The type of image.
+iImageType :: Lens' Image ImageTypeValues
+iImageType = lens _iImageType (\ s a -> s{_iImageType = a});
+
+-- | The type of root device used by the AMI. The AMI can use an EBS volume
+-- or an instance store volume.
+iRootDeviceType :: Lens' Image DeviceType
+iRootDeviceType = lens _iRootDeviceType (\ s a -> s{_iRootDeviceType = a});
+
+-- | The type of virtualization of the AMI.
+iVirtualizationType :: Lens' Image VirtualizationType
+iVirtualizationType = lens _iVirtualizationType (\ s a -> s{_iVirtualizationType = a});
+
+-- | The hypervisor type of the image.
+iHypervisor :: Lens' Image HypervisorType
+iHypervisor = lens _iHypervisor (\ s a -> s{_iHypervisor = a});
+
+instance FromXML Image where
+        parseXML x
+          = Image' <$>
+              (x .@? "platform") <*> (x .@? "imageOwnerAlias") <*>
+                (x .@? "ramdiskId")
+                <*> (x .@? "kernelId")
+                <*> (x .@? "rootDeviceName")
+                <*> (x .@? "sriovNetSupport")
+                <*> (x .@? "name")
+                <*> (x .@? "creationDate")
+                <*>
+                (x .@? "productCodes" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "stateReason")
+                <*> (x .@? "description")
+                <*>
+                (x .@? "blockDeviceMapping" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "imageId")
+                <*> (x .@ "imageLocation")
+                <*> (x .@ "imageState")
+                <*> (x .@ "imageOwnerId")
+                <*> (x .@ "isPublic")
+                <*> (x .@ "architecture")
+                <*> (x .@ "imageType")
+                <*> (x .@ "rootDeviceType")
+                <*> (x .@ "virtualizationType")
+                <*> (x .@ "hypervisor")
+
+instance Hashable Image
+
+-- | Describes the disk container object for an import image task.
+--
+-- /See:/ 'imageDiskContainer' smart constructor.
+data ImageDiskContainer = ImageDiskContainer'
+    { _idcFormat      :: !(Maybe Text)
+    , _idcURL         :: !(Maybe Text)
+    , _idcDeviceName  :: !(Maybe Text)
+    , _idcUserBucket  :: !(Maybe UserBucket)
+    , _idcDescription :: !(Maybe Text)
+    , _idcSnapshotId  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImageDiskContainer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'idcFormat'
+--
+-- * 'idcURL'
+--
+-- * 'idcDeviceName'
+--
+-- * 'idcUserBucket'
+--
+-- * 'idcDescription'
+--
+-- * 'idcSnapshotId'
+imageDiskContainer
+    :: ImageDiskContainer
+imageDiskContainer =
+    ImageDiskContainer'
+    { _idcFormat = Nothing
+    , _idcURL = Nothing
+    , _idcDeviceName = Nothing
+    , _idcUserBucket = Nothing
+    , _idcDescription = Nothing
+    , _idcSnapshotId = Nothing
+    }
+
+-- | The format of the disk image being imported.
+--
+-- Valid values: 'RAW' | 'VHD' | 'VMDK' | 'OVA'
+idcFormat :: Lens' ImageDiskContainer (Maybe Text)
+idcFormat = lens _idcFormat (\ s a -> s{_idcFormat = a});
+
+-- | The URL to the Amazon S3-based disk image being imported. The URL can
+-- either be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..)
+idcURL :: Lens' ImageDiskContainer (Maybe Text)
+idcURL = lens _idcURL (\ s a -> s{_idcURL = a});
+
+-- | The block device mapping for the disk.
+idcDeviceName :: Lens' ImageDiskContainer (Maybe Text)
+idcDeviceName = lens _idcDeviceName (\ s a -> s{_idcDeviceName = a});
+
+-- | The S3 bucket for the disk image.
+idcUserBucket :: Lens' ImageDiskContainer (Maybe UserBucket)
+idcUserBucket = lens _idcUserBucket (\ s a -> s{_idcUserBucket = a});
+
+-- | The description of the disk image.
+idcDescription :: Lens' ImageDiskContainer (Maybe Text)
+idcDescription = lens _idcDescription (\ s a -> s{_idcDescription = a});
+
+-- | The ID of the EBS snapshot to be used for importing the snapshot.
+idcSnapshotId :: Lens' ImageDiskContainer (Maybe Text)
+idcSnapshotId = lens _idcSnapshotId (\ s a -> s{_idcSnapshotId = a});
+
+instance Hashable ImageDiskContainer
+
+instance ToQuery ImageDiskContainer where
+        toQuery ImageDiskContainer'{..}
+          = mconcat
+              ["Format" =: _idcFormat, "Url" =: _idcURL,
+               "DeviceName" =: _idcDeviceName,
+               "UserBucket" =: _idcUserBucket,
+               "Description" =: _idcDescription,
+               "SnapshotId" =: _idcSnapshotId]
+
+-- | Describes an import image task.
+--
+-- /See:/ 'importImageTask' smart constructor.
+data ImportImageTask = ImportImageTask'
+    { _iitStatus          :: !(Maybe Text)
+    , _iitHypervisor      :: !(Maybe Text)
+    , _iitPlatform        :: !(Maybe Text)
+    , _iitProgress        :: !(Maybe Text)
+    , _iitLicenseType     :: !(Maybe Text)
+    , _iitSnapshotDetails :: !(Maybe [SnapshotDetail])
+    , _iitStatusMessage   :: !(Maybe Text)
+    , _iitImageId         :: !(Maybe Text)
+    , _iitImportTaskId    :: !(Maybe Text)
+    , _iitArchitecture    :: !(Maybe Text)
+    , _iitDescription     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImportImageTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iitStatus'
+--
+-- * 'iitHypervisor'
+--
+-- * 'iitPlatform'
+--
+-- * 'iitProgress'
+--
+-- * 'iitLicenseType'
+--
+-- * 'iitSnapshotDetails'
+--
+-- * 'iitStatusMessage'
+--
+-- * 'iitImageId'
+--
+-- * 'iitImportTaskId'
+--
+-- * 'iitArchitecture'
+--
+-- * 'iitDescription'
+importImageTask
+    :: ImportImageTask
+importImageTask =
+    ImportImageTask'
+    { _iitStatus = Nothing
+    , _iitHypervisor = Nothing
+    , _iitPlatform = Nothing
+    , _iitProgress = Nothing
+    , _iitLicenseType = Nothing
+    , _iitSnapshotDetails = Nothing
+    , _iitStatusMessage = Nothing
+    , _iitImageId = Nothing
+    , _iitImportTaskId = Nothing
+    , _iitArchitecture = Nothing
+    , _iitDescription = Nothing
+    }
+
+-- | A brief status for the import image task.
+iitStatus :: Lens' ImportImageTask (Maybe Text)
+iitStatus = lens _iitStatus (\ s a -> s{_iitStatus = a});
+
+-- | The target hypervisor for the import task.
+--
+-- Valid values: 'xen'
+iitHypervisor :: Lens' ImportImageTask (Maybe Text)
+iitHypervisor = lens _iitHypervisor (\ s a -> s{_iitHypervisor = a});
+
+-- | The description string for the import image task.
+iitPlatform :: Lens' ImportImageTask (Maybe Text)
+iitPlatform = lens _iitPlatform (\ s a -> s{_iitPlatform = a});
+
+-- | The percentage of progress of the import image task.
+iitProgress :: Lens' ImportImageTask (Maybe Text)
+iitProgress = lens _iitProgress (\ s a -> s{_iitProgress = a});
+
+-- | The license type of the virtual machine.
+iitLicenseType :: Lens' ImportImageTask (Maybe Text)
+iitLicenseType = lens _iitLicenseType (\ s a -> s{_iitLicenseType = a});
+
+-- | Information about the snapshots.
+iitSnapshotDetails :: Lens' ImportImageTask [SnapshotDetail]
+iitSnapshotDetails = lens _iitSnapshotDetails (\ s a -> s{_iitSnapshotDetails = a}) . _Default . _Coerce;
+
+-- | A descriptive status message for the import image task.
+iitStatusMessage :: Lens' ImportImageTask (Maybe Text)
+iitStatusMessage = lens _iitStatusMessage (\ s a -> s{_iitStatusMessage = a});
+
+-- | The ID of the Amazon Machine Image (AMI) of the imported virtual
+-- machine.
+iitImageId :: Lens' ImportImageTask (Maybe Text)
+iitImageId = lens _iitImageId (\ s a -> s{_iitImageId = a});
+
+-- | The ID of the import image task.
+iitImportTaskId :: Lens' ImportImageTask (Maybe Text)
+iitImportTaskId = lens _iitImportTaskId (\ s a -> s{_iitImportTaskId = a});
+
+-- | The architecture of the virtual machine.
+--
+-- Valid values: 'i386' | 'x86_64'
+iitArchitecture :: Lens' ImportImageTask (Maybe Text)
+iitArchitecture = lens _iitArchitecture (\ s a -> s{_iitArchitecture = a});
+
+-- | A description of the import task.
+iitDescription :: Lens' ImportImageTask (Maybe Text)
+iitDescription = lens _iitDescription (\ s a -> s{_iitDescription = a});
+
+instance FromXML ImportImageTask where
+        parseXML x
+          = ImportImageTask' <$>
+              (x .@? "status") <*> (x .@? "hypervisor") <*>
+                (x .@? "platform")
+                <*> (x .@? "progress")
+                <*> (x .@? "licenseType")
+                <*>
+                (x .@? "snapshotDetailSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "statusMessage")
+                <*> (x .@? "imageId")
+                <*> (x .@? "importTaskId")
+                <*> (x .@? "architecture")
+                <*> (x .@? "description")
+
+instance Hashable ImportImageTask
+
+-- | Describes the launch specification for VM import.
+--
+-- /See:/ 'importInstanceLaunchSpecification' smart constructor.
+data ImportInstanceLaunchSpecification = ImportInstanceLaunchSpecification'
+    { _iilsAdditionalInfo                    :: !(Maybe Text)
+    , _iilsGroupNames                        :: !(Maybe [Text])
+    , _iilsSubnetId                          :: !(Maybe Text)
+    , _iilsInstanceType                      :: !(Maybe InstanceType)
+    , _iilsGroupIds                          :: !(Maybe [Text])
+    , _iilsUserData                          :: !(Maybe UserData)
+    , _iilsMonitoring                        :: !(Maybe Bool)
+    , _iilsPrivateIPAddress                  :: !(Maybe Text)
+    , _iilsInstanceInitiatedShutdownBehavior :: !(Maybe ShutdownBehavior)
+    , _iilsArchitecture                      :: !(Maybe ArchitectureValues)
+    , _iilsPlacement                         :: !(Maybe Placement)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImportInstanceLaunchSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iilsAdditionalInfo'
+--
+-- * 'iilsGroupNames'
+--
+-- * 'iilsSubnetId'
+--
+-- * 'iilsInstanceType'
+--
+-- * 'iilsGroupIds'
+--
+-- * 'iilsUserData'
+--
+-- * 'iilsMonitoring'
+--
+-- * 'iilsPrivateIPAddress'
+--
+-- * 'iilsInstanceInitiatedShutdownBehavior'
+--
+-- * 'iilsArchitecture'
+--
+-- * 'iilsPlacement'
+importInstanceLaunchSpecification
+    :: ImportInstanceLaunchSpecification
+importInstanceLaunchSpecification =
+    ImportInstanceLaunchSpecification'
+    { _iilsAdditionalInfo = Nothing
+    , _iilsGroupNames = Nothing
+    , _iilsSubnetId = Nothing
+    , _iilsInstanceType = Nothing
+    , _iilsGroupIds = Nothing
+    , _iilsUserData = Nothing
+    , _iilsMonitoring = Nothing
+    , _iilsPrivateIPAddress = Nothing
+    , _iilsInstanceInitiatedShutdownBehavior = Nothing
+    , _iilsArchitecture = Nothing
+    , _iilsPlacement = Nothing
+    }
+
+-- | Reserved.
+iilsAdditionalInfo :: Lens' ImportInstanceLaunchSpecification (Maybe Text)
+iilsAdditionalInfo = lens _iilsAdditionalInfo (\ s a -> s{_iilsAdditionalInfo = a});
+
+-- | One or more security group names.
+iilsGroupNames :: Lens' ImportInstanceLaunchSpecification [Text]
+iilsGroupNames = lens _iilsGroupNames (\ s a -> s{_iilsGroupNames = a}) . _Default . _Coerce;
+
+-- | [EC2-VPC] The ID of the subnet in which to launch the instance.
+iilsSubnetId :: Lens' ImportInstanceLaunchSpecification (Maybe Text)
+iilsSubnetId = lens _iilsSubnetId (\ s a -> s{_iilsSubnetId = a});
+
+-- | The instance type. For more information about the instance types that
+-- you can import, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/VMImportPrerequisites.html Before You Get Started>
+-- in the Amazon Elastic Compute Cloud User Guide.
+iilsInstanceType :: Lens' ImportInstanceLaunchSpecification (Maybe InstanceType)
+iilsInstanceType = lens _iilsInstanceType (\ s a -> s{_iilsInstanceType = a});
+
+-- | One or more security group IDs.
+iilsGroupIds :: Lens' ImportInstanceLaunchSpecification [Text]
+iilsGroupIds = lens _iilsGroupIds (\ s a -> s{_iilsGroupIds = a}) . _Default . _Coerce;
+
+-- | The Base64-encoded MIME user data to be made available to the instance.
+iilsUserData :: Lens' ImportInstanceLaunchSpecification (Maybe UserData)
+iilsUserData = lens _iilsUserData (\ s a -> s{_iilsUserData = a});
+
+-- | Indicates whether monitoring is enabled.
+iilsMonitoring :: Lens' ImportInstanceLaunchSpecification (Maybe Bool)
+iilsMonitoring = lens _iilsMonitoring (\ s a -> s{_iilsMonitoring = a});
+
+-- | [EC2-VPC] An available IP address from the IP address range of the
+-- subnet.
+iilsPrivateIPAddress :: Lens' ImportInstanceLaunchSpecification (Maybe Text)
+iilsPrivateIPAddress = lens _iilsPrivateIPAddress (\ s a -> s{_iilsPrivateIPAddress = a});
+
+-- | Indicates whether an instance stops or terminates when you initiate
+-- shutdown from the instance (using the operating system command for
+-- system shutdown).
+iilsInstanceInitiatedShutdownBehavior :: Lens' ImportInstanceLaunchSpecification (Maybe ShutdownBehavior)
+iilsInstanceInitiatedShutdownBehavior = lens _iilsInstanceInitiatedShutdownBehavior (\ s a -> s{_iilsInstanceInitiatedShutdownBehavior = a});
+
+-- | The architecture of the instance.
+iilsArchitecture :: Lens' ImportInstanceLaunchSpecification (Maybe ArchitectureValues)
+iilsArchitecture = lens _iilsArchitecture (\ s a -> s{_iilsArchitecture = a});
+
+-- | The placement information for the instance.
+iilsPlacement :: Lens' ImportInstanceLaunchSpecification (Maybe Placement)
+iilsPlacement = lens _iilsPlacement (\ s a -> s{_iilsPlacement = a});
+
+instance Hashable ImportInstanceLaunchSpecification
+
+instance ToQuery ImportInstanceLaunchSpecification
+         where
+        toQuery ImportInstanceLaunchSpecification'{..}
+          = mconcat
+              ["AdditionalInfo" =: _iilsAdditionalInfo,
+               toQuery
+                 (toQueryList "GroupName" <$> _iilsGroupNames),
+               "SubnetId" =: _iilsSubnetId,
+               "InstanceType" =: _iilsInstanceType,
+               toQuery (toQueryList "GroupId" <$> _iilsGroupIds),
+               "UserData" =: _iilsUserData,
+               "Monitoring" =: _iilsMonitoring,
+               "PrivateIpAddress" =: _iilsPrivateIPAddress,
+               "InstanceInitiatedShutdownBehavior" =:
+                 _iilsInstanceInitiatedShutdownBehavior,
+               "Architecture" =: _iilsArchitecture,
+               "Placement" =: _iilsPlacement]
+
+-- | Describes an import instance task.
+--
+-- /See:/ 'importInstanceTaskDetails' smart constructor.
+data ImportInstanceTaskDetails = ImportInstanceTaskDetails'
+    { _iitdInstanceId  :: !(Maybe Text)
+    , _iitdPlatform    :: !(Maybe PlatformValues)
+    , _iitdDescription :: !(Maybe Text)
+    , _iitdVolumes     :: ![ImportInstanceVolumeDetailItem]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImportInstanceTaskDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iitdInstanceId'
+--
+-- * 'iitdPlatform'
+--
+-- * 'iitdDescription'
+--
+-- * 'iitdVolumes'
+importInstanceTaskDetails
+    :: ImportInstanceTaskDetails
+importInstanceTaskDetails =
+    ImportInstanceTaskDetails'
+    { _iitdInstanceId = Nothing
+    , _iitdPlatform = Nothing
+    , _iitdDescription = Nothing
+    , _iitdVolumes = mempty
+    }
+
+-- | The ID of the instance.
+iitdInstanceId :: Lens' ImportInstanceTaskDetails (Maybe Text)
+iitdInstanceId = lens _iitdInstanceId (\ s a -> s{_iitdInstanceId = a});
+
+-- | The instance operating system.
+iitdPlatform :: Lens' ImportInstanceTaskDetails (Maybe PlatformValues)
+iitdPlatform = lens _iitdPlatform (\ s a -> s{_iitdPlatform = a});
+
+-- | A description of the task.
+iitdDescription :: Lens' ImportInstanceTaskDetails (Maybe Text)
+iitdDescription = lens _iitdDescription (\ s a -> s{_iitdDescription = a});
+
+-- | One or more volumes.
+iitdVolumes :: Lens' ImportInstanceTaskDetails [ImportInstanceVolumeDetailItem]
+iitdVolumes = lens _iitdVolumes (\ s a -> s{_iitdVolumes = a}) . _Coerce;
+
+instance FromXML ImportInstanceTaskDetails where
+        parseXML x
+          = ImportInstanceTaskDetails' <$>
+              (x .@? "instanceId") <*> (x .@? "platform") <*>
+                (x .@? "description")
+                <*>
+                (x .@? "volumes" .!@ mempty >>= parseXMLList "item")
+
+instance Hashable ImportInstanceTaskDetails
+
+-- | Describes an import volume task.
+--
+-- /See:/ 'importInstanceVolumeDetailItem' smart constructor.
+data ImportInstanceVolumeDetailItem = ImportInstanceVolumeDetailItem'
+    { _iivdiStatusMessage    :: !(Maybe Text)
+    , _iivdiDescription      :: !(Maybe Text)
+    , _iivdiBytesConverted   :: !Integer
+    , _iivdiAvailabilityZone :: !Text
+    , _iivdiImage            :: !DiskImageDescription
+    , _iivdiVolume           :: !DiskImageVolumeDescription
+    , _iivdiStatus           :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImportInstanceVolumeDetailItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iivdiStatusMessage'
+--
+-- * 'iivdiDescription'
+--
+-- * 'iivdiBytesConverted'
+--
+-- * 'iivdiAvailabilityZone'
+--
+-- * 'iivdiImage'
+--
+-- * 'iivdiVolume'
+--
+-- * 'iivdiStatus'
+importInstanceVolumeDetailItem
+    :: Integer -- ^ 'iivdiBytesConverted'
+    -> Text -- ^ 'iivdiAvailabilityZone'
+    -> DiskImageDescription -- ^ 'iivdiImage'
+    -> DiskImageVolumeDescription -- ^ 'iivdiVolume'
+    -> Text -- ^ 'iivdiStatus'
+    -> ImportInstanceVolumeDetailItem
+importInstanceVolumeDetailItem pBytesConverted_ pAvailabilityZone_ pImage_ pVolume_ pStatus_ =
+    ImportInstanceVolumeDetailItem'
+    { _iivdiStatusMessage = Nothing
+    , _iivdiDescription = Nothing
+    , _iivdiBytesConverted = pBytesConverted_
+    , _iivdiAvailabilityZone = pAvailabilityZone_
+    , _iivdiImage = pImage_
+    , _iivdiVolume = pVolume_
+    , _iivdiStatus = pStatus_
+    }
+
+-- | The status information or errors related to the disk image.
+iivdiStatusMessage :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
+iivdiStatusMessage = lens _iivdiStatusMessage (\ s a -> s{_iivdiStatusMessage = a});
+
+-- | A description of the task.
+iivdiDescription :: Lens' ImportInstanceVolumeDetailItem (Maybe Text)
+iivdiDescription = lens _iivdiDescription (\ s a -> s{_iivdiDescription = a});
+
+-- | The number of bytes converted so far.
+iivdiBytesConverted :: Lens' ImportInstanceVolumeDetailItem Integer
+iivdiBytesConverted = lens _iivdiBytesConverted (\ s a -> s{_iivdiBytesConverted = a});
+
+-- | The Availability Zone where the resulting instance will reside.
+iivdiAvailabilityZone :: Lens' ImportInstanceVolumeDetailItem Text
+iivdiAvailabilityZone = lens _iivdiAvailabilityZone (\ s a -> s{_iivdiAvailabilityZone = a});
+
+-- | The image.
+iivdiImage :: Lens' ImportInstanceVolumeDetailItem DiskImageDescription
+iivdiImage = lens _iivdiImage (\ s a -> s{_iivdiImage = a});
+
+-- | The volume.
+iivdiVolume :: Lens' ImportInstanceVolumeDetailItem DiskImageVolumeDescription
+iivdiVolume = lens _iivdiVolume (\ s a -> s{_iivdiVolume = a});
+
+-- | The status of the import of this particular disk image.
+iivdiStatus :: Lens' ImportInstanceVolumeDetailItem Text
+iivdiStatus = lens _iivdiStatus (\ s a -> s{_iivdiStatus = a});
+
+instance FromXML ImportInstanceVolumeDetailItem where
+        parseXML x
+          = ImportInstanceVolumeDetailItem' <$>
+              (x .@? "statusMessage") <*> (x .@? "description") <*>
+                (x .@ "bytesConverted")
+                <*> (x .@ "availabilityZone")
+                <*> (x .@ "image")
+                <*> (x .@ "volume")
+                <*> (x .@ "status")
+
+instance Hashable ImportInstanceVolumeDetailItem
+
+-- | Describes an import snapshot task.
+--
+-- /See:/ 'importSnapshotTask' smart constructor.
+data ImportSnapshotTask = ImportSnapshotTask'
+    { _istSnapshotTaskDetail :: !(Maybe SnapshotTaskDetail)
+    , _istImportTaskId       :: !(Maybe Text)
+    , _istDescription        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImportSnapshotTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'istSnapshotTaskDetail'
+--
+-- * 'istImportTaskId'
+--
+-- * 'istDescription'
+importSnapshotTask
+    :: ImportSnapshotTask
+importSnapshotTask =
+    ImportSnapshotTask'
+    { _istSnapshotTaskDetail = Nothing
+    , _istImportTaskId = Nothing
+    , _istDescription = Nothing
+    }
+
+-- | Describes an import snapshot task.
+istSnapshotTaskDetail :: Lens' ImportSnapshotTask (Maybe SnapshotTaskDetail)
+istSnapshotTaskDetail = lens _istSnapshotTaskDetail (\ s a -> s{_istSnapshotTaskDetail = a});
+
+-- | The ID of the import snapshot task.
+istImportTaskId :: Lens' ImportSnapshotTask (Maybe Text)
+istImportTaskId = lens _istImportTaskId (\ s a -> s{_istImportTaskId = a});
+
+-- | A description of the import snapshot task.
+istDescription :: Lens' ImportSnapshotTask (Maybe Text)
+istDescription = lens _istDescription (\ s a -> s{_istDescription = a});
+
+instance FromXML ImportSnapshotTask where
+        parseXML x
+          = ImportSnapshotTask' <$>
+              (x .@? "snapshotTaskDetail") <*>
+                (x .@? "importTaskId")
+                <*> (x .@? "description")
+
+instance Hashable ImportSnapshotTask
+
+-- | Describes an import volume task.
+--
+-- /See:/ 'importVolumeTaskDetails' smart constructor.
+data ImportVolumeTaskDetails = ImportVolumeTaskDetails'
+    { _ivtdDescription      :: !(Maybe Text)
+    , _ivtdBytesConverted   :: !Integer
+    , _ivtdAvailabilityZone :: !Text
+    , _ivtdImage            :: !DiskImageDescription
+    , _ivtdVolume           :: !DiskImageVolumeDescription
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ImportVolumeTaskDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ivtdDescription'
+--
+-- * 'ivtdBytesConverted'
+--
+-- * 'ivtdAvailabilityZone'
+--
+-- * 'ivtdImage'
+--
+-- * 'ivtdVolume'
+importVolumeTaskDetails
+    :: Integer -- ^ 'ivtdBytesConverted'
+    -> Text -- ^ 'ivtdAvailabilityZone'
+    -> DiskImageDescription -- ^ 'ivtdImage'
+    -> DiskImageVolumeDescription -- ^ 'ivtdVolume'
+    -> ImportVolumeTaskDetails
+importVolumeTaskDetails pBytesConverted_ pAvailabilityZone_ pImage_ pVolume_ =
+    ImportVolumeTaskDetails'
+    { _ivtdDescription = Nothing
+    , _ivtdBytesConverted = pBytesConverted_
+    , _ivtdAvailabilityZone = pAvailabilityZone_
+    , _ivtdImage = pImage_
+    , _ivtdVolume = pVolume_
+    }
+
+-- | The description you provided when starting the import volume task.
+ivtdDescription :: Lens' ImportVolumeTaskDetails (Maybe Text)
+ivtdDescription = lens _ivtdDescription (\ s a -> s{_ivtdDescription = a});
+
+-- | The number of bytes converted so far.
+ivtdBytesConverted :: Lens' ImportVolumeTaskDetails Integer
+ivtdBytesConverted = lens _ivtdBytesConverted (\ s a -> s{_ivtdBytesConverted = a});
+
+-- | The Availability Zone where the resulting volume will reside.
+ivtdAvailabilityZone :: Lens' ImportVolumeTaskDetails Text
+ivtdAvailabilityZone = lens _ivtdAvailabilityZone (\ s a -> s{_ivtdAvailabilityZone = a});
+
+-- | The image.
+ivtdImage :: Lens' ImportVolumeTaskDetails DiskImageDescription
+ivtdImage = lens _ivtdImage (\ s a -> s{_ivtdImage = a});
+
+-- | The volume.
+ivtdVolume :: Lens' ImportVolumeTaskDetails DiskImageVolumeDescription
+ivtdVolume = lens _ivtdVolume (\ s a -> s{_ivtdVolume = a});
+
+instance FromXML ImportVolumeTaskDetails where
+        parseXML x
+          = ImportVolumeTaskDetails' <$>
+              (x .@? "description") <*> (x .@ "bytesConverted") <*>
+                (x .@ "availabilityZone")
+                <*> (x .@ "image")
+                <*> (x .@ "volume")
+
+instance Hashable ImportVolumeTaskDetails
+
+-- | Describes an instance.
+--
+-- /See:/ 'instance'' smart constructor.
+data Instance = Instance'
+    { _insPublicDNSName         :: !(Maybe Text)
+    , _insPlatform              :: !(Maybe PlatformValues)
+    , _insSecurityGroups        :: !(Maybe [GroupIdentifier])
+    , _insClientToken           :: !(Maybe Text)
+    , _insSourceDestCheck       :: !(Maybe Bool)
+    , _insVPCId                 :: !(Maybe Text)
+    , _insKeyName               :: !(Maybe Text)
+    , _insNetworkInterfaces     :: !(Maybe [InstanceNetworkInterface])
+    , _insRAMDiskId             :: !(Maybe Text)
+    , _insSubnetId              :: !(Maybe Text)
+    , _insKernelId              :: !(Maybe Text)
+    , _insRootDeviceName        :: !(Maybe Text)
+    , _insSRIOVNetSupport       :: !(Maybe Text)
+    , _insEBSOptimized          :: !(Maybe Bool)
+    , _insStateTransitionReason :: !(Maybe Text)
+    , _insInstanceLifecycle     :: !(Maybe InstanceLifecycleType)
+    , _insIAMInstanceProfile    :: !(Maybe IAMInstanceProfile)
+    , _insPrivateIPAddress      :: !(Maybe Text)
+    , _insProductCodes          :: !(Maybe [ProductCode])
+    , _insSpotInstanceRequestId :: !(Maybe Text)
+    , _insPrivateDNSName        :: !(Maybe Text)
+    , _insStateReason           :: !(Maybe StateReason)
+    , _insBlockDeviceMappings   :: !(Maybe [InstanceBlockDeviceMapping])
+    , _insPublicIPAddress       :: !(Maybe Text)
+    , _insTags                  :: !(Maybe [Tag])
+    , _insInstanceId            :: !Text
+    , _insImageId               :: !Text
+    , _insAMILaunchIndex        :: !Int
+    , _insInstanceType          :: !InstanceType
+    , _insLaunchTime            :: !ISO8601
+    , _insPlacement             :: !Placement
+    , _insMonitoring            :: !Monitoring
+    , _insArchitecture          :: !ArchitectureValues
+    , _insRootDeviceType        :: !DeviceType
+    , _insVirtualizationType    :: !VirtualizationType
+    , _insHypervisor            :: !HypervisorType
+    , _insState                 :: !InstanceState
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Instance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'insPublicDNSName'
+--
+-- * 'insPlatform'
+--
+-- * 'insSecurityGroups'
+--
+-- * 'insClientToken'
+--
+-- * 'insSourceDestCheck'
+--
+-- * 'insVPCId'
+--
+-- * 'insKeyName'
+--
+-- * 'insNetworkInterfaces'
+--
+-- * 'insRAMDiskId'
+--
+-- * 'insSubnetId'
+--
+-- * 'insKernelId'
+--
+-- * 'insRootDeviceName'
+--
+-- * 'insSRIOVNetSupport'
+--
+-- * 'insEBSOptimized'
+--
+-- * 'insStateTransitionReason'
+--
+-- * 'insInstanceLifecycle'
+--
+-- * 'insIAMInstanceProfile'
+--
+-- * 'insPrivateIPAddress'
+--
+-- * 'insProductCodes'
+--
+-- * 'insSpotInstanceRequestId'
+--
+-- * 'insPrivateDNSName'
+--
+-- * 'insStateReason'
+--
+-- * 'insBlockDeviceMappings'
+--
+-- * 'insPublicIPAddress'
+--
+-- * 'insTags'
+--
+-- * 'insInstanceId'
+--
+-- * 'insImageId'
+--
+-- * 'insAMILaunchIndex'
+--
+-- * 'insInstanceType'
+--
+-- * 'insLaunchTime'
+--
+-- * 'insPlacement'
+--
+-- * 'insMonitoring'
+--
+-- * 'insArchitecture'
+--
+-- * 'insRootDeviceType'
+--
+-- * 'insVirtualizationType'
+--
+-- * 'insHypervisor'
+--
+-- * 'insState'
+instance'
+    :: Text -- ^ 'insInstanceId'
+    -> Text -- ^ 'insImageId'
+    -> Int -- ^ 'insAMILaunchIndex'
+    -> InstanceType -- ^ 'insInstanceType'
+    -> UTCTime -- ^ 'insLaunchTime'
+    -> Placement -- ^ 'insPlacement'
+    -> Monitoring -- ^ 'insMonitoring'
+    -> ArchitectureValues -- ^ 'insArchitecture'
+    -> DeviceType -- ^ 'insRootDeviceType'
+    -> VirtualizationType -- ^ 'insVirtualizationType'
+    -> HypervisorType -- ^ 'insHypervisor'
+    -> InstanceState -- ^ 'insState'
+    -> Instance
+instance' pInstanceId_ pImageId_ pAMILaunchIndex_ pInstanceType_ pLaunchTime_ pPlacement_ pMonitoring_ pArchitecture_ pRootDeviceType_ pVirtualizationType_ pHypervisor_ pState_ =
+    Instance'
+    { _insPublicDNSName = Nothing
+    , _insPlatform = Nothing
+    , _insSecurityGroups = Nothing
+    , _insClientToken = Nothing
+    , _insSourceDestCheck = Nothing
+    , _insVPCId = Nothing
+    , _insKeyName = Nothing
+    , _insNetworkInterfaces = Nothing
+    , _insRAMDiskId = Nothing
+    , _insSubnetId = Nothing
+    , _insKernelId = Nothing
+    , _insRootDeviceName = Nothing
+    , _insSRIOVNetSupport = Nothing
+    , _insEBSOptimized = Nothing
+    , _insStateTransitionReason = Nothing
+    , _insInstanceLifecycle = Nothing
+    , _insIAMInstanceProfile = Nothing
+    , _insPrivateIPAddress = Nothing
+    , _insProductCodes = Nothing
+    , _insSpotInstanceRequestId = Nothing
+    , _insPrivateDNSName = Nothing
+    , _insStateReason = Nothing
+    , _insBlockDeviceMappings = Nothing
+    , _insPublicIPAddress = Nothing
+    , _insTags = Nothing
+    , _insInstanceId = pInstanceId_
+    , _insImageId = pImageId_
+    , _insAMILaunchIndex = pAMILaunchIndex_
+    , _insInstanceType = pInstanceType_
+    , _insLaunchTime = _Time # pLaunchTime_
+    , _insPlacement = pPlacement_
+    , _insMonitoring = pMonitoring_
+    , _insArchitecture = pArchitecture_
+    , _insRootDeviceType = pRootDeviceType_
+    , _insVirtualizationType = pVirtualizationType_
+    , _insHypervisor = pHypervisor_
+    , _insState = pState_
+    }
+
+-- | The public DNS name assigned to the instance. This name is not available
+-- until the instance enters the 'running' state. For EC2-VPC, this name is
+-- only available if you\'ve enabled DNS hostnames for your VPC.
+insPublicDNSName :: Lens' Instance (Maybe Text)
+insPublicDNSName = lens _insPublicDNSName (\ s a -> s{_insPublicDNSName = a});
+
+-- | The value is 'Windows' for Windows instances; otherwise blank.
+insPlatform :: Lens' Instance (Maybe PlatformValues)
+insPlatform = lens _insPlatform (\ s a -> s{_insPlatform = a});
+
+-- | One or more security groups for the instance.
+insSecurityGroups :: Lens' Instance [GroupIdentifier]
+insSecurityGroups = lens _insSecurityGroups (\ s a -> s{_insSecurityGroups = a}) . _Default . _Coerce;
+
+-- | The idempotency token you provided when you launched the instance, if
+-- applicable.
+insClientToken :: Lens' Instance (Maybe Text)
+insClientToken = lens _insClientToken (\ s a -> s{_insClientToken = a});
+
+-- | Specifies whether to enable an instance launched in a VPC to perform
+-- NAT. This controls whether source\/destination checking is enabled on
+-- the instance. A value of 'true' means checking is enabled, and 'false'
+-- means checking is disabled. The value must be 'false' for the instance
+-- to perform NAT. For more information, see
+-- <http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html NAT Instances>
+-- in the /Amazon Virtual Private Cloud User Guide/.
+insSourceDestCheck :: Lens' Instance (Maybe Bool)
+insSourceDestCheck = lens _insSourceDestCheck (\ s a -> s{_insSourceDestCheck = a});
+
+-- | [EC2-VPC] The ID of the VPC in which the instance is running.
+insVPCId :: Lens' Instance (Maybe Text)
+insVPCId = lens _insVPCId (\ s a -> s{_insVPCId = a});
+
+-- | The name of the key pair, if this instance was launched with an
+-- associated key pair.
+insKeyName :: Lens' Instance (Maybe Text)
+insKeyName = lens _insKeyName (\ s a -> s{_insKeyName = a});
+
+-- | [EC2-VPC] One or more network interfaces for the instance.
+insNetworkInterfaces :: Lens' Instance [InstanceNetworkInterface]
+insNetworkInterfaces = lens _insNetworkInterfaces (\ s a -> s{_insNetworkInterfaces = a}) . _Default . _Coerce;
+
+-- | The RAM disk associated with this instance, if applicable.
+insRAMDiskId :: Lens' Instance (Maybe Text)
+insRAMDiskId = lens _insRAMDiskId (\ s a -> s{_insRAMDiskId = a});
+
+-- | [EC2-VPC] The ID of the subnet in which the instance is running.
+insSubnetId :: Lens' Instance (Maybe Text)
+insSubnetId = lens _insSubnetId (\ s a -> s{_insSubnetId = a});
+
+-- | The kernel associated with this instance, if applicable.
+insKernelId :: Lens' Instance (Maybe Text)
+insKernelId = lens _insKernelId (\ s a -> s{_insKernelId = a});
+
+-- | The root device name (for example, '\/dev\/sda1' or '\/dev\/xvda').
+insRootDeviceName :: Lens' Instance (Maybe Text)
+insRootDeviceName = lens _insRootDeviceName (\ s a -> s{_insRootDeviceName = a});
+
+-- | Specifies whether enhanced networking is enabled.
+insSRIOVNetSupport :: Lens' Instance (Maybe Text)
+insSRIOVNetSupport = lens _insSRIOVNetSupport (\ s a -> s{_insSRIOVNetSupport = a});
+
+-- | Indicates whether the instance is optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal I\/O performance. This
+-- optimization isn\'t available with all instance types. Additional usage
+-- charges apply when using an EBS Optimized instance.
+insEBSOptimized :: Lens' Instance (Maybe Bool)
+insEBSOptimized = lens _insEBSOptimized (\ s a -> s{_insEBSOptimized = a});
+
+-- | The reason for the most recent state transition. This might be an empty
+-- string.
+insStateTransitionReason :: Lens' Instance (Maybe Text)
+insStateTransitionReason = lens _insStateTransitionReason (\ s a -> s{_insStateTransitionReason = a});
+
+-- | Indicates whether this is a Spot instance or a Scheduled Instance.
+insInstanceLifecycle :: Lens' Instance (Maybe InstanceLifecycleType)
+insInstanceLifecycle = lens _insInstanceLifecycle (\ s a -> s{_insInstanceLifecycle = a});
+
+-- | The IAM instance profile associated with the instance, if applicable.
+insIAMInstanceProfile :: Lens' Instance (Maybe IAMInstanceProfile)
+insIAMInstanceProfile = lens _insIAMInstanceProfile (\ s a -> s{_insIAMInstanceProfile = a});
+
+-- | The private IP address assigned to the instance.
+insPrivateIPAddress :: Lens' Instance (Maybe Text)
+insPrivateIPAddress = lens _insPrivateIPAddress (\ s a -> s{_insPrivateIPAddress = a});
+
+-- | The product codes attached to this instance, if applicable.
+insProductCodes :: Lens' Instance [ProductCode]
+insProductCodes = lens _insProductCodes (\ s a -> s{_insProductCodes = a}) . _Default . _Coerce;
+
+-- | If the request is a Spot instance request, the ID of the request.
+insSpotInstanceRequestId :: Lens' Instance (Maybe Text)
+insSpotInstanceRequestId = lens _insSpotInstanceRequestId (\ s a -> s{_insSpotInstanceRequestId = a});
+
+-- | The private DNS name assigned to the instance. This DNS name can only be
+-- used inside the Amazon EC2 network. This name is not available until the
+-- instance enters the 'running' state. For EC2-VPC, this name is only
+-- available if you\'ve enabled DNS hostnames for your VPC.
+insPrivateDNSName :: Lens' Instance (Maybe Text)
+insPrivateDNSName = lens _insPrivateDNSName (\ s a -> s{_insPrivateDNSName = a});
+
+-- | The reason for the most recent state transition.
+insStateReason :: Lens' Instance (Maybe StateReason)
+insStateReason = lens _insStateReason (\ s a -> s{_insStateReason = a});
+
+-- | Any block device mapping entries for the instance.
+insBlockDeviceMappings :: Lens' Instance [InstanceBlockDeviceMapping]
+insBlockDeviceMappings = lens _insBlockDeviceMappings (\ s a -> s{_insBlockDeviceMappings = a}) . _Default . _Coerce;
+
+-- | The public IP address assigned to the instance, if applicable.
+insPublicIPAddress :: Lens' Instance (Maybe Text)
+insPublicIPAddress = lens _insPublicIPAddress (\ s a -> s{_insPublicIPAddress = a});
+
+-- | Any tags assigned to the instance.
+insTags :: Lens' Instance [Tag]
+insTags = lens _insTags (\ s a -> s{_insTags = a}) . _Default . _Coerce;
+
+-- | The ID of the instance.
+insInstanceId :: Lens' Instance Text
+insInstanceId = lens _insInstanceId (\ s a -> s{_insInstanceId = a});
+
+-- | The ID of the AMI used to launch the instance.
+insImageId :: Lens' Instance Text
+insImageId = lens _insImageId (\ s a -> s{_insImageId = a});
+
+-- | The AMI launch index, which can be used to find this instance in the
+-- launch group.
+insAMILaunchIndex :: Lens' Instance Int
+insAMILaunchIndex = lens _insAMILaunchIndex (\ s a -> s{_insAMILaunchIndex = a});
+
+-- | The instance type.
+insInstanceType :: Lens' Instance InstanceType
+insInstanceType = lens _insInstanceType (\ s a -> s{_insInstanceType = a});
+
+-- | The time the instance was launched.
+insLaunchTime :: Lens' Instance UTCTime
+insLaunchTime = lens _insLaunchTime (\ s a -> s{_insLaunchTime = a}) . _Time;
+
+-- | The location where the instance launched, if applicable.
+insPlacement :: Lens' Instance Placement
+insPlacement = lens _insPlacement (\ s a -> s{_insPlacement = a});
+
+-- | The monitoring information for the instance.
+insMonitoring :: Lens' Instance Monitoring
+insMonitoring = lens _insMonitoring (\ s a -> s{_insMonitoring = a});
+
+-- | The architecture of the image.
+insArchitecture :: Lens' Instance ArchitectureValues
+insArchitecture = lens _insArchitecture (\ s a -> s{_insArchitecture = a});
+
+-- | The root device type used by the AMI. The AMI can use an EBS volume or
+-- an instance store volume.
+insRootDeviceType :: Lens' Instance DeviceType
+insRootDeviceType = lens _insRootDeviceType (\ s a -> s{_insRootDeviceType = a});
+
+-- | The virtualization type of the instance.
+insVirtualizationType :: Lens' Instance VirtualizationType
+insVirtualizationType = lens _insVirtualizationType (\ s a -> s{_insVirtualizationType = a});
+
+-- | The hypervisor type of the instance.
+insHypervisor :: Lens' Instance HypervisorType
+insHypervisor = lens _insHypervisor (\ s a -> s{_insHypervisor = a});
+
+-- | The current state of the instance.
+insState :: Lens' Instance InstanceState
+insState = lens _insState (\ s a -> s{_insState = a});
+
+instance FromXML Instance where
+        parseXML x
+          = Instance' <$>
+              (x .@? "dnsName") <*> (x .@? "platform") <*>
+                (x .@? "groupSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "clientToken")
+                <*> (x .@? "sourceDestCheck")
+                <*> (x .@? "vpcId")
+                <*> (x .@? "keyName")
+                <*>
+                (x .@? "networkInterfaceSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "ramdiskId")
+                <*> (x .@? "subnetId")
+                <*> (x .@? "kernelId")
+                <*> (x .@? "rootDeviceName")
+                <*> (x .@? "sriovNetSupport")
+                <*> (x .@? "ebsOptimized")
+                <*> (x .@? "reason")
+                <*> (x .@? "instanceLifecycle")
+                <*> (x .@? "iamInstanceProfile")
+                <*> (x .@? "privateIpAddress")
+                <*>
+                (x .@? "productCodes" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "spotInstanceRequestId")
+                <*> (x .@? "privateDnsName")
+                <*> (x .@? "stateReason")
+                <*>
+                (x .@? "blockDeviceMapping" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "ipAddress")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "instanceId")
+                <*> (x .@ "imageId")
+                <*> (x .@ "amiLaunchIndex")
+                <*> (x .@ "instanceType")
+                <*> (x .@ "launchTime")
+                <*> (x .@ "placement")
+                <*> (x .@ "monitoring")
+                <*> (x .@ "architecture")
+                <*> (x .@ "rootDeviceType")
+                <*> (x .@ "virtualizationType")
+                <*> (x .@ "hypervisor")
+                <*> (x .@ "instanceState")
+
+instance Hashable Instance
+
+-- | Describes a block device mapping.
+--
+-- /See:/ 'instanceBlockDeviceMapping' smart constructor.
+data InstanceBlockDeviceMapping = InstanceBlockDeviceMapping'
+    { _ibdmEBS        :: !(Maybe EBSInstanceBlockDevice)
+    , _ibdmDeviceName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceBlockDeviceMapping' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ibdmEBS'
+--
+-- * 'ibdmDeviceName'
+instanceBlockDeviceMapping
+    :: InstanceBlockDeviceMapping
+instanceBlockDeviceMapping =
+    InstanceBlockDeviceMapping'
+    { _ibdmEBS = Nothing
+    , _ibdmDeviceName = Nothing
+    }
+
+-- | Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+ibdmEBS :: Lens' InstanceBlockDeviceMapping (Maybe EBSInstanceBlockDevice)
+ibdmEBS = lens _ibdmEBS (\ s a -> s{_ibdmEBS = a});
+
+-- | The device name exposed to the instance (for example, '\/dev\/sdh' or
+-- 'xvdh').
+ibdmDeviceName :: Lens' InstanceBlockDeviceMapping (Maybe Text)
+ibdmDeviceName = lens _ibdmDeviceName (\ s a -> s{_ibdmDeviceName = a});
+
+instance FromXML InstanceBlockDeviceMapping where
+        parseXML x
+          = InstanceBlockDeviceMapping' <$>
+              (x .@? "ebs") <*> (x .@? "deviceName")
+
+instance Hashable InstanceBlockDeviceMapping
+
+-- | Describes a block device mapping entry.
+--
+-- /See:/ 'instanceBlockDeviceMappingSpecification' smart constructor.
+data InstanceBlockDeviceMappingSpecification = InstanceBlockDeviceMappingSpecification'
+    { _ibdmsVirtualName :: !(Maybe Text)
+    , _ibdmsNoDevice    :: !(Maybe Text)
+    , _ibdmsEBS         :: !(Maybe EBSInstanceBlockDeviceSpecification)
+    , _ibdmsDeviceName  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceBlockDeviceMappingSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ibdmsVirtualName'
+--
+-- * 'ibdmsNoDevice'
+--
+-- * 'ibdmsEBS'
+--
+-- * 'ibdmsDeviceName'
+instanceBlockDeviceMappingSpecification
+    :: InstanceBlockDeviceMappingSpecification
+instanceBlockDeviceMappingSpecification =
+    InstanceBlockDeviceMappingSpecification'
+    { _ibdmsVirtualName = Nothing
+    , _ibdmsNoDevice = Nothing
+    , _ibdmsEBS = Nothing
+    , _ibdmsDeviceName = Nothing
+    }
+
+-- | The virtual device name.
+ibdmsVirtualName :: Lens' InstanceBlockDeviceMappingSpecification (Maybe Text)
+ibdmsVirtualName = lens _ibdmsVirtualName (\ s a -> s{_ibdmsVirtualName = a});
+
+-- | suppress the specified device included in the block device mapping.
+ibdmsNoDevice :: Lens' InstanceBlockDeviceMappingSpecification (Maybe Text)
+ibdmsNoDevice = lens _ibdmsNoDevice (\ s a -> s{_ibdmsNoDevice = a});
+
+-- | Parameters used to automatically set up EBS volumes when the instance is
+-- launched.
+ibdmsEBS :: Lens' InstanceBlockDeviceMappingSpecification (Maybe EBSInstanceBlockDeviceSpecification)
+ibdmsEBS = lens _ibdmsEBS (\ s a -> s{_ibdmsEBS = a});
+
+-- | The device name exposed to the instance (for example, '\/dev\/sdh' or
+-- 'xvdh').
+ibdmsDeviceName :: Lens' InstanceBlockDeviceMappingSpecification (Maybe Text)
+ibdmsDeviceName = lens _ibdmsDeviceName (\ s a -> s{_ibdmsDeviceName = a});
+
+instance Hashable
+         InstanceBlockDeviceMappingSpecification
+
+instance ToQuery
+         InstanceBlockDeviceMappingSpecification where
+        toQuery InstanceBlockDeviceMappingSpecification'{..}
+          = mconcat
+              ["VirtualName" =: _ibdmsVirtualName,
+               "NoDevice" =: _ibdmsNoDevice, "Ebs" =: _ibdmsEBS,
+               "DeviceName" =: _ibdmsDeviceName]
+
+-- | Information about the instance type that the Dedicated host supports.
+--
+-- /See:/ 'instanceCapacity' smart constructor.
+data InstanceCapacity = InstanceCapacity'
+    { _icAvailableCapacity :: !(Maybe Int)
+    , _icInstanceType      :: !(Maybe Text)
+    , _icTotalCapacity     :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceCapacity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'icAvailableCapacity'
+--
+-- * 'icInstanceType'
+--
+-- * 'icTotalCapacity'
+instanceCapacity
+    :: InstanceCapacity
+instanceCapacity =
+    InstanceCapacity'
+    { _icAvailableCapacity = Nothing
+    , _icInstanceType = Nothing
+    , _icTotalCapacity = Nothing
+    }
+
+-- | The number of instances that can still be launched onto the Dedicated
+-- host.
+icAvailableCapacity :: Lens' InstanceCapacity (Maybe Int)
+icAvailableCapacity = lens _icAvailableCapacity (\ s a -> s{_icAvailableCapacity = a});
+
+-- | The instance type size supported by the Dedicated host.
+icInstanceType :: Lens' InstanceCapacity (Maybe Text)
+icInstanceType = lens _icInstanceType (\ s a -> s{_icInstanceType = a});
+
+-- | The total number of instances that can be launched onto the Dedicated
+-- host.
+icTotalCapacity :: Lens' InstanceCapacity (Maybe Int)
+icTotalCapacity = lens _icTotalCapacity (\ s a -> s{_icTotalCapacity = a});
+
+instance FromXML InstanceCapacity where
+        parseXML x
+          = InstanceCapacity' <$>
+              (x .@? "availableCapacity") <*>
+                (x .@? "instanceType")
+                <*> (x .@? "totalCapacity")
+
+instance Hashable InstanceCapacity
+
+-- | Describes a Reserved Instance listing state.
+--
+-- /See:/ 'instanceCount' smart constructor.
+data InstanceCount = InstanceCount'
+    { _icState         :: !(Maybe ListingState)
+    , _icInstanceCount :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceCount' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'icState'
+--
+-- * 'icInstanceCount'
+instanceCount
+    :: InstanceCount
+instanceCount =
+    InstanceCount'
+    { _icState = Nothing
+    , _icInstanceCount = Nothing
+    }
+
+-- | The states of the listed Reserved Instances.
+icState :: Lens' InstanceCount (Maybe ListingState)
+icState = lens _icState (\ s a -> s{_icState = a});
+
+-- | The number of listed Reserved Instances in the state specified by the
+-- 'state'.
+icInstanceCount :: Lens' InstanceCount (Maybe Int)
+icInstanceCount = lens _icInstanceCount (\ s a -> s{_icInstanceCount = a});
+
+instance FromXML InstanceCount where
+        parseXML x
+          = InstanceCount' <$>
+              (x .@? "state") <*> (x .@? "instanceCount")
+
+instance Hashable InstanceCount
+
+-- | Describes an instance to export.
+--
+-- /See:/ 'instanceExportDetails' smart constructor.
+data InstanceExportDetails = InstanceExportDetails'
+    { _iedTargetEnvironment :: !(Maybe ExportEnvironment)
+    , _iedInstanceId        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceExportDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iedTargetEnvironment'
+--
+-- * 'iedInstanceId'
+instanceExportDetails
+    :: InstanceExportDetails
+instanceExportDetails =
+    InstanceExportDetails'
+    { _iedTargetEnvironment = Nothing
+    , _iedInstanceId = Nothing
+    }
+
+-- | The target virtualization environment.
+iedTargetEnvironment :: Lens' InstanceExportDetails (Maybe ExportEnvironment)
+iedTargetEnvironment = lens _iedTargetEnvironment (\ s a -> s{_iedTargetEnvironment = a});
+
+-- | The ID of the resource being exported.
+iedInstanceId :: Lens' InstanceExportDetails (Maybe Text)
+iedInstanceId = lens _iedInstanceId (\ s a -> s{_iedInstanceId = a});
+
+instance FromXML InstanceExportDetails where
+        parseXML x
+          = InstanceExportDetails' <$>
+              (x .@? "targetEnvironment") <*> (x .@? "instanceId")
+
+instance Hashable InstanceExportDetails
+
+-- | Describes the monitoring information of the instance.
+--
+-- /See:/ 'instanceMonitoring' smart constructor.
+data InstanceMonitoring = InstanceMonitoring'
+    { _imInstanceId :: !(Maybe Text)
+    , _imMonitoring :: !(Maybe Monitoring)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceMonitoring' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'imInstanceId'
+--
+-- * 'imMonitoring'
+instanceMonitoring
+    :: InstanceMonitoring
+instanceMonitoring =
+    InstanceMonitoring'
+    { _imInstanceId = Nothing
+    , _imMonitoring = Nothing
+    }
+
+-- | The ID of the instance.
+imInstanceId :: Lens' InstanceMonitoring (Maybe Text)
+imInstanceId = lens _imInstanceId (\ s a -> s{_imInstanceId = a});
+
+-- | The monitoring information.
+imMonitoring :: Lens' InstanceMonitoring (Maybe Monitoring)
+imMonitoring = lens _imMonitoring (\ s a -> s{_imMonitoring = a});
+
+instance FromXML InstanceMonitoring where
+        parseXML x
+          = InstanceMonitoring' <$>
+              (x .@? "instanceId") <*> (x .@? "monitoring")
+
+instance Hashable InstanceMonitoring
+
+-- | Describes a network interface.
+--
+-- /See:/ 'instanceNetworkInterface' smart constructor.
+data InstanceNetworkInterface = InstanceNetworkInterface'
+    { _iniGroups             :: !(Maybe [GroupIdentifier])
+    , _iniStatus             :: !(Maybe NetworkInterfaceStatus)
+    , _iniPrivateIPAddresses :: !(Maybe [InstancePrivateIPAddress])
+    , _iniSourceDestCheck    :: !(Maybe Bool)
+    , _iniVPCId              :: !(Maybe Text)
+    , _iniNetworkInterfaceId :: !(Maybe Text)
+    , _iniSubnetId           :: !(Maybe Text)
+    , _iniMACAddress         :: !(Maybe Text)
+    , _iniAttachment         :: !(Maybe InstanceNetworkInterfaceAttachment)
+    , _iniOwnerId            :: !(Maybe Text)
+    , _iniPrivateIPAddress   :: !(Maybe Text)
+    , _iniPrivateDNSName     :: !(Maybe Text)
+    , _iniDescription        :: !(Maybe Text)
+    , _iniAssociation        :: !(Maybe InstanceNetworkInterfaceAssociation)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceNetworkInterface' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iniGroups'
+--
+-- * 'iniStatus'
+--
+-- * 'iniPrivateIPAddresses'
+--
+-- * 'iniSourceDestCheck'
+--
+-- * 'iniVPCId'
+--
+-- * 'iniNetworkInterfaceId'
+--
+-- * 'iniSubnetId'
+--
+-- * 'iniMACAddress'
+--
+-- * 'iniAttachment'
+--
+-- * 'iniOwnerId'
+--
+-- * 'iniPrivateIPAddress'
+--
+-- * 'iniPrivateDNSName'
+--
+-- * 'iniDescription'
+--
+-- * 'iniAssociation'
+instanceNetworkInterface
+    :: InstanceNetworkInterface
+instanceNetworkInterface =
+    InstanceNetworkInterface'
+    { _iniGroups = Nothing
+    , _iniStatus = Nothing
+    , _iniPrivateIPAddresses = Nothing
+    , _iniSourceDestCheck = Nothing
+    , _iniVPCId = Nothing
+    , _iniNetworkInterfaceId = Nothing
+    , _iniSubnetId = Nothing
+    , _iniMACAddress = Nothing
+    , _iniAttachment = Nothing
+    , _iniOwnerId = Nothing
+    , _iniPrivateIPAddress = Nothing
+    , _iniPrivateDNSName = Nothing
+    , _iniDescription = Nothing
+    , _iniAssociation = Nothing
+    }
+
+-- | One or more security groups.
+iniGroups :: Lens' InstanceNetworkInterface [GroupIdentifier]
+iniGroups = lens _iniGroups (\ s a -> s{_iniGroups = a}) . _Default . _Coerce;
+
+-- | The status of the network interface.
+iniStatus :: Lens' InstanceNetworkInterface (Maybe NetworkInterfaceStatus)
+iniStatus = lens _iniStatus (\ s a -> s{_iniStatus = a});
+
+-- | The private IP addresses associated with the network interface.
+iniPrivateIPAddresses :: Lens' InstanceNetworkInterface [InstancePrivateIPAddress]
+iniPrivateIPAddresses = lens _iniPrivateIPAddresses (\ s a -> s{_iniPrivateIPAddresses = a}) . _Default . _Coerce;
+
+-- | Indicates whether to validate network traffic to or from this network
+-- interface.
+iniSourceDestCheck :: Lens' InstanceNetworkInterface (Maybe Bool)
+iniSourceDestCheck = lens _iniSourceDestCheck (\ s a -> s{_iniSourceDestCheck = a});
+
+-- | The ID of the VPC.
+iniVPCId :: Lens' InstanceNetworkInterface (Maybe Text)
+iniVPCId = lens _iniVPCId (\ s a -> s{_iniVPCId = a});
+
+-- | The ID of the network interface.
+iniNetworkInterfaceId :: Lens' InstanceNetworkInterface (Maybe Text)
+iniNetworkInterfaceId = lens _iniNetworkInterfaceId (\ s a -> s{_iniNetworkInterfaceId = a});
+
+-- | The ID of the subnet.
+iniSubnetId :: Lens' InstanceNetworkInterface (Maybe Text)
+iniSubnetId = lens _iniSubnetId (\ s a -> s{_iniSubnetId = a});
+
+-- | The MAC address.
+iniMACAddress :: Lens' InstanceNetworkInterface (Maybe Text)
+iniMACAddress = lens _iniMACAddress (\ s a -> s{_iniMACAddress = a});
+
+-- | The network interface attachment.
+iniAttachment :: Lens' InstanceNetworkInterface (Maybe InstanceNetworkInterfaceAttachment)
+iniAttachment = lens _iniAttachment (\ s a -> s{_iniAttachment = a});
+
+-- | The ID of the AWS account that created the network interface.
+iniOwnerId :: Lens' InstanceNetworkInterface (Maybe Text)
+iniOwnerId = lens _iniOwnerId (\ s a -> s{_iniOwnerId = a});
+
+-- | The IP address of the network interface within the subnet.
+iniPrivateIPAddress :: Lens' InstanceNetworkInterface (Maybe Text)
+iniPrivateIPAddress = lens _iniPrivateIPAddress (\ s a -> s{_iniPrivateIPAddress = a});
+
+-- | The private DNS name.
+iniPrivateDNSName :: Lens' InstanceNetworkInterface (Maybe Text)
+iniPrivateDNSName = lens _iniPrivateDNSName (\ s a -> s{_iniPrivateDNSName = a});
+
+-- | The description.
+iniDescription :: Lens' InstanceNetworkInterface (Maybe Text)
+iniDescription = lens _iniDescription (\ s a -> s{_iniDescription = a});
+
+-- | The association information for an Elastic IP associated with the
+-- network interface.
+iniAssociation :: Lens' InstanceNetworkInterface (Maybe InstanceNetworkInterfaceAssociation)
+iniAssociation = lens _iniAssociation (\ s a -> s{_iniAssociation = a});
+
+instance FromXML InstanceNetworkInterface where
+        parseXML x
+          = InstanceNetworkInterface' <$>
+              (x .@? "groupSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "status")
+                <*>
+                (x .@? "privateIpAddressesSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "sourceDestCheck")
+                <*> (x .@? "vpcId")
+                <*> (x .@? "networkInterfaceId")
+                <*> (x .@? "subnetId")
+                <*> (x .@? "macAddress")
+                <*> (x .@? "attachment")
+                <*> (x .@? "ownerId")
+                <*> (x .@? "privateIpAddress")
+                <*> (x .@? "privateDnsName")
+                <*> (x .@? "description")
+                <*> (x .@? "association")
+
+instance Hashable InstanceNetworkInterface
+
+-- | Describes association information for an Elastic IP address.
+--
+-- /See:/ 'instanceNetworkInterfaceAssociation' smart constructor.
+data InstanceNetworkInterfaceAssociation = InstanceNetworkInterfaceAssociation'
+    { _iniaPublicDNSName :: !(Maybe Text)
+    , _iniaIPOwnerId     :: !(Maybe Text)
+    , _iniaPublicIP      :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceNetworkInterfaceAssociation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iniaPublicDNSName'
+--
+-- * 'iniaIPOwnerId'
+--
+-- * 'iniaPublicIP'
+instanceNetworkInterfaceAssociation
+    :: InstanceNetworkInterfaceAssociation
+instanceNetworkInterfaceAssociation =
+    InstanceNetworkInterfaceAssociation'
+    { _iniaPublicDNSName = Nothing
+    , _iniaIPOwnerId = Nothing
+    , _iniaPublicIP = Nothing
+    }
+
+-- | The public DNS name.
+iniaPublicDNSName :: Lens' InstanceNetworkInterfaceAssociation (Maybe Text)
+iniaPublicDNSName = lens _iniaPublicDNSName (\ s a -> s{_iniaPublicDNSName = a});
+
+-- | The ID of the owner of the Elastic IP address.
+iniaIPOwnerId :: Lens' InstanceNetworkInterfaceAssociation (Maybe Text)
+iniaIPOwnerId = lens _iniaIPOwnerId (\ s a -> s{_iniaIPOwnerId = a});
+
+-- | The public IP address or Elastic IP address bound to the network
+-- interface.
+iniaPublicIP :: Lens' InstanceNetworkInterfaceAssociation (Maybe Text)
+iniaPublicIP = lens _iniaPublicIP (\ s a -> s{_iniaPublicIP = a});
+
+instance FromXML InstanceNetworkInterfaceAssociation
+         where
+        parseXML x
+          = InstanceNetworkInterfaceAssociation' <$>
+              (x .@? "publicDnsName") <*> (x .@? "ipOwnerId") <*>
+                (x .@? "publicIp")
+
+instance Hashable InstanceNetworkInterfaceAssociation
+
+-- | Describes a network interface attachment.
+--
+-- /See:/ 'instanceNetworkInterfaceAttachment' smart constructor.
+data InstanceNetworkInterfaceAttachment = InstanceNetworkInterfaceAttachment'
+    { _iniaStatus              :: !(Maybe AttachmentStatus)
+    , _iniaDeleteOnTermination :: !(Maybe Bool)
+    , _iniaAttachmentId        :: !(Maybe Text)
+    , _iniaAttachTime          :: !(Maybe ISO8601)
+    , _iniaDeviceIndex         :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceNetworkInterfaceAttachment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iniaStatus'
+--
+-- * 'iniaDeleteOnTermination'
+--
+-- * 'iniaAttachmentId'
+--
+-- * 'iniaAttachTime'
+--
+-- * 'iniaDeviceIndex'
+instanceNetworkInterfaceAttachment
+    :: InstanceNetworkInterfaceAttachment
+instanceNetworkInterfaceAttachment =
+    InstanceNetworkInterfaceAttachment'
+    { _iniaStatus = Nothing
+    , _iniaDeleteOnTermination = Nothing
+    , _iniaAttachmentId = Nothing
+    , _iniaAttachTime = Nothing
+    , _iniaDeviceIndex = Nothing
+    }
+
+-- | The attachment state.
+iniaStatus :: Lens' InstanceNetworkInterfaceAttachment (Maybe AttachmentStatus)
+iniaStatus = lens _iniaStatus (\ s a -> s{_iniaStatus = a});
+
+-- | Indicates whether the network interface is deleted when the instance is
+-- terminated.
+iniaDeleteOnTermination :: Lens' InstanceNetworkInterfaceAttachment (Maybe Bool)
+iniaDeleteOnTermination = lens _iniaDeleteOnTermination (\ s a -> s{_iniaDeleteOnTermination = a});
+
+-- | The ID of the network interface attachment.
+iniaAttachmentId :: Lens' InstanceNetworkInterfaceAttachment (Maybe Text)
+iniaAttachmentId = lens _iniaAttachmentId (\ s a -> s{_iniaAttachmentId = a});
+
+-- | The time stamp when the attachment initiated.
+iniaAttachTime :: Lens' InstanceNetworkInterfaceAttachment (Maybe UTCTime)
+iniaAttachTime = lens _iniaAttachTime (\ s a -> s{_iniaAttachTime = a}) . mapping _Time;
+
+-- | The index of the device on the instance for the network interface
+-- attachment.
+iniaDeviceIndex :: Lens' InstanceNetworkInterfaceAttachment (Maybe Int)
+iniaDeviceIndex = lens _iniaDeviceIndex (\ s a -> s{_iniaDeviceIndex = a});
+
+instance FromXML InstanceNetworkInterfaceAttachment
+         where
+        parseXML x
+          = InstanceNetworkInterfaceAttachment' <$>
+              (x .@? "status") <*> (x .@? "deleteOnTermination")
+                <*> (x .@? "attachmentId")
+                <*> (x .@? "attachTime")
+                <*> (x .@? "deviceIndex")
+
+instance Hashable InstanceNetworkInterfaceAttachment
+
+-- | Describes a network interface.
+--
+-- /See:/ 'instanceNetworkInterfaceSpecification' smart constructor.
+data InstanceNetworkInterfaceSpecification = InstanceNetworkInterfaceSpecification'
+    { _inisGroups                         :: !(Maybe [Text])
+    , _inisPrivateIPAddresses             :: !(Maybe [PrivateIPAddressSpecification])
+    , _inisDeleteOnTermination            :: !(Maybe Bool)
+    , _inisAssociatePublicIPAddress       :: !(Maybe Bool)
+    , _inisNetworkInterfaceId             :: !(Maybe Text)
+    , _inisSubnetId                       :: !(Maybe Text)
+    , _inisPrivateIPAddress               :: !(Maybe Text)
+    , _inisSecondaryPrivateIPAddressCount :: !(Maybe Int)
+    , _inisDescription                    :: !(Maybe Text)
+    , _inisDeviceIndex                    :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceNetworkInterfaceSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'inisGroups'
+--
+-- * 'inisPrivateIPAddresses'
+--
+-- * 'inisDeleteOnTermination'
+--
+-- * 'inisAssociatePublicIPAddress'
+--
+-- * 'inisNetworkInterfaceId'
+--
+-- * 'inisSubnetId'
+--
+-- * 'inisPrivateIPAddress'
+--
+-- * 'inisSecondaryPrivateIPAddressCount'
+--
+-- * 'inisDescription'
+--
+-- * 'inisDeviceIndex'
+instanceNetworkInterfaceSpecification
+    :: InstanceNetworkInterfaceSpecification
+instanceNetworkInterfaceSpecification =
+    InstanceNetworkInterfaceSpecification'
+    { _inisGroups = Nothing
+    , _inisPrivateIPAddresses = Nothing
+    , _inisDeleteOnTermination = Nothing
+    , _inisAssociatePublicIPAddress = Nothing
+    , _inisNetworkInterfaceId = Nothing
+    , _inisSubnetId = Nothing
+    , _inisPrivateIPAddress = Nothing
+    , _inisSecondaryPrivateIPAddressCount = Nothing
+    , _inisDescription = Nothing
+    , _inisDeviceIndex = Nothing
+    }
+
+-- | The IDs of the security groups for the network interface. Applies only
+-- if creating a network interface when launching an instance.
+inisGroups :: Lens' InstanceNetworkInterfaceSpecification [Text]
+inisGroups = lens _inisGroups (\ s a -> s{_inisGroups = a}) . _Default . _Coerce;
+
+-- | One or more private IP addresses to assign to the network interface.
+-- Only one private IP address can be designated as primary.
+inisPrivateIPAddresses :: Lens' InstanceNetworkInterfaceSpecification [PrivateIPAddressSpecification]
+inisPrivateIPAddresses = lens _inisPrivateIPAddresses (\ s a -> s{_inisPrivateIPAddresses = a}) . _Default . _Coerce;
+
+-- | If set to 'true', the interface is deleted when the instance is
+-- terminated. You can specify 'true' only if creating a new network
+-- interface when launching an instance.
+inisDeleteOnTermination :: Lens' InstanceNetworkInterfaceSpecification (Maybe Bool)
+inisDeleteOnTermination = lens _inisDeleteOnTermination (\ s a -> s{_inisDeleteOnTermination = a});
+
+-- | Indicates whether to assign a public IP address to an instance you
+-- launch in a VPC. The public IP address can only be assigned to a network
+-- interface for eth0, and can only be assigned to a new network interface,
+-- not an existing one. You cannot specify more than one network interface
+-- in the request. If launching into a default subnet, the default value is
+-- 'true'.
+inisAssociatePublicIPAddress :: Lens' InstanceNetworkInterfaceSpecification (Maybe Bool)
+inisAssociatePublicIPAddress = lens _inisAssociatePublicIPAddress (\ s a -> s{_inisAssociatePublicIPAddress = a});
+
+-- | The ID of the network interface.
+inisNetworkInterfaceId :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
+inisNetworkInterfaceId = lens _inisNetworkInterfaceId (\ s a -> s{_inisNetworkInterfaceId = a});
+
+-- | The ID of the subnet associated with the network string. Applies only if
+-- creating a network interface when launching an instance.
+inisSubnetId :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
+inisSubnetId = lens _inisSubnetId (\ s a -> s{_inisSubnetId = a});
+
+-- | The private IP address of the network interface. Applies only if
+-- creating a network interface when launching an instance.
+inisPrivateIPAddress :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
+inisPrivateIPAddress = lens _inisPrivateIPAddress (\ s a -> s{_inisPrivateIPAddress = a});
+
+-- | The number of secondary private IP addresses. You can\'t specify this
+-- option and specify more than one private IP address using the private IP
+-- addresses option.
+inisSecondaryPrivateIPAddressCount :: Lens' InstanceNetworkInterfaceSpecification (Maybe Int)
+inisSecondaryPrivateIPAddressCount = lens _inisSecondaryPrivateIPAddressCount (\ s a -> s{_inisSecondaryPrivateIPAddressCount = a});
+
+-- | The description of the network interface. Applies only if creating a
+-- network interface when launching an instance.
+inisDescription :: Lens' InstanceNetworkInterfaceSpecification (Maybe Text)
+inisDescription = lens _inisDescription (\ s a -> s{_inisDescription = a});
+
+-- | The index of the device on the instance for the network interface
+-- attachment. If you are specifying a network interface in a
+-- < RunInstances> request, you must provide the device index.
+inisDeviceIndex :: Lens' InstanceNetworkInterfaceSpecification (Maybe Int)
+inisDeviceIndex = lens _inisDeviceIndex (\ s a -> s{_inisDeviceIndex = a});
+
+instance FromXML
+         InstanceNetworkInterfaceSpecification where
+        parseXML x
+          = InstanceNetworkInterfaceSpecification' <$>
+              (x .@? "SecurityGroupId" .!@ mempty >>=
+                 may (parseXMLList "SecurityGroupId"))
+                <*>
+                (x .@? "privateIpAddressesSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "deleteOnTermination")
+                <*> (x .@? "associatePublicIpAddress")
+                <*> (x .@? "networkInterfaceId")
+                <*> (x .@? "subnetId")
+                <*> (x .@? "privateIpAddress")
+                <*> (x .@? "secondaryPrivateIpAddressCount")
+                <*> (x .@? "description")
+                <*> (x .@? "deviceIndex")
+
+instance Hashable
+         InstanceNetworkInterfaceSpecification
+
+instance ToQuery
+         InstanceNetworkInterfaceSpecification where
+        toQuery InstanceNetworkInterfaceSpecification'{..}
+          = mconcat
+              [toQuery
+                 (toQueryList "SecurityGroupId" <$> _inisGroups),
+               toQuery
+                 (toQueryList "PrivateIpAddresses" <$>
+                    _inisPrivateIPAddresses),
+               "DeleteOnTermination" =: _inisDeleteOnTermination,
+               "AssociatePublicIpAddress" =:
+                 _inisAssociatePublicIPAddress,
+               "NetworkInterfaceId" =: _inisNetworkInterfaceId,
+               "SubnetId" =: _inisSubnetId,
+               "PrivateIpAddress" =: _inisPrivateIPAddress,
+               "SecondaryPrivateIpAddressCount" =:
+                 _inisSecondaryPrivateIPAddressCount,
+               "Description" =: _inisDescription,
+               "DeviceIndex" =: _inisDeviceIndex]
+
+-- | Describes a private IP address.
+--
+-- /See:/ 'instancePrivateIPAddress' smart constructor.
+data InstancePrivateIPAddress = InstancePrivateIPAddress'
+    { _ipiaPrimary          :: !(Maybe Bool)
+    , _ipiaPrivateIPAddress :: !(Maybe Text)
+    , _ipiaPrivateDNSName   :: !(Maybe Text)
+    , _ipiaAssociation      :: !(Maybe InstanceNetworkInterfaceAssociation)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstancePrivateIPAddress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ipiaPrimary'
+--
+-- * 'ipiaPrivateIPAddress'
+--
+-- * 'ipiaPrivateDNSName'
+--
+-- * 'ipiaAssociation'
+instancePrivateIPAddress
+    :: InstancePrivateIPAddress
+instancePrivateIPAddress =
+    InstancePrivateIPAddress'
+    { _ipiaPrimary = Nothing
+    , _ipiaPrivateIPAddress = Nothing
+    , _ipiaPrivateDNSName = Nothing
+    , _ipiaAssociation = Nothing
+    }
+
+-- | Indicates whether this IP address is the primary private IP address of
+-- the network interface.
+ipiaPrimary :: Lens' InstancePrivateIPAddress (Maybe Bool)
+ipiaPrimary = lens _ipiaPrimary (\ s a -> s{_ipiaPrimary = a});
+
+-- | The private IP address of the network interface.
+ipiaPrivateIPAddress :: Lens' InstancePrivateIPAddress (Maybe Text)
+ipiaPrivateIPAddress = lens _ipiaPrivateIPAddress (\ s a -> s{_ipiaPrivateIPAddress = a});
+
+-- | The private DNS name.
+ipiaPrivateDNSName :: Lens' InstancePrivateIPAddress (Maybe Text)
+ipiaPrivateDNSName = lens _ipiaPrivateDNSName (\ s a -> s{_ipiaPrivateDNSName = a});
+
+-- | The association information for an Elastic IP address for the network
+-- interface.
+ipiaAssociation :: Lens' InstancePrivateIPAddress (Maybe InstanceNetworkInterfaceAssociation)
+ipiaAssociation = lens _ipiaAssociation (\ s a -> s{_ipiaAssociation = a});
+
+instance FromXML InstancePrivateIPAddress where
+        parseXML x
+          = InstancePrivateIPAddress' <$>
+              (x .@? "primary") <*> (x .@? "privateIpAddress") <*>
+                (x .@? "privateDnsName")
+                <*> (x .@? "association")
+
+instance Hashable InstancePrivateIPAddress
+
+-- | Describes the current state of the instance.
+--
+-- /See:/ 'instanceState' smart constructor.
+data InstanceState = InstanceState'
+    { _isName :: !InstanceStateName
+    , _isCode :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceState' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isName'
+--
+-- * 'isCode'
+instanceState
+    :: InstanceStateName -- ^ 'isName'
+    -> Int -- ^ 'isCode'
+    -> InstanceState
+instanceState pName_ pCode_ =
+    InstanceState'
+    { _isName = pName_
+    , _isCode = pCode_
+    }
+
+-- | The current state of the instance.
+isName :: Lens' InstanceState InstanceStateName
+isName = lens _isName (\ s a -> s{_isName = a});
+
+-- | The low byte represents the state. The high byte is an opaque internal
+-- value and should be ignored.
+--
+-- -   '0' : 'pending'
+--
+-- -   '16' : 'running'
+--
+-- -   '32' : 'shutting-down'
+--
+-- -   '48' : 'terminated'
+--
+-- -   '64' : 'stopping'
+--
+-- -   '80' : 'stopped'
+--
+isCode :: Lens' InstanceState Int
+isCode = lens _isCode (\ s a -> s{_isCode = a});
+
+instance FromXML InstanceState where
+        parseXML x
+          = InstanceState' <$> (x .@ "name") <*> (x .@ "code")
+
+instance Hashable InstanceState
+
+-- | Describes an instance state change.
+--
+-- /See:/ 'instanceStateChange' smart constructor.
+data InstanceStateChange = InstanceStateChange'
+    { _iscInstanceId    :: !(Maybe Text)
+    , _iscCurrentState  :: !(Maybe InstanceState)
+    , _iscPreviousState :: !(Maybe InstanceState)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceStateChange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iscInstanceId'
+--
+-- * 'iscCurrentState'
+--
+-- * 'iscPreviousState'
+instanceStateChange
+    :: InstanceStateChange
+instanceStateChange =
+    InstanceStateChange'
+    { _iscInstanceId = Nothing
+    , _iscCurrentState = Nothing
+    , _iscPreviousState = Nothing
+    }
+
+-- | The ID of the instance.
+iscInstanceId :: Lens' InstanceStateChange (Maybe Text)
+iscInstanceId = lens _iscInstanceId (\ s a -> s{_iscInstanceId = a});
+
+-- | The current state of the instance.
+iscCurrentState :: Lens' InstanceStateChange (Maybe InstanceState)
+iscCurrentState = lens _iscCurrentState (\ s a -> s{_iscCurrentState = a});
+
+-- | The previous state of the instance.
+iscPreviousState :: Lens' InstanceStateChange (Maybe InstanceState)
+iscPreviousState = lens _iscPreviousState (\ s a -> s{_iscPreviousState = a});
+
+instance FromXML InstanceStateChange where
+        parseXML x
+          = InstanceStateChange' <$>
+              (x .@? "instanceId") <*> (x .@? "currentState") <*>
+                (x .@? "previousState")
+
+instance Hashable InstanceStateChange
+
+-- | Describes the status of an instance.
+--
+-- /See:/ 'instanceStatus' smart constructor.
+data InstanceStatus = InstanceStatus'
+    { _isInstanceId       :: !(Maybe Text)
+    , _isSystemStatus     :: !(Maybe InstanceStatusSummary)
+    , _isEvents           :: !(Maybe [InstanceStatusEvent])
+    , _isAvailabilityZone :: !(Maybe Text)
+    , _isInstanceStatus   :: !(Maybe InstanceStatusSummary)
+    , _isInstanceState    :: !(Maybe InstanceState)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isInstanceId'
+--
+-- * 'isSystemStatus'
+--
+-- * 'isEvents'
+--
+-- * 'isAvailabilityZone'
+--
+-- * 'isInstanceStatus'
+--
+-- * 'isInstanceState'
+instanceStatus
+    :: InstanceStatus
+instanceStatus =
+    InstanceStatus'
+    { _isInstanceId = Nothing
+    , _isSystemStatus = Nothing
+    , _isEvents = Nothing
+    , _isAvailabilityZone = Nothing
+    , _isInstanceStatus = Nothing
+    , _isInstanceState = Nothing
+    }
+
+-- | The ID of the instance.
+isInstanceId :: Lens' InstanceStatus (Maybe Text)
+isInstanceId = lens _isInstanceId (\ s a -> s{_isInstanceId = a});
+
+-- | Reports impaired functionality that stems from issues related to the
+-- systems that support an instance, such as hardware failures and network
+-- connectivity problems.
+isSystemStatus :: Lens' InstanceStatus (Maybe InstanceStatusSummary)
+isSystemStatus = lens _isSystemStatus (\ s a -> s{_isSystemStatus = a});
+
+-- | Any scheduled events associated with the instance.
+isEvents :: Lens' InstanceStatus [InstanceStatusEvent]
+isEvents = lens _isEvents (\ s a -> s{_isEvents = a}) . _Default . _Coerce;
+
+-- | The Availability Zone of the instance.
+isAvailabilityZone :: Lens' InstanceStatus (Maybe Text)
+isAvailabilityZone = lens _isAvailabilityZone (\ s a -> s{_isAvailabilityZone = a});
+
+-- | Reports impaired functionality that stems from issues internal to the
+-- instance, such as impaired reachability.
+isInstanceStatus :: Lens' InstanceStatus (Maybe InstanceStatusSummary)
+isInstanceStatus = lens _isInstanceStatus (\ s a -> s{_isInstanceStatus = a});
+
+-- | The intended state of the instance. < DescribeInstanceStatus> requires
+-- that an instance be in the 'running' state.
+isInstanceState :: Lens' InstanceStatus (Maybe InstanceState)
+isInstanceState = lens _isInstanceState (\ s a -> s{_isInstanceState = a});
+
+instance FromXML InstanceStatus where
+        parseXML x
+          = InstanceStatus' <$>
+              (x .@? "instanceId") <*> (x .@? "systemStatus") <*>
+                (x .@? "eventsSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "availabilityZone")
+                <*> (x .@? "instanceStatus")
+                <*> (x .@? "instanceState")
+
+instance Hashable InstanceStatus
+
+-- | Describes the instance status.
+--
+-- /See:/ 'instanceStatusDetails' smart constructor.
+data InstanceStatusDetails = InstanceStatusDetails'
+    { _isdStatus        :: !(Maybe StatusType)
+    , _isdImpairedSince :: !(Maybe ISO8601)
+    , _isdName          :: !(Maybe StatusName)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceStatusDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'isdStatus'
+--
+-- * 'isdImpairedSince'
+--
+-- * 'isdName'
+instanceStatusDetails
+    :: InstanceStatusDetails
+instanceStatusDetails =
+    InstanceStatusDetails'
+    { _isdStatus = Nothing
+    , _isdImpairedSince = Nothing
+    , _isdName = Nothing
+    }
+
+-- | The status.
+isdStatus :: Lens' InstanceStatusDetails (Maybe StatusType)
+isdStatus = lens _isdStatus (\ s a -> s{_isdStatus = a});
+
+-- | The time when a status check failed. For an instance that was launched
+-- and impaired, this is the time when the instance was launched.
+isdImpairedSince :: Lens' InstanceStatusDetails (Maybe UTCTime)
+isdImpairedSince = lens _isdImpairedSince (\ s a -> s{_isdImpairedSince = a}) . mapping _Time;
+
+-- | The type of instance status.
+isdName :: Lens' InstanceStatusDetails (Maybe StatusName)
+isdName = lens _isdName (\ s a -> s{_isdName = a});
+
+instance FromXML InstanceStatusDetails where
+        parseXML x
+          = InstanceStatusDetails' <$>
+              (x .@? "status") <*> (x .@? "impairedSince") <*>
+                (x .@? "name")
+
+instance Hashable InstanceStatusDetails
+
+-- | Describes a scheduled event for an instance.
+--
+-- /See:/ 'instanceStatusEvent' smart constructor.
+data InstanceStatusEvent = InstanceStatusEvent'
+    { _iseNotBefore   :: !(Maybe ISO8601)
+    , _iseCode        :: !(Maybe EventCode)
+    , _iseDescription :: !(Maybe Text)
+    , _iseNotAfter    :: !(Maybe ISO8601)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceStatusEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'iseNotBefore'
+--
+-- * 'iseCode'
+--
+-- * 'iseDescription'
+--
+-- * 'iseNotAfter'
+instanceStatusEvent
+    :: InstanceStatusEvent
+instanceStatusEvent =
+    InstanceStatusEvent'
+    { _iseNotBefore = Nothing
+    , _iseCode = Nothing
+    , _iseDescription = Nothing
+    , _iseNotAfter = Nothing
+    }
+
+-- | The earliest scheduled start time for the event.
+iseNotBefore :: Lens' InstanceStatusEvent (Maybe UTCTime)
+iseNotBefore = lens _iseNotBefore (\ s a -> s{_iseNotBefore = a}) . mapping _Time;
+
+-- | The event code.
+iseCode :: Lens' InstanceStatusEvent (Maybe EventCode)
+iseCode = lens _iseCode (\ s a -> s{_iseCode = a});
+
+-- | A description of the event.
+--
+-- After a scheduled event is completed, it can still be described for up
+-- to a week. If the event has been completed, this description starts with
+-- the following text: [Completed].
+iseDescription :: Lens' InstanceStatusEvent (Maybe Text)
+iseDescription = lens _iseDescription (\ s a -> s{_iseDescription = a});
+
+-- | The latest scheduled end time for the event.
+iseNotAfter :: Lens' InstanceStatusEvent (Maybe UTCTime)
+iseNotAfter = lens _iseNotAfter (\ s a -> s{_iseNotAfter = a}) . mapping _Time;
+
+instance FromXML InstanceStatusEvent where
+        parseXML x
+          = InstanceStatusEvent' <$>
+              (x .@? "notBefore") <*> (x .@? "code") <*>
+                (x .@? "description")
+                <*> (x .@? "notAfter")
+
+instance Hashable InstanceStatusEvent
+
+-- | Describes the status of an instance.
+--
+-- /See:/ 'instanceStatusSummary' smart constructor.
+data InstanceStatusSummary = InstanceStatusSummary'
+    { _issDetails :: !(Maybe [InstanceStatusDetails])
+    , _issStatus  :: !SummaryStatus
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InstanceStatusSummary' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'issDetails'
+--
+-- * 'issStatus'
+instanceStatusSummary
+    :: SummaryStatus -- ^ 'issStatus'
+    -> InstanceStatusSummary
+instanceStatusSummary pStatus_ =
+    InstanceStatusSummary'
+    { _issDetails = Nothing
+    , _issStatus = pStatus_
+    }
+
+-- | The system instance health or application instance health.
+issDetails :: Lens' InstanceStatusSummary [InstanceStatusDetails]
+issDetails = lens _issDetails (\ s a -> s{_issDetails = a}) . _Default . _Coerce;
+
+-- | The status.
+issStatus :: Lens' InstanceStatusSummary SummaryStatus
+issStatus = lens _issStatus (\ s a -> s{_issStatus = a});
+
+instance FromXML InstanceStatusSummary where
+        parseXML x
+          = InstanceStatusSummary' <$>
+              (x .@? "details" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@ "status")
+
+instance Hashable InstanceStatusSummary
+
+-- | Describes an Internet gateway.
+--
+-- /See:/ 'internetGateway' smart constructor.
+data InternetGateway = InternetGateway'
+    { _igAttachments       :: !(Maybe [InternetGatewayAttachment])
+    , _igTags              :: !(Maybe [Tag])
+    , _igInternetGatewayId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InternetGateway' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igAttachments'
+--
+-- * 'igTags'
+--
+-- * 'igInternetGatewayId'
+internetGateway
+    :: Text -- ^ 'igInternetGatewayId'
+    -> InternetGateway
+internetGateway pInternetGatewayId_ =
+    InternetGateway'
+    { _igAttachments = Nothing
+    , _igTags = Nothing
+    , _igInternetGatewayId = pInternetGatewayId_
+    }
+
+-- | Any VPCs attached to the Internet gateway.
+igAttachments :: Lens' InternetGateway [InternetGatewayAttachment]
+igAttachments = lens _igAttachments (\ s a -> s{_igAttachments = a}) . _Default . _Coerce;
+
+-- | Any tags assigned to the Internet gateway.
+igTags :: Lens' InternetGateway [Tag]
+igTags = lens _igTags (\ s a -> s{_igTags = a}) . _Default . _Coerce;
+
+-- | The ID of the Internet gateway.
+igInternetGatewayId :: Lens' InternetGateway Text
+igInternetGatewayId = lens _igInternetGatewayId (\ s a -> s{_igInternetGatewayId = a});
+
+instance FromXML InternetGateway where
+        parseXML x
+          = InternetGateway' <$>
+              (x .@? "attachmentSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "internetGatewayId")
+
+instance Hashable InternetGateway
+
+-- | Describes the attachment of a VPC to an Internet gateway.
+--
+-- /See:/ 'internetGatewayAttachment' smart constructor.
+data InternetGatewayAttachment = InternetGatewayAttachment'
+    { _igaState :: !AttachmentStatus
+    , _igaVPCId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'InternetGatewayAttachment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'igaState'
+--
+-- * 'igaVPCId'
+internetGatewayAttachment
+    :: AttachmentStatus -- ^ 'igaState'
+    -> Text -- ^ 'igaVPCId'
+    -> InternetGatewayAttachment
+internetGatewayAttachment pState_ pVPCId_ =
+    InternetGatewayAttachment'
+    { _igaState = pState_
+    , _igaVPCId = pVPCId_
+    }
+
+-- | The current state of the attachment.
+igaState :: Lens' InternetGatewayAttachment AttachmentStatus
+igaState = lens _igaState (\ s a -> s{_igaState = a});
+
+-- | The ID of the VPC.
+igaVPCId :: Lens' InternetGatewayAttachment Text
+igaVPCId = lens _igaVPCId (\ s a -> s{_igaVPCId = a});
+
+instance FromXML InternetGatewayAttachment where
+        parseXML x
+          = InternetGatewayAttachment' <$>
+              (x .@ "state") <*> (x .@ "vpcId")
+
+instance Hashable InternetGatewayAttachment
+
+-- | Describes a key pair.
+--
+-- /See:/ 'keyPairInfo' smart constructor.
+data KeyPairInfo = KeyPairInfo'
+    { _kpiKeyFingerprint :: !(Maybe Text)
+    , _kpiKeyName        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'KeyPairInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'kpiKeyFingerprint'
+--
+-- * 'kpiKeyName'
+keyPairInfo
+    :: KeyPairInfo
+keyPairInfo =
+    KeyPairInfo'
+    { _kpiKeyFingerprint = Nothing
+    , _kpiKeyName = Nothing
+    }
+
+-- | If you used < CreateKeyPair> to create the key pair, this is the SHA-1
+-- digest of the DER encoded private key. If you used < ImportKeyPair> to
+-- provide AWS the public key, this is the MD5 public key fingerprint as
+-- specified in section 4 of RFC4716.
+kpiKeyFingerprint :: Lens' KeyPairInfo (Maybe Text)
+kpiKeyFingerprint = lens _kpiKeyFingerprint (\ s a -> s{_kpiKeyFingerprint = a});
+
+-- | The name of the key pair.
+kpiKeyName :: Lens' KeyPairInfo (Maybe Text)
+kpiKeyName = lens _kpiKeyName (\ s a -> s{_kpiKeyName = a});
+
+instance FromXML KeyPairInfo where
+        parseXML x
+          = KeyPairInfo' <$>
+              (x .@? "keyFingerprint") <*> (x .@? "keyName")
+
+instance Hashable KeyPairInfo
+
+-- | Describes a launch permission.
+--
+-- /See:/ 'launchPermission' smart constructor.
+data LaunchPermission = LaunchPermission'
+    { _lpGroup  :: !(Maybe PermissionGroup)
+    , _lpUserId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LaunchPermission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lpGroup'
+--
+-- * 'lpUserId'
+launchPermission
+    :: LaunchPermission
+launchPermission =
+    LaunchPermission'
+    { _lpGroup = Nothing
+    , _lpUserId = Nothing
+    }
+
+-- | The name of the group.
+lpGroup :: Lens' LaunchPermission (Maybe PermissionGroup)
+lpGroup = lens _lpGroup (\ s a -> s{_lpGroup = a});
+
+-- | The AWS account ID.
+lpUserId :: Lens' LaunchPermission (Maybe Text)
+lpUserId = lens _lpUserId (\ s a -> s{_lpUserId = a});
+
+instance FromXML LaunchPermission where
+        parseXML x
+          = LaunchPermission' <$>
+              (x .@? "group") <*> (x .@? "userId")
+
+instance Hashable LaunchPermission
+
+instance ToQuery LaunchPermission where
+        toQuery LaunchPermission'{..}
+          = mconcat
+              ["Group" =: _lpGroup, "UserId" =: _lpUserId]
+
+-- | Describes a launch permission modification.
+--
+-- /See:/ 'launchPermissionModifications' smart constructor.
+data LaunchPermissionModifications = LaunchPermissionModifications'
+    { _lpmRemove :: !(Maybe [LaunchPermission])
+    , _lpmAdd    :: !(Maybe [LaunchPermission])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LaunchPermissionModifications' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lpmRemove'
+--
+-- * 'lpmAdd'
+launchPermissionModifications
+    :: LaunchPermissionModifications
+launchPermissionModifications =
+    LaunchPermissionModifications'
+    { _lpmRemove = Nothing
+    , _lpmAdd = Nothing
+    }
+
+-- | The AWS account ID to remove from the list of launch permissions for the
+-- AMI.
+lpmRemove :: Lens' LaunchPermissionModifications [LaunchPermission]
+lpmRemove = lens _lpmRemove (\ s a -> s{_lpmRemove = a}) . _Default . _Coerce;
+
+-- | The AWS account ID to add to the list of launch permissions for the AMI.
+lpmAdd :: Lens' LaunchPermissionModifications [LaunchPermission]
+lpmAdd = lens _lpmAdd (\ s a -> s{_lpmAdd = a}) . _Default . _Coerce;
+
+instance Hashable LaunchPermissionModifications
+
+instance ToQuery LaunchPermissionModifications where
+        toQuery LaunchPermissionModifications'{..}
+          = mconcat
+              [toQuery (toQueryList "Remove" <$> _lpmRemove),
+               toQuery (toQueryList "Add" <$> _lpmAdd)]
+
+-- | Describes the launch specification for an instance.
+--
+-- /See:/ 'launchSpecification' smart constructor.
+data LaunchSpecification = LaunchSpecification'
+    { _lsSecurityGroups      :: !(Maybe [GroupIdentifier])
+    , _lsKeyName             :: !(Maybe Text)
+    , _lsNetworkInterfaces   :: !(Maybe [InstanceNetworkInterfaceSpecification])
+    , _lsRAMDiskId           :: !(Maybe Text)
+    , _lsSubnetId            :: !(Maybe Text)
+    , _lsKernelId            :: !(Maybe Text)
+    , _lsInstanceType        :: !(Maybe InstanceType)
+    , _lsEBSOptimized        :: !(Maybe Bool)
+    , _lsUserData            :: !(Maybe Text)
+    , _lsMonitoring          :: !(Maybe RunInstancesMonitoringEnabled)
+    , _lsIAMInstanceProfile  :: !(Maybe IAMInstanceProfileSpecification)
+    , _lsImageId             :: !(Maybe Text)
+    , _lsAddressingType      :: !(Maybe Text)
+    , _lsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
+    , _lsPlacement           :: !(Maybe SpotPlacement)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'LaunchSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lsSecurityGroups'
+--
+-- * 'lsKeyName'
+--
+-- * 'lsNetworkInterfaces'
+--
+-- * 'lsRAMDiskId'
+--
+-- * 'lsSubnetId'
+--
+-- * 'lsKernelId'
+--
+-- * 'lsInstanceType'
+--
+-- * 'lsEBSOptimized'
+--
+-- * 'lsUserData'
+--
+-- * 'lsMonitoring'
+--
+-- * 'lsIAMInstanceProfile'
+--
+-- * 'lsImageId'
+--
+-- * 'lsAddressingType'
+--
+-- * 'lsBlockDeviceMappings'
+--
+-- * 'lsPlacement'
+launchSpecification
+    :: LaunchSpecification
+launchSpecification =
+    LaunchSpecification'
+    { _lsSecurityGroups = Nothing
+    , _lsKeyName = Nothing
+    , _lsNetworkInterfaces = Nothing
+    , _lsRAMDiskId = Nothing
+    , _lsSubnetId = Nothing
+    , _lsKernelId = Nothing
+    , _lsInstanceType = Nothing
+    , _lsEBSOptimized = Nothing
+    , _lsUserData = Nothing
+    , _lsMonitoring = Nothing
+    , _lsIAMInstanceProfile = Nothing
+    , _lsImageId = Nothing
+    , _lsAddressingType = Nothing
+    , _lsBlockDeviceMappings = Nothing
+    , _lsPlacement = Nothing
+    }
+
+-- | One or more security groups. When requesting instances in a VPC, you
+-- must specify the IDs of the security groups. When requesting instances
+-- in EC2-Classic, you can specify the names or the IDs of the security
+-- groups.
+lsSecurityGroups :: Lens' LaunchSpecification [GroupIdentifier]
+lsSecurityGroups = lens _lsSecurityGroups (\ s a -> s{_lsSecurityGroups = a}) . _Default . _Coerce;
+
+-- | The name of the key pair.
+lsKeyName :: Lens' LaunchSpecification (Maybe Text)
+lsKeyName = lens _lsKeyName (\ s a -> s{_lsKeyName = a});
+
+-- | One or more network interfaces.
+lsNetworkInterfaces :: Lens' LaunchSpecification [InstanceNetworkInterfaceSpecification]
+lsNetworkInterfaces = lens _lsNetworkInterfaces (\ s a -> s{_lsNetworkInterfaces = a}) . _Default . _Coerce;
+
+-- | The ID of the RAM disk.
+lsRAMDiskId :: Lens' LaunchSpecification (Maybe Text)
+lsRAMDiskId = lens _lsRAMDiskId (\ s a -> s{_lsRAMDiskId = a});
+
+-- | The ID of the subnet in which to launch the instance.
+lsSubnetId :: Lens' LaunchSpecification (Maybe Text)
+lsSubnetId = lens _lsSubnetId (\ s a -> s{_lsSubnetId = a});
+
+-- | The ID of the kernel.
+lsKernelId :: Lens' LaunchSpecification (Maybe Text)
+lsKernelId = lens _lsKernelId (\ s a -> s{_lsKernelId = a});
+
+-- | The instance type.
+lsInstanceType :: Lens' LaunchSpecification (Maybe InstanceType)
+lsInstanceType = lens _lsInstanceType (\ s a -> s{_lsInstanceType = a});
+
+-- | Indicates whether the instance is optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- Default: 'false'
+lsEBSOptimized :: Lens' LaunchSpecification (Maybe Bool)
+lsEBSOptimized = lens _lsEBSOptimized (\ s a -> s{_lsEBSOptimized = a});
+
+-- | The Base64-encoded MIME user data to make available to the instances.
+lsUserData :: Lens' LaunchSpecification (Maybe Text)
+lsUserData = lens _lsUserData (\ s a -> s{_lsUserData = a});
+
+-- | Undocumented member.
+lsMonitoring :: Lens' LaunchSpecification (Maybe RunInstancesMonitoringEnabled)
+lsMonitoring = lens _lsMonitoring (\ s a -> s{_lsMonitoring = a});
+
+-- | The IAM instance profile.
+lsIAMInstanceProfile :: Lens' LaunchSpecification (Maybe IAMInstanceProfileSpecification)
+lsIAMInstanceProfile = lens _lsIAMInstanceProfile (\ s a -> s{_lsIAMInstanceProfile = a});
+
+-- | The ID of the AMI.
+lsImageId :: Lens' LaunchSpecification (Maybe Text)
+lsImageId = lens _lsImageId (\ s a -> s{_lsImageId = a});
+
+-- | Deprecated.
+lsAddressingType :: Lens' LaunchSpecification (Maybe Text)
+lsAddressingType = lens _lsAddressingType (\ s a -> s{_lsAddressingType = a});
+
+-- | One or more block device mapping entries.
+lsBlockDeviceMappings :: Lens' LaunchSpecification [BlockDeviceMapping]
+lsBlockDeviceMappings = lens _lsBlockDeviceMappings (\ s a -> s{_lsBlockDeviceMappings = a}) . _Default . _Coerce;
+
+-- | The placement information for the instance.
+lsPlacement :: Lens' LaunchSpecification (Maybe SpotPlacement)
+lsPlacement = lens _lsPlacement (\ s a -> s{_lsPlacement = a});
+
+instance FromXML LaunchSpecification where
+        parseXML x
+          = LaunchSpecification' <$>
+              (x .@? "groupSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "keyName")
+                <*>
+                (x .@? "networkInterfaceSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "ramdiskId")
+                <*> (x .@? "subnetId")
+                <*> (x .@? "kernelId")
+                <*> (x .@? "instanceType")
+                <*> (x .@? "ebsOptimized")
+                <*> (x .@? "userData")
+                <*> (x .@? "monitoring")
+                <*> (x .@? "iamInstanceProfile")
+                <*> (x .@? "imageId")
+                <*> (x .@? "addressingType")
+                <*>
+                (x .@? "blockDeviceMapping" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "placement")
+
+instance Hashable LaunchSpecification
+
+-- | Describes the monitoring for the instance.
+--
+-- /See:/ 'monitoring' smart constructor.
+newtype Monitoring = Monitoring'
+    { _mState :: Maybe MonitoringState
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Monitoring' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mState'
+monitoring
+    :: Monitoring
+monitoring =
+    Monitoring'
+    { _mState = Nothing
+    }
+
+-- | Indicates whether monitoring is enabled for the instance.
+mState :: Lens' Monitoring (Maybe MonitoringState)
+mState = lens _mState (\ s a -> s{_mState = a});
+
+instance FromXML Monitoring where
+        parseXML x = Monitoring' <$> (x .@? "state")
+
+instance Hashable Monitoring
+
+-- | Describes the status of a moving Elastic IP address.
+--
+-- /See:/ 'movingAddressStatus' smart constructor.
+data MovingAddressStatus = MovingAddressStatus'
+    { _masMoveStatus :: !(Maybe MoveStatus)
+    , _masPublicIP   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MovingAddressStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'masMoveStatus'
+--
+-- * 'masPublicIP'
+movingAddressStatus
+    :: MovingAddressStatus
+movingAddressStatus =
+    MovingAddressStatus'
+    { _masMoveStatus = Nothing
+    , _masPublicIP = Nothing
+    }
+
+-- | The status of the Elastic IP address that\'s being moved to the EC2-VPC
+-- platform, or restored to the EC2-Classic platform.
+masMoveStatus :: Lens' MovingAddressStatus (Maybe MoveStatus)
+masMoveStatus = lens _masMoveStatus (\ s a -> s{_masMoveStatus = a});
+
+-- | The Elastic IP address.
+masPublicIP :: Lens' MovingAddressStatus (Maybe Text)
+masPublicIP = lens _masPublicIP (\ s a -> s{_masPublicIP = a});
+
+instance FromXML MovingAddressStatus where
+        parseXML x
+          = MovingAddressStatus' <$>
+              (x .@? "moveStatus") <*> (x .@? "publicIp")
+
+instance Hashable MovingAddressStatus
+
+-- | Describes a NAT gateway.
+--
+-- /See:/ 'natGateway' smart constructor.
+data NatGateway = NatGateway'
+    { _ngState               :: !(Maybe NatGatewayState)
+    , _ngFailureCode         :: !(Maybe Text)
+    , _ngVPCId               :: !(Maybe Text)
+    , _ngFailureMessage      :: !(Maybe Text)
+    , _ngNatGatewayId        :: !(Maybe Text)
+    , _ngSubnetId            :: !(Maybe Text)
+    , _ngDeleteTime          :: !(Maybe ISO8601)
+    , _ngNatGatewayAddresses :: !(Maybe [NatGatewayAddress])
+    , _ngCreateTime          :: !(Maybe ISO8601)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NatGateway' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ngState'
+--
+-- * 'ngFailureCode'
+--
+-- * 'ngVPCId'
+--
+-- * 'ngFailureMessage'
+--
+-- * 'ngNatGatewayId'
+--
+-- * 'ngSubnetId'
+--
+-- * 'ngDeleteTime'
+--
+-- * 'ngNatGatewayAddresses'
+--
+-- * 'ngCreateTime'
+natGateway
+    :: NatGateway
+natGateway =
+    NatGateway'
+    { _ngState = Nothing
+    , _ngFailureCode = Nothing
+    , _ngVPCId = Nothing
+    , _ngFailureMessage = Nothing
+    , _ngNatGatewayId = Nothing
+    , _ngSubnetId = Nothing
+    , _ngDeleteTime = Nothing
+    , _ngNatGatewayAddresses = Nothing
+    , _ngCreateTime = Nothing
+    }
+
+-- | The state of the NAT gateway.
+ngState :: Lens' NatGateway (Maybe NatGatewayState)
+ngState = lens _ngState (\ s a -> s{_ngState = a});
+
+-- | If the NAT gateway could not be created, specifies the error code for
+-- the failure. ('InsufficientFreeAddressesInSubnet' |
+-- 'Gateway.NotAttached' | 'InvalidAllocationID.NotFound' |
+-- 'Resource.AlreadyAssociated' | 'InternalError' |
+-- 'InvalidSubnetID.NotFound')
+ngFailureCode :: Lens' NatGateway (Maybe Text)
+ngFailureCode = lens _ngFailureCode (\ s a -> s{_ngFailureCode = a});
+
+-- | The ID of the VPC in which the NAT gateway is located.
+ngVPCId :: Lens' NatGateway (Maybe Text)
+ngVPCId = lens _ngVPCId (\ s a -> s{_ngVPCId = a});
+
+-- | If the NAT gateway could not be created, specifies the error message for
+-- the failure, that corresponds to the error code.
+--
+-- -   For InsufficientFreeAddressesInSubnet:
+--     'Subnet has insufficient free addresses to create this NAT gateway'
+-- -   For Gateway.NotAttached:
+--     'Network vpc-xxxxxxxx has no Internet gateway attached'
+-- -   For InvalidAllocationID.NotFound:
+--     'Elastic IP address eipalloc-xxxxxxxx could not be associated with this NAT gateway'
+-- -   For Resource.AlreadyAssociated:
+--     'Elastic IP address eipalloc-xxxxxxxx is already associated'
+-- -   For InternalError:
+--     'Network interface eni-xxxxxxxx, created and used internally by this NAT gateway is in an invalid state. Please try again.'
+-- -   For InvalidSubnetID.NotFound:
+--     'The specified subnet subnet-xxxxxxxx does not exist or could not be found.'
+ngFailureMessage :: Lens' NatGateway (Maybe Text)
+ngFailureMessage = lens _ngFailureMessage (\ s a -> s{_ngFailureMessage = a});
+
+-- | The ID of the NAT gateway.
+ngNatGatewayId :: Lens' NatGateway (Maybe Text)
+ngNatGatewayId = lens _ngNatGatewayId (\ s a -> s{_ngNatGatewayId = a});
+
+-- | The ID of the subnet in which the NAT gateway is located.
+ngSubnetId :: Lens' NatGateway (Maybe Text)
+ngSubnetId = lens _ngSubnetId (\ s a -> s{_ngSubnetId = a});
+
+-- | The date and time the NAT gateway was deleted, if applicable.
+ngDeleteTime :: Lens' NatGateway (Maybe UTCTime)
+ngDeleteTime = lens _ngDeleteTime (\ s a -> s{_ngDeleteTime = a}) . mapping _Time;
+
+-- | Information about the IP addresses and network interface associated with
+-- the NAT gateway.
+ngNatGatewayAddresses :: Lens' NatGateway [NatGatewayAddress]
+ngNatGatewayAddresses = lens _ngNatGatewayAddresses (\ s a -> s{_ngNatGatewayAddresses = a}) . _Default . _Coerce;
+
+-- | The date and time the NAT gateway was created.
+ngCreateTime :: Lens' NatGateway (Maybe UTCTime)
+ngCreateTime = lens _ngCreateTime (\ s a -> s{_ngCreateTime = a}) . mapping _Time;
+
+instance FromXML NatGateway where
+        parseXML x
+          = NatGateway' <$>
+              (x .@? "state") <*> (x .@? "failureCode") <*>
+                (x .@? "vpcId")
+                <*> (x .@? "failureMessage")
+                <*> (x .@? "natGatewayId")
+                <*> (x .@? "subnetId")
+                <*> (x .@? "deleteTime")
+                <*>
+                (x .@? "natGatewayAddressSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "createTime")
+
+instance Hashable NatGateway
+
+-- | Describes the IP addresses and network interface associated with a NAT
+-- gateway.
+--
+-- /See:/ 'natGatewayAddress' smart constructor.
+data NatGatewayAddress = NatGatewayAddress'
+    { _ngaPrivateIP          :: !(Maybe Text)
+    , _ngaAllocationId       :: !(Maybe Text)
+    , _ngaNetworkInterfaceId :: !(Maybe Text)
+    , _ngaPublicIP           :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NatGatewayAddress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ngaPrivateIP'
+--
+-- * 'ngaAllocationId'
+--
+-- * 'ngaNetworkInterfaceId'
+--
+-- * 'ngaPublicIP'
+natGatewayAddress
+    :: NatGatewayAddress
+natGatewayAddress =
+    NatGatewayAddress'
+    { _ngaPrivateIP = Nothing
+    , _ngaAllocationId = Nothing
+    , _ngaNetworkInterfaceId = Nothing
+    , _ngaPublicIP = Nothing
+    }
+
+-- | The private IP address associated with the Elastic IP address.
+ngaPrivateIP :: Lens' NatGatewayAddress (Maybe Text)
+ngaPrivateIP = lens _ngaPrivateIP (\ s a -> s{_ngaPrivateIP = a});
+
+-- | The allocation ID of the Elastic IP address that\'s associated with the
+-- NAT gateway.
+ngaAllocationId :: Lens' NatGatewayAddress (Maybe Text)
+ngaAllocationId = lens _ngaAllocationId (\ s a -> s{_ngaAllocationId = a});
+
+-- | The ID of the network interface associated with the NAT gateway.
+ngaNetworkInterfaceId :: Lens' NatGatewayAddress (Maybe Text)
+ngaNetworkInterfaceId = lens _ngaNetworkInterfaceId (\ s a -> s{_ngaNetworkInterfaceId = a});
+
+-- | The Elastic IP address associated with the NAT gateway.
+ngaPublicIP :: Lens' NatGatewayAddress (Maybe Text)
+ngaPublicIP = lens _ngaPublicIP (\ s a -> s{_ngaPublicIP = a});
+
+instance FromXML NatGatewayAddress where
+        parseXML x
+          = NatGatewayAddress' <$>
+              (x .@? "privateIp") <*> (x .@? "allocationId") <*>
+                (x .@? "networkInterfaceId")
+                <*> (x .@? "publicIp")
+
+instance Hashable NatGatewayAddress
+
+-- | Describes a network ACL.
+--
+-- /See:/ 'networkACL' smart constructor.
+data NetworkACL = NetworkACL'
+    { _naEntries      :: !(Maybe [NetworkACLEntry])
+    , _naNetworkACLId :: !(Maybe Text)
+    , _naVPCId        :: !(Maybe Text)
+    , _naAssociations :: !(Maybe [NetworkACLAssociation])
+    , _naTags         :: !(Maybe [Tag])
+    , _naIsDefault    :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkACL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'naEntries'
+--
+-- * 'naNetworkACLId'
+--
+-- * 'naVPCId'
+--
+-- * 'naAssociations'
+--
+-- * 'naTags'
+--
+-- * 'naIsDefault'
+networkACL
+    :: NetworkACL
+networkACL =
+    NetworkACL'
+    { _naEntries = Nothing
+    , _naNetworkACLId = Nothing
+    , _naVPCId = Nothing
+    , _naAssociations = Nothing
+    , _naTags = Nothing
+    , _naIsDefault = Nothing
+    }
+
+-- | One or more entries (rules) in the network ACL.
+naEntries :: Lens' NetworkACL [NetworkACLEntry]
+naEntries = lens _naEntries (\ s a -> s{_naEntries = a}) . _Default . _Coerce;
+
+-- | The ID of the network ACL.
+naNetworkACLId :: Lens' NetworkACL (Maybe Text)
+naNetworkACLId = lens _naNetworkACLId (\ s a -> s{_naNetworkACLId = a});
+
+-- | The ID of the VPC for the network ACL.
+naVPCId :: Lens' NetworkACL (Maybe Text)
+naVPCId = lens _naVPCId (\ s a -> s{_naVPCId = a});
+
+-- | Any associations between the network ACL and one or more subnets
+naAssociations :: Lens' NetworkACL [NetworkACLAssociation]
+naAssociations = lens _naAssociations (\ s a -> s{_naAssociations = a}) . _Default . _Coerce;
+
+-- | Any tags assigned to the network ACL.
+naTags :: Lens' NetworkACL [Tag]
+naTags = lens _naTags (\ s a -> s{_naTags = a}) . _Default . _Coerce;
+
+-- | Indicates whether this is the default network ACL for the VPC.
+naIsDefault :: Lens' NetworkACL (Maybe Bool)
+naIsDefault = lens _naIsDefault (\ s a -> s{_naIsDefault = a});
+
+instance FromXML NetworkACL where
+        parseXML x
+          = NetworkACL' <$>
+              (x .@? "entrySet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "networkAclId")
+                <*> (x .@? "vpcId")
+                <*>
+                (x .@? "associationSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "default")
+
+instance Hashable NetworkACL
+
+-- | Describes an association between a network ACL and a subnet.
+--
+-- /See:/ 'networkACLAssociation' smart constructor.
+data NetworkACLAssociation = NetworkACLAssociation'
+    { _naaNetworkACLId            :: !(Maybe Text)
+    , _naaSubnetId                :: !(Maybe Text)
+    , _naaNetworkACLAssociationId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkACLAssociation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'naaNetworkACLId'
+--
+-- * 'naaSubnetId'
+--
+-- * 'naaNetworkACLAssociationId'
+networkACLAssociation
+    :: NetworkACLAssociation
+networkACLAssociation =
+    NetworkACLAssociation'
+    { _naaNetworkACLId = Nothing
+    , _naaSubnetId = Nothing
+    , _naaNetworkACLAssociationId = Nothing
+    }
+
+-- | The ID of the network ACL.
+naaNetworkACLId :: Lens' NetworkACLAssociation (Maybe Text)
+naaNetworkACLId = lens _naaNetworkACLId (\ s a -> s{_naaNetworkACLId = a});
+
+-- | The ID of the subnet.
+naaSubnetId :: Lens' NetworkACLAssociation (Maybe Text)
+naaSubnetId = lens _naaSubnetId (\ s a -> s{_naaSubnetId = a});
+
+-- | The ID of the association between a network ACL and a subnet.
+naaNetworkACLAssociationId :: Lens' NetworkACLAssociation (Maybe Text)
+naaNetworkACLAssociationId = lens _naaNetworkACLAssociationId (\ s a -> s{_naaNetworkACLAssociationId = a});
+
+instance FromXML NetworkACLAssociation where
+        parseXML x
+          = NetworkACLAssociation' <$>
+              (x .@? "networkAclId") <*> (x .@? "subnetId") <*>
+                (x .@? "networkAclAssociationId")
+
+instance Hashable NetworkACLAssociation
+
+-- | Describes an entry in a network ACL.
+--
+-- /See:/ 'networkACLEntry' smart constructor.
+data NetworkACLEntry = NetworkACLEntry'
+    { _naeICMPTypeCode :: !(Maybe ICMPTypeCode)
+    , _naeRuleNumber   :: !(Maybe Int)
+    , _naeRuleAction   :: !(Maybe RuleAction)
+    , _naeProtocol     :: !(Maybe Text)
+    , _naePortRange    :: !(Maybe PortRange)
+    , _naeCIdRBlock    :: !(Maybe Text)
+    , _naeEgress       :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkACLEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'naeICMPTypeCode'
+--
+-- * 'naeRuleNumber'
+--
+-- * 'naeRuleAction'
+--
+-- * 'naeProtocol'
+--
+-- * 'naePortRange'
+--
+-- * 'naeCIdRBlock'
+--
+-- * 'naeEgress'
+networkACLEntry
+    :: NetworkACLEntry
+networkACLEntry =
+    NetworkACLEntry'
+    { _naeICMPTypeCode = Nothing
+    , _naeRuleNumber = Nothing
+    , _naeRuleAction = Nothing
+    , _naeProtocol = Nothing
+    , _naePortRange = Nothing
+    , _naeCIdRBlock = Nothing
+    , _naeEgress = Nothing
+    }
+
+-- | ICMP protocol: The ICMP type and code.
+naeICMPTypeCode :: Lens' NetworkACLEntry (Maybe ICMPTypeCode)
+naeICMPTypeCode = lens _naeICMPTypeCode (\ s a -> s{_naeICMPTypeCode = a});
+
+-- | The rule number for the entry. ACL entries are processed in ascending
+-- order by rule number.
+naeRuleNumber :: Lens' NetworkACLEntry (Maybe Int)
+naeRuleNumber = lens _naeRuleNumber (\ s a -> s{_naeRuleNumber = a});
+
+-- | Indicates whether to allow or deny the traffic that matches the rule.
+naeRuleAction :: Lens' NetworkACLEntry (Maybe RuleAction)
+naeRuleAction = lens _naeRuleAction (\ s a -> s{_naeRuleAction = a});
+
+-- | The protocol. A value of '-1' means all protocols.
+naeProtocol :: Lens' NetworkACLEntry (Maybe Text)
+naeProtocol = lens _naeProtocol (\ s a -> s{_naeProtocol = a});
+
+-- | TCP or UDP protocols: The range of ports the rule applies to.
+naePortRange :: Lens' NetworkACLEntry (Maybe PortRange)
+naePortRange = lens _naePortRange (\ s a -> s{_naePortRange = a});
+
+-- | The network range to allow or deny, in CIDR notation.
+naeCIdRBlock :: Lens' NetworkACLEntry (Maybe Text)
+naeCIdRBlock = lens _naeCIdRBlock (\ s a -> s{_naeCIdRBlock = a});
+
+-- | Indicates whether the rule is an egress rule (applied to traffic leaving
+-- the subnet).
+naeEgress :: Lens' NetworkACLEntry (Maybe Bool)
+naeEgress = lens _naeEgress (\ s a -> s{_naeEgress = a});
+
+instance FromXML NetworkACLEntry where
+        parseXML x
+          = NetworkACLEntry' <$>
+              (x .@? "icmpTypeCode") <*> (x .@? "ruleNumber") <*>
+                (x .@? "ruleAction")
+                <*> (x .@? "protocol")
+                <*> (x .@? "portRange")
+                <*> (x .@? "cidrBlock")
+                <*> (x .@? "egress")
+
+instance Hashable NetworkACLEntry
+
+-- | Describes a network interface.
+--
+-- /See:/ 'networkInterface' smart constructor.
+data NetworkInterface = NetworkInterface'
+    { _niGroups             :: !(Maybe [GroupIdentifier])
+    , _niStatus             :: !(Maybe NetworkInterfaceStatus)
+    , _niPrivateIPAddresses :: !(Maybe [NetworkInterfacePrivateIPAddress])
+    , _niSourceDestCheck    :: !(Maybe Bool)
+    , _niInterfaceType      :: !(Maybe NetworkInterfaceType)
+    , _niVPCId              :: !(Maybe Text)
+    , _niTagSet             :: !(Maybe [Tag])
+    , _niRequesterManaged   :: !(Maybe Bool)
+    , _niNetworkInterfaceId :: !(Maybe Text)
+    , _niSubnetId           :: !(Maybe Text)
+    , _niMACAddress         :: !(Maybe Text)
+    , _niAttachment         :: !(Maybe NetworkInterfaceAttachment)
+    , _niOwnerId            :: !(Maybe Text)
+    , _niAvailabilityZone   :: !(Maybe Text)
+    , _niPrivateIPAddress   :: !(Maybe Text)
+    , _niPrivateDNSName     :: !(Maybe Text)
+    , _niRequesterId        :: !(Maybe Text)
+    , _niDescription        :: !(Maybe Text)
+    , _niAssociation        :: !(Maybe NetworkInterfaceAssociation)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkInterface' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'niGroups'
+--
+-- * 'niStatus'
+--
+-- * 'niPrivateIPAddresses'
+--
+-- * 'niSourceDestCheck'
+--
+-- * 'niInterfaceType'
+--
+-- * 'niVPCId'
+--
+-- * 'niTagSet'
+--
+-- * 'niRequesterManaged'
+--
+-- * 'niNetworkInterfaceId'
+--
+-- * 'niSubnetId'
+--
+-- * 'niMACAddress'
+--
+-- * 'niAttachment'
+--
+-- * 'niOwnerId'
+--
+-- * 'niAvailabilityZone'
+--
+-- * 'niPrivateIPAddress'
+--
+-- * 'niPrivateDNSName'
+--
+-- * 'niRequesterId'
+--
+-- * 'niDescription'
+--
+-- * 'niAssociation'
+networkInterface
+    :: NetworkInterface
+networkInterface =
+    NetworkInterface'
+    { _niGroups = Nothing
+    , _niStatus = Nothing
+    , _niPrivateIPAddresses = Nothing
+    , _niSourceDestCheck = Nothing
+    , _niInterfaceType = Nothing
+    , _niVPCId = Nothing
+    , _niTagSet = Nothing
+    , _niRequesterManaged = Nothing
+    , _niNetworkInterfaceId = Nothing
+    , _niSubnetId = Nothing
+    , _niMACAddress = Nothing
+    , _niAttachment = Nothing
+    , _niOwnerId = Nothing
+    , _niAvailabilityZone = Nothing
+    , _niPrivateIPAddress = Nothing
+    , _niPrivateDNSName = Nothing
+    , _niRequesterId = Nothing
+    , _niDescription = Nothing
+    , _niAssociation = Nothing
+    }
+
+-- | Any security groups for the network interface.
+niGroups :: Lens' NetworkInterface [GroupIdentifier]
+niGroups = lens _niGroups (\ s a -> s{_niGroups = a}) . _Default . _Coerce;
+
+-- | The status of the network interface.
+niStatus :: Lens' NetworkInterface (Maybe NetworkInterfaceStatus)
+niStatus = lens _niStatus (\ s a -> s{_niStatus = a});
+
+-- | The private IP addresses associated with the network interface.
+niPrivateIPAddresses :: Lens' NetworkInterface [NetworkInterfacePrivateIPAddress]
+niPrivateIPAddresses = lens _niPrivateIPAddresses (\ s a -> s{_niPrivateIPAddresses = a}) . _Default . _Coerce;
+
+-- | Indicates whether traffic to or from the instance is validated.
+niSourceDestCheck :: Lens' NetworkInterface (Maybe Bool)
+niSourceDestCheck = lens _niSourceDestCheck (\ s a -> s{_niSourceDestCheck = a});
+
+-- | The type of interface.
+niInterfaceType :: Lens' NetworkInterface (Maybe NetworkInterfaceType)
+niInterfaceType = lens _niInterfaceType (\ s a -> s{_niInterfaceType = a});
+
+-- | The ID of the VPC.
+niVPCId :: Lens' NetworkInterface (Maybe Text)
+niVPCId = lens _niVPCId (\ s a -> s{_niVPCId = a});
+
+-- | Any tags assigned to the network interface.
+niTagSet :: Lens' NetworkInterface [Tag]
+niTagSet = lens _niTagSet (\ s a -> s{_niTagSet = a}) . _Default . _Coerce;
+
+-- | Indicates whether the network interface is being managed by AWS.
+niRequesterManaged :: Lens' NetworkInterface (Maybe Bool)
+niRequesterManaged = lens _niRequesterManaged (\ s a -> s{_niRequesterManaged = a});
+
+-- | The ID of the network interface.
+niNetworkInterfaceId :: Lens' NetworkInterface (Maybe Text)
+niNetworkInterfaceId = lens _niNetworkInterfaceId (\ s a -> s{_niNetworkInterfaceId = a});
+
+-- | The ID of the subnet.
+niSubnetId :: Lens' NetworkInterface (Maybe Text)
+niSubnetId = lens _niSubnetId (\ s a -> s{_niSubnetId = a});
+
+-- | The MAC address.
+niMACAddress :: Lens' NetworkInterface (Maybe Text)
+niMACAddress = lens _niMACAddress (\ s a -> s{_niMACAddress = a});
+
+-- | The network interface attachment.
+niAttachment :: Lens' NetworkInterface (Maybe NetworkInterfaceAttachment)
+niAttachment = lens _niAttachment (\ s a -> s{_niAttachment = a});
+
+-- | The AWS account ID of the owner of the network interface.
+niOwnerId :: Lens' NetworkInterface (Maybe Text)
+niOwnerId = lens _niOwnerId (\ s a -> s{_niOwnerId = a});
+
+-- | The Availability Zone.
+niAvailabilityZone :: Lens' NetworkInterface (Maybe Text)
+niAvailabilityZone = lens _niAvailabilityZone (\ s a -> s{_niAvailabilityZone = a});
+
+-- | The IP address of the network interface within the subnet.
+niPrivateIPAddress :: Lens' NetworkInterface (Maybe Text)
+niPrivateIPAddress = lens _niPrivateIPAddress (\ s a -> s{_niPrivateIPAddress = a});
+
+-- | The private DNS name.
+niPrivateDNSName :: Lens' NetworkInterface (Maybe Text)
+niPrivateDNSName = lens _niPrivateDNSName (\ s a -> s{_niPrivateDNSName = a});
+
+-- | The ID of the entity that launched the instance on your behalf (for
+-- example, AWS Management Console or Auto Scaling).
+niRequesterId :: Lens' NetworkInterface (Maybe Text)
+niRequesterId = lens _niRequesterId (\ s a -> s{_niRequesterId = a});
+
+-- | A description.
+niDescription :: Lens' NetworkInterface (Maybe Text)
+niDescription = lens _niDescription (\ s a -> s{_niDescription = a});
+
+-- | The association information for an Elastic IP associated with the
+-- network interface.
+niAssociation :: Lens' NetworkInterface (Maybe NetworkInterfaceAssociation)
+niAssociation = lens _niAssociation (\ s a -> s{_niAssociation = a});
+
+instance FromXML NetworkInterface where
+        parseXML x
+          = NetworkInterface' <$>
+              (x .@? "groupSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "status")
+                <*>
+                (x .@? "privateIpAddressesSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "sourceDestCheck")
+                <*> (x .@? "interfaceType")
+                <*> (x .@? "vpcId")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "requesterManaged")
+                <*> (x .@? "networkInterfaceId")
+                <*> (x .@? "subnetId")
+                <*> (x .@? "macAddress")
+                <*> (x .@? "attachment")
+                <*> (x .@? "ownerId")
+                <*> (x .@? "availabilityZone")
+                <*> (x .@? "privateIpAddress")
+                <*> (x .@? "privateDnsName")
+                <*> (x .@? "requesterId")
+                <*> (x .@? "description")
+                <*> (x .@? "association")
+
+instance Hashable NetworkInterface
+
+-- | Describes association information for an Elastic IP address.
+--
+-- /See:/ 'networkInterfaceAssociation' smart constructor.
+data NetworkInterfaceAssociation = NetworkInterfaceAssociation'
+    { _niaAssociationId :: !(Maybe Text)
+    , _niaPublicDNSName :: !(Maybe Text)
+    , _niaAllocationId  :: !(Maybe Text)
+    , _niaIPOwnerId     :: !(Maybe Text)
+    , _niaPublicIP      :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkInterfaceAssociation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'niaAssociationId'
+--
+-- * 'niaPublicDNSName'
+--
+-- * 'niaAllocationId'
+--
+-- * 'niaIPOwnerId'
+--
+-- * 'niaPublicIP'
+networkInterfaceAssociation
+    :: NetworkInterfaceAssociation
+networkInterfaceAssociation =
+    NetworkInterfaceAssociation'
+    { _niaAssociationId = Nothing
+    , _niaPublicDNSName = Nothing
+    , _niaAllocationId = Nothing
+    , _niaIPOwnerId = Nothing
+    , _niaPublicIP = Nothing
+    }
+
+-- | The association ID.
+niaAssociationId :: Lens' NetworkInterfaceAssociation (Maybe Text)
+niaAssociationId = lens _niaAssociationId (\ s a -> s{_niaAssociationId = a});
+
+-- | The public DNS name.
+niaPublicDNSName :: Lens' NetworkInterfaceAssociation (Maybe Text)
+niaPublicDNSName = lens _niaPublicDNSName (\ s a -> s{_niaPublicDNSName = a});
+
+-- | The allocation ID.
+niaAllocationId :: Lens' NetworkInterfaceAssociation (Maybe Text)
+niaAllocationId = lens _niaAllocationId (\ s a -> s{_niaAllocationId = a});
+
+-- | The ID of the Elastic IP address owner.
+niaIPOwnerId :: Lens' NetworkInterfaceAssociation (Maybe Text)
+niaIPOwnerId = lens _niaIPOwnerId (\ s a -> s{_niaIPOwnerId = a});
+
+-- | The address of the Elastic IP address bound to the network interface.
+niaPublicIP :: Lens' NetworkInterfaceAssociation (Maybe Text)
+niaPublicIP = lens _niaPublicIP (\ s a -> s{_niaPublicIP = a});
+
+instance FromXML NetworkInterfaceAssociation where
+        parseXML x
+          = NetworkInterfaceAssociation' <$>
+              (x .@? "associationId") <*> (x .@? "publicDnsName")
+                <*> (x .@? "allocationId")
+                <*> (x .@? "ipOwnerId")
+                <*> (x .@? "publicIp")
+
+instance Hashable NetworkInterfaceAssociation
+
+-- | Describes a network interface attachment.
+--
+-- /See:/ 'networkInterfaceAttachment' smart constructor.
+data NetworkInterfaceAttachment = NetworkInterfaceAttachment'
+    { _niaInstanceId          :: !(Maybe Text)
+    , _niaStatus              :: !(Maybe AttachmentStatus)
+    , _niaDeleteOnTermination :: !(Maybe Bool)
+    , _niaAttachmentId        :: !(Maybe Text)
+    , _niaInstanceOwnerId     :: !(Maybe Text)
+    , _niaAttachTime          :: !(Maybe ISO8601)
+    , _niaDeviceIndex         :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkInterfaceAttachment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'niaInstanceId'
+--
+-- * 'niaStatus'
+--
+-- * 'niaDeleteOnTermination'
+--
+-- * 'niaAttachmentId'
+--
+-- * 'niaInstanceOwnerId'
+--
+-- * 'niaAttachTime'
+--
+-- * 'niaDeviceIndex'
+networkInterfaceAttachment
+    :: NetworkInterfaceAttachment
+networkInterfaceAttachment =
+    NetworkInterfaceAttachment'
+    { _niaInstanceId = Nothing
+    , _niaStatus = Nothing
+    , _niaDeleteOnTermination = Nothing
+    , _niaAttachmentId = Nothing
+    , _niaInstanceOwnerId = Nothing
+    , _niaAttachTime = Nothing
+    , _niaDeviceIndex = Nothing
+    }
+
+-- | The ID of the instance.
+niaInstanceId :: Lens' NetworkInterfaceAttachment (Maybe Text)
+niaInstanceId = lens _niaInstanceId (\ s a -> s{_niaInstanceId = a});
+
+-- | The attachment state.
+niaStatus :: Lens' NetworkInterfaceAttachment (Maybe AttachmentStatus)
+niaStatus = lens _niaStatus (\ s a -> s{_niaStatus = a});
+
+-- | Indicates whether the network interface is deleted when the instance is
+-- terminated.
+niaDeleteOnTermination :: Lens' NetworkInterfaceAttachment (Maybe Bool)
+niaDeleteOnTermination = lens _niaDeleteOnTermination (\ s a -> s{_niaDeleteOnTermination = a});
+
+-- | The ID of the network interface attachment.
+niaAttachmentId :: Lens' NetworkInterfaceAttachment (Maybe Text)
+niaAttachmentId = lens _niaAttachmentId (\ s a -> s{_niaAttachmentId = a});
+
+-- | The AWS account ID of the owner of the instance.
+niaInstanceOwnerId :: Lens' NetworkInterfaceAttachment (Maybe Text)
+niaInstanceOwnerId = lens _niaInstanceOwnerId (\ s a -> s{_niaInstanceOwnerId = a});
+
+-- | The timestamp indicating when the attachment initiated.
+niaAttachTime :: Lens' NetworkInterfaceAttachment (Maybe UTCTime)
+niaAttachTime = lens _niaAttachTime (\ s a -> s{_niaAttachTime = a}) . mapping _Time;
+
+-- | The device index of the network interface attachment on the instance.
+niaDeviceIndex :: Lens' NetworkInterfaceAttachment (Maybe Int)
+niaDeviceIndex = lens _niaDeviceIndex (\ s a -> s{_niaDeviceIndex = a});
+
+instance FromXML NetworkInterfaceAttachment where
+        parseXML x
+          = NetworkInterfaceAttachment' <$>
+              (x .@? "instanceId") <*> (x .@? "status") <*>
+                (x .@? "deleteOnTermination")
+                <*> (x .@? "attachmentId")
+                <*> (x .@? "instanceOwnerId")
+                <*> (x .@? "attachTime")
+                <*> (x .@? "deviceIndex")
+
+instance Hashable NetworkInterfaceAttachment
+
+-- | Describes an attachment change.
+--
+-- /See:/ 'networkInterfaceAttachmentChanges' smart constructor.
+data NetworkInterfaceAttachmentChanges = NetworkInterfaceAttachmentChanges'
+    { _niacDeleteOnTermination :: !(Maybe Bool)
+    , _niacAttachmentId        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkInterfaceAttachmentChanges' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'niacDeleteOnTermination'
+--
+-- * 'niacAttachmentId'
+networkInterfaceAttachmentChanges
+    :: NetworkInterfaceAttachmentChanges
+networkInterfaceAttachmentChanges =
+    NetworkInterfaceAttachmentChanges'
+    { _niacDeleteOnTermination = Nothing
+    , _niacAttachmentId = Nothing
+    }
+
+-- | Indicates whether the network interface is deleted when the instance is
+-- terminated.
+niacDeleteOnTermination :: Lens' NetworkInterfaceAttachmentChanges (Maybe Bool)
+niacDeleteOnTermination = lens _niacDeleteOnTermination (\ s a -> s{_niacDeleteOnTermination = a});
+
+-- | The ID of the network interface attachment.
+niacAttachmentId :: Lens' NetworkInterfaceAttachmentChanges (Maybe Text)
+niacAttachmentId = lens _niacAttachmentId (\ s a -> s{_niacAttachmentId = a});
+
+instance Hashable NetworkInterfaceAttachmentChanges
+
+instance ToQuery NetworkInterfaceAttachmentChanges
+         where
+        toQuery NetworkInterfaceAttachmentChanges'{..}
+          = mconcat
+              ["DeleteOnTermination" =: _niacDeleteOnTermination,
+               "AttachmentId" =: _niacAttachmentId]
+
+-- | Describes the private IP address of a network interface.
+--
+-- /See:/ 'networkInterfacePrivateIPAddress' smart constructor.
+data NetworkInterfacePrivateIPAddress = NetworkInterfacePrivateIPAddress'
+    { _nipiaPrimary          :: !(Maybe Bool)
+    , _nipiaPrivateIPAddress :: !(Maybe Text)
+    , _nipiaPrivateDNSName   :: !(Maybe Text)
+    , _nipiaAssociation      :: !(Maybe NetworkInterfaceAssociation)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NetworkInterfacePrivateIPAddress' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'nipiaPrimary'
+--
+-- * 'nipiaPrivateIPAddress'
+--
+-- * 'nipiaPrivateDNSName'
+--
+-- * 'nipiaAssociation'
+networkInterfacePrivateIPAddress
+    :: NetworkInterfacePrivateIPAddress
+networkInterfacePrivateIPAddress =
+    NetworkInterfacePrivateIPAddress'
+    { _nipiaPrimary = Nothing
+    , _nipiaPrivateIPAddress = Nothing
+    , _nipiaPrivateDNSName = Nothing
+    , _nipiaAssociation = Nothing
+    }
+
+-- | Indicates whether this IP address is the primary private IP address of
+-- the network interface.
+nipiaPrimary :: Lens' NetworkInterfacePrivateIPAddress (Maybe Bool)
+nipiaPrimary = lens _nipiaPrimary (\ s a -> s{_nipiaPrimary = a});
+
+-- | The private IP address.
+nipiaPrivateIPAddress :: Lens' NetworkInterfacePrivateIPAddress (Maybe Text)
+nipiaPrivateIPAddress = lens _nipiaPrivateIPAddress (\ s a -> s{_nipiaPrivateIPAddress = a});
+
+-- | The private DNS name.
+nipiaPrivateDNSName :: Lens' NetworkInterfacePrivateIPAddress (Maybe Text)
+nipiaPrivateDNSName = lens _nipiaPrivateDNSName (\ s a -> s{_nipiaPrivateDNSName = a});
+
+-- | The association information for an Elastic IP address associated with
+-- the network interface.
+nipiaAssociation :: Lens' NetworkInterfacePrivateIPAddress (Maybe NetworkInterfaceAssociation)
+nipiaAssociation = lens _nipiaAssociation (\ s a -> s{_nipiaAssociation = a});
+
+instance FromXML NetworkInterfacePrivateIPAddress
+         where
+        parseXML x
+          = NetworkInterfacePrivateIPAddress' <$>
+              (x .@? "primary") <*> (x .@? "privateIpAddress") <*>
+                (x .@? "privateDnsName")
+                <*> (x .@? "association")
+
+instance Hashable NetworkInterfacePrivateIPAddress
+
+-- | /See:/ 'newDHCPConfiguration' smart constructor.
+data NewDHCPConfiguration = NewDHCPConfiguration'
+    { _ndcValues :: !(Maybe [Text])
+    , _ndcKey    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'NewDHCPConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ndcValues'
+--
+-- * 'ndcKey'
+newDHCPConfiguration
+    :: NewDHCPConfiguration
+newDHCPConfiguration =
+    NewDHCPConfiguration'
+    { _ndcValues = Nothing
+    , _ndcKey = Nothing
+    }
+
+-- | Undocumented member.
+ndcValues :: Lens' NewDHCPConfiguration [Text]
+ndcValues = lens _ndcValues (\ s a -> s{_ndcValues = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+ndcKey :: Lens' NewDHCPConfiguration (Maybe Text)
+ndcKey = lens _ndcKey (\ s a -> s{_ndcKey = a});
+
+instance Hashable NewDHCPConfiguration
+
+instance ToQuery NewDHCPConfiguration where
+        toQuery NewDHCPConfiguration'{..}
+          = mconcat
+              [toQuery (toQueryList "Value" <$> _ndcValues),
+               "Key" =: _ndcKey]
+
+-- | Describes the placement for the instance.
+--
+-- /See:/ 'placement' smart constructor.
+data Placement = Placement'
+    { _pAffinity         :: !(Maybe Text)
+    , _pHostId           :: !(Maybe Text)
+    , _pAvailabilityZone :: !(Maybe Text)
+    , _pTenancy          :: !(Maybe Tenancy)
+    , _pGroupName        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Placement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pAffinity'
+--
+-- * 'pHostId'
+--
+-- * 'pAvailabilityZone'
+--
+-- * 'pTenancy'
+--
+-- * 'pGroupName'
+placement
+    :: Placement
+placement =
+    Placement'
+    { _pAffinity = Nothing
+    , _pHostId = Nothing
+    , _pAvailabilityZone = Nothing
+    , _pTenancy = Nothing
+    , _pGroupName = Nothing
+    }
+
+-- | The affinity setting for the instance on the Dedicated host. This
+-- parameter is not supported for the < ImportInstance> command.
+pAffinity :: Lens' Placement (Maybe Text)
+pAffinity = lens _pAffinity (\ s a -> s{_pAffinity = a});
+
+-- | The ID of the Dedicted host on which the instance resides. This
+-- parameter is not support for the < ImportInstance> command.
+pHostId :: Lens' Placement (Maybe Text)
+pHostId = lens _pHostId (\ s a -> s{_pHostId = a});
+
+-- | The Availability Zone of the instance.
+pAvailabilityZone :: Lens' Placement (Maybe Text)
+pAvailabilityZone = lens _pAvailabilityZone (\ s a -> s{_pAvailabilityZone = a});
+
+-- | The tenancy of the instance (if the instance is running in a VPC). An
+-- instance with a tenancy of 'dedicated' runs on single-tenant hardware.
+-- The 'host' tenancy is not supported for the < ImportInstance> command.
+pTenancy :: Lens' Placement (Maybe Tenancy)
+pTenancy = lens _pTenancy (\ s a -> s{_pTenancy = a});
+
+-- | The name of the placement group the instance is in (for cluster compute
+-- instances).
+pGroupName :: Lens' Placement (Maybe Text)
+pGroupName = lens _pGroupName (\ s a -> s{_pGroupName = a});
+
+instance FromXML Placement where
+        parseXML x
+          = Placement' <$>
+              (x .@? "affinity") <*> (x .@? "hostId") <*>
+                (x .@? "availabilityZone")
+                <*> (x .@? "tenancy")
+                <*> (x .@? "groupName")
+
+instance Hashable Placement
+
+instance ToQuery Placement where
+        toQuery Placement'{..}
+          = mconcat
+              ["Affinity" =: _pAffinity, "HostId" =: _pHostId,
+               "AvailabilityZone" =: _pAvailabilityZone,
+               "Tenancy" =: _pTenancy, "GroupName" =: _pGroupName]
+
+-- | Describes a placement group.
+--
+-- /See:/ 'placementGroup' smart constructor.
+data PlacementGroup = PlacementGroup'
+    { _pgState     :: !(Maybe PlacementGroupState)
+    , _pgStrategy  :: !(Maybe PlacementStrategy)
+    , _pgGroupName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PlacementGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pgState'
+--
+-- * 'pgStrategy'
+--
+-- * 'pgGroupName'
+placementGroup
+    :: PlacementGroup
+placementGroup =
+    PlacementGroup'
+    { _pgState = Nothing
+    , _pgStrategy = Nothing
+    , _pgGroupName = Nothing
+    }
+
+-- | The state of the placement group.
+pgState :: Lens' PlacementGroup (Maybe PlacementGroupState)
+pgState = lens _pgState (\ s a -> s{_pgState = a});
+
+-- | The placement strategy.
+pgStrategy :: Lens' PlacementGroup (Maybe PlacementStrategy)
+pgStrategy = lens _pgStrategy (\ s a -> s{_pgStrategy = a});
+
+-- | The name of the placement group.
+pgGroupName :: Lens' PlacementGroup (Maybe Text)
+pgGroupName = lens _pgGroupName (\ s a -> s{_pgGroupName = a});
+
+instance FromXML PlacementGroup where
+        parseXML x
+          = PlacementGroup' <$>
+              (x .@? "state") <*> (x .@? "strategy") <*>
+                (x .@? "groupName")
+
+instance Hashable PlacementGroup
+
+-- | Describes a range of ports.
+--
+-- /See:/ 'portRange' smart constructor.
+data PortRange = PortRange'
+    { _prTo   :: !(Maybe Int)
+    , _prFrom :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PortRange' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prTo'
+--
+-- * 'prFrom'
+portRange
+    :: PortRange
+portRange =
+    PortRange'
+    { _prTo = Nothing
+    , _prFrom = Nothing
+    }
+
+-- | The last port in the range.
+prTo :: Lens' PortRange (Maybe Int)
+prTo = lens _prTo (\ s a -> s{_prTo = a});
+
+-- | The first port in the range.
+prFrom :: Lens' PortRange (Maybe Int)
+prFrom = lens _prFrom (\ s a -> s{_prFrom = a});
+
+instance FromXML PortRange where
+        parseXML x
+          = PortRange' <$> (x .@? "to") <*> (x .@? "from")
+
+instance Hashable PortRange
+
+instance ToQuery PortRange where
+        toQuery PortRange'{..}
+          = mconcat ["To" =: _prTo, "From" =: _prFrom]
+
+-- | Describes prefixes for AWS services.
+--
+-- /See:/ 'prefixList' smart constructor.
+data PrefixList = PrefixList'
+    { _plCIdRs          :: !(Maybe [Text])
+    , _plPrefixListId   :: !(Maybe Text)
+    , _plPrefixListName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PrefixList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'plCIdRs'
+--
+-- * 'plPrefixListId'
+--
+-- * 'plPrefixListName'
+prefixList
+    :: PrefixList
+prefixList =
+    PrefixList'
+    { _plCIdRs = Nothing
+    , _plPrefixListId = Nothing
+    , _plPrefixListName = Nothing
+    }
+
+-- | The IP address range of the AWS service.
+plCIdRs :: Lens' PrefixList [Text]
+plCIdRs = lens _plCIdRs (\ s a -> s{_plCIdRs = a}) . _Default . _Coerce;
+
+-- | The ID of the prefix.
+plPrefixListId :: Lens' PrefixList (Maybe Text)
+plPrefixListId = lens _plPrefixListId (\ s a -> s{_plPrefixListId = a});
+
+-- | The name of the prefix.
+plPrefixListName :: Lens' PrefixList (Maybe Text)
+plPrefixListName = lens _plPrefixListName (\ s a -> s{_plPrefixListName = a});
+
+instance FromXML PrefixList where
+        parseXML x
+          = PrefixList' <$>
+              (x .@? "cidrSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "prefixListId")
+                <*> (x .@? "prefixListName")
+
+instance Hashable PrefixList
+
+-- | The ID of the prefix.
+--
+-- /See:/ 'prefixListId' smart constructor.
+newtype PrefixListId = PrefixListId'
+    { _pliPrefixListId :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PrefixListId' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pliPrefixListId'
+prefixListId
+    :: PrefixListId
+prefixListId =
+    PrefixListId'
+    { _pliPrefixListId = Nothing
+    }
+
+-- | The ID of the prefix.
+pliPrefixListId :: Lens' PrefixListId (Maybe Text)
+pliPrefixListId = lens _pliPrefixListId (\ s a -> s{_pliPrefixListId = a});
+
+instance FromXML PrefixListId where
+        parseXML x = PrefixListId' <$> (x .@? "prefixListId")
+
+instance Hashable PrefixListId
+
+instance ToQuery PrefixListId where
+        toQuery PrefixListId'{..}
+          = mconcat ["PrefixListId" =: _pliPrefixListId]
+
+-- | Describes the price for a Reserved Instance.
+--
+-- /See:/ 'priceSchedule' smart constructor.
+data PriceSchedule = PriceSchedule'
+    { _psCurrencyCode :: !(Maybe CurrencyCodeValues)
+    , _psTerm         :: !(Maybe Integer)
+    , _psActive       :: !(Maybe Bool)
+    , _psPrice        :: !(Maybe Double)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PriceSchedule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psCurrencyCode'
+--
+-- * 'psTerm'
+--
+-- * 'psActive'
+--
+-- * 'psPrice'
+priceSchedule
+    :: PriceSchedule
+priceSchedule =
+    PriceSchedule'
+    { _psCurrencyCode = Nothing
+    , _psTerm = Nothing
+    , _psActive = Nothing
+    , _psPrice = Nothing
+    }
+
+-- | The currency for transacting the Reserved Instance resale. At this time,
+-- the only supported currency is 'USD'.
+psCurrencyCode :: Lens' PriceSchedule (Maybe CurrencyCodeValues)
+psCurrencyCode = lens _psCurrencyCode (\ s a -> s{_psCurrencyCode = a});
+
+-- | The number of months remaining in the reservation. For example, 2 is the
+-- second to the last month before the capacity reservation expires.
+psTerm :: Lens' PriceSchedule (Maybe Integer)
+psTerm = lens _psTerm (\ s a -> s{_psTerm = a});
+
+-- | The current price schedule, as determined by the term remaining for the
+-- Reserved Instance in the listing.
+--
+-- A specific price schedule is always in effect, but only one price
+-- schedule can be active at any time. Take, for example, a Reserved
+-- Instance listing that has five months remaining in its term. When you
+-- specify price schedules for five months and two months, this means that
+-- schedule 1, covering the first three months of the remaining term, will
+-- be active during months 5, 4, and 3. Then schedule 2, covering the last
+-- two months of the term, will be active for months 2 and 1.
+psActive :: Lens' PriceSchedule (Maybe Bool)
+psActive = lens _psActive (\ s a -> s{_psActive = a});
+
+-- | The fixed price for the term.
+psPrice :: Lens' PriceSchedule (Maybe Double)
+psPrice = lens _psPrice (\ s a -> s{_psPrice = a});
+
+instance FromXML PriceSchedule where
+        parseXML x
+          = PriceSchedule' <$>
+              (x .@? "currencyCode") <*> (x .@? "term") <*>
+                (x .@? "active")
+                <*> (x .@? "price")
+
+instance Hashable PriceSchedule
+
+-- | Describes the price for a Reserved Instance.
+--
+-- /See:/ 'priceScheduleSpecification' smart constructor.
+data PriceScheduleSpecification = PriceScheduleSpecification'
+    { _pssCurrencyCode :: !(Maybe CurrencyCodeValues)
+    , _pssTerm         :: !(Maybe Integer)
+    , _pssPrice        :: !(Maybe Double)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PriceScheduleSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pssCurrencyCode'
+--
+-- * 'pssTerm'
+--
+-- * 'pssPrice'
+priceScheduleSpecification
+    :: PriceScheduleSpecification
+priceScheduleSpecification =
+    PriceScheduleSpecification'
+    { _pssCurrencyCode = Nothing
+    , _pssTerm = Nothing
+    , _pssPrice = Nothing
+    }
+
+-- | The currency for transacting the Reserved Instance resale. At this time,
+-- the only supported currency is 'USD'.
+pssCurrencyCode :: Lens' PriceScheduleSpecification (Maybe CurrencyCodeValues)
+pssCurrencyCode = lens _pssCurrencyCode (\ s a -> s{_pssCurrencyCode = a});
+
+-- | The number of months remaining in the reservation. For example, 2 is the
+-- second to the last month before the capacity reservation expires.
+pssTerm :: Lens' PriceScheduleSpecification (Maybe Integer)
+pssTerm = lens _pssTerm (\ s a -> s{_pssTerm = a});
+
+-- | The fixed price for the term.
+pssPrice :: Lens' PriceScheduleSpecification (Maybe Double)
+pssPrice = lens _pssPrice (\ s a -> s{_pssPrice = a});
+
+instance Hashable PriceScheduleSpecification
+
+instance ToQuery PriceScheduleSpecification where
+        toQuery PriceScheduleSpecification'{..}
+          = mconcat
+              ["CurrencyCode" =: _pssCurrencyCode,
+               "Term" =: _pssTerm, "Price" =: _pssPrice]
+
+-- | Describes a Reserved Instance offering.
+--
+-- /See:/ 'pricingDetail' smart constructor.
+data PricingDetail = PricingDetail'
+    { _pdCount :: !(Maybe Int)
+    , _pdPrice :: !(Maybe Double)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PricingDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdCount'
+--
+-- * 'pdPrice'
+pricingDetail
+    :: PricingDetail
+pricingDetail =
+    PricingDetail'
+    { _pdCount = Nothing
+    , _pdPrice = Nothing
+    }
+
+-- | The number of reservations available for the price.
+pdCount :: Lens' PricingDetail (Maybe Int)
+pdCount = lens _pdCount (\ s a -> s{_pdCount = a});
+
+-- | The price per instance.
+pdPrice :: Lens' PricingDetail (Maybe Double)
+pdPrice = lens _pdPrice (\ s a -> s{_pdPrice = a});
+
+instance FromXML PricingDetail where
+        parseXML x
+          = PricingDetail' <$>
+              (x .@? "count") <*> (x .@? "price")
+
+instance Hashable PricingDetail
+
+-- | Describes a secondary private IP address for a network interface.
+--
+-- /See:/ 'privateIPAddressSpecification' smart constructor.
+data PrivateIPAddressSpecification = PrivateIPAddressSpecification'
+    { _piasPrimary          :: !(Maybe Bool)
+    , _piasPrivateIPAddress :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PrivateIPAddressSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piasPrimary'
+--
+-- * 'piasPrivateIPAddress'
+privateIPAddressSpecification
+    :: Text -- ^ 'piasPrivateIPAddress'
+    -> PrivateIPAddressSpecification
+privateIPAddressSpecification pPrivateIPAddress_ =
+    PrivateIPAddressSpecification'
+    { _piasPrimary = Nothing
+    , _piasPrivateIPAddress = pPrivateIPAddress_
+    }
+
+-- | Indicates whether the private IP address is the primary private IP
+-- address. Only one IP address can be designated as primary.
+piasPrimary :: Lens' PrivateIPAddressSpecification (Maybe Bool)
+piasPrimary = lens _piasPrimary (\ s a -> s{_piasPrimary = a});
+
+-- | The private IP addresses.
+piasPrivateIPAddress :: Lens' PrivateIPAddressSpecification Text
+piasPrivateIPAddress = lens _piasPrivateIPAddress (\ s a -> s{_piasPrivateIPAddress = a});
+
+instance FromXML PrivateIPAddressSpecification where
+        parseXML x
+          = PrivateIPAddressSpecification' <$>
+              (x .@? "primary") <*> (x .@ "privateIpAddress")
+
+instance Hashable PrivateIPAddressSpecification
+
+instance ToQuery PrivateIPAddressSpecification where
+        toQuery PrivateIPAddressSpecification'{..}
+          = mconcat
+              ["Primary" =: _piasPrimary,
+               "PrivateIpAddress" =: _piasPrivateIPAddress]
+
+-- | Describes a product code.
+--
+-- /See:/ 'productCode' smart constructor.
+data ProductCode = ProductCode'
+    { _pcProductCodeType :: !(Maybe ProductCodeValues)
+    , _pcProductCodeId   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProductCode' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcProductCodeType'
+--
+-- * 'pcProductCodeId'
+productCode
+    :: ProductCode
+productCode =
+    ProductCode'
+    { _pcProductCodeType = Nothing
+    , _pcProductCodeId = Nothing
+    }
+
+-- | The type of product code.
+pcProductCodeType :: Lens' ProductCode (Maybe ProductCodeValues)
+pcProductCodeType = lens _pcProductCodeType (\ s a -> s{_pcProductCodeType = a});
+
+-- | The product code.
+pcProductCodeId :: Lens' ProductCode (Maybe Text)
+pcProductCodeId = lens _pcProductCodeId (\ s a -> s{_pcProductCodeId = a});
+
+instance FromXML ProductCode where
+        parseXML x
+          = ProductCode' <$>
+              (x .@? "type") <*> (x .@? "productCode")
+
+instance Hashable ProductCode
+
+-- | Describes a virtual private gateway propagating route.
+--
+-- /See:/ 'propagatingVGW' smart constructor.
+newtype PropagatingVGW = PropagatingVGW'
+    { _pvGatewayId :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PropagatingVGW' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pvGatewayId'
+propagatingVGW
+    :: PropagatingVGW
+propagatingVGW =
+    PropagatingVGW'
+    { _pvGatewayId = Nothing
+    }
+
+-- | The ID of the virtual private gateway (VGW).
+pvGatewayId :: Lens' PropagatingVGW (Maybe Text)
+pvGatewayId = lens _pvGatewayId (\ s a -> s{_pvGatewayId = a});
+
+instance FromXML PropagatingVGW where
+        parseXML x = PropagatingVGW' <$> (x .@? "gatewayId")
+
+instance Hashable PropagatingVGW
+
+-- | Describes a request to purchase Scheduled Instances.
+--
+-- /See:/ 'purchaseRequest' smart constructor.
+data PurchaseRequest = PurchaseRequest'
+    { _prPurchaseToken :: !Text
+    , _prInstanceCount :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PurchaseRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'prPurchaseToken'
+--
+-- * 'prInstanceCount'
+purchaseRequest
+    :: Text -- ^ 'prPurchaseToken'
+    -> Int -- ^ 'prInstanceCount'
+    -> PurchaseRequest
+purchaseRequest pPurchaseToken_ pInstanceCount_ =
+    PurchaseRequest'
+    { _prPurchaseToken = pPurchaseToken_
+    , _prInstanceCount = pInstanceCount_
+    }
+
+-- | The purchase token.
+prPurchaseToken :: Lens' PurchaseRequest Text
+prPurchaseToken = lens _prPurchaseToken (\ s a -> s{_prPurchaseToken = a});
+
+-- | The number of instances.
+prInstanceCount :: Lens' PurchaseRequest Int
+prInstanceCount = lens _prInstanceCount (\ s a -> s{_prInstanceCount = a});
+
+instance Hashable PurchaseRequest
+
+instance ToQuery PurchaseRequest where
+        toQuery PurchaseRequest'{..}
+          = mconcat
+              ["PurchaseToken" =: _prPurchaseToken,
+               "InstanceCount" =: _prInstanceCount]
+
+-- | Describes a recurring charge.
+--
+-- /See:/ 'recurringCharge' smart constructor.
+data RecurringCharge = RecurringCharge'
+    { _rcAmount    :: !(Maybe Double)
+    , _rcFrequency :: !(Maybe RecurringChargeFrequency)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RecurringCharge' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rcAmount'
+--
+-- * 'rcFrequency'
+recurringCharge
+    :: RecurringCharge
+recurringCharge =
+    RecurringCharge'
+    { _rcAmount = Nothing
+    , _rcFrequency = Nothing
+    }
+
+-- | The amount of the recurring charge.
+rcAmount :: Lens' RecurringCharge (Maybe Double)
+rcAmount = lens _rcAmount (\ s a -> s{_rcAmount = a});
+
+-- | The frequency of the recurring charge.
+rcFrequency :: Lens' RecurringCharge (Maybe RecurringChargeFrequency)
+rcFrequency = lens _rcFrequency (\ s a -> s{_rcFrequency = a});
+
+instance FromXML RecurringCharge where
+        parseXML x
+          = RecurringCharge' <$>
+              (x .@? "amount") <*> (x .@? "frequency")
+
+instance Hashable RecurringCharge
+
+-- | Describes a region.
+--
+-- /See:/ 'regionInfo' smart constructor.
+data RegionInfo = RegionInfo'
+    { _riRegionName :: !(Maybe Text)
+    , _riEndpoint   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RegionInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riRegionName'
+--
+-- * 'riEndpoint'
+regionInfo
+    :: RegionInfo
+regionInfo =
+    RegionInfo'
+    { _riRegionName = Nothing
+    , _riEndpoint = Nothing
+    }
+
+-- | The name of the region.
+riRegionName :: Lens' RegionInfo (Maybe Text)
+riRegionName = lens _riRegionName (\ s a -> s{_riRegionName = a});
+
+-- | The region service endpoint.
+riEndpoint :: Lens' RegionInfo (Maybe Text)
+riEndpoint = lens _riEndpoint (\ s a -> s{_riEndpoint = a});
+
+instance FromXML RegionInfo where
+        parseXML x
+          = RegionInfo' <$>
+              (x .@? "regionName") <*> (x .@? "regionEndpoint")
+
+instance Hashable RegionInfo
+
+-- | Describes the launch specification for an instance.
+--
+-- /See:/ 'requestSpotLaunchSpecification' smart constructor.
+data RequestSpotLaunchSpecification = RequestSpotLaunchSpecification'
+    { _rslsSecurityGroupIds    :: !(Maybe [Text])
+    , _rslsSecurityGroups      :: !(Maybe [Text])
+    , _rslsKeyName             :: !(Maybe Text)
+    , _rslsNetworkInterfaces   :: !(Maybe [InstanceNetworkInterfaceSpecification])
+    , _rslsRAMDiskId           :: !(Maybe Text)
+    , _rslsSubnetId            :: !(Maybe Text)
+    , _rslsKernelId            :: !(Maybe Text)
+    , _rslsInstanceType        :: !(Maybe InstanceType)
+    , _rslsEBSOptimized        :: !(Maybe Bool)
+    , _rslsUserData            :: !(Maybe Text)
+    , _rslsMonitoring          :: !(Maybe RunInstancesMonitoringEnabled)
+    , _rslsIAMInstanceProfile  :: !(Maybe IAMInstanceProfileSpecification)
+    , _rslsImageId             :: !(Maybe Text)
+    , _rslsAddressingType      :: !(Maybe Text)
+    , _rslsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
+    , _rslsPlacement           :: !(Maybe SpotPlacement)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RequestSpotLaunchSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rslsSecurityGroupIds'
+--
+-- * 'rslsSecurityGroups'
+--
+-- * 'rslsKeyName'
+--
+-- * 'rslsNetworkInterfaces'
+--
+-- * 'rslsRAMDiskId'
+--
+-- * 'rslsSubnetId'
+--
+-- * 'rslsKernelId'
+--
+-- * 'rslsInstanceType'
+--
+-- * 'rslsEBSOptimized'
+--
+-- * 'rslsUserData'
+--
+-- * 'rslsMonitoring'
+--
+-- * 'rslsIAMInstanceProfile'
+--
+-- * 'rslsImageId'
+--
+-- * 'rslsAddressingType'
+--
+-- * 'rslsBlockDeviceMappings'
+--
+-- * 'rslsPlacement'
+requestSpotLaunchSpecification
+    :: RequestSpotLaunchSpecification
+requestSpotLaunchSpecification =
+    RequestSpotLaunchSpecification'
+    { _rslsSecurityGroupIds = Nothing
+    , _rslsSecurityGroups = Nothing
+    , _rslsKeyName = Nothing
+    , _rslsNetworkInterfaces = Nothing
+    , _rslsRAMDiskId = Nothing
+    , _rslsSubnetId = Nothing
+    , _rslsKernelId = Nothing
+    , _rslsInstanceType = Nothing
+    , _rslsEBSOptimized = Nothing
+    , _rslsUserData = Nothing
+    , _rslsMonitoring = Nothing
+    , _rslsIAMInstanceProfile = Nothing
+    , _rslsImageId = Nothing
+    , _rslsAddressingType = Nothing
+    , _rslsBlockDeviceMappings = Nothing
+    , _rslsPlacement = Nothing
+    }
+
+-- | Undocumented member.
+rslsSecurityGroupIds :: Lens' RequestSpotLaunchSpecification [Text]
+rslsSecurityGroupIds = lens _rslsSecurityGroupIds (\ s a -> s{_rslsSecurityGroupIds = a}) . _Default . _Coerce;
+
+-- | Undocumented member.
+rslsSecurityGroups :: Lens' RequestSpotLaunchSpecification [Text]
+rslsSecurityGroups = lens _rslsSecurityGroups (\ s a -> s{_rslsSecurityGroups = a}) . _Default . _Coerce;
+
+-- | The name of the key pair.
+rslsKeyName :: Lens' RequestSpotLaunchSpecification (Maybe Text)
+rslsKeyName = lens _rslsKeyName (\ s a -> s{_rslsKeyName = a});
+
+-- | One or more network interfaces.
+rslsNetworkInterfaces :: Lens' RequestSpotLaunchSpecification [InstanceNetworkInterfaceSpecification]
+rslsNetworkInterfaces = lens _rslsNetworkInterfaces (\ s a -> s{_rslsNetworkInterfaces = a}) . _Default . _Coerce;
+
+-- | The ID of the RAM disk.
+rslsRAMDiskId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
+rslsRAMDiskId = lens _rslsRAMDiskId (\ s a -> s{_rslsRAMDiskId = a});
+
+-- | The ID of the subnet in which to launch the instance.
+rslsSubnetId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
+rslsSubnetId = lens _rslsSubnetId (\ s a -> s{_rslsSubnetId = a});
+
+-- | The ID of the kernel.
+rslsKernelId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
+rslsKernelId = lens _rslsKernelId (\ s a -> s{_rslsKernelId = a});
+
+-- | The instance type.
+rslsInstanceType :: Lens' RequestSpotLaunchSpecification (Maybe InstanceType)
+rslsInstanceType = lens _rslsInstanceType (\ s a -> s{_rslsInstanceType = a});
+
+-- | Indicates whether the instance is optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- Default: 'false'
+rslsEBSOptimized :: Lens' RequestSpotLaunchSpecification (Maybe Bool)
+rslsEBSOptimized = lens _rslsEBSOptimized (\ s a -> s{_rslsEBSOptimized = a});
+
+-- | The Base64-encoded MIME user data to make available to the instances.
+rslsUserData :: Lens' RequestSpotLaunchSpecification (Maybe Text)
+rslsUserData = lens _rslsUserData (\ s a -> s{_rslsUserData = a});
+
+-- | Undocumented member.
+rslsMonitoring :: Lens' RequestSpotLaunchSpecification (Maybe RunInstancesMonitoringEnabled)
+rslsMonitoring = lens _rslsMonitoring (\ s a -> s{_rslsMonitoring = a});
+
+-- | The IAM instance profile.
+rslsIAMInstanceProfile :: Lens' RequestSpotLaunchSpecification (Maybe IAMInstanceProfileSpecification)
+rslsIAMInstanceProfile = lens _rslsIAMInstanceProfile (\ s a -> s{_rslsIAMInstanceProfile = a});
+
+-- | The ID of the AMI.
+rslsImageId :: Lens' RequestSpotLaunchSpecification (Maybe Text)
+rslsImageId = lens _rslsImageId (\ s a -> s{_rslsImageId = a});
+
+-- | Deprecated.
+rslsAddressingType :: Lens' RequestSpotLaunchSpecification (Maybe Text)
+rslsAddressingType = lens _rslsAddressingType (\ s a -> s{_rslsAddressingType = a});
+
+-- | One or more block device mapping entries.
+rslsBlockDeviceMappings :: Lens' RequestSpotLaunchSpecification [BlockDeviceMapping]
+rslsBlockDeviceMappings = lens _rslsBlockDeviceMappings (\ s a -> s{_rslsBlockDeviceMappings = a}) . _Default . _Coerce;
+
+-- | The placement information for the instance.
+rslsPlacement :: Lens' RequestSpotLaunchSpecification (Maybe SpotPlacement)
+rslsPlacement = lens _rslsPlacement (\ s a -> s{_rslsPlacement = a});
+
+instance Hashable RequestSpotLaunchSpecification
+
+instance ToQuery RequestSpotLaunchSpecification where
+        toQuery RequestSpotLaunchSpecification'{..}
+          = mconcat
+              [toQuery
+                 (toQueryList "SecurityGroupId" <$>
+                    _rslsSecurityGroupIds),
+               toQuery
+                 (toQueryList "SecurityGroup" <$>
+                    _rslsSecurityGroups),
+               "KeyName" =: _rslsKeyName,
+               toQuery
+                 (toQueryList "NetworkInterface" <$>
+                    _rslsNetworkInterfaces),
+               "RamdiskId" =: _rslsRAMDiskId,
+               "SubnetId" =: _rslsSubnetId,
+               "KernelId" =: _rslsKernelId,
+               "InstanceType" =: _rslsInstanceType,
+               "EbsOptimized" =: _rslsEBSOptimized,
+               "UserData" =: _rslsUserData,
+               "Monitoring" =: _rslsMonitoring,
+               "IamInstanceProfile" =: _rslsIAMInstanceProfile,
+               "ImageId" =: _rslsImageId,
+               "AddressingType" =: _rslsAddressingType,
+               toQuery
+                 (toQueryList "BlockDeviceMapping" <$>
+                    _rslsBlockDeviceMappings),
+               "Placement" =: _rslsPlacement]
+
+-- | Describes a reservation.
+--
+-- /See:/ 'reservation' smart constructor.
+data Reservation = Reservation'
+    { _rGroups        :: !(Maybe [GroupIdentifier])
+    , _rInstances     :: !(Maybe [Instance])
+    , _rRequesterId   :: !(Maybe Text)
+    , _rReservationId :: !Text
+    , _rOwnerId       :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Reservation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rGroups'
+--
+-- * 'rInstances'
+--
+-- * 'rRequesterId'
+--
+-- * 'rReservationId'
+--
+-- * 'rOwnerId'
+reservation
+    :: Text -- ^ 'rReservationId'
+    -> Text -- ^ 'rOwnerId'
+    -> Reservation
+reservation pReservationId_ pOwnerId_ =
+    Reservation'
+    { _rGroups = Nothing
+    , _rInstances = Nothing
+    , _rRequesterId = Nothing
+    , _rReservationId = pReservationId_
+    , _rOwnerId = pOwnerId_
+    }
+
+-- | [EC2-Classic only] One or more security groups.
+rGroups :: Lens' Reservation [GroupIdentifier]
+rGroups = lens _rGroups (\ s a -> s{_rGroups = a}) . _Default . _Coerce;
+
+-- | One or more instances.
+rInstances :: Lens' Reservation [Instance]
+rInstances = lens _rInstances (\ s a -> s{_rInstances = a}) . _Default . _Coerce;
+
+-- | The ID of the requester that launched the instances on your behalf (for
+-- example, AWS Management Console or Auto Scaling).
+rRequesterId :: Lens' Reservation (Maybe Text)
+rRequesterId = lens _rRequesterId (\ s a -> s{_rRequesterId = a});
+
+-- | The ID of the reservation.
+rReservationId :: Lens' Reservation Text
+rReservationId = lens _rReservationId (\ s a -> s{_rReservationId = a});
+
+-- | The ID of the AWS account that owns the reservation.
+rOwnerId :: Lens' Reservation Text
+rOwnerId = lens _rOwnerId (\ s a -> s{_rOwnerId = a});
+
+instance FromXML Reservation where
+        parseXML x
+          = Reservation' <$>
+              (x .@? "groupSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*>
+                (x .@? "instancesSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "requesterId")
+                <*> (x .@ "reservationId")
+                <*> (x .@ "ownerId")
+
+instance Hashable Reservation
+
+-- | Describes the limit price of a Reserved Instance offering.
+--
+-- /See:/ 'reservedInstanceLimitPrice' smart constructor.
+data ReservedInstanceLimitPrice = ReservedInstanceLimitPrice'
+    { _rilpAmount       :: !(Maybe Double)
+    , _rilpCurrencyCode :: !(Maybe CurrencyCodeValues)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReservedInstanceLimitPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rilpAmount'
+--
+-- * 'rilpCurrencyCode'
+reservedInstanceLimitPrice
+    :: ReservedInstanceLimitPrice
+reservedInstanceLimitPrice =
+    ReservedInstanceLimitPrice'
+    { _rilpAmount = Nothing
+    , _rilpCurrencyCode = Nothing
+    }
+
+-- | Used for Reserved Instance Marketplace offerings. Specifies the limit
+-- price on the total order (instanceCount * price).
+rilpAmount :: Lens' ReservedInstanceLimitPrice (Maybe Double)
+rilpAmount = lens _rilpAmount (\ s a -> s{_rilpAmount = a});
+
+-- | The currency in which the 'limitPrice' amount is specified. At this
+-- time, the only supported currency is 'USD'.
+rilpCurrencyCode :: Lens' ReservedInstanceLimitPrice (Maybe CurrencyCodeValues)
+rilpCurrencyCode = lens _rilpCurrencyCode (\ s a -> s{_rilpCurrencyCode = a});
+
+instance Hashable ReservedInstanceLimitPrice
+
+instance ToQuery ReservedInstanceLimitPrice where
+        toQuery ReservedInstanceLimitPrice'{..}
+          = mconcat
+              ["Amount" =: _rilpAmount,
+               "CurrencyCode" =: _rilpCurrencyCode]
+
+-- | Describes a Reserved Instance.
+--
+-- /See:/ 'reservedInstances' smart constructor.
+data ReservedInstances = ReservedInstances'
+    { _riState               :: !(Maybe ReservedInstanceState)
+    , _riCurrencyCode        :: !(Maybe CurrencyCodeValues)
+    , _riInstanceCount       :: !(Maybe Int)
+    , _riProductDescription  :: !(Maybe RIProductDescription)
+    , _riStart               :: !(Maybe ISO8601)
+    , _riInstanceType        :: !(Maybe InstanceType)
+    , _riEnd                 :: !(Maybe ISO8601)
+    , _riAvailabilityZone    :: !(Maybe Text)
+    , _riRecurringCharges    :: !(Maybe [RecurringCharge])
+    , _riOfferingType        :: !(Maybe OfferingTypeValues)
+    , _riUsagePrice          :: !(Maybe Double)
+    , _riFixedPrice          :: !(Maybe Double)
+    , _riReservedInstancesId :: !(Maybe Text)
+    , _riInstanceTenancy     :: !(Maybe Tenancy)
+    , _riDuration            :: !(Maybe Integer)
+    , _riTags                :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReservedInstances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riState'
+--
+-- * 'riCurrencyCode'
+--
+-- * 'riInstanceCount'
+--
+-- * 'riProductDescription'
+--
+-- * 'riStart'
+--
+-- * 'riInstanceType'
+--
+-- * 'riEnd'
+--
+-- * 'riAvailabilityZone'
+--
+-- * 'riRecurringCharges'
+--
+-- * 'riOfferingType'
+--
+-- * 'riUsagePrice'
+--
+-- * 'riFixedPrice'
+--
+-- * 'riReservedInstancesId'
+--
+-- * 'riInstanceTenancy'
+--
+-- * 'riDuration'
+--
+-- * 'riTags'
+reservedInstances
+    :: ReservedInstances
+reservedInstances =
+    ReservedInstances'
+    { _riState = Nothing
+    , _riCurrencyCode = Nothing
+    , _riInstanceCount = Nothing
+    , _riProductDescription = Nothing
+    , _riStart = Nothing
+    , _riInstanceType = Nothing
+    , _riEnd = Nothing
+    , _riAvailabilityZone = Nothing
+    , _riRecurringCharges = Nothing
+    , _riOfferingType = Nothing
+    , _riUsagePrice = Nothing
+    , _riFixedPrice = Nothing
+    , _riReservedInstancesId = Nothing
+    , _riInstanceTenancy = Nothing
+    , _riDuration = Nothing
+    , _riTags = Nothing
+    }
+
+-- | The state of the Reserved Instance purchase.
+riState :: Lens' ReservedInstances (Maybe ReservedInstanceState)
+riState = lens _riState (\ s a -> s{_riState = a});
+
+-- | The currency of the Reserved Instance. It\'s specified using ISO 4217
+-- standard currency codes. At this time, the only supported currency is
+-- 'USD'.
+riCurrencyCode :: Lens' ReservedInstances (Maybe CurrencyCodeValues)
+riCurrencyCode = lens _riCurrencyCode (\ s a -> s{_riCurrencyCode = a});
+
+-- | The number of reservations purchased.
+riInstanceCount :: Lens' ReservedInstances (Maybe Int)
+riInstanceCount = lens _riInstanceCount (\ s a -> s{_riInstanceCount = a});
+
+-- | The Reserved Instance product platform description.
+riProductDescription :: Lens' ReservedInstances (Maybe RIProductDescription)
+riProductDescription = lens _riProductDescription (\ s a -> s{_riProductDescription = a});
+
+-- | The date and time the Reserved Instance started.
+riStart :: Lens' ReservedInstances (Maybe UTCTime)
+riStart = lens _riStart (\ s a -> s{_riStart = a}) . mapping _Time;
+
+-- | The instance type on which the Reserved Instance can be used.
+riInstanceType :: Lens' ReservedInstances (Maybe InstanceType)
+riInstanceType = lens _riInstanceType (\ s a -> s{_riInstanceType = a});
+
+-- | The time when the Reserved Instance expires.
+riEnd :: Lens' ReservedInstances (Maybe UTCTime)
+riEnd = lens _riEnd (\ s a -> s{_riEnd = a}) . mapping _Time;
+
+-- | The Availability Zone in which the Reserved Instance can be used.
+riAvailabilityZone :: Lens' ReservedInstances (Maybe Text)
+riAvailabilityZone = lens _riAvailabilityZone (\ s a -> s{_riAvailabilityZone = a});
+
+-- | The recurring charge tag assigned to the resource.
+riRecurringCharges :: Lens' ReservedInstances [RecurringCharge]
+riRecurringCharges = lens _riRecurringCharges (\ s a -> s{_riRecurringCharges = a}) . _Default . _Coerce;
+
+-- | The Reserved Instance offering type.
+riOfferingType :: Lens' ReservedInstances (Maybe OfferingTypeValues)
+riOfferingType = lens _riOfferingType (\ s a -> s{_riOfferingType = a});
+
+-- | The usage price of the Reserved Instance, per hour.
+riUsagePrice :: Lens' ReservedInstances (Maybe Double)
+riUsagePrice = lens _riUsagePrice (\ s a -> s{_riUsagePrice = a});
+
+-- | The purchase price of the Reserved Instance.
+riFixedPrice :: Lens' ReservedInstances (Maybe Double)
+riFixedPrice = lens _riFixedPrice (\ s a -> s{_riFixedPrice = a});
+
+-- | The ID of the Reserved Instance.
+riReservedInstancesId :: Lens' ReservedInstances (Maybe Text)
+riReservedInstancesId = lens _riReservedInstancesId (\ s a -> s{_riReservedInstancesId = a});
+
+-- | The tenancy of the instance.
+riInstanceTenancy :: Lens' ReservedInstances (Maybe Tenancy)
+riInstanceTenancy = lens _riInstanceTenancy (\ s a -> s{_riInstanceTenancy = a});
+
+-- | The duration of the Reserved Instance, in seconds.
+riDuration :: Lens' ReservedInstances (Maybe Integer)
+riDuration = lens _riDuration (\ s a -> s{_riDuration = a});
+
+-- | Any tags assigned to the resource.
+riTags :: Lens' ReservedInstances [Tag]
+riTags = lens _riTags (\ s a -> s{_riTags = a}) . _Default . _Coerce;
+
+instance FromXML ReservedInstances where
+        parseXML x
+          = ReservedInstances' <$>
+              (x .@? "state") <*> (x .@? "currencyCode") <*>
+                (x .@? "instanceCount")
+                <*> (x .@? "productDescription")
+                <*> (x .@? "start")
+                <*> (x .@? "instanceType")
+                <*> (x .@? "end")
+                <*> (x .@? "availabilityZone")
+                <*>
+                (x .@? "recurringCharges" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "offeringType")
+                <*> (x .@? "usagePrice")
+                <*> (x .@? "fixedPrice")
+                <*> (x .@? "reservedInstancesId")
+                <*> (x .@? "instanceTenancy")
+                <*> (x .@? "duration")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable ReservedInstances
+
+-- | Describes the configuration settings for the modified Reserved
+-- Instances.
+--
+-- /See:/ 'reservedInstancesConfiguration' smart constructor.
+data ReservedInstancesConfiguration = ReservedInstancesConfiguration'
+    { _ricPlatform         :: !(Maybe Text)
+    , _ricInstanceCount    :: !(Maybe Int)
+    , _ricInstanceType     :: !(Maybe InstanceType)
+    , _ricAvailabilityZone :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReservedInstancesConfiguration' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ricPlatform'
+--
+-- * 'ricInstanceCount'
+--
+-- * 'ricInstanceType'
+--
+-- * 'ricAvailabilityZone'
+reservedInstancesConfiguration
+    :: ReservedInstancesConfiguration
+reservedInstancesConfiguration =
+    ReservedInstancesConfiguration'
+    { _ricPlatform = Nothing
+    , _ricInstanceCount = Nothing
+    , _ricInstanceType = Nothing
+    , _ricAvailabilityZone = Nothing
+    }
+
+-- | The network platform of the modified Reserved Instances, which is either
+-- EC2-Classic or EC2-VPC.
+ricPlatform :: Lens' ReservedInstancesConfiguration (Maybe Text)
+ricPlatform = lens _ricPlatform (\ s a -> s{_ricPlatform = a});
+
+-- | The number of modified Reserved Instances.
+ricInstanceCount :: Lens' ReservedInstancesConfiguration (Maybe Int)
+ricInstanceCount = lens _ricInstanceCount (\ s a -> s{_ricInstanceCount = a});
+
+-- | The instance type for the modified Reserved Instances.
+ricInstanceType :: Lens' ReservedInstancesConfiguration (Maybe InstanceType)
+ricInstanceType = lens _ricInstanceType (\ s a -> s{_ricInstanceType = a});
+
+-- | The Availability Zone for the modified Reserved Instances.
+ricAvailabilityZone :: Lens' ReservedInstancesConfiguration (Maybe Text)
+ricAvailabilityZone = lens _ricAvailabilityZone (\ s a -> s{_ricAvailabilityZone = a});
+
+instance FromXML ReservedInstancesConfiguration where
+        parseXML x
+          = ReservedInstancesConfiguration' <$>
+              (x .@? "platform") <*> (x .@? "instanceCount") <*>
+                (x .@? "instanceType")
+                <*> (x .@? "availabilityZone")
+
+instance Hashable ReservedInstancesConfiguration
+
+instance ToQuery ReservedInstancesConfiguration where
+        toQuery ReservedInstancesConfiguration'{..}
+          = mconcat
+              ["Platform" =: _ricPlatform,
+               "InstanceCount" =: _ricInstanceCount,
+               "InstanceType" =: _ricInstanceType,
+               "AvailabilityZone" =: _ricAvailabilityZone]
+
+-- | Describes the ID of a Reserved Instance.
+--
+-- /See:/ 'reservedInstancesId' smart constructor.
+newtype ReservedInstancesId = ReservedInstancesId'
+    { _riiReservedInstancesId :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReservedInstancesId' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riiReservedInstancesId'
+reservedInstancesId
+    :: ReservedInstancesId
+reservedInstancesId =
+    ReservedInstancesId'
+    { _riiReservedInstancesId = Nothing
+    }
+
+-- | The ID of the Reserved Instance.
+riiReservedInstancesId :: Lens' ReservedInstancesId (Maybe Text)
+riiReservedInstancesId = lens _riiReservedInstancesId (\ s a -> s{_riiReservedInstancesId = a});
+
+instance FromXML ReservedInstancesId where
+        parseXML x
+          = ReservedInstancesId' <$>
+              (x .@? "reservedInstancesId")
+
+instance Hashable ReservedInstancesId
+
+-- | Describes a Reserved Instance listing.
+--
+-- /See:/ 'reservedInstancesListing' smart constructor.
+data ReservedInstancesListing = ReservedInstancesListing'
+    { _rilStatus                     :: !(Maybe ListingStatus)
+    , _rilClientToken                :: !(Maybe Text)
+    , _rilUpdateDate                 :: !(Maybe ISO8601)
+    , _rilCreateDate                 :: !(Maybe ISO8601)
+    , _rilPriceSchedules             :: !(Maybe [PriceSchedule])
+    , _rilStatusMessage              :: !(Maybe Text)
+    , _rilReservedInstancesId        :: !(Maybe Text)
+    , _rilTags                       :: !(Maybe [Tag])
+    , _rilInstanceCounts             :: !(Maybe [InstanceCount])
+    , _rilReservedInstancesListingId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReservedInstancesListing' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rilStatus'
+--
+-- * 'rilClientToken'
+--
+-- * 'rilUpdateDate'
+--
+-- * 'rilCreateDate'
+--
+-- * 'rilPriceSchedules'
+--
+-- * 'rilStatusMessage'
+--
+-- * 'rilReservedInstancesId'
+--
+-- * 'rilTags'
+--
+-- * 'rilInstanceCounts'
+--
+-- * 'rilReservedInstancesListingId'
+reservedInstancesListing
+    :: ReservedInstancesListing
+reservedInstancesListing =
+    ReservedInstancesListing'
+    { _rilStatus = Nothing
+    , _rilClientToken = Nothing
+    , _rilUpdateDate = Nothing
+    , _rilCreateDate = Nothing
+    , _rilPriceSchedules = Nothing
+    , _rilStatusMessage = Nothing
+    , _rilReservedInstancesId = Nothing
+    , _rilTags = Nothing
+    , _rilInstanceCounts = Nothing
+    , _rilReservedInstancesListingId = Nothing
+    }
+
+-- | The status of the Reserved Instance listing.
+rilStatus :: Lens' ReservedInstancesListing (Maybe ListingStatus)
+rilStatus = lens _rilStatus (\ s a -> s{_rilStatus = a});
+
+-- | A unique, case-sensitive key supplied by the client to ensure that the
+-- request is idempotent. For more information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+rilClientToken :: Lens' ReservedInstancesListing (Maybe Text)
+rilClientToken = lens _rilClientToken (\ s a -> s{_rilClientToken = a});
+
+-- | The last modified timestamp of the listing.
+rilUpdateDate :: Lens' ReservedInstancesListing (Maybe UTCTime)
+rilUpdateDate = lens _rilUpdateDate (\ s a -> s{_rilUpdateDate = a}) . mapping _Time;
+
+-- | The time the listing was created.
+rilCreateDate :: Lens' ReservedInstancesListing (Maybe UTCTime)
+rilCreateDate = lens _rilCreateDate (\ s a -> s{_rilCreateDate = a}) . mapping _Time;
+
+-- | The price of the Reserved Instance listing.
+rilPriceSchedules :: Lens' ReservedInstancesListing [PriceSchedule]
+rilPriceSchedules = lens _rilPriceSchedules (\ s a -> s{_rilPriceSchedules = a}) . _Default . _Coerce;
+
+-- | The reason for the current status of the Reserved Instance listing. The
+-- response can be blank.
+rilStatusMessage :: Lens' ReservedInstancesListing (Maybe Text)
+rilStatusMessage = lens _rilStatusMessage (\ s a -> s{_rilStatusMessage = a});
+
+-- | The ID of the Reserved Instance.
+rilReservedInstancesId :: Lens' ReservedInstancesListing (Maybe Text)
+rilReservedInstancesId = lens _rilReservedInstancesId (\ s a -> s{_rilReservedInstancesId = a});
+
+-- | Any tags assigned to the resource.
+rilTags :: Lens' ReservedInstancesListing [Tag]
+rilTags = lens _rilTags (\ s a -> s{_rilTags = a}) . _Default . _Coerce;
+
+-- | The number of instances in this state.
+rilInstanceCounts :: Lens' ReservedInstancesListing [InstanceCount]
+rilInstanceCounts = lens _rilInstanceCounts (\ s a -> s{_rilInstanceCounts = a}) . _Default . _Coerce;
+
+-- | The ID of the Reserved Instance listing.
+rilReservedInstancesListingId :: Lens' ReservedInstancesListing (Maybe Text)
+rilReservedInstancesListingId = lens _rilReservedInstancesListingId (\ s a -> s{_rilReservedInstancesListingId = a});
+
+instance FromXML ReservedInstancesListing where
+        parseXML x
+          = ReservedInstancesListing' <$>
+              (x .@? "status") <*> (x .@? "clientToken") <*>
+                (x .@? "updateDate")
+                <*> (x .@? "createDate")
+                <*>
+                (x .@? "priceSchedules" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "statusMessage")
+                <*> (x .@? "reservedInstancesId")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "instanceCounts" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "reservedInstancesListingId")
+
+instance Hashable ReservedInstancesListing
+
+-- | Describes a Reserved Instance modification.
+--
+-- /See:/ 'reservedInstancesModification' smart constructor.
+data ReservedInstancesModification = ReservedInstancesModification'
+    { _rimModificationResults             :: !(Maybe [ReservedInstancesModificationResult])
+    , _rimStatus                          :: !(Maybe Text)
+    , _rimClientToken                     :: !(Maybe Text)
+    , _rimUpdateDate                      :: !(Maybe ISO8601)
+    , _rimCreateDate                      :: !(Maybe ISO8601)
+    , _rimEffectiveDate                   :: !(Maybe ISO8601)
+    , _rimStatusMessage                   :: !(Maybe Text)
+    , _rimReservedInstancesModificationId :: !(Maybe Text)
+    , _rimReservedInstancesIds            :: !(Maybe [ReservedInstancesId])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReservedInstancesModification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rimModificationResults'
+--
+-- * 'rimStatus'
+--
+-- * 'rimClientToken'
+--
+-- * 'rimUpdateDate'
+--
+-- * 'rimCreateDate'
+--
+-- * 'rimEffectiveDate'
+--
+-- * 'rimStatusMessage'
+--
+-- * 'rimReservedInstancesModificationId'
+--
+-- * 'rimReservedInstancesIds'
+reservedInstancesModification
+    :: ReservedInstancesModification
+reservedInstancesModification =
+    ReservedInstancesModification'
+    { _rimModificationResults = Nothing
+    , _rimStatus = Nothing
+    , _rimClientToken = Nothing
+    , _rimUpdateDate = Nothing
+    , _rimCreateDate = Nothing
+    , _rimEffectiveDate = Nothing
+    , _rimStatusMessage = Nothing
+    , _rimReservedInstancesModificationId = Nothing
+    , _rimReservedInstancesIds = Nothing
+    }
+
+-- | Contains target configurations along with their corresponding new
+-- Reserved Instance IDs.
+rimModificationResults :: Lens' ReservedInstancesModification [ReservedInstancesModificationResult]
+rimModificationResults = lens _rimModificationResults (\ s a -> s{_rimModificationResults = a}) . _Default . _Coerce;
+
+-- | The status of the Reserved Instances modification request.
+rimStatus :: Lens' ReservedInstancesModification (Maybe Text)
+rimStatus = lens _rimStatus (\ s a -> s{_rimStatus = a});
+
+-- | A unique, case-sensitive key supplied by the client to ensure that the
+-- request is idempotent. For more information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+rimClientToken :: Lens' ReservedInstancesModification (Maybe Text)
+rimClientToken = lens _rimClientToken (\ s a -> s{_rimClientToken = a});
+
+-- | The time when the modification request was last updated.
+rimUpdateDate :: Lens' ReservedInstancesModification (Maybe UTCTime)
+rimUpdateDate = lens _rimUpdateDate (\ s a -> s{_rimUpdateDate = a}) . mapping _Time;
+
+-- | The time when the modification request was created.
+rimCreateDate :: Lens' ReservedInstancesModification (Maybe UTCTime)
+rimCreateDate = lens _rimCreateDate (\ s a -> s{_rimCreateDate = a}) . mapping _Time;
+
+-- | The time for the modification to become effective.
+rimEffectiveDate :: Lens' ReservedInstancesModification (Maybe UTCTime)
+rimEffectiveDate = lens _rimEffectiveDate (\ s a -> s{_rimEffectiveDate = a}) . mapping _Time;
+
+-- | The reason for the status.
+rimStatusMessage :: Lens' ReservedInstancesModification (Maybe Text)
+rimStatusMessage = lens _rimStatusMessage (\ s a -> s{_rimStatusMessage = a});
+
+-- | A unique ID for the Reserved Instance modification.
+rimReservedInstancesModificationId :: Lens' ReservedInstancesModification (Maybe Text)
+rimReservedInstancesModificationId = lens _rimReservedInstancesModificationId (\ s a -> s{_rimReservedInstancesModificationId = a});
+
+-- | The IDs of one or more Reserved Instances.
+rimReservedInstancesIds :: Lens' ReservedInstancesModification [ReservedInstancesId]
+rimReservedInstancesIds = lens _rimReservedInstancesIds (\ s a -> s{_rimReservedInstancesIds = a}) . _Default . _Coerce;
+
+instance FromXML ReservedInstancesModification where
+        parseXML x
+          = ReservedInstancesModification' <$>
+              (x .@? "modificationResultSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "status")
+                <*> (x .@? "clientToken")
+                <*> (x .@? "updateDate")
+                <*> (x .@? "createDate")
+                <*> (x .@? "effectiveDate")
+                <*> (x .@? "statusMessage")
+                <*> (x .@? "reservedInstancesModificationId")
+                <*>
+                (x .@? "reservedInstancesSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable ReservedInstancesModification
+
+-- | /See:/ 'reservedInstancesModificationResult' smart constructor.
+data ReservedInstancesModificationResult = ReservedInstancesModificationResult'
+    { _rimrReservedInstancesId :: !(Maybe Text)
+    , _rimrTargetConfiguration :: !(Maybe ReservedInstancesConfiguration)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReservedInstancesModificationResult' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rimrReservedInstancesId'
+--
+-- * 'rimrTargetConfiguration'
+reservedInstancesModificationResult
+    :: ReservedInstancesModificationResult
+reservedInstancesModificationResult =
+    ReservedInstancesModificationResult'
+    { _rimrReservedInstancesId = Nothing
+    , _rimrTargetConfiguration = Nothing
+    }
+
+-- | The ID for the Reserved Instances that were created as part of the
+-- modification request. This field is only available when the modification
+-- is fulfilled.
+rimrReservedInstancesId :: Lens' ReservedInstancesModificationResult (Maybe Text)
+rimrReservedInstancesId = lens _rimrReservedInstancesId (\ s a -> s{_rimrReservedInstancesId = a});
+
+-- | The target Reserved Instances configurations supplied as part of the
+-- modification request.
+rimrTargetConfiguration :: Lens' ReservedInstancesModificationResult (Maybe ReservedInstancesConfiguration)
+rimrTargetConfiguration = lens _rimrTargetConfiguration (\ s a -> s{_rimrTargetConfiguration = a});
+
+instance FromXML ReservedInstancesModificationResult
+         where
+        parseXML x
+          = ReservedInstancesModificationResult' <$>
+              (x .@? "reservedInstancesId") <*>
+                (x .@? "targetConfiguration")
+
+instance Hashable ReservedInstancesModificationResult
+
+-- | Describes a Reserved Instance offering.
+--
+-- /See:/ 'reservedInstancesOffering' smart constructor.
+data ReservedInstancesOffering = ReservedInstancesOffering'
+    { _rioMarketplace                 :: !(Maybe Bool)
+    , _rioCurrencyCode                :: !(Maybe CurrencyCodeValues)
+    , _rioProductDescription          :: !(Maybe RIProductDescription)
+    , _rioInstanceType                :: !(Maybe InstanceType)
+    , _rioAvailabilityZone            :: !(Maybe Text)
+    , _rioPricingDetails              :: !(Maybe [PricingDetail])
+    , _rioRecurringCharges            :: !(Maybe [RecurringCharge])
+    , _rioOfferingType                :: !(Maybe OfferingTypeValues)
+    , _rioUsagePrice                  :: !(Maybe Double)
+    , _rioFixedPrice                  :: !(Maybe Double)
+    , _rioInstanceTenancy             :: !(Maybe Tenancy)
+    , _rioReservedInstancesOfferingId :: !(Maybe Text)
+    , _rioDuration                    :: !(Maybe Integer)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReservedInstancesOffering' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rioMarketplace'
+--
+-- * 'rioCurrencyCode'
+--
+-- * 'rioProductDescription'
+--
+-- * 'rioInstanceType'
+--
+-- * 'rioAvailabilityZone'
+--
+-- * 'rioPricingDetails'
+--
+-- * 'rioRecurringCharges'
+--
+-- * 'rioOfferingType'
+--
+-- * 'rioUsagePrice'
+--
+-- * 'rioFixedPrice'
+--
+-- * 'rioInstanceTenancy'
+--
+-- * 'rioReservedInstancesOfferingId'
+--
+-- * 'rioDuration'
+reservedInstancesOffering
+    :: ReservedInstancesOffering
+reservedInstancesOffering =
+    ReservedInstancesOffering'
+    { _rioMarketplace = Nothing
+    , _rioCurrencyCode = Nothing
+    , _rioProductDescription = Nothing
+    , _rioInstanceType = Nothing
+    , _rioAvailabilityZone = Nothing
+    , _rioPricingDetails = Nothing
+    , _rioRecurringCharges = Nothing
+    , _rioOfferingType = Nothing
+    , _rioUsagePrice = Nothing
+    , _rioFixedPrice = Nothing
+    , _rioInstanceTenancy = Nothing
+    , _rioReservedInstancesOfferingId = Nothing
+    , _rioDuration = Nothing
+    }
+
+-- | Indicates whether the offering is available through the Reserved
+-- Instance Marketplace (resale) or AWS. If it\'s a Reserved Instance
+-- Marketplace offering, this is 'true'.
+rioMarketplace :: Lens' ReservedInstancesOffering (Maybe Bool)
+rioMarketplace = lens _rioMarketplace (\ s a -> s{_rioMarketplace = a});
+
+-- | The currency of the Reserved Instance offering you are purchasing. It\'s
+-- specified using ISO 4217 standard currency codes. At this time, the only
+-- supported currency is 'USD'.
+rioCurrencyCode :: Lens' ReservedInstancesOffering (Maybe CurrencyCodeValues)
+rioCurrencyCode = lens _rioCurrencyCode (\ s a -> s{_rioCurrencyCode = a});
+
+-- | The Reserved Instance product platform description.
+rioProductDescription :: Lens' ReservedInstancesOffering (Maybe RIProductDescription)
+rioProductDescription = lens _rioProductDescription (\ s a -> s{_rioProductDescription = a});
+
+-- | The instance type on which the Reserved Instance can be used.
+rioInstanceType :: Lens' ReservedInstancesOffering (Maybe InstanceType)
+rioInstanceType = lens _rioInstanceType (\ s a -> s{_rioInstanceType = a});
+
+-- | The Availability Zone in which the Reserved Instance can be used.
+rioAvailabilityZone :: Lens' ReservedInstancesOffering (Maybe Text)
+rioAvailabilityZone = lens _rioAvailabilityZone (\ s a -> s{_rioAvailabilityZone = a});
+
+-- | The pricing details of the Reserved Instance offering.
+rioPricingDetails :: Lens' ReservedInstancesOffering [PricingDetail]
+rioPricingDetails = lens _rioPricingDetails (\ s a -> s{_rioPricingDetails = a}) . _Default . _Coerce;
+
+-- | The recurring charge tag assigned to the resource.
+rioRecurringCharges :: Lens' ReservedInstancesOffering [RecurringCharge]
+rioRecurringCharges = lens _rioRecurringCharges (\ s a -> s{_rioRecurringCharges = a}) . _Default . _Coerce;
+
+-- | The Reserved Instance offering type.
+rioOfferingType :: Lens' ReservedInstancesOffering (Maybe OfferingTypeValues)
+rioOfferingType = lens _rioOfferingType (\ s a -> s{_rioOfferingType = a});
+
+-- | The usage price of the Reserved Instance, per hour.
+rioUsagePrice :: Lens' ReservedInstancesOffering (Maybe Double)
+rioUsagePrice = lens _rioUsagePrice (\ s a -> s{_rioUsagePrice = a});
+
+-- | The purchase price of the Reserved Instance.
+rioFixedPrice :: Lens' ReservedInstancesOffering (Maybe Double)
+rioFixedPrice = lens _rioFixedPrice (\ s a -> s{_rioFixedPrice = a});
+
+-- | The tenancy of the instance.
+rioInstanceTenancy :: Lens' ReservedInstancesOffering (Maybe Tenancy)
+rioInstanceTenancy = lens _rioInstanceTenancy (\ s a -> s{_rioInstanceTenancy = a});
+
+-- | The ID of the Reserved Instance offering.
+rioReservedInstancesOfferingId :: Lens' ReservedInstancesOffering (Maybe Text)
+rioReservedInstancesOfferingId = lens _rioReservedInstancesOfferingId (\ s a -> s{_rioReservedInstancesOfferingId = a});
+
+-- | The duration of the Reserved Instance, in seconds.
+rioDuration :: Lens' ReservedInstancesOffering (Maybe Integer)
+rioDuration = lens _rioDuration (\ s a -> s{_rioDuration = a});
+
+instance FromXML ReservedInstancesOffering where
+        parseXML x
+          = ReservedInstancesOffering' <$>
+              (x .@? "marketplace") <*> (x .@? "currencyCode") <*>
+                (x .@? "productDescription")
+                <*> (x .@? "instanceType")
+                <*> (x .@? "availabilityZone")
+                <*>
+                (x .@? "pricingDetailsSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "recurringCharges" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "offeringType")
+                <*> (x .@? "usagePrice")
+                <*> (x .@? "fixedPrice")
+                <*> (x .@? "instanceTenancy")
+                <*> (x .@? "reservedInstancesOfferingId")
+                <*> (x .@? "duration")
+
+instance Hashable ReservedInstancesOffering
+
+-- | Describes a route in a route table.
+--
+-- /See:/ 'route' smart constructor.
+data Route = Route'
+    { _rVPCPeeringConnectionId  :: !(Maybe Text)
+    , _rInstanceId              :: !(Maybe Text)
+    , _rOrigin                  :: !(Maybe RouteOrigin)
+    , _rState                   :: !(Maybe RouteState)
+    , _rNatGatewayId            :: !(Maybe Text)
+    , _rNetworkInterfaceId      :: !(Maybe Text)
+    , _rGatewayId               :: !(Maybe Text)
+    , _rInstanceOwnerId         :: !(Maybe Text)
+    , _rDestinationPrefixListId :: !(Maybe Text)
+    , _rDestinationCIdRBlock    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Route' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rVPCPeeringConnectionId'
+--
+-- * 'rInstanceId'
+--
+-- * 'rOrigin'
+--
+-- * 'rState'
+--
+-- * 'rNatGatewayId'
+--
+-- * 'rNetworkInterfaceId'
+--
+-- * 'rGatewayId'
+--
+-- * 'rInstanceOwnerId'
+--
+-- * 'rDestinationPrefixListId'
+--
+-- * 'rDestinationCIdRBlock'
+route
+    :: Route
+route =
+    Route'
+    { _rVPCPeeringConnectionId = Nothing
+    , _rInstanceId = Nothing
+    , _rOrigin = Nothing
+    , _rState = Nothing
+    , _rNatGatewayId = Nothing
+    , _rNetworkInterfaceId = Nothing
+    , _rGatewayId = Nothing
+    , _rInstanceOwnerId = Nothing
+    , _rDestinationPrefixListId = Nothing
+    , _rDestinationCIdRBlock = Nothing
+    }
+
+-- | The ID of the VPC peering connection.
+rVPCPeeringConnectionId :: Lens' Route (Maybe Text)
+rVPCPeeringConnectionId = lens _rVPCPeeringConnectionId (\ s a -> s{_rVPCPeeringConnectionId = a});
+
+-- | The ID of a NAT instance in your VPC.
+rInstanceId :: Lens' Route (Maybe Text)
+rInstanceId = lens _rInstanceId (\ s a -> s{_rInstanceId = a});
+
+-- | Describes how the route was created.
+--
+-- -   'CreateRouteTable' indicates that route was automatically created
+--     when the route table was created.
+-- -   'CreateRoute' indicates that the route was manually added to the
+--     route table.
+-- -   'EnableVgwRoutePropagation' indicates that the route was propagated
+--     by route propagation.
+rOrigin :: Lens' Route (Maybe RouteOrigin)
+rOrigin = lens _rOrigin (\ s a -> s{_rOrigin = a});
+
+-- | The state of the route. The 'blackhole' state indicates that the
+-- route\'s target isn\'t available (for example, the specified gateway
+-- isn\'t attached to the VPC, or the specified NAT instance has been
+-- terminated).
+rState :: Lens' Route (Maybe RouteState)
+rState = lens _rState (\ s a -> s{_rState = a});
+
+-- | The ID of a NAT gateway.
+rNatGatewayId :: Lens' Route (Maybe Text)
+rNatGatewayId = lens _rNatGatewayId (\ s a -> s{_rNatGatewayId = a});
+
+-- | The ID of the network interface.
+rNetworkInterfaceId :: Lens' Route (Maybe Text)
+rNetworkInterfaceId = lens _rNetworkInterfaceId (\ s a -> s{_rNetworkInterfaceId = a});
+
+-- | The ID of a gateway attached to your VPC.
+rGatewayId :: Lens' Route (Maybe Text)
+rGatewayId = lens _rGatewayId (\ s a -> s{_rGatewayId = a});
+
+-- | The AWS account ID of the owner of the instance.
+rInstanceOwnerId :: Lens' Route (Maybe Text)
+rInstanceOwnerId = lens _rInstanceOwnerId (\ s a -> s{_rInstanceOwnerId = a});
+
+-- | The prefix of the AWS service.
+rDestinationPrefixListId :: Lens' Route (Maybe Text)
+rDestinationPrefixListId = lens _rDestinationPrefixListId (\ s a -> s{_rDestinationPrefixListId = a});
+
+-- | The CIDR block used for the destination match.
+rDestinationCIdRBlock :: Lens' Route (Maybe Text)
+rDestinationCIdRBlock = lens _rDestinationCIdRBlock (\ s a -> s{_rDestinationCIdRBlock = a});
+
+instance FromXML Route where
+        parseXML x
+          = Route' <$>
+              (x .@? "vpcPeeringConnectionId") <*>
+                (x .@? "instanceId")
+                <*> (x .@? "origin")
+                <*> (x .@? "state")
+                <*> (x .@? "natGatewayId")
+                <*> (x .@? "networkInterfaceId")
+                <*> (x .@? "gatewayId")
+                <*> (x .@? "instanceOwnerId")
+                <*> (x .@? "destinationPrefixListId")
+                <*> (x .@? "destinationCidrBlock")
+
+instance Hashable Route
+
+-- | Describes a route table.
+--
+-- /See:/ 'routeTable' smart constructor.
+data RouteTable = RouteTable'
+    { _rtRouteTableId    :: !(Maybe Text)
+    , _rtRoutes          :: !(Maybe [Route])
+    , _rtVPCId           :: !(Maybe Text)
+    , _rtPropagatingVGWs :: !(Maybe [PropagatingVGW])
+    , _rtAssociations    :: !(Maybe [RouteTableAssociation])
+    , _rtTags            :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RouteTable' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtRouteTableId'
+--
+-- * 'rtRoutes'
+--
+-- * 'rtVPCId'
+--
+-- * 'rtPropagatingVGWs'
+--
+-- * 'rtAssociations'
+--
+-- * 'rtTags'
+routeTable
+    :: RouteTable
+routeTable =
+    RouteTable'
+    { _rtRouteTableId = Nothing
+    , _rtRoutes = Nothing
+    , _rtVPCId = Nothing
+    , _rtPropagatingVGWs = Nothing
+    , _rtAssociations = Nothing
+    , _rtTags = Nothing
+    }
+
+-- | The ID of the route table.
+rtRouteTableId :: Lens' RouteTable (Maybe Text)
+rtRouteTableId = lens _rtRouteTableId (\ s a -> s{_rtRouteTableId = a});
+
+-- | The routes in the route table.
+rtRoutes :: Lens' RouteTable [Route]
+rtRoutes = lens _rtRoutes (\ s a -> s{_rtRoutes = a}) . _Default . _Coerce;
+
+-- | The ID of the VPC.
+rtVPCId :: Lens' RouteTable (Maybe Text)
+rtVPCId = lens _rtVPCId (\ s a -> s{_rtVPCId = a});
+
+-- | Any virtual private gateway (VGW) propagating routes.
+rtPropagatingVGWs :: Lens' RouteTable [PropagatingVGW]
+rtPropagatingVGWs = lens _rtPropagatingVGWs (\ s a -> s{_rtPropagatingVGWs = a}) . _Default . _Coerce;
+
+-- | The associations between the route table and one or more subnets.
+rtAssociations :: Lens' RouteTable [RouteTableAssociation]
+rtAssociations = lens _rtAssociations (\ s a -> s{_rtAssociations = a}) . _Default . _Coerce;
+
+-- | Any tags assigned to the route table.
+rtTags :: Lens' RouteTable [Tag]
+rtTags = lens _rtTags (\ s a -> s{_rtTags = a}) . _Default . _Coerce;
+
+instance FromXML RouteTable where
+        parseXML x
+          = RouteTable' <$>
+              (x .@? "routeTableId") <*>
+                (x .@? "routeSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "vpcId")
+                <*>
+                (x .@? "propagatingVgwSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "associationSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable RouteTable
+
+-- | Describes an association between a route table and a subnet.
+--
+-- /See:/ 'routeTableAssociation' smart constructor.
+data RouteTableAssociation = RouteTableAssociation'
+    { _rtaRouteTableId            :: !(Maybe Text)
+    , _rtaRouteTableAssociationId :: !(Maybe Text)
+    , _rtaMain                    :: !(Maybe Bool)
+    , _rtaSubnetId                :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RouteTableAssociation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtaRouteTableId'
+--
+-- * 'rtaRouteTableAssociationId'
+--
+-- * 'rtaMain'
+--
+-- * 'rtaSubnetId'
+routeTableAssociation
+    :: RouteTableAssociation
+routeTableAssociation =
+    RouteTableAssociation'
+    { _rtaRouteTableId = Nothing
+    , _rtaRouteTableAssociationId = Nothing
+    , _rtaMain = Nothing
+    , _rtaSubnetId = Nothing
+    }
+
+-- | The ID of the route table.
+rtaRouteTableId :: Lens' RouteTableAssociation (Maybe Text)
+rtaRouteTableId = lens _rtaRouteTableId (\ s a -> s{_rtaRouteTableId = a});
+
+-- | The ID of the association between a route table and a subnet.
+rtaRouteTableAssociationId :: Lens' RouteTableAssociation (Maybe Text)
+rtaRouteTableAssociationId = lens _rtaRouteTableAssociationId (\ s a -> s{_rtaRouteTableAssociationId = a});
+
+-- | Indicates whether this is the main route table.
+rtaMain :: Lens' RouteTableAssociation (Maybe Bool)
+rtaMain = lens _rtaMain (\ s a -> s{_rtaMain = a});
+
+-- | The ID of the subnet. A subnet ID is not returned for an implicit
+-- association.
+rtaSubnetId :: Lens' RouteTableAssociation (Maybe Text)
+rtaSubnetId = lens _rtaSubnetId (\ s a -> s{_rtaSubnetId = a});
+
+instance FromXML RouteTableAssociation where
+        parseXML x
+          = RouteTableAssociation' <$>
+              (x .@? "routeTableId") <*>
+                (x .@? "routeTableAssociationId")
+                <*> (x .@? "main")
+                <*> (x .@? "subnetId")
+
+instance Hashable RouteTableAssociation
+
+-- | Describes the monitoring for the instance.
+--
+-- /See:/ 'runInstancesMonitoringEnabled' smart constructor.
+newtype RunInstancesMonitoringEnabled = RunInstancesMonitoringEnabled'
+    { _rimeEnabled :: Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RunInstancesMonitoringEnabled' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rimeEnabled'
+runInstancesMonitoringEnabled
+    :: Bool -- ^ 'rimeEnabled'
+    -> RunInstancesMonitoringEnabled
+runInstancesMonitoringEnabled pEnabled_ =
+    RunInstancesMonitoringEnabled'
+    { _rimeEnabled = pEnabled_
+    }
+
+-- | Indicates whether monitoring is enabled for the instance.
+rimeEnabled :: Lens' RunInstancesMonitoringEnabled Bool
+rimeEnabled = lens _rimeEnabled (\ s a -> s{_rimeEnabled = a});
+
+instance FromXML RunInstancesMonitoringEnabled where
+        parseXML x
+          = RunInstancesMonitoringEnabled' <$> (x .@ "enabled")
+
+instance Hashable RunInstancesMonitoringEnabled
+
+instance ToQuery RunInstancesMonitoringEnabled where
+        toQuery RunInstancesMonitoringEnabled'{..}
+          = mconcat ["Enabled" =: _rimeEnabled]
+
+-- | Describes the storage parameters for S3 and S3 buckets for an instance
+-- store-backed AMI.
+--
+-- /See:/ 's3Storage' smart constructor.
+data S3Storage = S3Storage'
+    { _ssPrefix                :: !(Maybe Text)
+    , _ssUploadPolicy          :: !(Maybe Base64)
+    , _ssBucket                :: !(Maybe Text)
+    , _ssUploadPolicySignature :: !(Maybe Text)
+    , _ssAWSAccessKeyId        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'S3Storage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ssPrefix'
+--
+-- * 'ssUploadPolicy'
+--
+-- * 'ssBucket'
+--
+-- * 'ssUploadPolicySignature'
+--
+-- * 'ssAWSAccessKeyId'
+s3Storage
+    :: S3Storage
+s3Storage =
+    S3Storage'
+    { _ssPrefix = Nothing
+    , _ssUploadPolicy = Nothing
+    , _ssBucket = Nothing
+    , _ssUploadPolicySignature = Nothing
+    , _ssAWSAccessKeyId = Nothing
+    }
+
+-- | The beginning of the file name of the AMI.
+ssPrefix :: Lens' S3Storage (Maybe Text)
+ssPrefix = lens _ssPrefix (\ s a -> s{_ssPrefix = a});
+
+-- | A Base64-encoded Amazon S3 upload policy that gives Amazon EC2
+-- permission to upload items into Amazon S3 on your behalf.
+--
+-- /Note:/ This 'Lens' automatically encodes and decodes Base64 data,
+-- despite what the AWS documentation might say.
+-- The underlying isomorphism will encode to Base64 representation during
+-- serialisation, and decode from Base64 representation during deserialisation.
+-- This 'Lens' accepts and returns only raw unencoded data.
+ssUploadPolicy :: Lens' S3Storage (Maybe ByteString)
+ssUploadPolicy = lens _ssUploadPolicy (\ s a -> s{_ssUploadPolicy = a}) . mapping _Base64;
+
+-- | The bucket in which to store the AMI. You can specify a bucket that you
+-- already own or a new bucket that Amazon EC2 creates on your behalf. If
+-- you specify a bucket that belongs to someone else, Amazon EC2 returns an
+-- error.
+ssBucket :: Lens' S3Storage (Maybe Text)
+ssBucket = lens _ssBucket (\ s a -> s{_ssBucket = a});
+
+-- | The signature of the Base64 encoded JSON document.
+ssUploadPolicySignature :: Lens' S3Storage (Maybe Text)
+ssUploadPolicySignature = lens _ssUploadPolicySignature (\ s a -> s{_ssUploadPolicySignature = a});
+
+-- | The access key ID of the owner of the bucket. Before you specify a value
+-- for your access key ID, review and follow the guidance in
+-- <http://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html Best Practices for Managing AWS Access Keys>.
+ssAWSAccessKeyId :: Lens' S3Storage (Maybe Text)
+ssAWSAccessKeyId = lens _ssAWSAccessKeyId (\ s a -> s{_ssAWSAccessKeyId = a});
+
+instance FromXML S3Storage where
+        parseXML x
+          = S3Storage' <$>
+              (x .@? "prefix") <*> (x .@? "uploadPolicy") <*>
+                (x .@? "bucket")
+                <*> (x .@? "uploadPolicySignature")
+                <*> (x .@? "AWSAccessKeyId")
+
+instance Hashable S3Storage
+
+instance ToQuery S3Storage where
+        toQuery S3Storage'{..}
+          = mconcat
+              ["Prefix" =: _ssPrefix,
+               "UploadPolicy" =: _ssUploadPolicy,
+               "Bucket" =: _ssBucket,
+               "UploadPolicySignature" =: _ssUploadPolicySignature,
+               "AWSAccessKeyId" =: _ssAWSAccessKeyId]
+
+-- | Describes a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstance' smart constructor.
+data ScheduledInstance = ScheduledInstance'
+    { _siPreviousSlotEndTime         :: !(Maybe ISO8601)
+    , _siPlatform                    :: !(Maybe Text)
+    , _siTermStartDate               :: !(Maybe ISO8601)
+    , _siInstanceCount               :: !(Maybe Int)
+    , _siScheduledInstanceId         :: !(Maybe Text)
+    , _siHourlyPrice                 :: !(Maybe Text)
+    , _siCreateDate                  :: !(Maybe ISO8601)
+    , _siSlotDurationInHours         :: !(Maybe Int)
+    , _siTotalScheduledInstanceHours :: !(Maybe Int)
+    , _siInstanceType                :: !(Maybe Text)
+    , _siRecurrence                  :: !(Maybe ScheduledInstanceRecurrence)
+    , _siAvailabilityZone            :: !(Maybe Text)
+    , _siTermEndDate                 :: !(Maybe ISO8601)
+    , _siNextSlotStartTime           :: !(Maybe ISO8601)
+    , _siNetworkPlatform             :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siPreviousSlotEndTime'
+--
+-- * 'siPlatform'
+--
+-- * 'siTermStartDate'
+--
+-- * 'siInstanceCount'
+--
+-- * 'siScheduledInstanceId'
+--
+-- * 'siHourlyPrice'
+--
+-- * 'siCreateDate'
+--
+-- * 'siSlotDurationInHours'
+--
+-- * 'siTotalScheduledInstanceHours'
+--
+-- * 'siInstanceType'
+--
+-- * 'siRecurrence'
+--
+-- * 'siAvailabilityZone'
+--
+-- * 'siTermEndDate'
+--
+-- * 'siNextSlotStartTime'
+--
+-- * 'siNetworkPlatform'
+scheduledInstance
+    :: ScheduledInstance
+scheduledInstance =
+    ScheduledInstance'
+    { _siPreviousSlotEndTime = Nothing
+    , _siPlatform = Nothing
+    , _siTermStartDate = Nothing
+    , _siInstanceCount = Nothing
+    , _siScheduledInstanceId = Nothing
+    , _siHourlyPrice = Nothing
+    , _siCreateDate = Nothing
+    , _siSlotDurationInHours = Nothing
+    , _siTotalScheduledInstanceHours = Nothing
+    , _siInstanceType = Nothing
+    , _siRecurrence = Nothing
+    , _siAvailabilityZone = Nothing
+    , _siTermEndDate = Nothing
+    , _siNextSlotStartTime = Nothing
+    , _siNetworkPlatform = Nothing
+    }
+
+-- | The time that the previous schedule ended or will end.
+siPreviousSlotEndTime :: Lens' ScheduledInstance (Maybe UTCTime)
+siPreviousSlotEndTime = lens _siPreviousSlotEndTime (\ s a -> s{_siPreviousSlotEndTime = a}) . mapping _Time;
+
+-- | The platform ('Linux\/UNIX' or 'Windows').
+siPlatform :: Lens' ScheduledInstance (Maybe Text)
+siPlatform = lens _siPlatform (\ s a -> s{_siPlatform = a});
+
+-- | The start date for the Scheduled Instance.
+siTermStartDate :: Lens' ScheduledInstance (Maybe UTCTime)
+siTermStartDate = lens _siTermStartDate (\ s a -> s{_siTermStartDate = a}) . mapping _Time;
+
+-- | The number of instances.
+siInstanceCount :: Lens' ScheduledInstance (Maybe Int)
+siInstanceCount = lens _siInstanceCount (\ s a -> s{_siInstanceCount = a});
+
+-- | The Scheduled Instance ID.
+siScheduledInstanceId :: Lens' ScheduledInstance (Maybe Text)
+siScheduledInstanceId = lens _siScheduledInstanceId (\ s a -> s{_siScheduledInstanceId = a});
+
+-- | The hourly price for a single instance.
+siHourlyPrice :: Lens' ScheduledInstance (Maybe Text)
+siHourlyPrice = lens _siHourlyPrice (\ s a -> s{_siHourlyPrice = a});
+
+-- | The date when the Scheduled Instance was purchased.
+siCreateDate :: Lens' ScheduledInstance (Maybe UTCTime)
+siCreateDate = lens _siCreateDate (\ s a -> s{_siCreateDate = a}) . mapping _Time;
+
+-- | The number of hours in the schedule.
+siSlotDurationInHours :: Lens' ScheduledInstance (Maybe Int)
+siSlotDurationInHours = lens _siSlotDurationInHours (\ s a -> s{_siSlotDurationInHours = a});
+
+-- | The total number of hours for a single instance for the entire term.
+siTotalScheduledInstanceHours :: Lens' ScheduledInstance (Maybe Int)
+siTotalScheduledInstanceHours = lens _siTotalScheduledInstanceHours (\ s a -> s{_siTotalScheduledInstanceHours = a});
+
+-- | The instance type.
+siInstanceType :: Lens' ScheduledInstance (Maybe Text)
+siInstanceType = lens _siInstanceType (\ s a -> s{_siInstanceType = a});
+
+-- | The schedule recurrence.
+siRecurrence :: Lens' ScheduledInstance (Maybe ScheduledInstanceRecurrence)
+siRecurrence = lens _siRecurrence (\ s a -> s{_siRecurrence = a});
+
+-- | The Availability Zone.
+siAvailabilityZone :: Lens' ScheduledInstance (Maybe Text)
+siAvailabilityZone = lens _siAvailabilityZone (\ s a -> s{_siAvailabilityZone = a});
+
+-- | The end date for the Scheduled Instance.
+siTermEndDate :: Lens' ScheduledInstance (Maybe UTCTime)
+siTermEndDate = lens _siTermEndDate (\ s a -> s{_siTermEndDate = a}) . mapping _Time;
+
+-- | The time for the next schedule to start.
+siNextSlotStartTime :: Lens' ScheduledInstance (Maybe UTCTime)
+siNextSlotStartTime = lens _siNextSlotStartTime (\ s a -> s{_siNextSlotStartTime = a}) . mapping _Time;
+
+-- | The network platform ('EC2-Classic' or 'EC2-VPC').
+siNetworkPlatform :: Lens' ScheduledInstance (Maybe Text)
+siNetworkPlatform = lens _siNetworkPlatform (\ s a -> s{_siNetworkPlatform = a});
+
+instance FromXML ScheduledInstance where
+        parseXML x
+          = ScheduledInstance' <$>
+              (x .@? "previousSlotEndTime") <*> (x .@? "platform")
+                <*> (x .@? "termStartDate")
+                <*> (x .@? "instanceCount")
+                <*> (x .@? "scheduledInstanceId")
+                <*> (x .@? "hourlyPrice")
+                <*> (x .@? "createDate")
+                <*> (x .@? "slotDurationInHours")
+                <*> (x .@? "totalScheduledInstanceHours")
+                <*> (x .@? "instanceType")
+                <*> (x .@? "recurrence")
+                <*> (x .@? "availabilityZone")
+                <*> (x .@? "termEndDate")
+                <*> (x .@? "nextSlotStartTime")
+                <*> (x .@? "networkPlatform")
+
+instance Hashable ScheduledInstance
+
+-- | Describes a schedule that is available for your Scheduled Instances.
+--
+-- /See:/ 'scheduledInstanceAvailability' smart constructor.
+data ScheduledInstanceAvailability = ScheduledInstanceAvailability'
+    { _siaMaxTermDurationInDays       :: !(Maybe Int)
+    , _siaPlatform                    :: !(Maybe Text)
+    , _siaPurchaseToken               :: !(Maybe Text)
+    , _siaHourlyPrice                 :: !(Maybe Text)
+    , _siaAvailableInstanceCount      :: !(Maybe Int)
+    , _siaSlotDurationInHours         :: !(Maybe Int)
+    , _siaTotalScheduledInstanceHours :: !(Maybe Int)
+    , _siaInstanceType                :: !(Maybe Text)
+    , _siaRecurrence                  :: !(Maybe ScheduledInstanceRecurrence)
+    , _siaAvailabilityZone            :: !(Maybe Text)
+    , _siaMinTermDurationInDays       :: !(Maybe Int)
+    , _siaFirstSlotStartTime          :: !(Maybe ISO8601)
+    , _siaNetworkPlatform             :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstanceAvailability' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siaMaxTermDurationInDays'
+--
+-- * 'siaPlatform'
+--
+-- * 'siaPurchaseToken'
+--
+-- * 'siaHourlyPrice'
+--
+-- * 'siaAvailableInstanceCount'
+--
+-- * 'siaSlotDurationInHours'
+--
+-- * 'siaTotalScheduledInstanceHours'
+--
+-- * 'siaInstanceType'
+--
+-- * 'siaRecurrence'
+--
+-- * 'siaAvailabilityZone'
+--
+-- * 'siaMinTermDurationInDays'
+--
+-- * 'siaFirstSlotStartTime'
+--
+-- * 'siaNetworkPlatform'
+scheduledInstanceAvailability
+    :: ScheduledInstanceAvailability
+scheduledInstanceAvailability =
+    ScheduledInstanceAvailability'
+    { _siaMaxTermDurationInDays = Nothing
+    , _siaPlatform = Nothing
+    , _siaPurchaseToken = Nothing
+    , _siaHourlyPrice = Nothing
+    , _siaAvailableInstanceCount = Nothing
+    , _siaSlotDurationInHours = Nothing
+    , _siaTotalScheduledInstanceHours = Nothing
+    , _siaInstanceType = Nothing
+    , _siaRecurrence = Nothing
+    , _siaAvailabilityZone = Nothing
+    , _siaMinTermDurationInDays = Nothing
+    , _siaFirstSlotStartTime = Nothing
+    , _siaNetworkPlatform = Nothing
+    }
+
+-- | The maximum term. The only possible value is 365 days.
+siaMaxTermDurationInDays :: Lens' ScheduledInstanceAvailability (Maybe Int)
+siaMaxTermDurationInDays = lens _siaMaxTermDurationInDays (\ s a -> s{_siaMaxTermDurationInDays = a});
+
+-- | The platform ('Linux\/UNIX' or 'Windows').
+siaPlatform :: Lens' ScheduledInstanceAvailability (Maybe Text)
+siaPlatform = lens _siaPlatform (\ s a -> s{_siaPlatform = a});
+
+-- | The purchase token. This token expires in two hours.
+siaPurchaseToken :: Lens' ScheduledInstanceAvailability (Maybe Text)
+siaPurchaseToken = lens _siaPurchaseToken (\ s a -> s{_siaPurchaseToken = a});
+
+-- | The hourly price for a single instance.
+siaHourlyPrice :: Lens' ScheduledInstanceAvailability (Maybe Text)
+siaHourlyPrice = lens _siaHourlyPrice (\ s a -> s{_siaHourlyPrice = a});
+
+-- | The number of available instances.
+siaAvailableInstanceCount :: Lens' ScheduledInstanceAvailability (Maybe Int)
+siaAvailableInstanceCount = lens _siaAvailableInstanceCount (\ s a -> s{_siaAvailableInstanceCount = a});
+
+-- | The number of hours in the schedule.
+siaSlotDurationInHours :: Lens' ScheduledInstanceAvailability (Maybe Int)
+siaSlotDurationInHours = lens _siaSlotDurationInHours (\ s a -> s{_siaSlotDurationInHours = a});
+
+-- | The total number of hours for a single instance for the entire term.
+siaTotalScheduledInstanceHours :: Lens' ScheduledInstanceAvailability (Maybe Int)
+siaTotalScheduledInstanceHours = lens _siaTotalScheduledInstanceHours (\ s a -> s{_siaTotalScheduledInstanceHours = a});
+
+-- | The instance type. You can specify one of the C3, C4, M4, or R3 instance
+-- types.
+siaInstanceType :: Lens' ScheduledInstanceAvailability (Maybe Text)
+siaInstanceType = lens _siaInstanceType (\ s a -> s{_siaInstanceType = a});
+
+-- | The schedule recurrence.
+siaRecurrence :: Lens' ScheduledInstanceAvailability (Maybe ScheduledInstanceRecurrence)
+siaRecurrence = lens _siaRecurrence (\ s a -> s{_siaRecurrence = a});
+
+-- | The Availability Zone.
+siaAvailabilityZone :: Lens' ScheduledInstanceAvailability (Maybe Text)
+siaAvailabilityZone = lens _siaAvailabilityZone (\ s a -> s{_siaAvailabilityZone = a});
+
+-- | The minimum term. The only possible value is 365 days.
+siaMinTermDurationInDays :: Lens' ScheduledInstanceAvailability (Maybe Int)
+siaMinTermDurationInDays = lens _siaMinTermDurationInDays (\ s a -> s{_siaMinTermDurationInDays = a});
+
+-- | The time period for the first schedule to start.
+siaFirstSlotStartTime :: Lens' ScheduledInstanceAvailability (Maybe UTCTime)
+siaFirstSlotStartTime = lens _siaFirstSlotStartTime (\ s a -> s{_siaFirstSlotStartTime = a}) . mapping _Time;
+
+-- | The network platform ('EC2-Classic' or 'EC2-VPC').
+siaNetworkPlatform :: Lens' ScheduledInstanceAvailability (Maybe Text)
+siaNetworkPlatform = lens _siaNetworkPlatform (\ s a -> s{_siaNetworkPlatform = a});
+
+instance FromXML ScheduledInstanceAvailability where
+        parseXML x
+          = ScheduledInstanceAvailability' <$>
+              (x .@? "maxTermDurationInDays") <*>
+                (x .@? "platform")
+                <*> (x .@? "purchaseToken")
+                <*> (x .@? "hourlyPrice")
+                <*> (x .@? "availableInstanceCount")
+                <*> (x .@? "slotDurationInHours")
+                <*> (x .@? "totalScheduledInstanceHours")
+                <*> (x .@? "instanceType")
+                <*> (x .@? "recurrence")
+                <*> (x .@? "availabilityZone")
+                <*> (x .@? "minTermDurationInDays")
+                <*> (x .@? "firstSlotStartTime")
+                <*> (x .@? "networkPlatform")
+
+instance Hashable ScheduledInstanceAvailability
+
+-- | Describes the recurring schedule for a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstanceRecurrence' smart constructor.
+data ScheduledInstanceRecurrence = ScheduledInstanceRecurrence'
+    { _sirFrequency               :: !(Maybe Text)
+    , _sirOccurrenceRelativeToEnd :: !(Maybe Bool)
+    , _sirOccurrenceUnit          :: !(Maybe Text)
+    , _sirInterval                :: !(Maybe Int)
+    , _sirOccurrenceDaySet        :: !(Maybe [Int])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstanceRecurrence' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sirFrequency'
+--
+-- * 'sirOccurrenceRelativeToEnd'
+--
+-- * 'sirOccurrenceUnit'
+--
+-- * 'sirInterval'
+--
+-- * 'sirOccurrenceDaySet'
+scheduledInstanceRecurrence
+    :: ScheduledInstanceRecurrence
+scheduledInstanceRecurrence =
+    ScheduledInstanceRecurrence'
+    { _sirFrequency = Nothing
+    , _sirOccurrenceRelativeToEnd = Nothing
+    , _sirOccurrenceUnit = Nothing
+    , _sirInterval = Nothing
+    , _sirOccurrenceDaySet = Nothing
+    }
+
+-- | The frequency ('Daily', 'Weekly', or 'Monthly').
+sirFrequency :: Lens' ScheduledInstanceRecurrence (Maybe Text)
+sirFrequency = lens _sirFrequency (\ s a -> s{_sirFrequency = a});
+
+-- | Indicates whether the occurrence is relative to the end of the specified
+-- week or month.
+sirOccurrenceRelativeToEnd :: Lens' ScheduledInstanceRecurrence (Maybe Bool)
+sirOccurrenceRelativeToEnd = lens _sirOccurrenceRelativeToEnd (\ s a -> s{_sirOccurrenceRelativeToEnd = a});
+
+-- | The unit for 'occurrenceDaySet' ('DayOfWeek' or 'DayOfMonth').
+sirOccurrenceUnit :: Lens' ScheduledInstanceRecurrence (Maybe Text)
+sirOccurrenceUnit = lens _sirOccurrenceUnit (\ s a -> s{_sirOccurrenceUnit = a});
+
+-- | The interval quantity. The interval unit depends on the value of
+-- 'frequency'. For example, every 2 weeks or every 2 months.
+sirInterval :: Lens' ScheduledInstanceRecurrence (Maybe Int)
+sirInterval = lens _sirInterval (\ s a -> s{_sirInterval = a});
+
+-- | The days. For a monthly schedule, this is one or more days of the month
+-- (1-31). For a weekly schedule, this is one or more days of the week
+-- (1-7, where 1 is Sunday).
+sirOccurrenceDaySet :: Lens' ScheduledInstanceRecurrence [Int]
+sirOccurrenceDaySet = lens _sirOccurrenceDaySet (\ s a -> s{_sirOccurrenceDaySet = a}) . _Default . _Coerce;
+
+instance FromXML ScheduledInstanceRecurrence where
+        parseXML x
+          = ScheduledInstanceRecurrence' <$>
+              (x .@? "frequency") <*>
+                (x .@? "occurrenceRelativeToEnd")
+                <*> (x .@? "occurrenceUnit")
+                <*> (x .@? "interval")
+                <*>
+                (x .@? "occurrenceDaySet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable ScheduledInstanceRecurrence
+
+-- | Describes the recurring schedule for a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstanceRecurrenceRequest' smart constructor.
+data ScheduledInstanceRecurrenceRequest = ScheduledInstanceRecurrenceRequest'
+    { _sirrFrequency               :: !(Maybe Text)
+    , _sirrOccurrenceRelativeToEnd :: !(Maybe Bool)
+    , _sirrOccurrenceDays          :: !(Maybe [Int])
+    , _sirrOccurrenceUnit          :: !(Maybe Text)
+    , _sirrInterval                :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstanceRecurrenceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sirrFrequency'
+--
+-- * 'sirrOccurrenceRelativeToEnd'
+--
+-- * 'sirrOccurrenceDays'
+--
+-- * 'sirrOccurrenceUnit'
+--
+-- * 'sirrInterval'
+scheduledInstanceRecurrenceRequest
+    :: ScheduledInstanceRecurrenceRequest
+scheduledInstanceRecurrenceRequest =
+    ScheduledInstanceRecurrenceRequest'
+    { _sirrFrequency = Nothing
+    , _sirrOccurrenceRelativeToEnd = Nothing
+    , _sirrOccurrenceDays = Nothing
+    , _sirrOccurrenceUnit = Nothing
+    , _sirrInterval = Nothing
+    }
+
+-- | The frequency ('Daily', 'Weekly', or 'Monthly').
+sirrFrequency :: Lens' ScheduledInstanceRecurrenceRequest (Maybe Text)
+sirrFrequency = lens _sirrFrequency (\ s a -> s{_sirrFrequency = a});
+
+-- | Indicates whether the occurrence is relative to the end of the specified
+-- week or month. You can\'t specify this value with a daily schedule.
+sirrOccurrenceRelativeToEnd :: Lens' ScheduledInstanceRecurrenceRequest (Maybe Bool)
+sirrOccurrenceRelativeToEnd = lens _sirrOccurrenceRelativeToEnd (\ s a -> s{_sirrOccurrenceRelativeToEnd = a});
+
+-- | The days. For a monthly schedule, this is one or more days of the month
+-- (1-31). For a weekly schedule, this is one or more days of the week
+-- (1-7, where 1 is Sunday). You can\'t specify this value with a daily
+-- schedule. If the occurrence is relative to the end of the month, you can
+-- specify only a single day.
+sirrOccurrenceDays :: Lens' ScheduledInstanceRecurrenceRequest [Int]
+sirrOccurrenceDays = lens _sirrOccurrenceDays (\ s a -> s{_sirrOccurrenceDays = a}) . _Default . _Coerce;
+
+-- | The unit for 'OccurrenceDays' ('DayOfWeek' or 'DayOfMonth'). This value
+-- is required for a monthly schedule. You can\'t specify 'DayOfWeek' with
+-- a weekly schedule. You can\'t specify this value with a daily schedule.
+sirrOccurrenceUnit :: Lens' ScheduledInstanceRecurrenceRequest (Maybe Text)
+sirrOccurrenceUnit = lens _sirrOccurrenceUnit (\ s a -> s{_sirrOccurrenceUnit = a});
+
+-- | The interval quantity. The interval unit depends on the value of
+-- 'Frequency'. For example, every 2 weeks or every 2 months.
+sirrInterval :: Lens' ScheduledInstanceRecurrenceRequest (Maybe Int)
+sirrInterval = lens _sirrInterval (\ s a -> s{_sirrInterval = a});
+
+instance Hashable ScheduledInstanceRecurrenceRequest
+
+instance ToQuery ScheduledInstanceRecurrenceRequest
+         where
+        toQuery ScheduledInstanceRecurrenceRequest'{..}
+          = mconcat
+              ["Frequency" =: _sirrFrequency,
+               "OccurrenceRelativeToEnd" =:
+                 _sirrOccurrenceRelativeToEnd,
+               toQuery
+                 (toQueryList "OccurrenceDay" <$>
+                    _sirrOccurrenceDays),
+               "OccurrenceUnit" =: _sirrOccurrenceUnit,
+               "Interval" =: _sirrInterval]
+
+-- | Describes a block device mapping for a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstancesBlockDeviceMapping' smart constructor.
+data ScheduledInstancesBlockDeviceMapping = ScheduledInstancesBlockDeviceMapping'
+    { _sibdmVirtualName :: !(Maybe Text)
+    , _sibdmNoDevice    :: !(Maybe Text)
+    , _sibdmEBS         :: !(Maybe ScheduledInstancesEBS)
+    , _sibdmDeviceName  :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstancesBlockDeviceMapping' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sibdmVirtualName'
+--
+-- * 'sibdmNoDevice'
+--
+-- * 'sibdmEBS'
+--
+-- * 'sibdmDeviceName'
+scheduledInstancesBlockDeviceMapping
+    :: ScheduledInstancesBlockDeviceMapping
+scheduledInstancesBlockDeviceMapping =
+    ScheduledInstancesBlockDeviceMapping'
+    { _sibdmVirtualName = Nothing
+    , _sibdmNoDevice = Nothing
+    , _sibdmEBS = Nothing
+    , _sibdmDeviceName = Nothing
+    }
+
+-- | The virtual device name ('ephemeral'N). Instance store volumes are
+-- numbered starting from 0. An instance type with two available instance
+-- store volumes can specify mappings for 'ephemeral0' and 'ephemeral1'.The
+-- number of available instance store volumes depends on the instance type.
+-- After you connect to the instance, you must mount the volume.
+--
+-- Constraints: For M3 instances, you must specify instance store volumes
+-- in the block device mapping for the instance. When you launch an M3
+-- instance, we ignore any instance store volumes specified in the block
+-- device mapping for the AMI.
+sibdmVirtualName :: Lens' ScheduledInstancesBlockDeviceMapping (Maybe Text)
+sibdmVirtualName = lens _sibdmVirtualName (\ s a -> s{_sibdmVirtualName = a});
+
+-- | Suppresses the specified device included in the block device mapping of
+-- the AMI.
+sibdmNoDevice :: Lens' ScheduledInstancesBlockDeviceMapping (Maybe Text)
+sibdmNoDevice = lens _sibdmNoDevice (\ s a -> s{_sibdmNoDevice = a});
+
+-- | Parameters used to set up EBS volumes automatically when the instance is
+-- launched.
+sibdmEBS :: Lens' ScheduledInstancesBlockDeviceMapping (Maybe ScheduledInstancesEBS)
+sibdmEBS = lens _sibdmEBS (\ s a -> s{_sibdmEBS = a});
+
+-- | The device name exposed to the instance (for example, '\/dev\/sdh' or
+-- 'xvdh').
+sibdmDeviceName :: Lens' ScheduledInstancesBlockDeviceMapping (Maybe Text)
+sibdmDeviceName = lens _sibdmDeviceName (\ s a -> s{_sibdmDeviceName = a});
+
+instance Hashable
+         ScheduledInstancesBlockDeviceMapping
+
+instance ToQuery ScheduledInstancesBlockDeviceMapping
+         where
+        toQuery ScheduledInstancesBlockDeviceMapping'{..}
+          = mconcat
+              ["VirtualName" =: _sibdmVirtualName,
+               "NoDevice" =: _sibdmNoDevice, "Ebs" =: _sibdmEBS,
+               "DeviceName" =: _sibdmDeviceName]
+
+-- | Describes an EBS volume for a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstancesEBS' smart constructor.
+data ScheduledInstancesEBS = ScheduledInstancesEBS'
+    { _sieDeleteOnTermination :: !(Maybe Bool)
+    , _sieVolumeSize          :: !(Maybe Int)
+    , _sieIOPS                :: !(Maybe Int)
+    , _sieEncrypted           :: !(Maybe Bool)
+    , _sieVolumeType          :: !(Maybe Text)
+    , _sieSnapshotId          :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstancesEBS' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sieDeleteOnTermination'
+--
+-- * 'sieVolumeSize'
+--
+-- * 'sieIOPS'
+--
+-- * 'sieEncrypted'
+--
+-- * 'sieVolumeType'
+--
+-- * 'sieSnapshotId'
+scheduledInstancesEBS
+    :: ScheduledInstancesEBS
+scheduledInstancesEBS =
+    ScheduledInstancesEBS'
+    { _sieDeleteOnTermination = Nothing
+    , _sieVolumeSize = Nothing
+    , _sieIOPS = Nothing
+    , _sieEncrypted = Nothing
+    , _sieVolumeType = Nothing
+    , _sieSnapshotId = Nothing
+    }
+
+-- | Indicates whether the volume is deleted on instance termination.
+sieDeleteOnTermination :: Lens' ScheduledInstancesEBS (Maybe Bool)
+sieDeleteOnTermination = lens _sieDeleteOnTermination (\ s a -> s{_sieDeleteOnTermination = a});
+
+-- | The size of the volume, in GiB.
+--
+-- Default: If you\'re creating the volume from a snapshot and don\'t
+-- specify a volume size, the default is the snapshot size.
+sieVolumeSize :: Lens' ScheduledInstancesEBS (Maybe Int)
+sieVolumeSize = lens _sieVolumeSize (\ s a -> s{_sieVolumeSize = a});
+
+-- | The number of I\/O operations per second (IOPS) that the volume
+-- supports. For Provisioned IOPS (SSD) volumes, this represents the number
+-- of IOPS that are provisioned for the volume. For General Purpose (SSD)
+-- volumes, this represents the baseline performance of the volume and the
+-- rate at which the volume accumulates I\/O credits for bursting. For more
+-- information about General Purpose (SSD) baseline performance, I\/O
+-- credits, and bursting, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Constraint: Range is 100 to 20000 for Provisioned IOPS (SSD) volumes and
+-- 3 to 10000 for General Purpose (SSD) volumes.
+--
+-- Condition: This parameter is required for requests to create 'io1'
+-- volumes; it is not used in requests to create 'standard' or 'gp2'
+-- volumes.
+sieIOPS :: Lens' ScheduledInstancesEBS (Maybe Int)
+sieIOPS = lens _sieIOPS (\ s a -> s{_sieIOPS = a});
+
+-- | Indicates whether the volume is encrypted. You can attached encrypted
+-- volumes only to instances that support them.
+sieEncrypted :: Lens' ScheduledInstancesEBS (Maybe Bool)
+sieEncrypted = lens _sieEncrypted (\ s a -> s{_sieEncrypted = a});
+
+-- | The volume type. 'gp2' for General Purpose (SSD) volumes, 'io1' for
+-- Provisioned IOPS (SSD) volumes, and 'standard' for Magnetic volumes.
+--
+-- Default: 'standard'
+sieVolumeType :: Lens' ScheduledInstancesEBS (Maybe Text)
+sieVolumeType = lens _sieVolumeType (\ s a -> s{_sieVolumeType = a});
+
+-- | The ID of the snapshot.
+sieSnapshotId :: Lens' ScheduledInstancesEBS (Maybe Text)
+sieSnapshotId = lens _sieSnapshotId (\ s a -> s{_sieSnapshotId = a});
+
+instance Hashable ScheduledInstancesEBS
+
+instance ToQuery ScheduledInstancesEBS where
+        toQuery ScheduledInstancesEBS'{..}
+          = mconcat
+              ["DeleteOnTermination" =: _sieDeleteOnTermination,
+               "VolumeSize" =: _sieVolumeSize, "Iops" =: _sieIOPS,
+               "Encrypted" =: _sieEncrypted,
+               "VolumeType" =: _sieVolumeType,
+               "SnapshotId" =: _sieSnapshotId]
+
+-- | Describes an IAM instance profile for a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstancesIAMInstanceProfile' smart constructor.
+data ScheduledInstancesIAMInstanceProfile = ScheduledInstancesIAMInstanceProfile'
+    { _siiapARN  :: !(Maybe Text)
+    , _siiapName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstancesIAMInstanceProfile' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siiapARN'
+--
+-- * 'siiapName'
+scheduledInstancesIAMInstanceProfile
+    :: ScheduledInstancesIAMInstanceProfile
+scheduledInstancesIAMInstanceProfile =
+    ScheduledInstancesIAMInstanceProfile'
+    { _siiapARN = Nothing
+    , _siiapName = Nothing
+    }
+
+-- | The Amazon Resource Name (ARN).
+siiapARN :: Lens' ScheduledInstancesIAMInstanceProfile (Maybe Text)
+siiapARN = lens _siiapARN (\ s a -> s{_siiapARN = a});
+
+-- | The name.
+siiapName :: Lens' ScheduledInstancesIAMInstanceProfile (Maybe Text)
+siiapName = lens _siiapName (\ s a -> s{_siiapName = a});
+
+instance Hashable
+         ScheduledInstancesIAMInstanceProfile
+
+instance ToQuery ScheduledInstancesIAMInstanceProfile
+         where
+        toQuery ScheduledInstancesIAMInstanceProfile'{..}
+          = mconcat ["Arn" =: _siiapARN, "Name" =: _siiapName]
+
+-- | Describes the launch specification for a Scheduled Instance.
+--
+-- If you are launching the Scheduled Instance in EC2-VPC, you must specify
+-- the ID of the subnet. You can specify the subnet using either 'SubnetId'
+-- or 'NetworkInterface'.
+--
+-- /See:/ 'scheduledInstancesLaunchSpecification' smart constructor.
+data ScheduledInstancesLaunchSpecification = ScheduledInstancesLaunchSpecification'
+    { _silsSecurityGroupIds    :: !(Maybe [Text])
+    , _silsKeyName             :: !(Maybe Text)
+    , _silsNetworkInterfaces   :: !(Maybe [ScheduledInstancesNetworkInterface])
+    , _silsRAMDiskId           :: !(Maybe Text)
+    , _silsSubnetId            :: !(Maybe Text)
+    , _silsKernelId            :: !(Maybe Text)
+    , _silsInstanceType        :: !(Maybe Text)
+    , _silsEBSOptimized        :: !(Maybe Bool)
+    , _silsUserData            :: !(Maybe Text)
+    , _silsMonitoring          :: !(Maybe ScheduledInstancesMonitoring)
+    , _silsIAMInstanceProfile  :: !(Maybe ScheduledInstancesIAMInstanceProfile)
+    , _silsBlockDeviceMappings :: !(Maybe [ScheduledInstancesBlockDeviceMapping])
+    , _silsPlacement           :: !(Maybe ScheduledInstancesPlacement)
+    , _silsImageId             :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstancesLaunchSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'silsSecurityGroupIds'
+--
+-- * 'silsKeyName'
+--
+-- * 'silsNetworkInterfaces'
+--
+-- * 'silsRAMDiskId'
+--
+-- * 'silsSubnetId'
+--
+-- * 'silsKernelId'
+--
+-- * 'silsInstanceType'
+--
+-- * 'silsEBSOptimized'
+--
+-- * 'silsUserData'
+--
+-- * 'silsMonitoring'
+--
+-- * 'silsIAMInstanceProfile'
+--
+-- * 'silsBlockDeviceMappings'
+--
+-- * 'silsPlacement'
+--
+-- * 'silsImageId'
+scheduledInstancesLaunchSpecification
+    :: Text -- ^ 'silsImageId'
+    -> ScheduledInstancesLaunchSpecification
+scheduledInstancesLaunchSpecification pImageId_ =
+    ScheduledInstancesLaunchSpecification'
+    { _silsSecurityGroupIds = Nothing
+    , _silsKeyName = Nothing
+    , _silsNetworkInterfaces = Nothing
+    , _silsRAMDiskId = Nothing
+    , _silsSubnetId = Nothing
+    , _silsKernelId = Nothing
+    , _silsInstanceType = Nothing
+    , _silsEBSOptimized = Nothing
+    , _silsUserData = Nothing
+    , _silsMonitoring = Nothing
+    , _silsIAMInstanceProfile = Nothing
+    , _silsBlockDeviceMappings = Nothing
+    , _silsPlacement = Nothing
+    , _silsImageId = pImageId_
+    }
+
+-- | The IDs of one or more security groups.
+silsSecurityGroupIds :: Lens' ScheduledInstancesLaunchSpecification [Text]
+silsSecurityGroupIds = lens _silsSecurityGroupIds (\ s a -> s{_silsSecurityGroupIds = a}) . _Default . _Coerce;
+
+-- | The name of the key pair.
+silsKeyName :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
+silsKeyName = lens _silsKeyName (\ s a -> s{_silsKeyName = a});
+
+-- | One or more network interfaces.
+silsNetworkInterfaces :: Lens' ScheduledInstancesLaunchSpecification [ScheduledInstancesNetworkInterface]
+silsNetworkInterfaces = lens _silsNetworkInterfaces (\ s a -> s{_silsNetworkInterfaces = a}) . _Default . _Coerce;
+
+-- | The ID of the RAM disk.
+silsRAMDiskId :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
+silsRAMDiskId = lens _silsRAMDiskId (\ s a -> s{_silsRAMDiskId = a});
+
+-- | The ID of the subnet in which to launch the instances.
+silsSubnetId :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
+silsSubnetId = lens _silsSubnetId (\ s a -> s{_silsSubnetId = a});
+
+-- | The ID of the kernel.
+silsKernelId :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
+silsKernelId = lens _silsKernelId (\ s a -> s{_silsKernelId = a});
+
+-- | The instance type.
+silsInstanceType :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
+silsInstanceType = lens _silsInstanceType (\ s a -> s{_silsInstanceType = a});
+
+-- | Indicates whether the instances are optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS-optimized instance.
+--
+-- Default: 'false'
+silsEBSOptimized :: Lens' ScheduledInstancesLaunchSpecification (Maybe Bool)
+silsEBSOptimized = lens _silsEBSOptimized (\ s a -> s{_silsEBSOptimized = a});
+
+-- | The base64-encoded MIME user data.
+silsUserData :: Lens' ScheduledInstancesLaunchSpecification (Maybe Text)
+silsUserData = lens _silsUserData (\ s a -> s{_silsUserData = a});
+
+-- | Enable or disable monitoring for the instances.
+silsMonitoring :: Lens' ScheduledInstancesLaunchSpecification (Maybe ScheduledInstancesMonitoring)
+silsMonitoring = lens _silsMonitoring (\ s a -> s{_silsMonitoring = a});
+
+-- | The IAM instance profile.
+silsIAMInstanceProfile :: Lens' ScheduledInstancesLaunchSpecification (Maybe ScheduledInstancesIAMInstanceProfile)
+silsIAMInstanceProfile = lens _silsIAMInstanceProfile (\ s a -> s{_silsIAMInstanceProfile = a});
+
+-- | One or more block device mapping entries.
+silsBlockDeviceMappings :: Lens' ScheduledInstancesLaunchSpecification [ScheduledInstancesBlockDeviceMapping]
+silsBlockDeviceMappings = lens _silsBlockDeviceMappings (\ s a -> s{_silsBlockDeviceMappings = a}) . _Default . _Coerce;
+
+-- | The placement information.
+silsPlacement :: Lens' ScheduledInstancesLaunchSpecification (Maybe ScheduledInstancesPlacement)
+silsPlacement = lens _silsPlacement (\ s a -> s{_silsPlacement = a});
+
+-- | The ID of the Amazon Machine Image (AMI).
+silsImageId :: Lens' ScheduledInstancesLaunchSpecification Text
+silsImageId = lens _silsImageId (\ s a -> s{_silsImageId = a});
+
+instance Hashable
+         ScheduledInstancesLaunchSpecification
+
+instance ToQuery
+         ScheduledInstancesLaunchSpecification where
+        toQuery ScheduledInstancesLaunchSpecification'{..}
+          = mconcat
+              [toQuery
+                 (toQueryList "SecurityGroupId" <$>
+                    _silsSecurityGroupIds),
+               "KeyName" =: _silsKeyName,
+               toQuery
+                 (toQueryList "NetworkInterface" <$>
+                    _silsNetworkInterfaces),
+               "RamdiskId" =: _silsRAMDiskId,
+               "SubnetId" =: _silsSubnetId,
+               "KernelId" =: _silsKernelId,
+               "InstanceType" =: _silsInstanceType,
+               "EbsOptimized" =: _silsEBSOptimized,
+               "UserData" =: _silsUserData,
+               "Monitoring" =: _silsMonitoring,
+               "IamInstanceProfile" =: _silsIAMInstanceProfile,
+               toQuery
+                 (toQueryList "BlockDeviceMapping" <$>
+                    _silsBlockDeviceMappings),
+               "Placement" =: _silsPlacement,
+               "ImageId" =: _silsImageId]
+
+-- | Describes whether monitoring is enabled for a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstancesMonitoring' smart constructor.
+newtype ScheduledInstancesMonitoring = ScheduledInstancesMonitoring'
+    { _simEnabled :: Maybe Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstancesMonitoring' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'simEnabled'
+scheduledInstancesMonitoring
+    :: ScheduledInstancesMonitoring
+scheduledInstancesMonitoring =
+    ScheduledInstancesMonitoring'
+    { _simEnabled = Nothing
+    }
+
+-- | Indicates whether monitoring is enabled.
+simEnabled :: Lens' ScheduledInstancesMonitoring (Maybe Bool)
+simEnabled = lens _simEnabled (\ s a -> s{_simEnabled = a});
+
+instance Hashable ScheduledInstancesMonitoring
+
+instance ToQuery ScheduledInstancesMonitoring where
+        toQuery ScheduledInstancesMonitoring'{..}
+          = mconcat ["Enabled" =: _simEnabled]
+
+-- | Describes a network interface for a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstancesNetworkInterface' smart constructor.
+data ScheduledInstancesNetworkInterface = ScheduledInstancesNetworkInterface'
+    { _siniGroups                         :: !(Maybe [Text])
+    , _siniDeleteOnTermination            :: !(Maybe Bool)
+    , _siniAssociatePublicIPAddress       :: !(Maybe Bool)
+    , _siniPrivateIPAddressConfigs        :: !(Maybe [ScheduledInstancesPrivateIPAddressConfig])
+    , _siniNetworkInterfaceId             :: !(Maybe Text)
+    , _siniSubnetId                       :: !(Maybe Text)
+    , _siniPrivateIPAddress               :: !(Maybe Text)
+    , _siniSecondaryPrivateIPAddressCount :: !(Maybe Int)
+    , _siniDescription                    :: !(Maybe Text)
+    , _siniDeviceIndex                    :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstancesNetworkInterface' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siniGroups'
+--
+-- * 'siniDeleteOnTermination'
+--
+-- * 'siniAssociatePublicIPAddress'
+--
+-- * 'siniPrivateIPAddressConfigs'
+--
+-- * 'siniNetworkInterfaceId'
+--
+-- * 'siniSubnetId'
+--
+-- * 'siniPrivateIPAddress'
+--
+-- * 'siniSecondaryPrivateIPAddressCount'
+--
+-- * 'siniDescription'
+--
+-- * 'siniDeviceIndex'
+scheduledInstancesNetworkInterface
+    :: ScheduledInstancesNetworkInterface
+scheduledInstancesNetworkInterface =
+    ScheduledInstancesNetworkInterface'
+    { _siniGroups = Nothing
+    , _siniDeleteOnTermination = Nothing
+    , _siniAssociatePublicIPAddress = Nothing
+    , _siniPrivateIPAddressConfigs = Nothing
+    , _siniNetworkInterfaceId = Nothing
+    , _siniSubnetId = Nothing
+    , _siniPrivateIPAddress = Nothing
+    , _siniSecondaryPrivateIPAddressCount = Nothing
+    , _siniDescription = Nothing
+    , _siniDeviceIndex = Nothing
+    }
+
+-- | The IDs of one or more security groups.
+siniGroups :: Lens' ScheduledInstancesNetworkInterface [Text]
+siniGroups = lens _siniGroups (\ s a -> s{_siniGroups = a}) . _Default . _Coerce;
+
+-- | Indicates whether to delete the interface when the instance is
+-- terminated.
+siniDeleteOnTermination :: Lens' ScheduledInstancesNetworkInterface (Maybe Bool)
+siniDeleteOnTermination = lens _siniDeleteOnTermination (\ s a -> s{_siniDeleteOnTermination = a});
+
+-- | Indicates whether to assign a public IP address to instances launched in
+-- a VPC. The public IP address can only be assigned to a network interface
+-- for eth0, and can only be assigned to a new network interface, not an
+-- existing one. You cannot specify more than one network interface in the
+-- request. If launching into a default subnet, the default value is
+-- 'true'.
+siniAssociatePublicIPAddress :: Lens' ScheduledInstancesNetworkInterface (Maybe Bool)
+siniAssociatePublicIPAddress = lens _siniAssociatePublicIPAddress (\ s a -> s{_siniAssociatePublicIPAddress = a});
+
+-- | The private IP addresses.
+siniPrivateIPAddressConfigs :: Lens' ScheduledInstancesNetworkInterface [ScheduledInstancesPrivateIPAddressConfig]
+siniPrivateIPAddressConfigs = lens _siniPrivateIPAddressConfigs (\ s a -> s{_siniPrivateIPAddressConfigs = a}) . _Default . _Coerce;
+
+-- | The ID of the network interface.
+siniNetworkInterfaceId :: Lens' ScheduledInstancesNetworkInterface (Maybe Text)
+siniNetworkInterfaceId = lens _siniNetworkInterfaceId (\ s a -> s{_siniNetworkInterfaceId = a});
+
+-- | The ID of the subnet.
+siniSubnetId :: Lens' ScheduledInstancesNetworkInterface (Maybe Text)
+siniSubnetId = lens _siniSubnetId (\ s a -> s{_siniSubnetId = a});
+
+-- | The IP address of the network interface within the subnet.
+siniPrivateIPAddress :: Lens' ScheduledInstancesNetworkInterface (Maybe Text)
+siniPrivateIPAddress = lens _siniPrivateIPAddress (\ s a -> s{_siniPrivateIPAddress = a});
+
+-- | The number of secondary private IP addresses.
+siniSecondaryPrivateIPAddressCount :: Lens' ScheduledInstancesNetworkInterface (Maybe Int)
+siniSecondaryPrivateIPAddressCount = lens _siniSecondaryPrivateIPAddressCount (\ s a -> s{_siniSecondaryPrivateIPAddressCount = a});
+
+-- | The description.
+siniDescription :: Lens' ScheduledInstancesNetworkInterface (Maybe Text)
+siniDescription = lens _siniDescription (\ s a -> s{_siniDescription = a});
+
+-- | The index of the device for the network interface attachment.
+siniDeviceIndex :: Lens' ScheduledInstancesNetworkInterface (Maybe Int)
+siniDeviceIndex = lens _siniDeviceIndex (\ s a -> s{_siniDeviceIndex = a});
+
+instance Hashable ScheduledInstancesNetworkInterface
+
+instance ToQuery ScheduledInstancesNetworkInterface
+         where
+        toQuery ScheduledInstancesNetworkInterface'{..}
+          = mconcat
+              [toQuery (toQueryList "Group" <$> _siniGroups),
+               "DeleteOnTermination" =: _siniDeleteOnTermination,
+               "AssociatePublicIpAddress" =:
+                 _siniAssociatePublicIPAddress,
+               toQuery
+                 (toQueryList "PrivateIpAddressConfig" <$>
+                    _siniPrivateIPAddressConfigs),
+               "NetworkInterfaceId" =: _siniNetworkInterfaceId,
+               "SubnetId" =: _siniSubnetId,
+               "PrivateIpAddress" =: _siniPrivateIPAddress,
+               "SecondaryPrivateIpAddressCount" =:
+                 _siniSecondaryPrivateIPAddressCount,
+               "Description" =: _siniDescription,
+               "DeviceIndex" =: _siniDeviceIndex]
+
+-- | Describes the placement for a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstancesPlacement' smart constructor.
+data ScheduledInstancesPlacement = ScheduledInstancesPlacement'
+    { _sipAvailabilityZone :: !(Maybe Text)
+    , _sipGroupName        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstancesPlacement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sipAvailabilityZone'
+--
+-- * 'sipGroupName'
+scheduledInstancesPlacement
+    :: ScheduledInstancesPlacement
+scheduledInstancesPlacement =
+    ScheduledInstancesPlacement'
+    { _sipAvailabilityZone = Nothing
+    , _sipGroupName = Nothing
+    }
+
+-- | The Availability Zone.
+sipAvailabilityZone :: Lens' ScheduledInstancesPlacement (Maybe Text)
+sipAvailabilityZone = lens _sipAvailabilityZone (\ s a -> s{_sipAvailabilityZone = a});
+
+-- | The name of the placement group.
+sipGroupName :: Lens' ScheduledInstancesPlacement (Maybe Text)
+sipGroupName = lens _sipGroupName (\ s a -> s{_sipGroupName = a});
+
+instance Hashable ScheduledInstancesPlacement
+
+instance ToQuery ScheduledInstancesPlacement where
+        toQuery ScheduledInstancesPlacement'{..}
+          = mconcat
+              ["AvailabilityZone" =: _sipAvailabilityZone,
+               "GroupName" =: _sipGroupName]
+
+-- | Describes a private IP address for a Scheduled Instance.
+--
+-- /See:/ 'scheduledInstancesPrivateIPAddressConfig' smart constructor.
+data ScheduledInstancesPrivateIPAddressConfig = ScheduledInstancesPrivateIPAddressConfig'
+    { _sipiacPrimary          :: !(Maybe Bool)
+    , _sipiacPrivateIPAddress :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScheduledInstancesPrivateIPAddressConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sipiacPrimary'
+--
+-- * 'sipiacPrivateIPAddress'
+scheduledInstancesPrivateIPAddressConfig
+    :: ScheduledInstancesPrivateIPAddressConfig
+scheduledInstancesPrivateIPAddressConfig =
+    ScheduledInstancesPrivateIPAddressConfig'
+    { _sipiacPrimary = Nothing
+    , _sipiacPrivateIPAddress = Nothing
+    }
+
+-- | Indicates whether this is a primary IP address. Otherwise, this is a
+-- secondary IP address.
+sipiacPrimary :: Lens' ScheduledInstancesPrivateIPAddressConfig (Maybe Bool)
+sipiacPrimary = lens _sipiacPrimary (\ s a -> s{_sipiacPrimary = a});
+
+-- | The IP address.
+sipiacPrivateIPAddress :: Lens' ScheduledInstancesPrivateIPAddressConfig (Maybe Text)
+sipiacPrivateIPAddress = lens _sipiacPrivateIPAddress (\ s a -> s{_sipiacPrivateIPAddress = a});
+
+instance Hashable
+         ScheduledInstancesPrivateIPAddressConfig
+
+instance ToQuery
+         ScheduledInstancesPrivateIPAddressConfig where
+        toQuery ScheduledInstancesPrivateIPAddressConfig'{..}
+          = mconcat
+              ["Primary" =: _sipiacPrimary,
+               "PrivateIpAddress" =: _sipiacPrivateIPAddress]
+
+-- | Describes a security group
+--
+-- /See:/ 'securityGroup' smart constructor.
+data SecurityGroup = SecurityGroup'
+    { _sgVPCId               :: !(Maybe Text)
+    , _sgIPPermissions       :: !(Maybe [IPPermission])
+    , _sgIPPermissionsEgress :: !(Maybe [IPPermission])
+    , _sgTags                :: !(Maybe [Tag])
+    , _sgOwnerId             :: !Text
+    , _sgGroupId             :: !Text
+    , _sgGroupName           :: !Text
+    , _sgDescription         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SecurityGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sgVPCId'
+--
+-- * 'sgIPPermissions'
+--
+-- * 'sgIPPermissionsEgress'
+--
+-- * 'sgTags'
+--
+-- * 'sgOwnerId'
+--
+-- * 'sgGroupId'
+--
+-- * 'sgGroupName'
+--
+-- * 'sgDescription'
+securityGroup
+    :: Text -- ^ 'sgOwnerId'
+    -> Text -- ^ 'sgGroupId'
+    -> Text -- ^ 'sgGroupName'
+    -> Text -- ^ 'sgDescription'
+    -> SecurityGroup
+securityGroup pOwnerId_ pGroupId_ pGroupName_ pDescription_ =
+    SecurityGroup'
+    { _sgVPCId = Nothing
+    , _sgIPPermissions = Nothing
+    , _sgIPPermissionsEgress = Nothing
+    , _sgTags = Nothing
+    , _sgOwnerId = pOwnerId_
+    , _sgGroupId = pGroupId_
+    , _sgGroupName = pGroupName_
+    , _sgDescription = pDescription_
+    }
+
+-- | [EC2-VPC] The ID of the VPC for the security group.
+sgVPCId :: Lens' SecurityGroup (Maybe Text)
+sgVPCId = lens _sgVPCId (\ s a -> s{_sgVPCId = a});
+
+-- | One or more inbound rules associated with the security group.
+sgIPPermissions :: Lens' SecurityGroup [IPPermission]
+sgIPPermissions = lens _sgIPPermissions (\ s a -> s{_sgIPPermissions = a}) . _Default . _Coerce;
+
+-- | [EC2-VPC] One or more outbound rules associated with the security group.
+sgIPPermissionsEgress :: Lens' SecurityGroup [IPPermission]
+sgIPPermissionsEgress = lens _sgIPPermissionsEgress (\ s a -> s{_sgIPPermissionsEgress = a}) . _Default . _Coerce;
+
+-- | Any tags assigned to the security group.
+sgTags :: Lens' SecurityGroup [Tag]
+sgTags = lens _sgTags (\ s a -> s{_sgTags = a}) . _Default . _Coerce;
+
+-- | The AWS account ID of the owner of the security group.
+sgOwnerId :: Lens' SecurityGroup Text
+sgOwnerId = lens _sgOwnerId (\ s a -> s{_sgOwnerId = a});
+
+-- | The ID of the security group.
+sgGroupId :: Lens' SecurityGroup Text
+sgGroupId = lens _sgGroupId (\ s a -> s{_sgGroupId = a});
+
+-- | The name of the security group.
+sgGroupName :: Lens' SecurityGroup Text
+sgGroupName = lens _sgGroupName (\ s a -> s{_sgGroupName = a});
+
+-- | A description of the security group.
+sgDescription :: Lens' SecurityGroup Text
+sgDescription = lens _sgDescription (\ s a -> s{_sgDescription = a});
+
+instance FromXML SecurityGroup where
+        parseXML x
+          = SecurityGroup' <$>
+              (x .@? "vpcId") <*>
+                (x .@? "ipPermissions" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "ipPermissionsEgress" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "ownerId")
+                <*> (x .@ "groupId")
+                <*> (x .@ "groupName")
+                <*> (x .@ "groupDescription")
+
+instance Hashable SecurityGroup
+
+-- | Describes the time period for a Scheduled Instance to start its first
+-- schedule. The time period must span less than one day.
+--
+-- /See:/ 'slotDateTimeRangeRequest' smart constructor.
+data SlotDateTimeRangeRequest = SlotDateTimeRangeRequest'
+    { _sdtrrEarliestTime :: !ISO8601
+    , _sdtrrLatestTime   :: !ISO8601
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SlotDateTimeRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdtrrEarliestTime'
+--
+-- * 'sdtrrLatestTime'
+slotDateTimeRangeRequest
+    :: UTCTime -- ^ 'sdtrrEarliestTime'
+    -> UTCTime -- ^ 'sdtrrLatestTime'
+    -> SlotDateTimeRangeRequest
+slotDateTimeRangeRequest pEarliestTime_ pLatestTime_ =
+    SlotDateTimeRangeRequest'
+    { _sdtrrEarliestTime = _Time # pEarliestTime_
+    , _sdtrrLatestTime = _Time # pLatestTime_
+    }
+
+-- | The earliest date and time, in UTC, for the Scheduled Instance to start.
+sdtrrEarliestTime :: Lens' SlotDateTimeRangeRequest UTCTime
+sdtrrEarliestTime = lens _sdtrrEarliestTime (\ s a -> s{_sdtrrEarliestTime = a}) . _Time;
+
+-- | The latest date and time, in UTC, for the Scheduled Instance to start.
+-- This value must be later than or equal to the earliest date and at most
+-- three months in the future.
+sdtrrLatestTime :: Lens' SlotDateTimeRangeRequest UTCTime
+sdtrrLatestTime = lens _sdtrrLatestTime (\ s a -> s{_sdtrrLatestTime = a}) . _Time;
+
+instance Hashable SlotDateTimeRangeRequest
+
+instance ToQuery SlotDateTimeRangeRequest where
+        toQuery SlotDateTimeRangeRequest'{..}
+          = mconcat
+              ["EarliestTime" =: _sdtrrEarliestTime,
+               "LatestTime" =: _sdtrrLatestTime]
+
+-- | Describes the time period for a Scheduled Instance to start its first
+-- schedule.
+--
+-- /See:/ 'slotStartTimeRangeRequest' smart constructor.
+data SlotStartTimeRangeRequest = SlotStartTimeRangeRequest'
+    { _sstrrLatestTime   :: !(Maybe ISO8601)
+    , _sstrrEarliestTime :: !(Maybe ISO8601)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SlotStartTimeRangeRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sstrrLatestTime'
+--
+-- * 'sstrrEarliestTime'
+slotStartTimeRangeRequest
+    :: SlotStartTimeRangeRequest
+slotStartTimeRangeRequest =
+    SlotStartTimeRangeRequest'
+    { _sstrrLatestTime = Nothing
+    , _sstrrEarliestTime = Nothing
+    }
+
+-- | The latest date and time, in UTC, for the Scheduled Instance to start.
+sstrrLatestTime :: Lens' SlotStartTimeRangeRequest (Maybe UTCTime)
+sstrrLatestTime = lens _sstrrLatestTime (\ s a -> s{_sstrrLatestTime = a}) . mapping _Time;
+
+-- | The earliest date and time, in UTC, for the Scheduled Instance to start.
+sstrrEarliestTime :: Lens' SlotStartTimeRangeRequest (Maybe UTCTime)
+sstrrEarliestTime = lens _sstrrEarliestTime (\ s a -> s{_sstrrEarliestTime = a}) . mapping _Time;
+
+instance Hashable SlotStartTimeRangeRequest
+
+instance ToQuery SlotStartTimeRangeRequest where
+        toQuery SlotStartTimeRangeRequest'{..}
+          = mconcat
+              ["LatestTime" =: _sstrrLatestTime,
+               "EarliestTime" =: _sstrrEarliestTime]
+
+-- | Describes a snapshot.
+--
+-- /See:/ 'snapshot' smart constructor.
+data Snapshot = Snapshot'
+    { _sStateMessage        :: !(Maybe Text)
+    , _sOwnerAlias          :: !(Maybe Text)
+    , _sDataEncryptionKeyId :: !(Maybe Text)
+    , _sKMSKeyId            :: !(Maybe Text)
+    , _sTags                :: !(Maybe [Tag])
+    , _sSnapshotId          :: !Text
+    , _sOwnerId             :: !Text
+    , _sVolumeId            :: !Text
+    , _sVolumeSize          :: !Int
+    , _sDescription         :: !Text
+    , _sStartTime           :: !ISO8601
+    , _sProgress            :: !Text
+    , _sState               :: !SnapshotState
+    , _sEncrypted           :: !Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Snapshot' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sStateMessage'
+--
+-- * 'sOwnerAlias'
+--
+-- * 'sDataEncryptionKeyId'
+--
+-- * 'sKMSKeyId'
+--
+-- * 'sTags'
+--
+-- * 'sSnapshotId'
+--
+-- * 'sOwnerId'
+--
+-- * 'sVolumeId'
+--
+-- * 'sVolumeSize'
+--
+-- * 'sDescription'
+--
+-- * 'sStartTime'
+--
+-- * 'sProgress'
+--
+-- * 'sState'
+--
+-- * 'sEncrypted'
+snapshot
+    :: Text -- ^ 'sSnapshotId'
+    -> Text -- ^ 'sOwnerId'
+    -> Text -- ^ 'sVolumeId'
+    -> Int -- ^ 'sVolumeSize'
+    -> Text -- ^ 'sDescription'
+    -> UTCTime -- ^ 'sStartTime'
+    -> Text -- ^ 'sProgress'
+    -> SnapshotState -- ^ 'sState'
+    -> Bool -- ^ 'sEncrypted'
+    -> Snapshot
+snapshot pSnapshotId_ pOwnerId_ pVolumeId_ pVolumeSize_ pDescription_ pStartTime_ pProgress_ pState_ pEncrypted_ =
+    Snapshot'
+    { _sStateMessage = Nothing
+    , _sOwnerAlias = Nothing
+    , _sDataEncryptionKeyId = Nothing
+    , _sKMSKeyId = Nothing
+    , _sTags = Nothing
+    , _sSnapshotId = pSnapshotId_
+    , _sOwnerId = pOwnerId_
+    , _sVolumeId = pVolumeId_
+    , _sVolumeSize = pVolumeSize_
+    , _sDescription = pDescription_
+    , _sStartTime = _Time # pStartTime_
+    , _sProgress = pProgress_
+    , _sState = pState_
+    , _sEncrypted = pEncrypted_
+    }
+
+-- | Encrypted Amazon EBS snapshots are copied asynchronously. If a snapshot
+-- copy operation fails (for example, if the proper AWS Key Management
+-- Service (AWS KMS) permissions are not obtained) this field displays
+-- error state details to help you diagnose why the error occurred. This
+-- parameter is only returned by the < DescribeSnapshots> API operation.
+sStateMessage :: Lens' Snapshot (Maybe Text)
+sStateMessage = lens _sStateMessage (\ s a -> s{_sStateMessage = a});
+
+-- | The AWS account alias (for example, 'amazon', 'self') or AWS account ID
+-- that owns the snapshot.
+sOwnerAlias :: Lens' Snapshot (Maybe Text)
+sOwnerAlias = lens _sOwnerAlias (\ s a -> s{_sOwnerAlias = a});
+
+-- | The data encryption key identifier for the snapshot. This value is a
+-- unique identifier that corresponds to the data encryption key that was
+-- used to encrypt the original volume or snapshot copy. Because data
+-- encryption keys are inherited by volumes created from snapshots, and
+-- vice versa, if snapshots share the same data encryption key identifier,
+-- then they belong to the same volume\/snapshot lineage. This parameter is
+-- only returned by the < DescribeSnapshots> API operation.
+sDataEncryptionKeyId :: Lens' Snapshot (Maybe Text)
+sDataEncryptionKeyId = lens _sDataEncryptionKeyId (\ s a -> s{_sDataEncryptionKeyId = a});
+
+-- | The full ARN of the AWS Key Management Service (AWS KMS) customer master
+-- key (CMK) that was used to protect the volume encryption key for the
+-- parent volume.
+sKMSKeyId :: Lens' Snapshot (Maybe Text)
+sKMSKeyId = lens _sKMSKeyId (\ s a -> s{_sKMSKeyId = a});
+
+-- | Any tags assigned to the snapshot.
+sTags :: Lens' Snapshot [Tag]
+sTags = lens _sTags (\ s a -> s{_sTags = a}) . _Default . _Coerce;
+
+-- | The ID of the snapshot. Each snapshot receives a unique identifier when
+-- it is created.
+sSnapshotId :: Lens' Snapshot Text
+sSnapshotId = lens _sSnapshotId (\ s a -> s{_sSnapshotId = a});
+
+-- | The AWS account ID of the EBS snapshot owner.
+sOwnerId :: Lens' Snapshot Text
+sOwnerId = lens _sOwnerId (\ s a -> s{_sOwnerId = a});
+
+-- | The ID of the volume that was used to create the snapshot.
+sVolumeId :: Lens' Snapshot Text
+sVolumeId = lens _sVolumeId (\ s a -> s{_sVolumeId = a});
+
+-- | The size of the volume, in GiB.
+sVolumeSize :: Lens' Snapshot Int
+sVolumeSize = lens _sVolumeSize (\ s a -> s{_sVolumeSize = a});
+
+-- | The description for the snapshot.
+sDescription :: Lens' Snapshot Text
+sDescription = lens _sDescription (\ s a -> s{_sDescription = a});
+
+-- | The time stamp when the snapshot was initiated.
+sStartTime :: Lens' Snapshot UTCTime
+sStartTime = lens _sStartTime (\ s a -> s{_sStartTime = a}) . _Time;
+
+-- | The progress of the snapshot, as a percentage.
+sProgress :: Lens' Snapshot Text
+sProgress = lens _sProgress (\ s a -> s{_sProgress = a});
+
+-- | The snapshot state.
+sState :: Lens' Snapshot SnapshotState
+sState = lens _sState (\ s a -> s{_sState = a});
+
+-- | Indicates whether the snapshot is encrypted.
+sEncrypted :: Lens' Snapshot Bool
+sEncrypted = lens _sEncrypted (\ s a -> s{_sEncrypted = a});
+
+instance FromXML Snapshot where
+        parseXML x
+          = Snapshot' <$>
+              (x .@? "statusMessage") <*> (x .@? "ownerAlias") <*>
+                (x .@? "dataEncryptionKeyId")
+                <*> (x .@? "kmsKeyId")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "snapshotId")
+                <*> (x .@ "ownerId")
+                <*> (x .@ "volumeId")
+                <*> (x .@ "volumeSize")
+                <*> (x .@ "description")
+                <*> (x .@ "startTime")
+                <*> (x .@ "progress")
+                <*> (x .@ "status")
+                <*> (x .@ "encrypted")
+
+instance Hashable Snapshot
+
+-- | Describes the snapshot created from the imported disk.
+--
+-- /See:/ 'snapshotDetail' smart constructor.
+data SnapshotDetail = SnapshotDetail'
+    { _sdStatus        :: !(Maybe Text)
+    , _sdProgress      :: !(Maybe Text)
+    , _sdFormat        :: !(Maybe Text)
+    , _sdURL           :: !(Maybe Text)
+    , _sdDeviceName    :: !(Maybe Text)
+    , _sdStatusMessage :: !(Maybe Text)
+    , _sdUserBucket    :: !(Maybe UserBucketDetails)
+    , _sdDiskImageSize :: !(Maybe Double)
+    , _sdDescription   :: !(Maybe Text)
+    , _sdSnapshotId    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SnapshotDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdStatus'
+--
+-- * 'sdProgress'
+--
+-- * 'sdFormat'
+--
+-- * 'sdURL'
+--
+-- * 'sdDeviceName'
+--
+-- * 'sdStatusMessage'
+--
+-- * 'sdUserBucket'
+--
+-- * 'sdDiskImageSize'
+--
+-- * 'sdDescription'
+--
+-- * 'sdSnapshotId'
+snapshotDetail
+    :: SnapshotDetail
+snapshotDetail =
+    SnapshotDetail'
+    { _sdStatus = Nothing
+    , _sdProgress = Nothing
+    , _sdFormat = Nothing
+    , _sdURL = Nothing
+    , _sdDeviceName = Nothing
+    , _sdStatusMessage = Nothing
+    , _sdUserBucket = Nothing
+    , _sdDiskImageSize = Nothing
+    , _sdDescription = Nothing
+    , _sdSnapshotId = Nothing
+    }
+
+-- | A brief status of the snapshot creation.
+sdStatus :: Lens' SnapshotDetail (Maybe Text)
+sdStatus = lens _sdStatus (\ s a -> s{_sdStatus = a});
+
+-- | The percentage of progress for the task.
+sdProgress :: Lens' SnapshotDetail (Maybe Text)
+sdProgress = lens _sdProgress (\ s a -> s{_sdProgress = a});
+
+-- | The format of the disk image from which the snapshot is created.
+sdFormat :: Lens' SnapshotDetail (Maybe Text)
+sdFormat = lens _sdFormat (\ s a -> s{_sdFormat = a});
+
+-- | The URL used to access the disk image.
+sdURL :: Lens' SnapshotDetail (Maybe Text)
+sdURL = lens _sdURL (\ s a -> s{_sdURL = a});
+
+-- | The block device mapping for the snapshot.
+sdDeviceName :: Lens' SnapshotDetail (Maybe Text)
+sdDeviceName = lens _sdDeviceName (\ s a -> s{_sdDeviceName = a});
+
+-- | A detailed status message for the snapshot creation.
+sdStatusMessage :: Lens' SnapshotDetail (Maybe Text)
+sdStatusMessage = lens _sdStatusMessage (\ s a -> s{_sdStatusMessage = a});
+
+-- | Undocumented member.
+sdUserBucket :: Lens' SnapshotDetail (Maybe UserBucketDetails)
+sdUserBucket = lens _sdUserBucket (\ s a -> s{_sdUserBucket = a});
+
+-- | The size of the disk in the snapshot, in GiB.
+sdDiskImageSize :: Lens' SnapshotDetail (Maybe Double)
+sdDiskImageSize = lens _sdDiskImageSize (\ s a -> s{_sdDiskImageSize = a});
+
+-- | A description for the snapshot.
+sdDescription :: Lens' SnapshotDetail (Maybe Text)
+sdDescription = lens _sdDescription (\ s a -> s{_sdDescription = a});
+
+-- | The snapshot ID of the disk being imported.
+sdSnapshotId :: Lens' SnapshotDetail (Maybe Text)
+sdSnapshotId = lens _sdSnapshotId (\ s a -> s{_sdSnapshotId = a});
+
+instance FromXML SnapshotDetail where
+        parseXML x
+          = SnapshotDetail' <$>
+              (x .@? "status") <*> (x .@? "progress") <*>
+                (x .@? "format")
+                <*> (x .@? "url")
+                <*> (x .@? "deviceName")
+                <*> (x .@? "statusMessage")
+                <*> (x .@? "userBucket")
+                <*> (x .@? "diskImageSize")
+                <*> (x .@? "description")
+                <*> (x .@? "snapshotId")
+
+instance Hashable SnapshotDetail
+
+-- | The disk container object for the import snapshot request.
+--
+-- /See:/ 'snapshotDiskContainer' smart constructor.
+data SnapshotDiskContainer = SnapshotDiskContainer'
+    { _sdcFormat      :: !(Maybe Text)
+    , _sdcURL         :: !(Maybe Text)
+    , _sdcUserBucket  :: !(Maybe UserBucket)
+    , _sdcDescription :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SnapshotDiskContainer' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdcFormat'
+--
+-- * 'sdcURL'
+--
+-- * 'sdcUserBucket'
+--
+-- * 'sdcDescription'
+snapshotDiskContainer
+    :: SnapshotDiskContainer
+snapshotDiskContainer =
+    SnapshotDiskContainer'
+    { _sdcFormat = Nothing
+    , _sdcURL = Nothing
+    , _sdcUserBucket = Nothing
+    , _sdcDescription = Nothing
+    }
+
+-- | The format of the disk image being imported.
+--
+-- Valid values: 'RAW' | 'VHD' | 'VMDK' | 'OVA'
+sdcFormat :: Lens' SnapshotDiskContainer (Maybe Text)
+sdcFormat = lens _sdcFormat (\ s a -> s{_sdcFormat = a});
+
+-- | The URL to the Amazon S3-based disk image being imported. It can either
+-- be a https URL (https:\/\/..) or an Amazon S3 URL (s3:\/\/..).
+sdcURL :: Lens' SnapshotDiskContainer (Maybe Text)
+sdcURL = lens _sdcURL (\ s a -> s{_sdcURL = a});
+
+-- | Undocumented member.
+sdcUserBucket :: Lens' SnapshotDiskContainer (Maybe UserBucket)
+sdcUserBucket = lens _sdcUserBucket (\ s a -> s{_sdcUserBucket = a});
+
+-- | The description of the disk image being imported.
+sdcDescription :: Lens' SnapshotDiskContainer (Maybe Text)
+sdcDescription = lens _sdcDescription (\ s a -> s{_sdcDescription = a});
+
+instance Hashable SnapshotDiskContainer
+
+instance ToQuery SnapshotDiskContainer where
+        toQuery SnapshotDiskContainer'{..}
+          = mconcat
+              ["Format" =: _sdcFormat, "Url" =: _sdcURL,
+               "UserBucket" =: _sdcUserBucket,
+               "Description" =: _sdcDescription]
+
+-- | Details about the import snapshot task.
+--
+-- /See:/ 'snapshotTaskDetail' smart constructor.
+data SnapshotTaskDetail = SnapshotTaskDetail'
+    { _stdStatus        :: !(Maybe Text)
+    , _stdProgress      :: !(Maybe Text)
+    , _stdFormat        :: !(Maybe Text)
+    , _stdURL           :: !(Maybe Text)
+    , _stdStatusMessage :: !(Maybe Text)
+    , _stdUserBucket    :: !(Maybe UserBucketDetails)
+    , _stdDiskImageSize :: !(Maybe Double)
+    , _stdDescription   :: !(Maybe Text)
+    , _stdSnapshotId    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SnapshotTaskDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stdStatus'
+--
+-- * 'stdProgress'
+--
+-- * 'stdFormat'
+--
+-- * 'stdURL'
+--
+-- * 'stdStatusMessage'
+--
+-- * 'stdUserBucket'
+--
+-- * 'stdDiskImageSize'
+--
+-- * 'stdDescription'
+--
+-- * 'stdSnapshotId'
+snapshotTaskDetail
+    :: SnapshotTaskDetail
+snapshotTaskDetail =
+    SnapshotTaskDetail'
+    { _stdStatus = Nothing
+    , _stdProgress = Nothing
+    , _stdFormat = Nothing
+    , _stdURL = Nothing
+    , _stdStatusMessage = Nothing
+    , _stdUserBucket = Nothing
+    , _stdDiskImageSize = Nothing
+    , _stdDescription = Nothing
+    , _stdSnapshotId = Nothing
+    }
+
+-- | A brief status for the import snapshot task.
+stdStatus :: Lens' SnapshotTaskDetail (Maybe Text)
+stdStatus = lens _stdStatus (\ s a -> s{_stdStatus = a});
+
+-- | The percentage of completion for the import snapshot task.
+stdProgress :: Lens' SnapshotTaskDetail (Maybe Text)
+stdProgress = lens _stdProgress (\ s a -> s{_stdProgress = a});
+
+-- | The format of the disk image from which the snapshot is created.
+stdFormat :: Lens' SnapshotTaskDetail (Maybe Text)
+stdFormat = lens _stdFormat (\ s a -> s{_stdFormat = a});
+
+-- | The URL of the disk image from which the snapshot is created.
+stdURL :: Lens' SnapshotTaskDetail (Maybe Text)
+stdURL = lens _stdURL (\ s a -> s{_stdURL = a});
+
+-- | A detailed status message for the import snapshot task.
+stdStatusMessage :: Lens' SnapshotTaskDetail (Maybe Text)
+stdStatusMessage = lens _stdStatusMessage (\ s a -> s{_stdStatusMessage = a});
+
+-- | The S3 bucket for the disk image.
+stdUserBucket :: Lens' SnapshotTaskDetail (Maybe UserBucketDetails)
+stdUserBucket = lens _stdUserBucket (\ s a -> s{_stdUserBucket = a});
+
+-- | The size of the disk in the snapshot, in GiB.
+stdDiskImageSize :: Lens' SnapshotTaskDetail (Maybe Double)
+stdDiskImageSize = lens _stdDiskImageSize (\ s a -> s{_stdDiskImageSize = a});
+
+-- | The description of the snapshot.
+stdDescription :: Lens' SnapshotTaskDetail (Maybe Text)
+stdDescription = lens _stdDescription (\ s a -> s{_stdDescription = a});
+
+-- | The snapshot ID of the disk being imported.
+stdSnapshotId :: Lens' SnapshotTaskDetail (Maybe Text)
+stdSnapshotId = lens _stdSnapshotId (\ s a -> s{_stdSnapshotId = a});
+
+instance FromXML SnapshotTaskDetail where
+        parseXML x
+          = SnapshotTaskDetail' <$>
+              (x .@? "status") <*> (x .@? "progress") <*>
+                (x .@? "format")
+                <*> (x .@? "url")
+                <*> (x .@? "statusMessage")
+                <*> (x .@? "userBucket")
+                <*> (x .@? "diskImageSize")
+                <*> (x .@? "description")
+                <*> (x .@? "snapshotId")
+
+instance Hashable SnapshotTaskDetail
+
+-- | Describes the data feed for a Spot instance.
+--
+-- /See:/ 'spotDatafeedSubscription' smart constructor.
+data SpotDatafeedSubscription = SpotDatafeedSubscription'
+    { _sdsState   :: !(Maybe DatafeedSubscriptionState)
+    , _sdsPrefix  :: !(Maybe Text)
+    , _sdsBucket  :: !(Maybe Text)
+    , _sdsOwnerId :: !(Maybe Text)
+    , _sdsFault   :: !(Maybe SpotInstanceStateFault)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotDatafeedSubscription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdsState'
+--
+-- * 'sdsPrefix'
+--
+-- * 'sdsBucket'
+--
+-- * 'sdsOwnerId'
+--
+-- * 'sdsFault'
+spotDatafeedSubscription
+    :: SpotDatafeedSubscription
+spotDatafeedSubscription =
+    SpotDatafeedSubscription'
+    { _sdsState = Nothing
+    , _sdsPrefix = Nothing
+    , _sdsBucket = Nothing
+    , _sdsOwnerId = Nothing
+    , _sdsFault = Nothing
+    }
+
+-- | The state of the Spot instance data feed subscription.
+sdsState :: Lens' SpotDatafeedSubscription (Maybe DatafeedSubscriptionState)
+sdsState = lens _sdsState (\ s a -> s{_sdsState = a});
+
+-- | The prefix that is prepended to data feed files.
+sdsPrefix :: Lens' SpotDatafeedSubscription (Maybe Text)
+sdsPrefix = lens _sdsPrefix (\ s a -> s{_sdsPrefix = a});
+
+-- | The Amazon S3 bucket where the Spot instance data feed is located.
+sdsBucket :: Lens' SpotDatafeedSubscription (Maybe Text)
+sdsBucket = lens _sdsBucket (\ s a -> s{_sdsBucket = a});
+
+-- | The AWS account ID of the account.
+sdsOwnerId :: Lens' SpotDatafeedSubscription (Maybe Text)
+sdsOwnerId = lens _sdsOwnerId (\ s a -> s{_sdsOwnerId = a});
+
+-- | The fault codes for the Spot instance request, if any.
+sdsFault :: Lens' SpotDatafeedSubscription (Maybe SpotInstanceStateFault)
+sdsFault = lens _sdsFault (\ s a -> s{_sdsFault = a});
+
+instance FromXML SpotDatafeedSubscription where
+        parseXML x
+          = SpotDatafeedSubscription' <$>
+              (x .@? "state") <*> (x .@? "prefix") <*>
+                (x .@? "bucket")
+                <*> (x .@? "ownerId")
+                <*> (x .@? "fault")
+
+instance Hashable SpotDatafeedSubscription
+
+-- | Describes the launch specification for one or more Spot instances.
+--
+-- /See:/ 'spotFleetLaunchSpecification' smart constructor.
+data SpotFleetLaunchSpecification = SpotFleetLaunchSpecification'
+    { _sflsSecurityGroups      :: !(Maybe [GroupIdentifier])
+    , _sflsSpotPrice           :: !(Maybe Text)
+    , _sflsWeightedCapacity    :: !(Maybe Double)
+    , _sflsKeyName             :: !(Maybe Text)
+    , _sflsNetworkInterfaces   :: !(Maybe [InstanceNetworkInterfaceSpecification])
+    , _sflsRAMDiskId           :: !(Maybe Text)
+    , _sflsSubnetId            :: !(Maybe Text)
+    , _sflsKernelId            :: !(Maybe Text)
+    , _sflsInstanceType        :: !(Maybe InstanceType)
+    , _sflsEBSOptimized        :: !(Maybe Bool)
+    , _sflsUserData            :: !(Maybe Text)
+    , _sflsMonitoring          :: !(Maybe SpotFleetMonitoring)
+    , _sflsIAMInstanceProfile  :: !(Maybe IAMInstanceProfileSpecification)
+    , _sflsImageId             :: !(Maybe Text)
+    , _sflsAddressingType      :: !(Maybe Text)
+    , _sflsBlockDeviceMappings :: !(Maybe [BlockDeviceMapping])
+    , _sflsPlacement           :: !(Maybe SpotPlacement)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotFleetLaunchSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sflsSecurityGroups'
+--
+-- * 'sflsSpotPrice'
+--
+-- * 'sflsWeightedCapacity'
+--
+-- * 'sflsKeyName'
+--
+-- * 'sflsNetworkInterfaces'
+--
+-- * 'sflsRAMDiskId'
+--
+-- * 'sflsSubnetId'
+--
+-- * 'sflsKernelId'
+--
+-- * 'sflsInstanceType'
+--
+-- * 'sflsEBSOptimized'
+--
+-- * 'sflsUserData'
+--
+-- * 'sflsMonitoring'
+--
+-- * 'sflsIAMInstanceProfile'
+--
+-- * 'sflsImageId'
+--
+-- * 'sflsAddressingType'
+--
+-- * 'sflsBlockDeviceMappings'
+--
+-- * 'sflsPlacement'
+spotFleetLaunchSpecification
+    :: SpotFleetLaunchSpecification
+spotFleetLaunchSpecification =
+    SpotFleetLaunchSpecification'
+    { _sflsSecurityGroups = Nothing
+    , _sflsSpotPrice = Nothing
+    , _sflsWeightedCapacity = Nothing
+    , _sflsKeyName = Nothing
+    , _sflsNetworkInterfaces = Nothing
+    , _sflsRAMDiskId = Nothing
+    , _sflsSubnetId = Nothing
+    , _sflsKernelId = Nothing
+    , _sflsInstanceType = Nothing
+    , _sflsEBSOptimized = Nothing
+    , _sflsUserData = Nothing
+    , _sflsMonitoring = Nothing
+    , _sflsIAMInstanceProfile = Nothing
+    , _sflsImageId = Nothing
+    , _sflsAddressingType = Nothing
+    , _sflsBlockDeviceMappings = Nothing
+    , _sflsPlacement = Nothing
+    }
+
+-- | One or more security groups. When requesting instances in a VPC, you
+-- must specify the IDs of the security groups. When requesting instances
+-- in EC2-Classic, you can specify the names or the IDs of the security
+-- groups.
+sflsSecurityGroups :: Lens' SpotFleetLaunchSpecification [GroupIdentifier]
+sflsSecurityGroups = lens _sflsSecurityGroups (\ s a -> s{_sflsSecurityGroups = a}) . _Default . _Coerce;
+
+-- | The bid price per unit hour for the specified instance type. If this
+-- value is not specified, the default is the Spot bid price specified for
+-- the fleet. To determine the bid price per unit hour, divide the Spot bid
+-- price by the value of 'WeightedCapacity'.
+sflsSpotPrice :: Lens' SpotFleetLaunchSpecification (Maybe Text)
+sflsSpotPrice = lens _sflsSpotPrice (\ s a -> s{_sflsSpotPrice = a});
+
+-- | The number of units provided by the specified instance type. These are
+-- the same units that you chose to set the target capacity in terms
+-- (instances or a performance characteristic such as vCPUs, memory, or
+-- I\/O).
+--
+-- If the target capacity divided by this value is not a whole number, we
+-- round the number of instances to the next whole number. If this value is
+-- not specified, the default is 1.
+sflsWeightedCapacity :: Lens' SpotFleetLaunchSpecification (Maybe Double)
+sflsWeightedCapacity = lens _sflsWeightedCapacity (\ s a -> s{_sflsWeightedCapacity = a});
+
+-- | The name of the key pair.
+sflsKeyName :: Lens' SpotFleetLaunchSpecification (Maybe Text)
+sflsKeyName = lens _sflsKeyName (\ s a -> s{_sflsKeyName = a});
+
+-- | One or more network interfaces.
+sflsNetworkInterfaces :: Lens' SpotFleetLaunchSpecification [InstanceNetworkInterfaceSpecification]
+sflsNetworkInterfaces = lens _sflsNetworkInterfaces (\ s a -> s{_sflsNetworkInterfaces = a}) . _Default . _Coerce;
+
+-- | The ID of the RAM disk.
+sflsRAMDiskId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
+sflsRAMDiskId = lens _sflsRAMDiskId (\ s a -> s{_sflsRAMDiskId = a});
+
+-- | The ID of the subnet in which to launch the instances. To specify
+-- multiple subnets, separate them using commas; for example,
+-- \"subnet-a61dafcf, subnet-65ea5f08\".
+sflsSubnetId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
+sflsSubnetId = lens _sflsSubnetId (\ s a -> s{_sflsSubnetId = a});
+
+-- | The ID of the kernel.
+sflsKernelId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
+sflsKernelId = lens _sflsKernelId (\ s a -> s{_sflsKernelId = a});
+
+-- | The instance type.
+sflsInstanceType :: Lens' SpotFleetLaunchSpecification (Maybe InstanceType)
+sflsInstanceType = lens _sflsInstanceType (\ s a -> s{_sflsInstanceType = a});
+
+-- | Indicates whether the instances are optimized for EBS I\/O. This
+-- optimization provides dedicated throughput to Amazon EBS and an
+-- optimized configuration stack to provide optimal EBS I\/O performance.
+-- This optimization isn\'t available with all instance types. Additional
+-- usage charges apply when using an EBS Optimized instance.
+--
+-- Default: 'false'
+sflsEBSOptimized :: Lens' SpotFleetLaunchSpecification (Maybe Bool)
+sflsEBSOptimized = lens _sflsEBSOptimized (\ s a -> s{_sflsEBSOptimized = a});
+
+-- | The Base64-encoded MIME user data to make available to the instances.
+sflsUserData :: Lens' SpotFleetLaunchSpecification (Maybe Text)
+sflsUserData = lens _sflsUserData (\ s a -> s{_sflsUserData = a});
+
+-- | Enable or disable monitoring for the instances.
+sflsMonitoring :: Lens' SpotFleetLaunchSpecification (Maybe SpotFleetMonitoring)
+sflsMonitoring = lens _sflsMonitoring (\ s a -> s{_sflsMonitoring = a});
+
+-- | The IAM instance profile.
+sflsIAMInstanceProfile :: Lens' SpotFleetLaunchSpecification (Maybe IAMInstanceProfileSpecification)
+sflsIAMInstanceProfile = lens _sflsIAMInstanceProfile (\ s a -> s{_sflsIAMInstanceProfile = a});
+
+-- | The ID of the AMI.
+sflsImageId :: Lens' SpotFleetLaunchSpecification (Maybe Text)
+sflsImageId = lens _sflsImageId (\ s a -> s{_sflsImageId = a});
+
+-- | Deprecated.
+sflsAddressingType :: Lens' SpotFleetLaunchSpecification (Maybe Text)
+sflsAddressingType = lens _sflsAddressingType (\ s a -> s{_sflsAddressingType = a});
+
+-- | One or more block device mapping entries.
+sflsBlockDeviceMappings :: Lens' SpotFleetLaunchSpecification [BlockDeviceMapping]
+sflsBlockDeviceMappings = lens _sflsBlockDeviceMappings (\ s a -> s{_sflsBlockDeviceMappings = a}) . _Default . _Coerce;
+
+-- | The placement information.
+sflsPlacement :: Lens' SpotFleetLaunchSpecification (Maybe SpotPlacement)
+sflsPlacement = lens _sflsPlacement (\ s a -> s{_sflsPlacement = a});
+
+instance FromXML SpotFleetLaunchSpecification where
+        parseXML x
+          = SpotFleetLaunchSpecification' <$>
+              (x .@? "groupSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "spotPrice")
+                <*> (x .@? "weightedCapacity")
+                <*> (x .@? "keyName")
+                <*>
+                (x .@? "networkInterfaceSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "ramdiskId")
+                <*> (x .@? "subnetId")
+                <*> (x .@? "kernelId")
+                <*> (x .@? "instanceType")
+                <*> (x .@? "ebsOptimized")
+                <*> (x .@? "userData")
+                <*> (x .@? "monitoring")
+                <*> (x .@? "iamInstanceProfile")
+                <*> (x .@? "imageId")
+                <*> (x .@? "addressingType")
+                <*>
+                (x .@? "blockDeviceMapping" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "placement")
+
+instance Hashable SpotFleetLaunchSpecification
+
+instance ToQuery SpotFleetLaunchSpecification where
+        toQuery SpotFleetLaunchSpecification'{..}
+          = mconcat
+              [toQuery
+                 (toQueryList "GroupSet" <$> _sflsSecurityGroups),
+               "SpotPrice" =: _sflsSpotPrice,
+               "WeightedCapacity" =: _sflsWeightedCapacity,
+               "KeyName" =: _sflsKeyName,
+               toQuery
+                 (toQueryList "NetworkInterfaceSet" <$>
+                    _sflsNetworkInterfaces),
+               "RamdiskId" =: _sflsRAMDiskId,
+               "SubnetId" =: _sflsSubnetId,
+               "KernelId" =: _sflsKernelId,
+               "InstanceType" =: _sflsInstanceType,
+               "EbsOptimized" =: _sflsEBSOptimized,
+               "UserData" =: _sflsUserData,
+               "Monitoring" =: _sflsMonitoring,
+               "IamInstanceProfile" =: _sflsIAMInstanceProfile,
+               "ImageId" =: _sflsImageId,
+               "AddressingType" =: _sflsAddressingType,
+               toQuery
+                 (toQueryList "BlockDeviceMapping" <$>
+                    _sflsBlockDeviceMappings),
+               "Placement" =: _sflsPlacement]
+
+-- | Describes whether monitoring is enabled.
+--
+-- /See:/ 'spotFleetMonitoring' smart constructor.
+newtype SpotFleetMonitoring = SpotFleetMonitoring'
+    { _sfmEnabled :: Maybe Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotFleetMonitoring' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfmEnabled'
+spotFleetMonitoring
+    :: SpotFleetMonitoring
+spotFleetMonitoring =
+    SpotFleetMonitoring'
+    { _sfmEnabled = Nothing
+    }
+
+-- | Enables monitoring for the instance.
+--
+-- Default: 'false'
+sfmEnabled :: Lens' SpotFleetMonitoring (Maybe Bool)
+sfmEnabled = lens _sfmEnabled (\ s a -> s{_sfmEnabled = a});
+
+instance FromXML SpotFleetMonitoring where
+        parseXML x
+          = SpotFleetMonitoring' <$> (x .@? "enabled")
+
+instance Hashable SpotFleetMonitoring
+
+instance ToQuery SpotFleetMonitoring where
+        toQuery SpotFleetMonitoring'{..}
+          = mconcat ["Enabled" =: _sfmEnabled]
+
+-- | Describes a Spot fleet request.
+--
+-- /See:/ 'spotFleetRequestConfig' smart constructor.
+data SpotFleetRequestConfig = SpotFleetRequestConfig'
+    { _sfrcSpotFleetRequestId     :: !Text
+    , _sfrcSpotFleetRequestState  :: !BatchState
+    , _sfrcSpotFleetRequestConfig :: !SpotFleetRequestConfigData
+    , _sfrcCreateTime             :: !ISO8601
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotFleetRequestConfig' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfrcSpotFleetRequestId'
+--
+-- * 'sfrcSpotFleetRequestState'
+--
+-- * 'sfrcSpotFleetRequestConfig'
+--
+-- * 'sfrcCreateTime'
+spotFleetRequestConfig
+    :: Text -- ^ 'sfrcSpotFleetRequestId'
+    -> BatchState -- ^ 'sfrcSpotFleetRequestState'
+    -> SpotFleetRequestConfigData -- ^ 'sfrcSpotFleetRequestConfig'
+    -> UTCTime -- ^ 'sfrcCreateTime'
+    -> SpotFleetRequestConfig
+spotFleetRequestConfig pSpotFleetRequestId_ pSpotFleetRequestState_ pSpotFleetRequestConfig_ pCreateTime_ =
+    SpotFleetRequestConfig'
+    { _sfrcSpotFleetRequestId = pSpotFleetRequestId_
+    , _sfrcSpotFleetRequestState = pSpotFleetRequestState_
+    , _sfrcSpotFleetRequestConfig = pSpotFleetRequestConfig_
+    , _sfrcCreateTime = _Time # pCreateTime_
+    }
+
+-- | The ID of the Spot fleet request.
+sfrcSpotFleetRequestId :: Lens' SpotFleetRequestConfig Text
+sfrcSpotFleetRequestId = lens _sfrcSpotFleetRequestId (\ s a -> s{_sfrcSpotFleetRequestId = a});
+
+-- | The state of the Spot fleet request.
+sfrcSpotFleetRequestState :: Lens' SpotFleetRequestConfig BatchState
+sfrcSpotFleetRequestState = lens _sfrcSpotFleetRequestState (\ s a -> s{_sfrcSpotFleetRequestState = a});
+
+-- | Information about the configuration of the Spot fleet request.
+sfrcSpotFleetRequestConfig :: Lens' SpotFleetRequestConfig SpotFleetRequestConfigData
+sfrcSpotFleetRequestConfig = lens _sfrcSpotFleetRequestConfig (\ s a -> s{_sfrcSpotFleetRequestConfig = a});
+
+-- | The creation date and time of the request.
+sfrcCreateTime :: Lens' SpotFleetRequestConfig UTCTime
+sfrcCreateTime = lens _sfrcCreateTime (\ s a -> s{_sfrcCreateTime = a}) . _Time;
+
+instance FromXML SpotFleetRequestConfig where
+        parseXML x
+          = SpotFleetRequestConfig' <$>
+              (x .@ "spotFleetRequestId") <*>
+                (x .@ "spotFleetRequestState")
+                <*> (x .@ "spotFleetRequestConfig")
+                <*> (x .@ "createTime")
+
+instance Hashable SpotFleetRequestConfig
+
+-- | Describes the configuration of a Spot fleet request.
+--
+-- /See:/ 'spotFleetRequestConfigData' smart constructor.
+data SpotFleetRequestConfigData = SpotFleetRequestConfigData'
+    { _sfrcdClientToken                      :: !(Maybe Text)
+    , _sfrcdExcessCapacityTerminationPolicy  :: !(Maybe ExcessCapacityTerminationPolicy)
+    , _sfrcdValidUntil                       :: !(Maybe ISO8601)
+    , _sfrcdTerminateInstancesWithExpiration :: !(Maybe Bool)
+    , _sfrcdValidFrom                        :: !(Maybe ISO8601)
+    , _sfrcdAllocationStrategy               :: !(Maybe AllocationStrategy)
+    , _sfrcdSpotPrice                        :: !Text
+    , _sfrcdTargetCapacity                   :: !Int
+    , _sfrcdIAMFleetRole                     :: !Text
+    , _sfrcdLaunchSpecifications             :: !(List1 SpotFleetLaunchSpecification)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotFleetRequestConfigData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfrcdClientToken'
+--
+-- * 'sfrcdExcessCapacityTerminationPolicy'
+--
+-- * 'sfrcdValidUntil'
+--
+-- * 'sfrcdTerminateInstancesWithExpiration'
+--
+-- * 'sfrcdValidFrom'
+--
+-- * 'sfrcdAllocationStrategy'
+--
+-- * 'sfrcdSpotPrice'
+--
+-- * 'sfrcdTargetCapacity'
+--
+-- * 'sfrcdIAMFleetRole'
+--
+-- * 'sfrcdLaunchSpecifications'
+spotFleetRequestConfigData
+    :: Text -- ^ 'sfrcdSpotPrice'
+    -> Int -- ^ 'sfrcdTargetCapacity'
+    -> Text -- ^ 'sfrcdIAMFleetRole'
+    -> NonEmpty SpotFleetLaunchSpecification -- ^ 'sfrcdLaunchSpecifications'
+    -> SpotFleetRequestConfigData
+spotFleetRequestConfigData pSpotPrice_ pTargetCapacity_ pIAMFleetRole_ pLaunchSpecifications_ =
+    SpotFleetRequestConfigData'
+    { _sfrcdClientToken = Nothing
+    , _sfrcdExcessCapacityTerminationPolicy = Nothing
+    , _sfrcdValidUntil = Nothing
+    , _sfrcdTerminateInstancesWithExpiration = Nothing
+    , _sfrcdValidFrom = Nothing
+    , _sfrcdAllocationStrategy = Nothing
+    , _sfrcdSpotPrice = pSpotPrice_
+    , _sfrcdTargetCapacity = pTargetCapacity_
+    , _sfrcdIAMFleetRole = pIAMFleetRole_
+    , _sfrcdLaunchSpecifications = _List1 # pLaunchSpecifications_
+    }
+
+-- | A unique, case-sensitive identifier you provide to ensure idempotency of
+-- your listings. This helps avoid duplicate listings. For more
+-- information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
+sfrcdClientToken :: Lens' SpotFleetRequestConfigData (Maybe Text)
+sfrcdClientToken = lens _sfrcdClientToken (\ s a -> s{_sfrcdClientToken = a});
+
+-- | Indicates whether running Spot instances should be terminated if the
+-- target capacity of the Spot fleet request is decreased below the current
+-- size of the Spot fleet.
+sfrcdExcessCapacityTerminationPolicy :: Lens' SpotFleetRequestConfigData (Maybe ExcessCapacityTerminationPolicy)
+sfrcdExcessCapacityTerminationPolicy = lens _sfrcdExcessCapacityTerminationPolicy (\ s a -> s{_sfrcdExcessCapacityTerminationPolicy = a});
+
+-- | The end date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). At this point, no new Spot instance
+-- requests are placed or enabled to fulfill the request.
+sfrcdValidUntil :: Lens' SpotFleetRequestConfigData (Maybe UTCTime)
+sfrcdValidUntil = lens _sfrcdValidUntil (\ s a -> s{_sfrcdValidUntil = a}) . mapping _Time;
+
+-- | Indicates whether running Spot instances should be terminated when the
+-- Spot fleet request expires.
+sfrcdTerminateInstancesWithExpiration :: Lens' SpotFleetRequestConfigData (Maybe Bool)
+sfrcdTerminateInstancesWithExpiration = lens _sfrcdTerminateInstancesWithExpiration (\ s a -> s{_sfrcdTerminateInstancesWithExpiration = a});
+
+-- | The start date and time of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The default is to start fulfilling
+-- the request immediately.
+sfrcdValidFrom :: Lens' SpotFleetRequestConfigData (Maybe UTCTime)
+sfrcdValidFrom = lens _sfrcdValidFrom (\ s a -> s{_sfrcdValidFrom = a}) . mapping _Time;
+
+-- | Indicates how to allocate the target capacity across the Spot pools
+-- specified by the Spot fleet request. The default is 'lowestPrice'.
+sfrcdAllocationStrategy :: Lens' SpotFleetRequestConfigData (Maybe AllocationStrategy)
+sfrcdAllocationStrategy = lens _sfrcdAllocationStrategy (\ s a -> s{_sfrcdAllocationStrategy = a});
+
+-- | The bid price per unit hour.
+sfrcdSpotPrice :: Lens' SpotFleetRequestConfigData Text
+sfrcdSpotPrice = lens _sfrcdSpotPrice (\ s a -> s{_sfrcdSpotPrice = a});
+
+-- | The number of units to request. You can choose to set the target
+-- capacity in terms of instances or a performance characteristic that is
+-- important to your application workload, such as vCPUs, memory, or I\/O.
+sfrcdTargetCapacity :: Lens' SpotFleetRequestConfigData Int
+sfrcdTargetCapacity = lens _sfrcdTargetCapacity (\ s a -> s{_sfrcdTargetCapacity = a});
+
+-- | Grants the Spot fleet permission to terminate Spot instances on your
+-- behalf when you cancel its Spot fleet request using
+-- < CancelSpotFleetRequests> or when the Spot fleet request expires, if
+-- you set 'terminateInstancesWithExpiration'.
+sfrcdIAMFleetRole :: Lens' SpotFleetRequestConfigData Text
+sfrcdIAMFleetRole = lens _sfrcdIAMFleetRole (\ s a -> s{_sfrcdIAMFleetRole = a});
+
+-- | Information about the launch specifications for the Spot fleet request.
+sfrcdLaunchSpecifications :: Lens' SpotFleetRequestConfigData (NonEmpty SpotFleetLaunchSpecification)
+sfrcdLaunchSpecifications = lens _sfrcdLaunchSpecifications (\ s a -> s{_sfrcdLaunchSpecifications = a}) . _List1;
+
+instance FromXML SpotFleetRequestConfigData where
+        parseXML x
+          = SpotFleetRequestConfigData' <$>
+              (x .@? "clientToken") <*>
+                (x .@? "excessCapacityTerminationPolicy")
+                <*> (x .@? "validUntil")
+                <*> (x .@? "terminateInstancesWithExpiration")
+                <*> (x .@? "validFrom")
+                <*> (x .@? "allocationStrategy")
+                <*> (x .@ "spotPrice")
+                <*> (x .@ "targetCapacity")
+                <*> (x .@ "iamFleetRole")
+                <*>
+                (x .@? "launchSpecifications" .!@ mempty >>=
+                   parseXMLList1 "item")
+
+instance Hashable SpotFleetRequestConfigData
+
+instance ToQuery SpotFleetRequestConfigData where
+        toQuery SpotFleetRequestConfigData'{..}
+          = mconcat
+              ["ClientToken" =: _sfrcdClientToken,
+               "ExcessCapacityTerminationPolicy" =:
+                 _sfrcdExcessCapacityTerminationPolicy,
+               "ValidUntil" =: _sfrcdValidUntil,
+               "TerminateInstancesWithExpiration" =:
+                 _sfrcdTerminateInstancesWithExpiration,
+               "ValidFrom" =: _sfrcdValidFrom,
+               "AllocationStrategy" =: _sfrcdAllocationStrategy,
+               "SpotPrice" =: _sfrcdSpotPrice,
+               "TargetCapacity" =: _sfrcdTargetCapacity,
+               "IamFleetRole" =: _sfrcdIAMFleetRole,
+               toQueryList "LaunchSpecifications"
+                 _sfrcdLaunchSpecifications]
+
+-- | Describes a Spot instance request.
+--
+-- /See:/ 'spotInstanceRequest' smart constructor.
+data SpotInstanceRequest = SpotInstanceRequest'
+    { _sirInstanceId               :: !(Maybe Text)
+    , _sirStatus                   :: !(Maybe SpotInstanceStatus)
+    , _sirState                    :: !(Maybe SpotInstanceState)
+    , _sirActualBlockHourlyPrice   :: !(Maybe Text)
+    , _sirBlockDurationMinutes     :: !(Maybe Int)
+    , _sirProductDescription       :: !(Maybe RIProductDescription)
+    , _sirSpotPrice                :: !(Maybe Text)
+    , _sirLaunchSpecification      :: !(Maybe LaunchSpecification)
+    , _sirAvailabilityZoneGroup    :: !(Maybe Text)
+    , _sirLaunchedAvailabilityZone :: !(Maybe Text)
+    , _sirValidUntil               :: !(Maybe ISO8601)
+    , _sirLaunchGroup              :: !(Maybe Text)
+    , _sirFault                    :: !(Maybe SpotInstanceStateFault)
+    , _sirSpotInstanceRequestId    :: !(Maybe Text)
+    , _sirType                     :: !(Maybe SpotInstanceType)
+    , _sirValidFrom                :: !(Maybe ISO8601)
+    , _sirCreateTime               :: !(Maybe ISO8601)
+    , _sirTags                     :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotInstanceRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sirInstanceId'
+--
+-- * 'sirStatus'
+--
+-- * 'sirState'
+--
+-- * 'sirActualBlockHourlyPrice'
+--
+-- * 'sirBlockDurationMinutes'
+--
+-- * 'sirProductDescription'
+--
+-- * 'sirSpotPrice'
+--
+-- * 'sirLaunchSpecification'
+--
+-- * 'sirAvailabilityZoneGroup'
+--
+-- * 'sirLaunchedAvailabilityZone'
+--
+-- * 'sirValidUntil'
+--
+-- * 'sirLaunchGroup'
+--
+-- * 'sirFault'
+--
+-- * 'sirSpotInstanceRequestId'
+--
+-- * 'sirType'
+--
+-- * 'sirValidFrom'
+--
+-- * 'sirCreateTime'
+--
+-- * 'sirTags'
+spotInstanceRequest
+    :: SpotInstanceRequest
+spotInstanceRequest =
+    SpotInstanceRequest'
+    { _sirInstanceId = Nothing
+    , _sirStatus = Nothing
+    , _sirState = Nothing
+    , _sirActualBlockHourlyPrice = Nothing
+    , _sirBlockDurationMinutes = Nothing
+    , _sirProductDescription = Nothing
+    , _sirSpotPrice = Nothing
+    , _sirLaunchSpecification = Nothing
+    , _sirAvailabilityZoneGroup = Nothing
+    , _sirLaunchedAvailabilityZone = Nothing
+    , _sirValidUntil = Nothing
+    , _sirLaunchGroup = Nothing
+    , _sirFault = Nothing
+    , _sirSpotInstanceRequestId = Nothing
+    , _sirType = Nothing
+    , _sirValidFrom = Nothing
+    , _sirCreateTime = Nothing
+    , _sirTags = Nothing
+    }
+
+-- | The instance ID, if an instance has been launched to fulfill the Spot
+-- instance request.
+sirInstanceId :: Lens' SpotInstanceRequest (Maybe Text)
+sirInstanceId = lens _sirInstanceId (\ s a -> s{_sirInstanceId = a});
+
+-- | The status code and status message describing the Spot instance request.
+sirStatus :: Lens' SpotInstanceRequest (Maybe SpotInstanceStatus)
+sirStatus = lens _sirStatus (\ s a -> s{_sirStatus = a});
+
+-- | The state of the Spot instance request. Spot bid status information can
+-- help you track your Spot instance requests. For more information, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html Spot Bid Status>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+sirState :: Lens' SpotInstanceRequest (Maybe SpotInstanceState)
+sirState = lens _sirState (\ s a -> s{_sirState = a});
+
+-- | If you specified a duration and your Spot instance request was
+-- fulfilled, this is the fixed hourly price in effect for the Spot
+-- instance while it runs.
+sirActualBlockHourlyPrice :: Lens' SpotInstanceRequest (Maybe Text)
+sirActualBlockHourlyPrice = lens _sirActualBlockHourlyPrice (\ s a -> s{_sirActualBlockHourlyPrice = a});
+
+-- | The duration for the Spot instance, in minutes.
+sirBlockDurationMinutes :: Lens' SpotInstanceRequest (Maybe Int)
+sirBlockDurationMinutes = lens _sirBlockDurationMinutes (\ s a -> s{_sirBlockDurationMinutes = a});
+
+-- | The product description associated with the Spot instance.
+sirProductDescription :: Lens' SpotInstanceRequest (Maybe RIProductDescription)
+sirProductDescription = lens _sirProductDescription (\ s a -> s{_sirProductDescription = a});
+
+-- | The maximum hourly price (bid) for the Spot instance launched to fulfill
+-- the request.
+sirSpotPrice :: Lens' SpotInstanceRequest (Maybe Text)
+sirSpotPrice = lens _sirSpotPrice (\ s a -> s{_sirSpotPrice = a});
+
+-- | Additional information for launching instances.
+sirLaunchSpecification :: Lens' SpotInstanceRequest (Maybe LaunchSpecification)
+sirLaunchSpecification = lens _sirLaunchSpecification (\ s a -> s{_sirLaunchSpecification = a});
+
+-- | The Availability Zone group. If you specify the same Availability Zone
+-- group for all Spot instance requests, all Spot instances are launched in
+-- the same Availability Zone.
+sirAvailabilityZoneGroup :: Lens' SpotInstanceRequest (Maybe Text)
+sirAvailabilityZoneGroup = lens _sirAvailabilityZoneGroup (\ s a -> s{_sirAvailabilityZoneGroup = a});
+
+-- | The Availability Zone in which the bid is launched.
+sirLaunchedAvailabilityZone :: Lens' SpotInstanceRequest (Maybe Text)
+sirLaunchedAvailabilityZone = lens _sirLaunchedAvailabilityZone (\ s a -> s{_sirLaunchedAvailabilityZone = a});
+
+-- | The end date of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). If this is a one-time request, it
+-- remains active until all instances launch, the request is canceled, or
+-- this date is reached. If the request is persistent, it remains active
+-- until it is canceled or this date is reached.
+sirValidUntil :: Lens' SpotInstanceRequest (Maybe UTCTime)
+sirValidUntil = lens _sirValidUntil (\ s a -> s{_sirValidUntil = a}) . mapping _Time;
+
+-- | The instance launch group. Launch groups are Spot instances that launch
+-- together and terminate together.
+sirLaunchGroup :: Lens' SpotInstanceRequest (Maybe Text)
+sirLaunchGroup = lens _sirLaunchGroup (\ s a -> s{_sirLaunchGroup = a});
+
+-- | The fault codes for the Spot instance request, if any.
+sirFault :: Lens' SpotInstanceRequest (Maybe SpotInstanceStateFault)
+sirFault = lens _sirFault (\ s a -> s{_sirFault = a});
+
+-- | The ID of the Spot instance request.
+sirSpotInstanceRequestId :: Lens' SpotInstanceRequest (Maybe Text)
+sirSpotInstanceRequestId = lens _sirSpotInstanceRequestId (\ s a -> s{_sirSpotInstanceRequestId = a});
+
+-- | The Spot instance request type.
+sirType :: Lens' SpotInstanceRequest (Maybe SpotInstanceType)
+sirType = lens _sirType (\ s a -> s{_sirType = a});
+
+-- | The start date of the request, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z). The request becomes active at this
+-- date and time.
+sirValidFrom :: Lens' SpotInstanceRequest (Maybe UTCTime)
+sirValidFrom = lens _sirValidFrom (\ s a -> s{_sirValidFrom = a}) . mapping _Time;
+
+-- | The date and time when the Spot instance request was created, in UTC
+-- format (for example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+sirCreateTime :: Lens' SpotInstanceRequest (Maybe UTCTime)
+sirCreateTime = lens _sirCreateTime (\ s a -> s{_sirCreateTime = a}) . mapping _Time;
+
+-- | Any tags assigned to the resource.
+sirTags :: Lens' SpotInstanceRequest [Tag]
+sirTags = lens _sirTags (\ s a -> s{_sirTags = a}) . _Default . _Coerce;
+
+instance FromXML SpotInstanceRequest where
+        parseXML x
+          = SpotInstanceRequest' <$>
+              (x .@? "instanceId") <*> (x .@? "status") <*>
+                (x .@? "state")
+                <*> (x .@? "actualBlockHourlyPrice")
+                <*> (x .@? "blockDurationMinutes")
+                <*> (x .@? "productDescription")
+                <*> (x .@? "spotPrice")
+                <*> (x .@? "launchSpecification")
+                <*> (x .@? "availabilityZoneGroup")
+                <*> (x .@? "launchedAvailabilityZone")
+                <*> (x .@? "validUntil")
+                <*> (x .@? "launchGroup")
+                <*> (x .@? "fault")
+                <*> (x .@? "spotInstanceRequestId")
+                <*> (x .@? "type")
+                <*> (x .@? "validFrom")
+                <*> (x .@? "createTime")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable SpotInstanceRequest
+
+-- | Describes a Spot instance state change.
+--
+-- /See:/ 'spotInstanceStateFault' smart constructor.
+data SpotInstanceStateFault = SpotInstanceStateFault'
+    { _sisfCode    :: !(Maybe Text)
+    , _sisfMessage :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotInstanceStateFault' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sisfCode'
+--
+-- * 'sisfMessage'
+spotInstanceStateFault
+    :: SpotInstanceStateFault
+spotInstanceStateFault =
+    SpotInstanceStateFault'
+    { _sisfCode = Nothing
+    , _sisfMessage = Nothing
+    }
+
+-- | The reason code for the Spot instance state change.
+sisfCode :: Lens' SpotInstanceStateFault (Maybe Text)
+sisfCode = lens _sisfCode (\ s a -> s{_sisfCode = a});
+
+-- | The message for the Spot instance state change.
+sisfMessage :: Lens' SpotInstanceStateFault (Maybe Text)
+sisfMessage = lens _sisfMessage (\ s a -> s{_sisfMessage = a});
+
+instance FromXML SpotInstanceStateFault where
+        parseXML x
+          = SpotInstanceStateFault' <$>
+              (x .@? "code") <*> (x .@? "message")
+
+instance Hashable SpotInstanceStateFault
+
+-- | Describes the status of a Spot instance request.
+--
+-- /See:/ 'spotInstanceStatus' smart constructor.
+data SpotInstanceStatus = SpotInstanceStatus'
+    { _sisUpdateTime :: !(Maybe ISO8601)
+    , _sisCode       :: !(Maybe Text)
+    , _sisMessage    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotInstanceStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sisUpdateTime'
+--
+-- * 'sisCode'
+--
+-- * 'sisMessage'
+spotInstanceStatus
+    :: SpotInstanceStatus
+spotInstanceStatus =
+    SpotInstanceStatus'
+    { _sisUpdateTime = Nothing
+    , _sisCode = Nothing
+    , _sisMessage = Nothing
+    }
+
+-- | The date and time of the most recent status update, in UTC format (for
+-- example, /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+sisUpdateTime :: Lens' SpotInstanceStatus (Maybe UTCTime)
+sisUpdateTime = lens _sisUpdateTime (\ s a -> s{_sisUpdateTime = a}) . mapping _Time;
+
+-- | The status code. For a list of status codes, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-bid-status.html#spot-instance-bid-status-understand Spot Bid Status Codes>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+sisCode :: Lens' SpotInstanceStatus (Maybe Text)
+sisCode = lens _sisCode (\ s a -> s{_sisCode = a});
+
+-- | The description for the status code.
+sisMessage :: Lens' SpotInstanceStatus (Maybe Text)
+sisMessage = lens _sisMessage (\ s a -> s{_sisMessage = a});
+
+instance FromXML SpotInstanceStatus where
+        parseXML x
+          = SpotInstanceStatus' <$>
+              (x .@? "updateTime") <*> (x .@? "code") <*>
+                (x .@? "message")
+
+instance Hashable SpotInstanceStatus
+
+-- | Describes Spot instance placement.
+--
+-- /See:/ 'spotPlacement' smart constructor.
+data SpotPlacement = SpotPlacement'
+    { _spAvailabilityZone :: !(Maybe Text)
+    , _spGroupName        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotPlacement' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'spAvailabilityZone'
+--
+-- * 'spGroupName'
+spotPlacement
+    :: SpotPlacement
+spotPlacement =
+    SpotPlacement'
+    { _spAvailabilityZone = Nothing
+    , _spGroupName = Nothing
+    }
+
+-- | The Availability Zone.
+--
+-- [Spot fleet only] To specify multiple Availability Zones, separate them
+-- using commas; for example, \"us-west-2a, us-west-2b\".
+spAvailabilityZone :: Lens' SpotPlacement (Maybe Text)
+spAvailabilityZone = lens _spAvailabilityZone (\ s a -> s{_spAvailabilityZone = a});
+
+-- | The name of the placement group (for cluster instances).
+spGroupName :: Lens' SpotPlacement (Maybe Text)
+spGroupName = lens _spGroupName (\ s a -> s{_spGroupName = a});
+
+instance FromXML SpotPlacement where
+        parseXML x
+          = SpotPlacement' <$>
+              (x .@? "availabilityZone") <*> (x .@? "groupName")
+
+instance Hashable SpotPlacement
+
+instance ToQuery SpotPlacement where
+        toQuery SpotPlacement'{..}
+          = mconcat
+              ["AvailabilityZone" =: _spAvailabilityZone,
+               "GroupName" =: _spGroupName]
+
+-- | Describes the maximum hourly price (bid) for any Spot instance launched
+-- to fulfill the request.
+--
+-- /See:/ 'spotPrice' smart constructor.
+data SpotPrice = SpotPrice'
+    { _sProductDescription :: !(Maybe RIProductDescription)
+    , _sSpotPrice          :: !(Maybe Text)
+    , _sInstanceType       :: !(Maybe InstanceType)
+    , _sAvailabilityZone   :: !(Maybe Text)
+    , _sTimestamp          :: !(Maybe ISO8601)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SpotPrice' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sProductDescription'
+--
+-- * 'sSpotPrice'
+--
+-- * 'sInstanceType'
+--
+-- * 'sAvailabilityZone'
+--
+-- * 'sTimestamp'
+spotPrice
+    :: SpotPrice
+spotPrice =
+    SpotPrice'
+    { _sProductDescription = Nothing
+    , _sSpotPrice = Nothing
+    , _sInstanceType = Nothing
+    , _sAvailabilityZone = Nothing
+    , _sTimestamp = Nothing
+    }
+
+-- | A general description of the AMI.
+sProductDescription :: Lens' SpotPrice (Maybe RIProductDescription)
+sProductDescription = lens _sProductDescription (\ s a -> s{_sProductDescription = a});
+
+-- | The maximum price (bid) that you are willing to pay for a Spot instance.
+sSpotPrice :: Lens' SpotPrice (Maybe Text)
+sSpotPrice = lens _sSpotPrice (\ s a -> s{_sSpotPrice = a});
+
+-- | The instance type.
+sInstanceType :: Lens' SpotPrice (Maybe InstanceType)
+sInstanceType = lens _sInstanceType (\ s a -> s{_sInstanceType = a});
+
+-- | The Availability Zone.
+sAvailabilityZone :: Lens' SpotPrice (Maybe Text)
+sAvailabilityZone = lens _sAvailabilityZone (\ s a -> s{_sAvailabilityZone = a});
+
+-- | The date and time the request was created, in UTC format (for example,
+-- /YYYY/-/MM/-/DD/T/HH/:/MM/:/SS/Z).
+sTimestamp :: Lens' SpotPrice (Maybe UTCTime)
+sTimestamp = lens _sTimestamp (\ s a -> s{_sTimestamp = a}) . mapping _Time;
+
+instance FromXML SpotPrice where
+        parseXML x
+          = SpotPrice' <$>
+              (x .@? "productDescription") <*> (x .@? "spotPrice")
+                <*> (x .@? "instanceType")
+                <*> (x .@? "availabilityZone")
+                <*> (x .@? "timestamp")
+
+instance Hashable SpotPrice
+
+-- | Describes a state change.
+--
+-- /See:/ 'stateReason' smart constructor.
+data StateReason = StateReason'
+    { _srCode    :: !(Maybe Text)
+    , _srMessage :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StateReason' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srCode'
+--
+-- * 'srMessage'
+stateReason
+    :: StateReason
+stateReason =
+    StateReason'
+    { _srCode = Nothing
+    , _srMessage = Nothing
+    }
+
+-- | The reason code for the state change.
+srCode :: Lens' StateReason (Maybe Text)
+srCode = lens _srCode (\ s a -> s{_srCode = a});
+
+-- | The message for the state change.
+--
+-- -   'Server.SpotInstanceTermination': A Spot instance was terminated due
+--     to an increase in the market price.
+--
+-- -   'Server.InternalError': An internal error occurred during instance
+--     launch, resulting in termination.
+--
+-- -   'Server.InsufficientInstanceCapacity': There was insufficient
+--     instance capacity to satisfy the launch request.
+--
+-- -   'Client.InternalError': A client error caused the instance to
+--     terminate on launch.
+--
+-- -   'Client.InstanceInitiatedShutdown': The instance was shut down using
+--     the 'shutdown -h' command from the instance.
+--
+-- -   'Client.UserInitiatedShutdown': The instance was shut down using the
+--     Amazon EC2 API.
+--
+-- -   'Client.VolumeLimitExceeded': The limit on the number of EBS volumes
+--     or total storage was exceeded. Decrease usage or request an increase
+--     in your limits.
+--
+-- -   'Client.InvalidSnapshot.NotFound': The specified snapshot was not
+--     found.
+--
+srMessage :: Lens' StateReason (Maybe Text)
+srMessage = lens _srMessage (\ s a -> s{_srMessage = a});
+
+instance FromXML StateReason where
+        parseXML x
+          = StateReason' <$>
+              (x .@? "code") <*> (x .@? "message")
+
+instance Hashable StateReason
+
+-- | Describes the storage location for an instance store-backed AMI.
+--
+-- /See:/ 'storage' smart constructor.
+newtype Storage = Storage'
+    { _sS3 :: Maybe S3Storage
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Storage' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sS3'
+storage
+    :: Storage
+storage =
+    Storage'
+    { _sS3 = Nothing
+    }
+
+-- | An Amazon S3 storage location.
+sS3 :: Lens' Storage (Maybe S3Storage)
+sS3 = lens _sS3 (\ s a -> s{_sS3 = a});
+
+instance FromXML Storage where
+        parseXML x = Storage' <$> (x .@? "S3")
+
+instance Hashable Storage
+
+instance ToQuery Storage where
+        toQuery Storage'{..} = mconcat ["S3" =: _sS3]
+
+-- | Describes a subnet.
+--
+-- /See:/ 'subnet' smart constructor.
+data Subnet = Subnet'
+    { _subMapPublicIPOnLaunch     :: !(Maybe Bool)
+    , _subDefaultForAz            :: !(Maybe Bool)
+    , _subTags                    :: !(Maybe [Tag])
+    , _subAvailabilityZone        :: !Text
+    , _subAvailableIPAddressCount :: !Int
+    , _subCIdRBlock               :: !Text
+    , _subState                   :: !SubnetState
+    , _subSubnetId                :: !Text
+    , _subVPCId                   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Subnet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'subMapPublicIPOnLaunch'
+--
+-- * 'subDefaultForAz'
+--
+-- * 'subTags'
+--
+-- * 'subAvailabilityZone'
+--
+-- * 'subAvailableIPAddressCount'
+--
+-- * 'subCIdRBlock'
+--
+-- * 'subState'
+--
+-- * 'subSubnetId'
+--
+-- * 'subVPCId'
+subnet
+    :: Text -- ^ 'subAvailabilityZone'
+    -> Int -- ^ 'subAvailableIPAddressCount'
+    -> Text -- ^ 'subCIdRBlock'
+    -> SubnetState -- ^ 'subState'
+    -> Text -- ^ 'subSubnetId'
+    -> Text -- ^ 'subVPCId'
+    -> Subnet
+subnet pAvailabilityZone_ pAvailableIPAddressCount_ pCIdRBlock_ pState_ pSubnetId_ pVPCId_ =
+    Subnet'
+    { _subMapPublicIPOnLaunch = Nothing
+    , _subDefaultForAz = Nothing
+    , _subTags = Nothing
+    , _subAvailabilityZone = pAvailabilityZone_
+    , _subAvailableIPAddressCount = pAvailableIPAddressCount_
+    , _subCIdRBlock = pCIdRBlock_
+    , _subState = pState_
+    , _subSubnetId = pSubnetId_
+    , _subVPCId = pVPCId_
+    }
+
+-- | Indicates whether instances launched in this subnet receive a public IP
+-- address.
+subMapPublicIPOnLaunch :: Lens' Subnet (Maybe Bool)
+subMapPublicIPOnLaunch = lens _subMapPublicIPOnLaunch (\ s a -> s{_subMapPublicIPOnLaunch = a});
+
+-- | Indicates whether this is the default subnet for the Availability Zone.
+subDefaultForAz :: Lens' Subnet (Maybe Bool)
+subDefaultForAz = lens _subDefaultForAz (\ s a -> s{_subDefaultForAz = a});
+
+-- | Any tags assigned to the subnet.
+subTags :: Lens' Subnet [Tag]
+subTags = lens _subTags (\ s a -> s{_subTags = a}) . _Default . _Coerce;
+
+-- | The Availability Zone of the subnet.
+subAvailabilityZone :: Lens' Subnet Text
+subAvailabilityZone = lens _subAvailabilityZone (\ s a -> s{_subAvailabilityZone = a});
+
+-- | The number of unused IP addresses in the subnet. Note that the IP
+-- addresses for any stopped instances are considered unavailable.
+subAvailableIPAddressCount :: Lens' Subnet Int
+subAvailableIPAddressCount = lens _subAvailableIPAddressCount (\ s a -> s{_subAvailableIPAddressCount = a});
+
+-- | The CIDR block assigned to the subnet.
+subCIdRBlock :: Lens' Subnet Text
+subCIdRBlock = lens _subCIdRBlock (\ s a -> s{_subCIdRBlock = a});
+
+-- | The current state of the subnet.
+subState :: Lens' Subnet SubnetState
+subState = lens _subState (\ s a -> s{_subState = a});
+
+-- | The ID of the subnet.
+subSubnetId :: Lens' Subnet Text
+subSubnetId = lens _subSubnetId (\ s a -> s{_subSubnetId = a});
+
+-- | The ID of the VPC the subnet is in.
+subVPCId :: Lens' Subnet Text
+subVPCId = lens _subVPCId (\ s a -> s{_subVPCId = a});
+
+instance FromXML Subnet where
+        parseXML x
+          = Subnet' <$>
+              (x .@? "mapPublicIpOnLaunch") <*>
+                (x .@? "defaultForAz")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "availabilityZone")
+                <*> (x .@ "availableIpAddressCount")
+                <*> (x .@ "cidrBlock")
+                <*> (x .@ "state")
+                <*> (x .@ "subnetId")
+                <*> (x .@ "vpcId")
+
+instance Hashable Subnet
+
+-- | Describes a tag.
+--
+-- /See:/ 'tag' smart constructor.
+data Tag = Tag'
+    { _tagKey   :: !Text
+    , _tagValue :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagKey'
+--
+-- * 'tagValue'
+tag
+    :: Text -- ^ 'tagKey'
+    -> Text -- ^ 'tagValue'
+    -> Tag
+tag pKey_ pValue_ =
+    Tag'
+    { _tagKey = pKey_
+    , _tagValue = pValue_
+    }
+
+-- | The key of the tag.
+--
+-- Constraints: Tag keys are case-sensitive and accept a maximum of 127
+-- Unicode characters. May not begin with 'aws:'
+tagKey :: Lens' Tag Text
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+
+-- | The value of the tag.
+--
+-- Constraints: Tag values are case-sensitive and accept a maximum of 255
+-- Unicode characters.
+tagValue :: Lens' Tag Text
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+
+instance FromXML Tag where
+        parseXML x = Tag' <$> (x .@ "key") <*> (x .@ "value")
+
+instance Hashable Tag
+
+instance ToQuery Tag where
+        toQuery Tag'{..}
+          = mconcat ["Key" =: _tagKey, "Value" =: _tagValue]
+
+-- | Describes a tag.
+--
+-- /See:/ 'tagDescription' smart constructor.
+data TagDescription = TagDescription'
+    { _tdResourceId   :: !Text
+    , _tdResourceType :: !ResourceType
+    , _tdKey          :: !Text
+    , _tdValue        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TagDescription' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdResourceId'
+--
+-- * 'tdResourceType'
+--
+-- * 'tdKey'
+--
+-- * 'tdValue'
+tagDescription
+    :: Text -- ^ 'tdResourceId'
+    -> ResourceType -- ^ 'tdResourceType'
+    -> Text -- ^ 'tdKey'
+    -> Text -- ^ 'tdValue'
+    -> TagDescription
+tagDescription pResourceId_ pResourceType_ pKey_ pValue_ =
+    TagDescription'
+    { _tdResourceId = pResourceId_
+    , _tdResourceType = pResourceType_
+    , _tdKey = pKey_
+    , _tdValue = pValue_
+    }
+
+-- | The ID of the resource. For example, 'ami-1a2b3c4d'.
+tdResourceId :: Lens' TagDescription Text
+tdResourceId = lens _tdResourceId (\ s a -> s{_tdResourceId = a});
+
+-- | The resource type.
+tdResourceType :: Lens' TagDescription ResourceType
+tdResourceType = lens _tdResourceType (\ s a -> s{_tdResourceType = a});
+
+-- | The tag key.
+tdKey :: Lens' TagDescription Text
+tdKey = lens _tdKey (\ s a -> s{_tdKey = a});
+
+-- | The tag value.
+tdValue :: Lens' TagDescription Text
+tdValue = lens _tdValue (\ s a -> s{_tdValue = a});
+
+instance FromXML TagDescription where
+        parseXML x
+          = TagDescription' <$>
+              (x .@ "resourceId") <*> (x .@ "resourceType") <*>
+                (x .@ "key")
+                <*> (x .@ "value")
+
+instance Hashable TagDescription
+
+-- | Information about items that were not successfully processed in a batch
+-- call.
+--
+-- /See:/ 'unsuccessfulItem' smart constructor.
+data UnsuccessfulItem = UnsuccessfulItem'
+    { _uiResourceId :: !(Maybe Text)
+    , _uiError      :: !UnsuccessfulItemError
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UnsuccessfulItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uiResourceId'
+--
+-- * 'uiError'
+unsuccessfulItem
+    :: UnsuccessfulItemError -- ^ 'uiError'
+    -> UnsuccessfulItem
+unsuccessfulItem pError_ =
+    UnsuccessfulItem'
+    { _uiResourceId = Nothing
+    , _uiError = pError_
+    }
+
+-- | The ID of the resource.
+uiResourceId :: Lens' UnsuccessfulItem (Maybe Text)
+uiResourceId = lens _uiResourceId (\ s a -> s{_uiResourceId = a});
+
+-- | Information about the error.
+uiError :: Lens' UnsuccessfulItem UnsuccessfulItemError
+uiError = lens _uiError (\ s a -> s{_uiError = a});
+
+instance FromXML UnsuccessfulItem where
+        parseXML x
+          = UnsuccessfulItem' <$>
+              (x .@? "resourceId") <*> (x .@ "error")
+
+instance Hashable UnsuccessfulItem
+
+-- | Information about the error that occurred. For more information about
+-- errors, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html Error Codes>.
+--
+-- /See:/ 'unsuccessfulItemError' smart constructor.
+data UnsuccessfulItemError = UnsuccessfulItemError'
+    { _uieCode    :: !Text
+    , _uieMessage :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UnsuccessfulItemError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uieCode'
+--
+-- * 'uieMessage'
+unsuccessfulItemError
+    :: Text -- ^ 'uieCode'
+    -> Text -- ^ 'uieMessage'
+    -> UnsuccessfulItemError
+unsuccessfulItemError pCode_ pMessage_ =
+    UnsuccessfulItemError'
+    { _uieCode = pCode_
+    , _uieMessage = pMessage_
+    }
+
+-- | The error code.
+uieCode :: Lens' UnsuccessfulItemError Text
+uieCode = lens _uieCode (\ s a -> s{_uieCode = a});
+
+-- | The error message accompanying the error code.
+uieMessage :: Lens' UnsuccessfulItemError Text
+uieMessage = lens _uieMessage (\ s a -> s{_uieMessage = a});
+
+instance FromXML UnsuccessfulItemError where
+        parseXML x
+          = UnsuccessfulItemError' <$>
+              (x .@ "code") <*> (x .@ "message")
+
+instance Hashable UnsuccessfulItemError
+
+-- | Describes the S3 bucket for the disk image.
+--
+-- /See:/ 'userBucket' smart constructor.
+data UserBucket = UserBucket'
+    { _ubS3Key    :: !(Maybe Text)
+    , _ubS3Bucket :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserBucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ubS3Key'
+--
+-- * 'ubS3Bucket'
+userBucket
+    :: UserBucket
+userBucket =
+    UserBucket'
+    { _ubS3Key = Nothing
+    , _ubS3Bucket = Nothing
+    }
+
+-- | The file name of the disk image.
+ubS3Key :: Lens' UserBucket (Maybe Text)
+ubS3Key = lens _ubS3Key (\ s a -> s{_ubS3Key = a});
+
+-- | The name of the S3 bucket where the disk image is located.
+ubS3Bucket :: Lens' UserBucket (Maybe Text)
+ubS3Bucket = lens _ubS3Bucket (\ s a -> s{_ubS3Bucket = a});
+
+instance Hashable UserBucket
+
+instance ToQuery UserBucket where
+        toQuery UserBucket'{..}
+          = mconcat
+              ["S3Key" =: _ubS3Key, "S3Bucket" =: _ubS3Bucket]
+
+-- | Describes the S3 bucket for the disk image.
+--
+-- /See:/ 'userBucketDetails' smart constructor.
+data UserBucketDetails = UserBucketDetails'
+    { _ubdS3Key    :: !(Maybe Text)
+    , _ubdS3Bucket :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserBucketDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ubdS3Key'
+--
+-- * 'ubdS3Bucket'
+userBucketDetails
+    :: UserBucketDetails
+userBucketDetails =
+    UserBucketDetails'
+    { _ubdS3Key = Nothing
+    , _ubdS3Bucket = Nothing
+    }
+
+-- | The file name of the disk image.
+ubdS3Key :: Lens' UserBucketDetails (Maybe Text)
+ubdS3Key = lens _ubdS3Key (\ s a -> s{_ubdS3Key = a});
+
+-- | The S3 bucket from which the disk image was created.
+ubdS3Bucket :: Lens' UserBucketDetails (Maybe Text)
+ubdS3Bucket = lens _ubdS3Bucket (\ s a -> s{_ubdS3Bucket = a});
+
+instance FromXML UserBucketDetails where
+        parseXML x
+          = UserBucketDetails' <$>
+              (x .@? "s3Key") <*> (x .@? "s3Bucket")
+
+instance Hashable UserBucketDetails
+
+-- | Describes the user data to be made available to an instance.
+--
+-- /See:/ 'userData' smart constructor.
+newtype UserData = UserData'
+    { _udData :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserData' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udData'
+userData
+    :: UserData
+userData =
+    UserData'
+    { _udData = Nothing
+    }
+
+-- | The Base64-encoded MIME user data for the instance.
+udData :: Lens' UserData (Maybe Text)
+udData = lens _udData (\ s a -> s{_udData = a});
+
+instance Hashable UserData
+
+instance ToQuery UserData where
+        toQuery UserData'{..} = mconcat ["Data" =: _udData]
+
+-- | Describes a security group and AWS account ID pair.
+--
+-- /See:/ 'userIdGroupPair' smart constructor.
+data UserIdGroupPair = UserIdGroupPair'
+    { _uigpVPCPeeringConnectionId :: !(Maybe Text)
+    , _uigpVPCId                  :: !(Maybe Text)
+    , _uigpUserId                 :: !(Maybe Text)
+    , _uigpGroupId                :: !(Maybe Text)
+    , _uigpGroupName              :: !(Maybe Text)
+    , _uigpPeeringStatus          :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UserIdGroupPair' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uigpVPCPeeringConnectionId'
+--
+-- * 'uigpVPCId'
+--
+-- * 'uigpUserId'
+--
+-- * 'uigpGroupId'
+--
+-- * 'uigpGroupName'
+--
+-- * 'uigpPeeringStatus'
+userIdGroupPair
+    :: UserIdGroupPair
+userIdGroupPair =
+    UserIdGroupPair'
+    { _uigpVPCPeeringConnectionId = Nothing
+    , _uigpVPCId = Nothing
+    , _uigpUserId = Nothing
+    , _uigpGroupId = Nothing
+    , _uigpGroupName = Nothing
+    , _uigpPeeringStatus = Nothing
+    }
+
+-- | The ID of the VPC peering connection, if applicable.
+uigpVPCPeeringConnectionId :: Lens' UserIdGroupPair (Maybe Text)
+uigpVPCPeeringConnectionId = lens _uigpVPCPeeringConnectionId (\ s a -> s{_uigpVPCPeeringConnectionId = a});
+
+-- | The ID of the VPC for the referenced security group, if applicable.
+uigpVPCId :: Lens' UserIdGroupPair (Maybe Text)
+uigpVPCId = lens _uigpVPCId (\ s a -> s{_uigpVPCId = a});
+
+-- | The ID of an AWS account.
+uigpUserId :: Lens' UserIdGroupPair (Maybe Text)
+uigpUserId = lens _uigpUserId (\ s a -> s{_uigpUserId = a});
+
+-- | The ID of the security group.
+uigpGroupId :: Lens' UserIdGroupPair (Maybe Text)
+uigpGroupId = lens _uigpGroupId (\ s a -> s{_uigpGroupId = a});
+
+-- | The name of the security group. In a request, use this parameter for a
+-- security group in EC2-Classic or a default VPC only. For a security
+-- group in a nondefault VPC, use 'GroupId'.
+uigpGroupName :: Lens' UserIdGroupPair (Maybe Text)
+uigpGroupName = lens _uigpGroupName (\ s a -> s{_uigpGroupName = a});
+
+-- | The status of a VPC peering connection, if applicable.
+uigpPeeringStatus :: Lens' UserIdGroupPair (Maybe Text)
+uigpPeeringStatus = lens _uigpPeeringStatus (\ s a -> s{_uigpPeeringStatus = a});
+
+instance FromXML UserIdGroupPair where
+        parseXML x
+          = UserIdGroupPair' <$>
+              (x .@? "vpcPeeringConnectionId") <*> (x .@? "vpcId")
+                <*> (x .@? "userId")
+                <*> (x .@? "groupId")
+                <*> (x .@? "groupName")
+                <*> (x .@? "peeringStatus")
+
+instance Hashable UserIdGroupPair
+
+instance ToQuery UserIdGroupPair where
+        toQuery UserIdGroupPair'{..}
+          = mconcat
+              ["VpcPeeringConnectionId" =:
+                 _uigpVPCPeeringConnectionId,
+               "VpcId" =: _uigpVPCId, "UserId" =: _uigpUserId,
+               "GroupId" =: _uigpGroupId,
+               "GroupName" =: _uigpGroupName,
+               "PeeringStatus" =: _uigpPeeringStatus]
+
+-- | Describes telemetry for a VPN tunnel.
+--
+-- /See:/ 'vgwTelemetry' smart constructor.
+data VGWTelemetry = VGWTelemetry'
+    { _vtStatus             :: !(Maybe TelemetryStatus)
+    , _vtOutsideIPAddress   :: !(Maybe Text)
+    , _vtLastStatusChange   :: !(Maybe ISO8601)
+    , _vtAcceptedRouteCount :: !(Maybe Int)
+    , _vtStatusMessage      :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VGWTelemetry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vtStatus'
+--
+-- * 'vtOutsideIPAddress'
+--
+-- * 'vtLastStatusChange'
+--
+-- * 'vtAcceptedRouteCount'
+--
+-- * 'vtStatusMessage'
+vgwTelemetry
+    :: VGWTelemetry
+vgwTelemetry =
+    VGWTelemetry'
+    { _vtStatus = Nothing
+    , _vtOutsideIPAddress = Nothing
+    , _vtLastStatusChange = Nothing
+    , _vtAcceptedRouteCount = Nothing
+    , _vtStatusMessage = Nothing
+    }
+
+-- | The status of the VPN tunnel.
+vtStatus :: Lens' VGWTelemetry (Maybe TelemetryStatus)
+vtStatus = lens _vtStatus (\ s a -> s{_vtStatus = a});
+
+-- | The Internet-routable IP address of the virtual private gateway\'s
+-- outside interface.
+vtOutsideIPAddress :: Lens' VGWTelemetry (Maybe Text)
+vtOutsideIPAddress = lens _vtOutsideIPAddress (\ s a -> s{_vtOutsideIPAddress = a});
+
+-- | The date and time of the last change in status.
+vtLastStatusChange :: Lens' VGWTelemetry (Maybe UTCTime)
+vtLastStatusChange = lens _vtLastStatusChange (\ s a -> s{_vtLastStatusChange = a}) . mapping _Time;
+
+-- | The number of accepted routes.
+vtAcceptedRouteCount :: Lens' VGWTelemetry (Maybe Int)
+vtAcceptedRouteCount = lens _vtAcceptedRouteCount (\ s a -> s{_vtAcceptedRouteCount = a});
+
+-- | If an error occurs, a description of the error.
+vtStatusMessage :: Lens' VGWTelemetry (Maybe Text)
+vtStatusMessage = lens _vtStatusMessage (\ s a -> s{_vtStatusMessage = a});
+
+instance FromXML VGWTelemetry where
+        parseXML x
+          = VGWTelemetry' <$>
+              (x .@? "status") <*> (x .@? "outsideIpAddress") <*>
+                (x .@? "lastStatusChange")
+                <*> (x .@? "acceptedRouteCount")
+                <*> (x .@? "statusMessage")
+
+instance Hashable VGWTelemetry
+
+-- | Describes a VPC.
+--
+-- /See:/ 'vpc' smart constructor.
+data VPC = VPC'
+    { _vpcTags            :: !(Maybe [Tag])
+    , _vpcIsDefault       :: !(Maybe Bool)
+    , _vpcCIdRBlock       :: !Text
+    , _vpcDHCPOptionsId   :: !Text
+    , _vpcInstanceTenancy :: !Tenancy
+    , _vpcState           :: !VPCState
+    , _vpcVPCId           :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPC' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vpcTags'
+--
+-- * 'vpcIsDefault'
+--
+-- * 'vpcCIdRBlock'
+--
+-- * 'vpcDHCPOptionsId'
+--
+-- * 'vpcInstanceTenancy'
+--
+-- * 'vpcState'
+--
+-- * 'vpcVPCId'
+vpc
+    :: Text -- ^ 'vpcCIdRBlock'
+    -> Text -- ^ 'vpcDHCPOptionsId'
+    -> Tenancy -- ^ 'vpcInstanceTenancy'
+    -> VPCState -- ^ 'vpcState'
+    -> Text -- ^ 'vpcVPCId'
+    -> VPC
+vpc pCIdRBlock_ pDHCPOptionsId_ pInstanceTenancy_ pState_ pVPCId_ =
+    VPC'
+    { _vpcTags = Nothing
+    , _vpcIsDefault = Nothing
+    , _vpcCIdRBlock = pCIdRBlock_
+    , _vpcDHCPOptionsId = pDHCPOptionsId_
+    , _vpcInstanceTenancy = pInstanceTenancy_
+    , _vpcState = pState_
+    , _vpcVPCId = pVPCId_
+    }
+
+-- | Any tags assigned to the VPC.
+vpcTags :: Lens' VPC [Tag]
+vpcTags = lens _vpcTags (\ s a -> s{_vpcTags = a}) . _Default . _Coerce;
+
+-- | Indicates whether the VPC is the default VPC.
+vpcIsDefault :: Lens' VPC (Maybe Bool)
+vpcIsDefault = lens _vpcIsDefault (\ s a -> s{_vpcIsDefault = a});
+
+-- | The CIDR block for the VPC.
+vpcCIdRBlock :: Lens' VPC Text
+vpcCIdRBlock = lens _vpcCIdRBlock (\ s a -> s{_vpcCIdRBlock = a});
+
+-- | The ID of the set of DHCP options you\'ve associated with the VPC (or
+-- 'default' if the default options are associated with the VPC).
+vpcDHCPOptionsId :: Lens' VPC Text
+vpcDHCPOptionsId = lens _vpcDHCPOptionsId (\ s a -> s{_vpcDHCPOptionsId = a});
+
+-- | The allowed tenancy of instances launched into the VPC.
+vpcInstanceTenancy :: Lens' VPC Tenancy
+vpcInstanceTenancy = lens _vpcInstanceTenancy (\ s a -> s{_vpcInstanceTenancy = a});
+
+-- | The current state of the VPC.
+vpcState :: Lens' VPC VPCState
+vpcState = lens _vpcState (\ s a -> s{_vpcState = a});
+
+-- | The ID of the VPC.
+vpcVPCId :: Lens' VPC Text
+vpcVPCId = lens _vpcVPCId (\ s a -> s{_vpcVPCId = a});
+
+instance FromXML VPC where
+        parseXML x
+          = VPC' <$>
+              (x .@? "tagSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "isDefault")
+                <*> (x .@ "cidrBlock")
+                <*> (x .@ "dhcpOptionsId")
+                <*> (x .@ "instanceTenancy")
+                <*> (x .@ "state")
+                <*> (x .@ "vpcId")
+
+instance Hashable VPC
+
+-- | Describes an attachment between a virtual private gateway and a VPC.
+--
+-- /See:/ 'vpcAttachment' smart constructor.
+data VPCAttachment = VPCAttachment'
+    { _vaState :: !(Maybe AttachmentStatus)
+    , _vaVPCId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPCAttachment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vaState'
+--
+-- * 'vaVPCId'
+vpcAttachment
+    :: VPCAttachment
+vpcAttachment =
+    VPCAttachment'
+    { _vaState = Nothing
+    , _vaVPCId = Nothing
+    }
+
+-- | The current state of the attachment.
+vaState :: Lens' VPCAttachment (Maybe AttachmentStatus)
+vaState = lens _vaState (\ s a -> s{_vaState = a});
+
+-- | The ID of the VPC.
+vaVPCId :: Lens' VPCAttachment (Maybe Text)
+vaVPCId = lens _vaVPCId (\ s a -> s{_vaVPCId = a});
+
+instance FromXML VPCAttachment where
+        parseXML x
+          = VPCAttachment' <$>
+              (x .@? "state") <*> (x .@? "vpcId")
+
+instance Hashable VPCAttachment
+
+-- | Describes whether a VPC is enabled for ClassicLink.
+--
+-- /See:/ 'vpcClassicLink' smart constructor.
+data VPCClassicLink = VPCClassicLink'
+    { _vclVPCId              :: !(Maybe Text)
+    , _vclTags               :: !(Maybe [Tag])
+    , _vclClassicLinkEnabled :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPCClassicLink' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vclVPCId'
+--
+-- * 'vclTags'
+--
+-- * 'vclClassicLinkEnabled'
+vpcClassicLink
+    :: VPCClassicLink
+vpcClassicLink =
+    VPCClassicLink'
+    { _vclVPCId = Nothing
+    , _vclTags = Nothing
+    , _vclClassicLinkEnabled = Nothing
+    }
+
+-- | The ID of the VPC.
+vclVPCId :: Lens' VPCClassicLink (Maybe Text)
+vclVPCId = lens _vclVPCId (\ s a -> s{_vclVPCId = a});
+
+-- | Any tags assigned to the VPC.
+vclTags :: Lens' VPCClassicLink [Tag]
+vclTags = lens _vclTags (\ s a -> s{_vclTags = a}) . _Default . _Coerce;
+
+-- | Indicates whether the VPC is enabled for ClassicLink.
+vclClassicLinkEnabled :: Lens' VPCClassicLink (Maybe Bool)
+vclClassicLinkEnabled = lens _vclClassicLinkEnabled (\ s a -> s{_vclClassicLinkEnabled = a});
+
+instance FromXML VPCClassicLink where
+        parseXML x
+          = VPCClassicLink' <$>
+              (x .@? "vpcId") <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "classicLinkEnabled")
+
+instance Hashable VPCClassicLink
+
+-- | Describes a VPC endpoint.
+--
+-- /See:/ 'vpcEndpoint' smart constructor.
+data VPCEndpoint = VPCEndpoint'
+    { _veState             :: !(Maybe State)
+    , _vePolicyDocument    :: !(Maybe Text)
+    , _veVPCId             :: !(Maybe Text)
+    , _veCreationTimestamp :: !(Maybe ISO8601)
+    , _veServiceName       :: !(Maybe Text)
+    , _veVPCEndpointId     :: !(Maybe Text)
+    , _veRouteTableIds     :: !(Maybe [Text])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPCEndpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'veState'
+--
+-- * 'vePolicyDocument'
+--
+-- * 'veVPCId'
+--
+-- * 'veCreationTimestamp'
+--
+-- * 'veServiceName'
+--
+-- * 'veVPCEndpointId'
+--
+-- * 'veRouteTableIds'
+vpcEndpoint
+    :: VPCEndpoint
+vpcEndpoint =
+    VPCEndpoint'
+    { _veState = Nothing
+    , _vePolicyDocument = Nothing
+    , _veVPCId = Nothing
+    , _veCreationTimestamp = Nothing
+    , _veServiceName = Nothing
+    , _veVPCEndpointId = Nothing
+    , _veRouteTableIds = Nothing
+    }
+
+-- | The state of the VPC endpoint.
+veState :: Lens' VPCEndpoint (Maybe State)
+veState = lens _veState (\ s a -> s{_veState = a});
+
+-- | The policy document associated with the endpoint.
+vePolicyDocument :: Lens' VPCEndpoint (Maybe Text)
+vePolicyDocument = lens _vePolicyDocument (\ s a -> s{_vePolicyDocument = a});
+
+-- | The ID of the VPC to which the endpoint is associated.
+veVPCId :: Lens' VPCEndpoint (Maybe Text)
+veVPCId = lens _veVPCId (\ s a -> s{_veVPCId = a});
+
+-- | The date and time the VPC endpoint was created.
+veCreationTimestamp :: Lens' VPCEndpoint (Maybe UTCTime)
+veCreationTimestamp = lens _veCreationTimestamp (\ s a -> s{_veCreationTimestamp = a}) . mapping _Time;
+
+-- | The name of the AWS service to which the endpoint is associated.
+veServiceName :: Lens' VPCEndpoint (Maybe Text)
+veServiceName = lens _veServiceName (\ s a -> s{_veServiceName = a});
+
+-- | The ID of the VPC endpoint.
+veVPCEndpointId :: Lens' VPCEndpoint (Maybe Text)
+veVPCEndpointId = lens _veVPCEndpointId (\ s a -> s{_veVPCEndpointId = a});
+
+-- | One or more route tables associated with the endpoint.
+veRouteTableIds :: Lens' VPCEndpoint [Text]
+veRouteTableIds = lens _veRouteTableIds (\ s a -> s{_veRouteTableIds = a}) . _Default . _Coerce;
+
+instance FromXML VPCEndpoint where
+        parseXML x
+          = VPCEndpoint' <$>
+              (x .@? "state") <*> (x .@? "policyDocument") <*>
+                (x .@? "vpcId")
+                <*> (x .@? "creationTimestamp")
+                <*> (x .@? "serviceName")
+                <*> (x .@? "vpcEndpointId")
+                <*>
+                (x .@? "routeTableIdSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable VPCEndpoint
+
+-- | Describes a VPC peering connection.
+--
+-- /See:/ 'vpcPeeringConnection' smart constructor.
+data VPCPeeringConnection = VPCPeeringConnection'
+    { _vpcpcVPCPeeringConnectionId :: !(Maybe Text)
+    , _vpcpcStatus                 :: !(Maybe VPCPeeringConnectionStateReason)
+    , _vpcpcAccepterVPCInfo        :: !(Maybe VPCPeeringConnectionVPCInfo)
+    , _vpcpcRequesterVPCInfo       :: !(Maybe VPCPeeringConnectionVPCInfo)
+    , _vpcpcExpirationTime         :: !(Maybe ISO8601)
+    , _vpcpcTags                   :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPCPeeringConnection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vpcpcVPCPeeringConnectionId'
+--
+-- * 'vpcpcStatus'
+--
+-- * 'vpcpcAccepterVPCInfo'
+--
+-- * 'vpcpcRequesterVPCInfo'
+--
+-- * 'vpcpcExpirationTime'
+--
+-- * 'vpcpcTags'
+vpcPeeringConnection
+    :: VPCPeeringConnection
+vpcPeeringConnection =
+    VPCPeeringConnection'
+    { _vpcpcVPCPeeringConnectionId = Nothing
+    , _vpcpcStatus = Nothing
+    , _vpcpcAccepterVPCInfo = Nothing
+    , _vpcpcRequesterVPCInfo = Nothing
+    , _vpcpcExpirationTime = Nothing
+    , _vpcpcTags = Nothing
+    }
+
+-- | The ID of the VPC peering connection.
+vpcpcVPCPeeringConnectionId :: Lens' VPCPeeringConnection (Maybe Text)
+vpcpcVPCPeeringConnectionId = lens _vpcpcVPCPeeringConnectionId (\ s a -> s{_vpcpcVPCPeeringConnectionId = a});
+
+-- | The status of the VPC peering connection.
+vpcpcStatus :: Lens' VPCPeeringConnection (Maybe VPCPeeringConnectionStateReason)
+vpcpcStatus = lens _vpcpcStatus (\ s a -> s{_vpcpcStatus = a});
+
+-- | The information of the peer VPC.
+vpcpcAccepterVPCInfo :: Lens' VPCPeeringConnection (Maybe VPCPeeringConnectionVPCInfo)
+vpcpcAccepterVPCInfo = lens _vpcpcAccepterVPCInfo (\ s a -> s{_vpcpcAccepterVPCInfo = a});
+
+-- | The information of the requester VPC.
+vpcpcRequesterVPCInfo :: Lens' VPCPeeringConnection (Maybe VPCPeeringConnectionVPCInfo)
+vpcpcRequesterVPCInfo = lens _vpcpcRequesterVPCInfo (\ s a -> s{_vpcpcRequesterVPCInfo = a});
+
+-- | The time that an unaccepted VPC peering connection will expire.
+vpcpcExpirationTime :: Lens' VPCPeeringConnection (Maybe UTCTime)
+vpcpcExpirationTime = lens _vpcpcExpirationTime (\ s a -> s{_vpcpcExpirationTime = a}) . mapping _Time;
+
+-- | Any tags assigned to the resource.
+vpcpcTags :: Lens' VPCPeeringConnection [Tag]
+vpcpcTags = lens _vpcpcTags (\ s a -> s{_vpcpcTags = a}) . _Default . _Coerce;
+
+instance FromXML VPCPeeringConnection where
+        parseXML x
+          = VPCPeeringConnection' <$>
+              (x .@? "vpcPeeringConnectionId") <*> (x .@? "status")
+                <*> (x .@? "accepterVpcInfo")
+                <*> (x .@? "requesterVpcInfo")
+                <*> (x .@? "expirationTime")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable VPCPeeringConnection
+
+-- | Describes the status of a VPC peering connection.
+--
+-- /See:/ 'vpcPeeringConnectionStateReason' smart constructor.
+data VPCPeeringConnectionStateReason = VPCPeeringConnectionStateReason'
+    { _vpcsrCode    :: !(Maybe VPCPeeringConnectionStateReasonCode)
+    , _vpcsrMessage :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPCPeeringConnectionStateReason' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vpcsrCode'
+--
+-- * 'vpcsrMessage'
+vpcPeeringConnectionStateReason
+    :: VPCPeeringConnectionStateReason
+vpcPeeringConnectionStateReason =
+    VPCPeeringConnectionStateReason'
+    { _vpcsrCode = Nothing
+    , _vpcsrMessage = Nothing
+    }
+
+-- | The status of the VPC peering connection.
+vpcsrCode :: Lens' VPCPeeringConnectionStateReason (Maybe VPCPeeringConnectionStateReasonCode)
+vpcsrCode = lens _vpcsrCode (\ s a -> s{_vpcsrCode = a});
+
+-- | A message that provides more information about the status, if
+-- applicable.
+vpcsrMessage :: Lens' VPCPeeringConnectionStateReason (Maybe Text)
+vpcsrMessage = lens _vpcsrMessage (\ s a -> s{_vpcsrMessage = a});
+
+instance FromXML VPCPeeringConnectionStateReason
+         where
+        parseXML x
+          = VPCPeeringConnectionStateReason' <$>
+              (x .@? "code") <*> (x .@? "message")
+
+instance Hashable VPCPeeringConnectionStateReason
+
+-- | Describes a VPC in a VPC peering connection.
+--
+-- /See:/ 'vpcPeeringConnectionVPCInfo' smart constructor.
+data VPCPeeringConnectionVPCInfo = VPCPeeringConnectionVPCInfo'
+    { _vpcviVPCId     :: !(Maybe Text)
+    , _vpcviOwnerId   :: !(Maybe Text)
+    , _vpcviCIdRBlock :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPCPeeringConnectionVPCInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vpcviVPCId'
+--
+-- * 'vpcviOwnerId'
+--
+-- * 'vpcviCIdRBlock'
+vpcPeeringConnectionVPCInfo
+    :: VPCPeeringConnectionVPCInfo
+vpcPeeringConnectionVPCInfo =
+    VPCPeeringConnectionVPCInfo'
+    { _vpcviVPCId = Nothing
+    , _vpcviOwnerId = Nothing
+    , _vpcviCIdRBlock = Nothing
+    }
+
+-- | The ID of the VPC.
+vpcviVPCId :: Lens' VPCPeeringConnectionVPCInfo (Maybe Text)
+vpcviVPCId = lens _vpcviVPCId (\ s a -> s{_vpcviVPCId = a});
+
+-- | The AWS account ID of the VPC owner.
+vpcviOwnerId :: Lens' VPCPeeringConnectionVPCInfo (Maybe Text)
+vpcviOwnerId = lens _vpcviOwnerId (\ s a -> s{_vpcviOwnerId = a});
+
+-- | The CIDR block for the VPC.
+vpcviCIdRBlock :: Lens' VPCPeeringConnectionVPCInfo (Maybe Text)
+vpcviCIdRBlock = lens _vpcviCIdRBlock (\ s a -> s{_vpcviCIdRBlock = a});
+
+instance FromXML VPCPeeringConnectionVPCInfo where
+        parseXML x
+          = VPCPeeringConnectionVPCInfo' <$>
+              (x .@? "vpcId") <*> (x .@? "ownerId") <*>
+                (x .@? "cidrBlock")
+
+instance Hashable VPCPeeringConnectionVPCInfo
+
+-- | Describes a VPN connection.
+--
+-- /See:/ 'vpnConnection' smart constructor.
+data VPNConnection = VPNConnection'
+    { _vcCustomerGatewayConfiguration :: !(Maybe Text)
+    , _vcRoutes                       :: !(Maybe [VPNStaticRoute])
+    , _vcVPNGatewayId                 :: !(Maybe Text)
+    , _vcOptions                      :: !(Maybe VPNConnectionOptions)
+    , _vcTags                         :: !(Maybe [Tag])
+    , _vcVGWTelemetry                 :: !(Maybe [VGWTelemetry])
+    , _vcVPNConnectionId              :: !Text
+    , _vcCustomerGatewayId            :: !Text
+    , _vcState                        :: !VPNState
+    , _vcType                         :: !GatewayType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNConnection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcCustomerGatewayConfiguration'
+--
+-- * 'vcRoutes'
+--
+-- * 'vcVPNGatewayId'
+--
+-- * 'vcOptions'
+--
+-- * 'vcTags'
+--
+-- * 'vcVGWTelemetry'
+--
+-- * 'vcVPNConnectionId'
+--
+-- * 'vcCustomerGatewayId'
+--
+-- * 'vcState'
+--
+-- * 'vcType'
+vpnConnection
+    :: Text -- ^ 'vcVPNConnectionId'
+    -> Text -- ^ 'vcCustomerGatewayId'
+    -> VPNState -- ^ 'vcState'
+    -> GatewayType -- ^ 'vcType'
+    -> VPNConnection
+vpnConnection pVPNConnectionId_ pCustomerGatewayId_ pState_ pType_ =
+    VPNConnection'
+    { _vcCustomerGatewayConfiguration = Nothing
+    , _vcRoutes = Nothing
+    , _vcVPNGatewayId = Nothing
+    , _vcOptions = Nothing
+    , _vcTags = Nothing
+    , _vcVGWTelemetry = Nothing
+    , _vcVPNConnectionId = pVPNConnectionId_
+    , _vcCustomerGatewayId = pCustomerGatewayId_
+    , _vcState = pState_
+    , _vcType = pType_
+    }
+
+-- | The configuration information for the VPN connection\'s customer gateway
+-- (in the native XML format). This element is always present in the
+-- < CreateVpnConnection> response; however, it\'s present in the
+-- < DescribeVpnConnections> response only if the VPN connection is in the
+-- 'pending' or 'available' state.
+vcCustomerGatewayConfiguration :: Lens' VPNConnection (Maybe Text)
+vcCustomerGatewayConfiguration = lens _vcCustomerGatewayConfiguration (\ s a -> s{_vcCustomerGatewayConfiguration = a});
+
+-- | The static routes associated with the VPN connection.
+vcRoutes :: Lens' VPNConnection [VPNStaticRoute]
+vcRoutes = lens _vcRoutes (\ s a -> s{_vcRoutes = a}) . _Default . _Coerce;
+
+-- | The ID of the virtual private gateway at the AWS side of the VPN
+-- connection.
+vcVPNGatewayId :: Lens' VPNConnection (Maybe Text)
+vcVPNGatewayId = lens _vcVPNGatewayId (\ s a -> s{_vcVPNGatewayId = a});
+
+-- | The VPN connection options.
+vcOptions :: Lens' VPNConnection (Maybe VPNConnectionOptions)
+vcOptions = lens _vcOptions (\ s a -> s{_vcOptions = a});
+
+-- | Any tags assigned to the VPN connection.
+vcTags :: Lens' VPNConnection [Tag]
+vcTags = lens _vcTags (\ s a -> s{_vcTags = a}) . _Default . _Coerce;
+
+-- | Information about the VPN tunnel.
+vcVGWTelemetry :: Lens' VPNConnection [VGWTelemetry]
+vcVGWTelemetry = lens _vcVGWTelemetry (\ s a -> s{_vcVGWTelemetry = a}) . _Default . _Coerce;
+
+-- | The ID of the VPN connection.
+vcVPNConnectionId :: Lens' VPNConnection Text
+vcVPNConnectionId = lens _vcVPNConnectionId (\ s a -> s{_vcVPNConnectionId = a});
+
+-- | The ID of the customer gateway at your end of the VPN connection.
+vcCustomerGatewayId :: Lens' VPNConnection Text
+vcCustomerGatewayId = lens _vcCustomerGatewayId (\ s a -> s{_vcCustomerGatewayId = a});
+
+-- | The current state of the VPN connection.
+vcState :: Lens' VPNConnection VPNState
+vcState = lens _vcState (\ s a -> s{_vcState = a});
+
+-- | The type of VPN connection.
+vcType :: Lens' VPNConnection GatewayType
+vcType = lens _vcType (\ s a -> s{_vcType = a});
+
+instance FromXML VPNConnection where
+        parseXML x
+          = VPNConnection' <$>
+              (x .@? "customerGatewayConfiguration") <*>
+                (x .@? "routes" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "vpnGatewayId")
+                <*> (x .@? "options")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "vgwTelemetry" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "vpnConnectionId")
+                <*> (x .@ "customerGatewayId")
+                <*> (x .@ "state")
+                <*> (x .@ "type")
+
+instance Hashable VPNConnection
+
+-- | Describes VPN connection options.
+--
+-- /See:/ 'vpnConnectionOptions' smart constructor.
+newtype VPNConnectionOptions = VPNConnectionOptions'
+    { _vcoStaticRoutesOnly :: Maybe Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNConnectionOptions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcoStaticRoutesOnly'
+vpnConnectionOptions
+    :: VPNConnectionOptions
+vpnConnectionOptions =
+    VPNConnectionOptions'
+    { _vcoStaticRoutesOnly = Nothing
+    }
+
+-- | Indicates whether the VPN connection uses static routes only. Static
+-- routes must be used for devices that don\'t support BGP.
+vcoStaticRoutesOnly :: Lens' VPNConnectionOptions (Maybe Bool)
+vcoStaticRoutesOnly = lens _vcoStaticRoutesOnly (\ s a -> s{_vcoStaticRoutesOnly = a});
+
+instance FromXML VPNConnectionOptions where
+        parseXML x
+          = VPNConnectionOptions' <$>
+              (x .@? "staticRoutesOnly")
+
+instance Hashable VPNConnectionOptions
+
+-- | Describes VPN connection options.
+--
+-- /See:/ 'vpnConnectionOptionsSpecification' smart constructor.
+newtype VPNConnectionOptionsSpecification = VPNConnectionOptionsSpecification'
+    { _vcosStaticRoutesOnly :: Maybe Bool
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNConnectionOptionsSpecification' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vcosStaticRoutesOnly'
+vpnConnectionOptionsSpecification
+    :: VPNConnectionOptionsSpecification
+vpnConnectionOptionsSpecification =
+    VPNConnectionOptionsSpecification'
+    { _vcosStaticRoutesOnly = Nothing
+    }
+
+-- | Indicates whether the VPN connection uses static routes only. Static
+-- routes must be used for devices that don\'t support BGP.
+vcosStaticRoutesOnly :: Lens' VPNConnectionOptionsSpecification (Maybe Bool)
+vcosStaticRoutesOnly = lens _vcosStaticRoutesOnly (\ s a -> s{_vcosStaticRoutesOnly = a});
+
+instance Hashable VPNConnectionOptionsSpecification
+
+instance ToQuery VPNConnectionOptionsSpecification
+         where
+        toQuery VPNConnectionOptionsSpecification'{..}
+          = mconcat
+              ["StaticRoutesOnly" =: _vcosStaticRoutesOnly]
+
+-- | Describes a virtual private gateway.
+--
+-- /See:/ 'vpnGateway' smart constructor.
+data VPNGateway = VPNGateway'
+    { _vgState            :: !(Maybe VPNState)
+    , _vgVPCAttachments   :: !(Maybe [VPCAttachment])
+    , _vgVPNGatewayId     :: !(Maybe Text)
+    , _vgAvailabilityZone :: !(Maybe Text)
+    , _vgType             :: !(Maybe GatewayType)
+    , _vgTags             :: !(Maybe [Tag])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNGateway' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vgState'
+--
+-- * 'vgVPCAttachments'
+--
+-- * 'vgVPNGatewayId'
+--
+-- * 'vgAvailabilityZone'
+--
+-- * 'vgType'
+--
+-- * 'vgTags'
+vpnGateway
+    :: VPNGateway
+vpnGateway =
+    VPNGateway'
+    { _vgState = Nothing
+    , _vgVPCAttachments = Nothing
+    , _vgVPNGatewayId = Nothing
+    , _vgAvailabilityZone = Nothing
+    , _vgType = Nothing
+    , _vgTags = Nothing
+    }
+
+-- | The current state of the virtual private gateway.
+vgState :: Lens' VPNGateway (Maybe VPNState)
+vgState = lens _vgState (\ s a -> s{_vgState = a});
+
+-- | Any VPCs attached to the virtual private gateway.
+vgVPCAttachments :: Lens' VPNGateway [VPCAttachment]
+vgVPCAttachments = lens _vgVPCAttachments (\ s a -> s{_vgVPCAttachments = a}) . _Default . _Coerce;
+
+-- | The ID of the virtual private gateway.
+vgVPNGatewayId :: Lens' VPNGateway (Maybe Text)
+vgVPNGatewayId = lens _vgVPNGatewayId (\ s a -> s{_vgVPNGatewayId = a});
+
+-- | The Availability Zone where the virtual private gateway was created, if
+-- applicable. This field may be empty or not returned.
+vgAvailabilityZone :: Lens' VPNGateway (Maybe Text)
+vgAvailabilityZone = lens _vgAvailabilityZone (\ s a -> s{_vgAvailabilityZone = a});
+
+-- | The type of VPN connection the virtual private gateway supports.
+vgType :: Lens' VPNGateway (Maybe GatewayType)
+vgType = lens _vgType (\ s a -> s{_vgType = a});
+
+-- | Any tags assigned to the virtual private gateway.
+vgTags :: Lens' VPNGateway [Tag]
+vgTags = lens _vgTags (\ s a -> s{_vgTags = a}) . _Default . _Coerce;
+
+instance FromXML VPNGateway where
+        parseXML x
+          = VPNGateway' <$>
+              (x .@? "state") <*>
+                (x .@? "attachments" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "vpnGatewayId")
+                <*> (x .@? "availabilityZone")
+                <*> (x .@? "type")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable VPNGateway
+
+-- | Describes a static route for a VPN connection.
+--
+-- /See:/ 'vpnStaticRoute' smart constructor.
+data VPNStaticRoute = VPNStaticRoute'
+    { _vsrState                :: !(Maybe VPNState)
+    , _vsrSource               :: !(Maybe VPNStaticRouteSource)
+    , _vsrDestinationCIdRBlock :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VPNStaticRoute' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsrState'
+--
+-- * 'vsrSource'
+--
+-- * 'vsrDestinationCIdRBlock'
+vpnStaticRoute
+    :: VPNStaticRoute
+vpnStaticRoute =
+    VPNStaticRoute'
+    { _vsrState = Nothing
+    , _vsrSource = Nothing
+    , _vsrDestinationCIdRBlock = Nothing
+    }
+
+-- | The current state of the static route.
+vsrState :: Lens' VPNStaticRoute (Maybe VPNState)
+vsrState = lens _vsrState (\ s a -> s{_vsrState = a});
+
+-- | Indicates how the routes were provided.
+vsrSource :: Lens' VPNStaticRoute (Maybe VPNStaticRouteSource)
+vsrSource = lens _vsrSource (\ s a -> s{_vsrSource = a});
+
+-- | The CIDR block associated with the local subnet of the customer data
+-- center.
+vsrDestinationCIdRBlock :: Lens' VPNStaticRoute (Maybe Text)
+vsrDestinationCIdRBlock = lens _vsrDestinationCIdRBlock (\ s a -> s{_vsrDestinationCIdRBlock = a});
+
+instance FromXML VPNStaticRoute where
+        parseXML x
+          = VPNStaticRoute' <$>
+              (x .@? "state") <*> (x .@? "source") <*>
+                (x .@? "destinationCidrBlock")
+
+instance Hashable VPNStaticRoute
+
+-- | Describes a volume.
+--
+-- /See:/ 'volume' smart constructor.
+data Volume = Volume'
+    { _vAttachments      :: !(Maybe [VolumeAttachment])
+    , _vIOPS             :: !(Maybe Int)
+    , _vKMSKeyId         :: !(Maybe Text)
+    , _vTags             :: !(Maybe [Tag])
+    , _vAvailabilityZone :: !Text
+    , _vCreateTime       :: !ISO8601
+    , _vEncrypted        :: !Bool
+    , _vSize             :: !Int
+    , _vSnapshotId       :: !Text
+    , _vState            :: !VolumeState
+    , _vVolumeId         :: !Text
+    , _vVolumeType       :: !VolumeType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Volume' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vAttachments'
+--
+-- * 'vIOPS'
+--
+-- * 'vKMSKeyId'
+--
+-- * 'vTags'
+--
+-- * 'vAvailabilityZone'
+--
+-- * 'vCreateTime'
+--
+-- * 'vEncrypted'
+--
+-- * 'vSize'
+--
+-- * 'vSnapshotId'
+--
+-- * 'vState'
+--
+-- * 'vVolumeId'
+--
+-- * 'vVolumeType'
+volume
+    :: Text -- ^ 'vAvailabilityZone'
+    -> UTCTime -- ^ 'vCreateTime'
+    -> Bool -- ^ 'vEncrypted'
+    -> Int -- ^ 'vSize'
+    -> Text -- ^ 'vSnapshotId'
+    -> VolumeState -- ^ 'vState'
+    -> Text -- ^ 'vVolumeId'
+    -> VolumeType -- ^ 'vVolumeType'
+    -> Volume
+volume pAvailabilityZone_ pCreateTime_ pEncrypted_ pSize_ pSnapshotId_ pState_ pVolumeId_ pVolumeType_ =
+    Volume'
+    { _vAttachments = Nothing
+    , _vIOPS = Nothing
+    , _vKMSKeyId = Nothing
+    , _vTags = Nothing
+    , _vAvailabilityZone = pAvailabilityZone_
+    , _vCreateTime = _Time # pCreateTime_
+    , _vEncrypted = pEncrypted_
+    , _vSize = pSize_
+    , _vSnapshotId = pSnapshotId_
+    , _vState = pState_
+    , _vVolumeId = pVolumeId_
+    , _vVolumeType = pVolumeType_
+    }
+
+-- | Information about the volume attachments.
+vAttachments :: Lens' Volume [VolumeAttachment]
+vAttachments = lens _vAttachments (\ s a -> s{_vAttachments = a}) . _Default . _Coerce;
+
+-- | The number of I\/O operations per second (IOPS) that the volume
+-- supports. For Provisioned IOPS (SSD) volumes, this represents the number
+-- of IOPS that are provisioned for the volume. For General Purpose (SSD)
+-- volumes, this represents the baseline performance of the volume and the
+-- rate at which the volume accumulates I\/O credits for bursting. For more
+-- information on General Purpose (SSD) baseline performance, I\/O credits,
+-- and bursting, see
+-- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html Amazon EBS Volume Types>
+-- in the /Amazon Elastic Compute Cloud User Guide/.
+--
+-- Constraint: Range is 100 to 20000 for Provisioned IOPS (SSD) volumes and
+-- 3 to 10000 for General Purpose (SSD) volumes.
+--
+-- Condition: This parameter is required for requests to create 'io1'
+-- volumes; it is not used in requests to create 'standard' or 'gp2'
+-- volumes.
+vIOPS :: Lens' Volume (Maybe Int)
+vIOPS = lens _vIOPS (\ s a -> s{_vIOPS = a});
+
+-- | The full ARN of the AWS Key Management Service (AWS KMS) customer master
+-- key (CMK) that was used to protect the volume encryption key for the
+-- volume.
+vKMSKeyId :: Lens' Volume (Maybe Text)
+vKMSKeyId = lens _vKMSKeyId (\ s a -> s{_vKMSKeyId = a});
+
+-- | Any tags assigned to the volume.
+vTags :: Lens' Volume [Tag]
+vTags = lens _vTags (\ s a -> s{_vTags = a}) . _Default . _Coerce;
+
+-- | The Availability Zone for the volume.
+vAvailabilityZone :: Lens' Volume Text
+vAvailabilityZone = lens _vAvailabilityZone (\ s a -> s{_vAvailabilityZone = a});
+
+-- | The time stamp when volume creation was initiated.
+vCreateTime :: Lens' Volume UTCTime
+vCreateTime = lens _vCreateTime (\ s a -> s{_vCreateTime = a}) . _Time;
+
+-- | Indicates whether the volume will be encrypted.
+vEncrypted :: Lens' Volume Bool
+vEncrypted = lens _vEncrypted (\ s a -> s{_vEncrypted = a});
+
+-- | The size of the volume, in GiBs.
+vSize :: Lens' Volume Int
+vSize = lens _vSize (\ s a -> s{_vSize = a});
+
+-- | The snapshot from which the volume was created, if applicable.
+vSnapshotId :: Lens' Volume Text
+vSnapshotId = lens _vSnapshotId (\ s a -> s{_vSnapshotId = a});
+
+-- | The volume state.
+vState :: Lens' Volume VolumeState
+vState = lens _vState (\ s a -> s{_vState = a});
+
+-- | The ID of the volume.
+vVolumeId :: Lens' Volume Text
+vVolumeId = lens _vVolumeId (\ s a -> s{_vVolumeId = a});
+
+-- | The volume type. This can be 'gp2' for General Purpose (SSD) volumes,
+-- 'io1' for Provisioned IOPS (SSD) volumes, or 'standard' for Magnetic
+-- volumes.
+vVolumeType :: Lens' Volume VolumeType
+vVolumeType = lens _vVolumeType (\ s a -> s{_vVolumeType = a});
+
+instance FromXML Volume where
+        parseXML x
+          = Volume' <$>
+              (x .@? "attachmentSet" .!@ mempty >>=
+                 may (parseXMLList "item"))
+                <*> (x .@? "iops")
+                <*> (x .@? "kmsKeyId")
+                <*>
+                (x .@? "tagSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@ "availabilityZone")
+                <*> (x .@ "createTime")
+                <*> (x .@ "encrypted")
+                <*> (x .@ "size")
+                <*> (x .@ "snapshotId")
+                <*> (x .@ "status")
+                <*> (x .@ "volumeId")
+                <*> (x .@ "volumeType")
+
+instance Hashable Volume
+
+-- | Describes volume attachment details.
+--
+-- /See:/ 'volumeAttachment' smart constructor.
+data VolumeAttachment = VolumeAttachment'
+    { _volInstanceId          :: !(Maybe Text)
+    , _volDeleteOnTermination :: !(Maybe Bool)
+    , _volState               :: !(Maybe VolumeAttachmentState)
+    , _volDevice              :: !(Maybe Text)
+    , _volVolumeId            :: !(Maybe Text)
+    , _volAttachTime          :: !(Maybe ISO8601)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeAttachment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'volInstanceId'
+--
+-- * 'volDeleteOnTermination'
+--
+-- * 'volState'
+--
+-- * 'volDevice'
+--
+-- * 'volVolumeId'
+--
+-- * 'volAttachTime'
+volumeAttachment
+    :: VolumeAttachment
+volumeAttachment =
+    VolumeAttachment'
+    { _volInstanceId = Nothing
+    , _volDeleteOnTermination = Nothing
+    , _volState = Nothing
+    , _volDevice = Nothing
+    , _volVolumeId = Nothing
+    , _volAttachTime = Nothing
+    }
+
+-- | The ID of the instance.
+volInstanceId :: Lens' VolumeAttachment (Maybe Text)
+volInstanceId = lens _volInstanceId (\ s a -> s{_volInstanceId = a});
+
+-- | Indicates whether the EBS volume is deleted on instance termination.
+volDeleteOnTermination :: Lens' VolumeAttachment (Maybe Bool)
+volDeleteOnTermination = lens _volDeleteOnTermination (\ s a -> s{_volDeleteOnTermination = a});
+
+-- | The attachment state of the volume.
+volState :: Lens' VolumeAttachment (Maybe VolumeAttachmentState)
+volState = lens _volState (\ s a -> s{_volState = a});
+
+-- | The device name.
+volDevice :: Lens' VolumeAttachment (Maybe Text)
+volDevice = lens _volDevice (\ s a -> s{_volDevice = a});
+
+-- | The ID of the volume.
+volVolumeId :: Lens' VolumeAttachment (Maybe Text)
+volVolumeId = lens _volVolumeId (\ s a -> s{_volVolumeId = a});
+
+-- | The time stamp when the attachment initiated.
+volAttachTime :: Lens' VolumeAttachment (Maybe UTCTime)
+volAttachTime = lens _volAttachTime (\ s a -> s{_volAttachTime = a}) . mapping _Time;
+
+instance FromXML VolumeAttachment where
+        parseXML x
+          = VolumeAttachment' <$>
+              (x .@? "instanceId") <*>
+                (x .@? "deleteOnTermination")
+                <*> (x .@? "status")
+                <*> (x .@? "device")
+                <*> (x .@? "volumeId")
+                <*> (x .@? "attachTime")
+
+instance Hashable VolumeAttachment
+
+-- | Describes an EBS volume.
+--
+-- /See:/ 'volumeDetail' smart constructor.
+newtype VolumeDetail = VolumeDetail'
+    { _vdSize :: Integer
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vdSize'
+volumeDetail
+    :: Integer -- ^ 'vdSize'
+    -> VolumeDetail
+volumeDetail pSize_ =
+    VolumeDetail'
+    { _vdSize = pSize_
+    }
+
+-- | The size of the volume, in GiB.
+vdSize :: Lens' VolumeDetail Integer
+vdSize = lens _vdSize (\ s a -> s{_vdSize = a});
+
+instance Hashable VolumeDetail
+
+instance ToQuery VolumeDetail where
+        toQuery VolumeDetail'{..}
+          = mconcat ["Size" =: _vdSize]
+
+-- | Describes a volume status operation code.
+--
+-- /See:/ 'volumeStatusAction' smart constructor.
+data VolumeStatusAction = VolumeStatusAction'
+    { _vsaEventType   :: !(Maybe Text)
+    , _vsaCode        :: !(Maybe Text)
+    , _vsaDescription :: !(Maybe Text)
+    , _vsaEventId     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeStatusAction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsaEventType'
+--
+-- * 'vsaCode'
+--
+-- * 'vsaDescription'
+--
+-- * 'vsaEventId'
+volumeStatusAction
+    :: VolumeStatusAction
+volumeStatusAction =
+    VolumeStatusAction'
+    { _vsaEventType = Nothing
+    , _vsaCode = Nothing
+    , _vsaDescription = Nothing
+    , _vsaEventId = Nothing
+    }
+
+-- | The event type associated with this operation.
+vsaEventType :: Lens' VolumeStatusAction (Maybe Text)
+vsaEventType = lens _vsaEventType (\ s a -> s{_vsaEventType = a});
+
+-- | The code identifying the operation, for example, 'enable-volume-io'.
+vsaCode :: Lens' VolumeStatusAction (Maybe Text)
+vsaCode = lens _vsaCode (\ s a -> s{_vsaCode = a});
+
+-- | A description of the operation.
+vsaDescription :: Lens' VolumeStatusAction (Maybe Text)
+vsaDescription = lens _vsaDescription (\ s a -> s{_vsaDescription = a});
+
+-- | The ID of the event associated with this operation.
+vsaEventId :: Lens' VolumeStatusAction (Maybe Text)
+vsaEventId = lens _vsaEventId (\ s a -> s{_vsaEventId = a});
+
+instance FromXML VolumeStatusAction where
+        parseXML x
+          = VolumeStatusAction' <$>
+              (x .@? "eventType") <*> (x .@? "code") <*>
+                (x .@? "description")
+                <*> (x .@? "eventId")
+
+instance Hashable VolumeStatusAction
+
+-- | Describes a volume status.
+--
+-- /See:/ 'volumeStatusDetails' smart constructor.
+data VolumeStatusDetails = VolumeStatusDetails'
+    { _vsdStatus :: !(Maybe Text)
+    , _vsdName   :: !(Maybe VolumeStatusName)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeStatusDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsdStatus'
+--
+-- * 'vsdName'
+volumeStatusDetails
+    :: VolumeStatusDetails
+volumeStatusDetails =
+    VolumeStatusDetails'
+    { _vsdStatus = Nothing
+    , _vsdName = Nothing
+    }
+
+-- | The intended status of the volume status.
+vsdStatus :: Lens' VolumeStatusDetails (Maybe Text)
+vsdStatus = lens _vsdStatus (\ s a -> s{_vsdStatus = a});
+
+-- | The name of the volume status.
+vsdName :: Lens' VolumeStatusDetails (Maybe VolumeStatusName)
+vsdName = lens _vsdName (\ s a -> s{_vsdName = a});
+
+instance FromXML VolumeStatusDetails where
+        parseXML x
+          = VolumeStatusDetails' <$>
+              (x .@? "status") <*> (x .@? "name")
+
+instance Hashable VolumeStatusDetails
+
+-- | Describes a volume status event.
+--
+-- /See:/ 'volumeStatusEvent' smart constructor.
+data VolumeStatusEvent = VolumeStatusEvent'
+    { _vseNotBefore   :: !(Maybe ISO8601)
+    , _vseEventType   :: !(Maybe Text)
+    , _vseDescription :: !(Maybe Text)
+    , _vseNotAfter    :: !(Maybe ISO8601)
+    , _vseEventId     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeStatusEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vseNotBefore'
+--
+-- * 'vseEventType'
+--
+-- * 'vseDescription'
+--
+-- * 'vseNotAfter'
+--
+-- * 'vseEventId'
+volumeStatusEvent
+    :: VolumeStatusEvent
+volumeStatusEvent =
+    VolumeStatusEvent'
+    { _vseNotBefore = Nothing
+    , _vseEventType = Nothing
+    , _vseDescription = Nothing
+    , _vseNotAfter = Nothing
+    , _vseEventId = Nothing
+    }
+
+-- | The earliest start time of the event.
+vseNotBefore :: Lens' VolumeStatusEvent (Maybe UTCTime)
+vseNotBefore = lens _vseNotBefore (\ s a -> s{_vseNotBefore = a}) . mapping _Time;
+
+-- | The type of this event.
+vseEventType :: Lens' VolumeStatusEvent (Maybe Text)
+vseEventType = lens _vseEventType (\ s a -> s{_vseEventType = a});
+
+-- | A description of the event.
+vseDescription :: Lens' VolumeStatusEvent (Maybe Text)
+vseDescription = lens _vseDescription (\ s a -> s{_vseDescription = a});
+
+-- | The latest end time of the event.
+vseNotAfter :: Lens' VolumeStatusEvent (Maybe UTCTime)
+vseNotAfter = lens _vseNotAfter (\ s a -> s{_vseNotAfter = a}) . mapping _Time;
+
+-- | The ID of this event.
+vseEventId :: Lens' VolumeStatusEvent (Maybe Text)
+vseEventId = lens _vseEventId (\ s a -> s{_vseEventId = a});
+
+instance FromXML VolumeStatusEvent where
+        parseXML x
+          = VolumeStatusEvent' <$>
+              (x .@? "notBefore") <*> (x .@? "eventType") <*>
+                (x .@? "description")
+                <*> (x .@? "notAfter")
+                <*> (x .@? "eventId")
+
+instance Hashable VolumeStatusEvent
+
+-- | Describes the status of a volume.
+--
+-- /See:/ 'volumeStatusInfo' smart constructor.
+data VolumeStatusInfo = VolumeStatusInfo'
+    { _vsiStatus  :: !(Maybe VolumeStatusInfoStatus)
+    , _vsiDetails :: !(Maybe [VolumeStatusDetails])
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeStatusInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsiStatus'
+--
+-- * 'vsiDetails'
+volumeStatusInfo
+    :: VolumeStatusInfo
+volumeStatusInfo =
+    VolumeStatusInfo'
+    { _vsiStatus = Nothing
+    , _vsiDetails = Nothing
+    }
+
+-- | The status of the volume.
+vsiStatus :: Lens' VolumeStatusInfo (Maybe VolumeStatusInfoStatus)
+vsiStatus = lens _vsiStatus (\ s a -> s{_vsiStatus = a});
+
+-- | The details of the volume status.
+vsiDetails :: Lens' VolumeStatusInfo [VolumeStatusDetails]
+vsiDetails = lens _vsiDetails (\ s a -> s{_vsiDetails = a}) . _Default . _Coerce;
+
+instance FromXML VolumeStatusInfo where
+        parseXML x
+          = VolumeStatusInfo' <$>
+              (x .@? "status") <*>
+                (x .@? "details" .!@ mempty >>=
+                   may (parseXMLList "item"))
+
+instance Hashable VolumeStatusInfo
+
+-- | Describes the volume status.
+--
+-- /See:/ 'volumeStatusItem' smart constructor.
+data VolumeStatusItem = VolumeStatusItem'
+    { _vsiVolumeStatus     :: !(Maybe VolumeStatusInfo)
+    , _vsiActions          :: !(Maybe [VolumeStatusAction])
+    , _vsiEvents           :: !(Maybe [VolumeStatusEvent])
+    , _vsiAvailabilityZone :: !(Maybe Text)
+    , _vsiVolumeId         :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'VolumeStatusItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'vsiVolumeStatus'
+--
+-- * 'vsiActions'
+--
+-- * 'vsiEvents'
+--
+-- * 'vsiAvailabilityZone'
+--
+-- * 'vsiVolumeId'
+volumeStatusItem
+    :: VolumeStatusItem
+volumeStatusItem =
+    VolumeStatusItem'
+    { _vsiVolumeStatus = Nothing
+    , _vsiActions = Nothing
+    , _vsiEvents = Nothing
+    , _vsiAvailabilityZone = Nothing
+    , _vsiVolumeId = Nothing
+    }
+
+-- | The volume status.
+vsiVolumeStatus :: Lens' VolumeStatusItem (Maybe VolumeStatusInfo)
+vsiVolumeStatus = lens _vsiVolumeStatus (\ s a -> s{_vsiVolumeStatus = a});
+
+-- | The details of the operation.
+vsiActions :: Lens' VolumeStatusItem [VolumeStatusAction]
+vsiActions = lens _vsiActions (\ s a -> s{_vsiActions = a}) . _Default . _Coerce;
+
+-- | A list of events associated with the volume.
+vsiEvents :: Lens' VolumeStatusItem [VolumeStatusEvent]
+vsiEvents = lens _vsiEvents (\ s a -> s{_vsiEvents = a}) . _Default . _Coerce;
+
+-- | The Availability Zone of the volume.
+vsiAvailabilityZone :: Lens' VolumeStatusItem (Maybe Text)
+vsiAvailabilityZone = lens _vsiAvailabilityZone (\ s a -> s{_vsiAvailabilityZone = a});
+
+-- | The volume ID.
+vsiVolumeId :: Lens' VolumeStatusItem (Maybe Text)
+vsiVolumeId = lens _vsiVolumeId (\ s a -> s{_vsiVolumeId = a});
+
+instance FromXML VolumeStatusItem where
+        parseXML x
+          = VolumeStatusItem' <$>
+              (x .@? "volumeStatus") <*>
+                (x .@? "actionsSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*>
+                (x .@? "eventsSet" .!@ mempty >>=
+                   may (parseXMLList "item"))
+                <*> (x .@? "availabilityZone")
+                <*> (x .@? "volumeId")
+
+instance Hashable VolumeStatusItem
diff --git a/gen/Network/AWS/EC2/Types/Sum.hs b/gen/Network/AWS/EC2/Types/Sum.hs
--- a/gen/Network/AWS/EC2/Types/Sum.hs
+++ b/gen/Network/AWS/EC2/Types/Sum.hs
@@ -9,7 +9,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.Types.Sum
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -17,6 +17,7 @@
 --
 module Network.AWS.EC2.Types.Sum where
 
+import           Network.AWS.EC2.Internal
 import           Network.AWS.Prelude
 
 data AccountAttributeName
@@ -176,30 +177,33 @@
     parseXML = parseXMLText "ArchitectureValues"
 
 data AttachmentStatus
-    = Attached
-    | Attaching
-    | Busy
-    | Detached
-    | Detaching
+    = AAttached
+    | AAttaching
+    | AAvailable
+    | ABusy
+    | ADetached
+    | ADetaching
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText AttachmentStatus where
     parser = takeLowerText >>= \case
-        "attached" -> pure Attached
-        "attaching" -> pure Attaching
-        "busy" -> pure Busy
-        "detached" -> pure Detached
-        "detaching" -> pure Detaching
+        "attached" -> pure AAttached
+        "attaching" -> pure AAttaching
+        "available" -> pure AAvailable
+        "busy" -> pure ABusy
+        "detached" -> pure ADetached
+        "detaching" -> pure ADetaching
         e -> fromTextError $ "Failure parsing AttachmentStatus from value: '" <> e
-           <> "'. Accepted values: attached, attaching, busy, detached, detaching"
+           <> "'. Accepted values: attached, attaching, available, busy, detached, detaching"
 
 instance ToText AttachmentStatus where
     toText = \case
-        Attached -> "attached"
-        Attaching -> "attaching"
-        Busy -> "busy"
-        Detached -> "detached"
-        Detaching -> "detaching"
+        AAttached -> "attached"
+        AAttaching -> "attaching"
+        AAvailable -> "available"
+        ABusy -> "busy"
+        ADetached -> "detached"
+        ADetaching -> "detaching"
 
 instance Hashable     AttachmentStatus
 instance ToByteString AttachmentStatus
@@ -988,18 +992,21 @@
 instance ToQuery      InstanceAttributeName
 instance ToHeader     InstanceAttributeName
 
-data InstanceLifecycleType =
-    Spot
+data InstanceLifecycleType
+    = Scheduled
+    | Spot
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText InstanceLifecycleType where
     parser = takeLowerText >>= \case
+        "scheduled" -> pure Scheduled
         "spot" -> pure Spot
         e -> fromTextError $ "Failure parsing InstanceLifecycleType from value: '" <> e
-           <> "'. Accepted values: spot"
+           <> "'. Accepted values: scheduled, spot"
 
 instance ToText InstanceLifecycleType where
     toText = \case
+        Scheduled -> "scheduled"
         Spot -> "spot"
 
 instance Hashable     InstanceLifecycleType
@@ -1069,6 +1076,7 @@
     | D2_8XLarge
     | D2_XLarge
     | G2_2XLarge
+    | G2_8XLarge
     | HI1_4XLarge
     | HS1_8XLarge
     | I2_2XLarge
@@ -1100,6 +1108,7 @@
     | T2_Large
     | T2_Medium
     | T2_Micro
+    | T2_Nano
     | T2_Small
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
@@ -1126,6 +1135,7 @@
         "d2.8xlarge" -> pure D2_8XLarge
         "d2.xlarge" -> pure D2_XLarge
         "g2.2xlarge" -> pure G2_2XLarge
+        "g2.8xlarge" -> pure G2_8XLarge
         "hi1.4xlarge" -> pure HI1_4XLarge
         "hs1.8xlarge" -> pure HS1_8XLarge
         "i2.2xlarge" -> pure I2_2XLarge
@@ -1157,9 +1167,10 @@
         "t2.large" -> pure T2_Large
         "t2.medium" -> pure T2_Medium
         "t2.micro" -> pure T2_Micro
+        "t2.nano" -> pure T2_Nano
         "t2.small" -> pure T2_Small
         e -> fromTextError $ "Failure parsing InstanceType from value: '" <> e
-           <> "'. Accepted values: c1.medium, c1.xlarge, c3.2xlarge, c3.4xlarge, c3.8xlarge, c3.large, c3.xlarge, c4.2xlarge, c4.4xlarge, c4.8xlarge, c4.large, c4.xlarge, cc1.4xlarge, cc2.8xlarge, cg1.4xlarge, cr1.8xlarge, d2.2xlarge, d2.4xlarge, d2.8xlarge, d2.xlarge, g2.2xlarge, hi1.4xlarge, hs1.8xlarge, i2.2xlarge, i2.4xlarge, i2.8xlarge, i2.xlarge, m1.large, m1.medium, m1.small, m1.xlarge, m2.2xlarge, m2.4xlarge, m2.xlarge, m3.2xlarge, m3.large, m3.medium, m3.xlarge, m4.10xlarge, m4.2xlarge, m4.4xlarge, m4.large, m4.xlarge, r3.2xlarge, r3.4xlarge, r3.8xlarge, r3.large, r3.xlarge, t1.micro, t2.large, t2.medium, t2.micro, t2.small"
+           <> "'. Accepted values: c1.medium, c1.xlarge, c3.2xlarge, c3.4xlarge, c3.8xlarge, c3.large, c3.xlarge, c4.2xlarge, c4.4xlarge, c4.8xlarge, c4.large, c4.xlarge, cc1.4xlarge, cc2.8xlarge, cg1.4xlarge, cr1.8xlarge, d2.2xlarge, d2.4xlarge, d2.8xlarge, d2.xlarge, g2.2xlarge, g2.8xlarge, hi1.4xlarge, hs1.8xlarge, i2.2xlarge, i2.4xlarge, i2.8xlarge, i2.xlarge, m1.large, m1.medium, m1.small, m1.xlarge, m2.2xlarge, m2.4xlarge, m2.xlarge, m3.2xlarge, m3.large, m3.medium, m3.xlarge, m4.10xlarge, m4.2xlarge, m4.4xlarge, m4.large, m4.xlarge, r3.2xlarge, r3.4xlarge, r3.8xlarge, r3.large, r3.xlarge, t1.micro, t2.large, t2.medium, t2.micro, t2.nano, t2.small"
 
 instance ToText InstanceType where
     toText = \case
@@ -1184,6 +1195,7 @@
         D2_8XLarge -> "d2.8xlarge"
         D2_XLarge -> "d2.xlarge"
         G2_2XLarge -> "g2.2xlarge"
+        G2_8XLarge -> "g2.8xlarge"
         HI1_4XLarge -> "hi1.4xlarge"
         HS1_8XLarge -> "hs1.8xlarge"
         I2_2XLarge -> "i2.2xlarge"
@@ -1215,6 +1227,7 @@
         T2_Large -> "t2.large"
         T2_Medium -> "t2.medium"
         T2_Micro -> "t2.micro"
+        T2_Nano -> "t2.nano"
         T2_Small -> "t2.small"
 
 instance Hashable     InstanceType
@@ -2485,30 +2498,30 @@
     parseXML = parseXMLText "VirtualizationType"
 
 data VolumeAttachmentState
-    = VASAttached
-    | VASAttaching
-    | VASBusy
-    | VASDetached
-    | VASDetaching
+    = VAttached
+    | VAttaching
+    | VBusy
+    | VDetached
+    | VDetaching
     deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
 
 instance FromText VolumeAttachmentState where
     parser = takeLowerText >>= \case
-        "attached" -> pure VASAttached
-        "attaching" -> pure VASAttaching
-        "busy" -> pure VASBusy
-        "detached" -> pure VASDetached
-        "detaching" -> pure VASDetaching
+        "attached" -> pure VAttached
+        "attaching" -> pure VAttaching
+        "busy" -> pure VBusy
+        "detached" -> pure VDetached
+        "detaching" -> pure VDetaching
         e -> fromTextError $ "Failure parsing VolumeAttachmentState from value: '" <> e
            <> "'. Accepted values: attached, attaching, busy, detached, detaching"
 
 instance ToText VolumeAttachmentState where
     toText = \case
-        VASAttached -> "attached"
-        VASAttaching -> "attaching"
-        VASBusy -> "busy"
-        VASDetached -> "detached"
-        VASDetaching -> "detaching"
+        VAttached -> "attached"
+        VAttaching -> "attaching"
+        VBusy -> "busy"
+        VDetached -> "detached"
+        VDetaching -> "detaching"
 
 instance Hashable     VolumeAttachmentState
 instance ToByteString VolumeAttachmentState
diff --git a/gen/Network/AWS/EC2/UnassignPrivateIPAddresses.hs b/gen/Network/AWS/EC2/UnassignPrivateIPAddresses.hs
--- a/gen/Network/AWS/EC2/UnassignPrivateIPAddresses.hs
+++ b/gen/Network/AWS/EC2/UnassignPrivateIPAddresses.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.UnassignPrivateIPAddresses
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -20,8 +20,6 @@
 --
 -- Unassigns one or more secondary private IP addresses from a network
 -- interface.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-UnassignPrivateIPAddresses.html AWS API Reference> for UnassignPrivateIPAddresses.
 module Network.AWS.EC2.UnassignPrivateIPAddresses
     (
     -- * Creating a Request
@@ -78,9 +76,11 @@
 instance AWSRequest UnassignPrivateIPAddresses where
         type Rs UnassignPrivateIPAddresses =
              UnassignPrivateIPAddressesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveNull UnassignPrivateIPAddressesResponse'
+
+instance Hashable UnassignPrivateIPAddresses
 
 instance ToHeaders UnassignPrivateIPAddresses where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/UnmonitorInstances.hs b/gen/Network/AWS/EC2/UnmonitorInstances.hs
--- a/gen/Network/AWS/EC2/UnmonitorInstances.hs
+++ b/gen/Network/AWS/EC2/UnmonitorInstances.hs
@@ -12,7 +12,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.UnmonitorInstances
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -22,8 +22,6 @@
 -- monitoring instances, see
 -- <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-cloudwatch.html Monitoring Your Instances and Volumes>
 -- in the /Amazon Elastic Compute Cloud User Guide/.
---
--- /See:/ <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-UnmonitorInstances.html AWS API Reference> for UnmonitorInstances.
 module Network.AWS.EC2.UnmonitorInstances
     (
     -- * Creating a Request
@@ -83,7 +81,7 @@
 instance AWSRequest UnmonitorInstances where
         type Rs UnmonitorInstances =
              UnmonitorInstancesResponse
-        request = postQuery eC2
+        request = postQuery ec2
         response
           = receiveXML
               (\ s h x ->
@@ -91,6 +89,8 @@
                    (x .@? "instancesSet" .!@ mempty >>=
                       may (parseXMLList "item"))
                      <*> (pure (fromEnum s)))
+
+instance Hashable UnmonitorInstances
 
 instance ToHeaders UnmonitorInstances where
         toHeaders = const mempty
diff --git a/gen/Network/AWS/EC2/Waiters.hs b/gen/Network/AWS/EC2/Waiters.hs
--- a/gen/Network/AWS/EC2/Waiters.hs
+++ b/gen/Network/AWS/EC2/Waiters.hs
@@ -7,7 +7,7 @@
 
 -- |
 -- Module      : Network.AWS.EC2.Waiters
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -29,12 +29,15 @@
 import           Network.AWS.EC2.DescribeInstances
 import           Network.AWS.EC2.DescribeInstanceStatus
 import           Network.AWS.EC2.DescribeInstanceStatus
+import           Network.AWS.EC2.DescribeNatGateways
+import           Network.AWS.EC2.DescribeNetworkInterfaces
 import           Network.AWS.EC2.DescribeSnapshots
 import           Network.AWS.EC2.DescribeSpotInstanceRequests
 import           Network.AWS.EC2.DescribeSubnets
 import           Network.AWS.EC2.DescribeVolumes
 import           Network.AWS.EC2.DescribeVolumes
 import           Network.AWS.EC2.DescribeVolumes
+import           Network.AWS.EC2.DescribeVPCPeeringConnections
 import           Network.AWS.EC2.DescribeVPCs
 import           Network.AWS.EC2.DescribeVPNConnections
 import           Network.AWS.EC2.DescribeVPNConnections
@@ -92,6 +95,37 @@
                               vState . to toTextCI)]
     }
 
+-- | Polls 'Network.AWS.EC2.DescribeNatGateways' every 15 seconds until a
+-- successful state is reached. An error is returned after 40 failed checks.
+natGatewayAvailable :: Wait DescribeNatGateways
+natGatewayAvailable =
+    Wait
+    { _waitName = "NatGatewayAvailable"
+    , _waitAttempts = 40
+    , _waitDelay = 15
+    , _waitAcceptors = [ matchAll
+                             "available"
+                             AcceptSuccess
+                             (folding (concatOf dngrsNatGateways) .
+                              ngState . _Just . to toTextCI)
+                       , matchAny
+                             "failed"
+                             AcceptFailure
+                             (folding (concatOf dngrsNatGateways) .
+                              ngState . _Just . to toTextCI)
+                       , matchAny
+                             "deleting"
+                             AcceptFailure
+                             (folding (concatOf dngrsNatGateways) .
+                              ngState . _Just . to toTextCI)
+                       , matchAny
+                             "deleted"
+                             AcceptFailure
+                             (folding (concatOf dngrsNatGateways) .
+                              ngState . _Just . to toTextCI)
+                       , matchError "InvalidNatGatewayIDNotFound" AcceptRetry]
+    }
+
 -- | Polls 'Network.AWS.EC2.DescribeSubnets' every 15 seconds until a
 -- successful state is reached. An error is returned after 40 failed checks.
 subnetAvailable :: Wait DescribeSubnets
@@ -107,6 +141,24 @@
                               subState . to toTextCI)]
     }
 
+-- | Polls 'Network.AWS.EC2.DescribeNetworkInterfaces' every 20 seconds until a
+-- successful state is reached. An error is returned after 10 failed checks.
+networkInterfaceAvailable :: Wait DescribeNetworkInterfaces
+networkInterfaceAvailable =
+    Wait
+    { _waitName = "NetworkInterfaceAvailable"
+    , _waitAttempts = 10
+    , _waitDelay = 20
+    , _waitAcceptors = [ matchAll
+                             "available"
+                             AcceptSuccess
+                             (folding (concatOf dnirsNetworkInterfaces) .
+                              niStatus . _Just . to toTextCI)
+                       , matchError
+                             "InvalidNetworkInterfaceIDNotFound"
+                             AcceptFailure]
+    }
+
 -- | Polls 'Network.AWS.EC2.DescribeInstanceStatus' every 15 seconds until a
 -- successful state is reached. An error is returned after 40 failed checks.
 systemStatusOK :: Wait DescribeInstanceStatus
@@ -260,7 +312,8 @@
                              AcceptFailure
                              (folding (concatOf dirsReservations) .
                               folding (concatOf rInstances) .
-                              insState . isName . to toTextCI)]
+                              insState . isName . to toTextCI)
+                       , matchError "InvalidInstanceIDNotFound" AcceptRetry]
     }
 
 -- | Polls 'Network.AWS.EC2.DescribeSpotInstanceRequests' every 15 seconds until a
@@ -459,6 +512,20 @@
                               iState . to toTextCI)]
     }
 
+-- | Polls 'Network.AWS.EC2.DescribeVPCPeeringConnections' every 15 seconds until a
+-- successful state is reached. An error is returned after 40 failed checks.
+vpcPeeringConnectionExists :: Wait DescribeVPCPeeringConnections
+vpcPeeringConnectionExists =
+    Wait
+    { _waitName = "VpcPeeringConnectionExists"
+    , _waitAttempts = 40
+    , _waitDelay = 15
+    , _waitAcceptors = [ matchStatus 200 AcceptSuccess
+                       , matchError
+                             "InvalidVpcPeeringConnectionIDNotFound"
+                             AcceptRetry]
+    }
+
 -- | Polls 'Network.AWS.EC2.DescribeSnapshots' every 15 seconds until a
 -- successful state is reached. An error is returned after 40 failed checks.
 snapshotCompleted :: Wait DescribeSnapshots
@@ -499,7 +566,8 @@
                              AcceptSuccess
                              (folding (concatOf disrsInstanceStatuses) .
                               isInstanceStatus .
-                              _Just . issStatus . to toTextCI)]
+                              _Just . issStatus . to toTextCI)
+                       , matchError "InvalidInstanceIDNotFound" AcceptRetry]
     }
 
 -- | Polls 'Network.AWS.EC2.DescribeVolumes' every 15 seconds until a
diff --git a/src/Network/AWS/EC2/Internal.hs b/src/Network/AWS/EC2/Internal.hs
new file mode 100644
--- /dev/null
+++ b/src/Network/AWS/EC2/Internal.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+-- |
+-- Module      : Network.AWS.EC2.Internal
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.EC2.Internal where
+
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+
+-- | Custom 'Tag' type which has an optional value component.
+--
+-- /See:/ 'tag' smart constructor.
+data DeleteTag = DeleteTag
+    { _deleteTagKey   :: !Text
+    , _deleteTagValue :: !(Maybe Text)
+    } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+deleteTag :: Text -- ^ 'deleteTagKey'
+          -> DeleteTag
+deleteTag k = DeleteTag k Nothing
+
+-- | The key of the tag to delete.
+--
+-- Constraints: Tag keys are case-sensitive and accept a maximum of 127
+-- Unicode characters. May not begin with 'aws:'
+deleteTagKey :: Lens' DeleteTag Text
+deleteTagKey = lens _deleteTagKey (\s a -> s { _deleteTagKey = a })
+
+-- | The optional value of the tag to delete.
+--
+-- Constraints: Tag values are case-sensitive and accept a maximum of 255
+-- Unicode characters.
+deleteTagValue :: Lens' DeleteTag (Maybe Text)
+deleteTagValue = lens _deleteTagValue (\ s a -> s{_deleteTagValue = a});
+
+instance FromXML DeleteTag where
+    parseXML x = DeleteTag <$> (x .@ "key") <*> (x .@? "value")
+
+instance ToQuery DeleteTag where
+    toQuery DeleteTag {..} = mconcat
+        [ "Key"   =: _deleteTagKey
+        , "Value" =: _deleteTagValue
+        ]
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
diff --git a/test/Test/AWS/EC2.hs b/test/Test/AWS/EC2.hs
--- a/test/Test/AWS/EC2.hs
+++ b/test/Test/AWS/EC2.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module      : Test.AWS.EC2
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : experimental
@@ -97,7 +97,7 @@
                                         & ibdmEBS        ?~
                                             (ebsInstanceBlockDevice
                                                 & eibdDeleteOnTermination ?~ True
-                                                & eibdStatus              ?~ Attached
+                                                & eibdStatus              ?~ AAttached
                                                 & eibdVolumeId            ?~ "vol-1a2b3c4d"
                                                 & eibdAttachTime          ?~ $(mkTime "2014-03-18T21:47:02+0000"))
                                     ]
@@ -116,7 +116,7 @@
                                         & iniAttachment          ?~
                                             (instanceNetworkInterfaceAttachment
                                                 & iniaDeleteOnTermination ?~ True
-                                                & iniaStatus              ?~ Attached
+                                                & iniaStatus              ?~ AAttached
                                                 & iniaAttachmentId        ?~ "eni-attach-1a2b3c4d"
                                                 & iniaAttachTime          ?~ $(mkTime "2014-03-18T21:47:02+0000")
                                                 & iniaDeviceIndex         ?~ 0)
diff --git a/test/Test/AWS/EC2/Internal.hs b/test/Test/AWS/EC2/Internal.hs
--- a/test/Test/AWS/EC2/Internal.hs
+++ b/test/Test/AWS/EC2/Internal.hs
@@ -2,7 +2,7 @@
 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
 
 -- Module      : Test.AWS.EC2.Internal
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : This Source Code Form is subject to the terms of
 --               the Mozilla Public License, v. 2.0.
 --               A copy of the MPL can be found in the LICENSE file or
diff --git a/test/Test/AWS/Gen/EC2.hs b/test/Test/AWS/Gen/EC2.hs
--- a/test/Test/AWS/Gen/EC2.hs
+++ b/test/Test/AWS/Gen/EC2.hs
@@ -5,7 +5,7 @@
 
 -- |
 -- Module      : Test.AWS.Gen.EC2
--- Copyright   : (c) 2013-2015 Brendan Hay
+-- Copyright   : (c) 2013-2016 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
 -- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
 -- Stability   : auto-generated
@@ -97,6 +97,12 @@
 --         , testAttachClassicLinkVPC $
 --             attachClassicLinkVPC
 --
+--         , testDescribeVPCClassicLinkDNSSupport $
+--             describeVPCClassicLinkDNSSupport
+--
+--         , testRunScheduledInstances $
+--             runScheduledInstances
+--
 --         , testCancelSpotFleetRequests $
 --             cancelSpotFleetRequests
 --
@@ -235,6 +241,9 @@
 --         , testDescribeConversionTasks $
 --             describeConversionTasks
 --
+--         , testDisableVPCClassicLinkDNSSupport $
+--             disableVPCClassicLinkDNSSupport
+--
 --         , testAllocateAddress $
 --             allocateAddress
 --
@@ -277,9 +286,15 @@
 --         , testRevokeSecurityGroupIngress $
 --             revokeSecurityGroupIngress
 --
+--         , testEnableVPCClassicLinkDNSSupport $
+--             enableVPCClassicLinkDNSSupport
+--
 --         , testModifyReservedInstances $
 --             modifyReservedInstances
 --
+--         , testDescribeScheduledInstances $
+--             describeScheduledInstances
+--
 --         , testCreateFlowLogs $
 --             createFlowLogs
 --
@@ -328,6 +343,9 @@
 --         , testCreateVolume $
 --             createVolume
 --
+--         , testDescribeScheduledInstanceAvailability $
+--             describeScheduledInstanceAvailability
+--
 --         , testModifyVolumeAttribute $
 --             modifyVolumeAttribute
 --
@@ -475,6 +493,9 @@
 --         , testDescribePlacementGroups $
 --             describePlacementGroups
 --
+--         , testPurchaseScheduledInstances $
+--             purchaseScheduledInstances
+--
 --         , testEnableVGWRoutePropagation $
 --             enableVGWRoutePropagation
 --
@@ -679,6 +700,12 @@
 --         , testAttachClassicLinkVPCResponse $
 --             attachClassicLinkVPCResponse
 --
+--         , testDescribeVPCClassicLinkDNSSupportResponse $
+--             describeVPCClassicLinkDNSSupportResponse
+--
+--         , testRunScheduledInstancesResponse $
+--             runScheduledInstancesResponse
+--
 --         , testCancelSpotFleetRequestsResponse $
 --             cancelSpotFleetRequestsResponse
 --
@@ -817,6 +844,9 @@
 --         , testDescribeConversionTasksResponse $
 --             describeConversionTasksResponse
 --
+--         , testDisableVPCClassicLinkDNSSupportResponse $
+--             disableVPCClassicLinkDNSSupportResponse
+--
 --         , testAllocateAddressResponse $
 --             allocateAddressResponse
 --
@@ -859,9 +889,15 @@
 --         , testRevokeSecurityGroupIngressResponse $
 --             revokeSecurityGroupIngressResponse
 --
+--         , testEnableVPCClassicLinkDNSSupportResponse $
+--             enableVPCClassicLinkDNSSupportResponse
+--
 --         , testModifyReservedInstancesResponse $
 --             modifyReservedInstancesResponse
 --
+--         , testDescribeScheduledInstancesResponse $
+--             describeScheduledInstancesResponse
+--
 --         , testCreateFlowLogsResponse $
 --             createFlowLogsResponse
 --
@@ -910,6 +946,9 @@
 --         , testCreateVolumeResponse $
 --             volume
 --
+--         , testDescribeScheduledInstanceAvailabilityResponse $
+--             describeScheduledInstanceAvailabilityResponse
+--
 --         , testModifyVolumeAttributeResponse $
 --             modifyVolumeAttributeResponse
 --
@@ -1057,6 +1096,9 @@
 --         , testDescribePlacementGroupsResponse $
 --             describePlacementGroupsResponse
 --
+--         , testPurchaseScheduledInstancesResponse $
+--             purchaseScheduledInstancesResponse
+--
 --         , testEnableVGWRoutePropagationResponse $
 --             enableVGWRoutePropagationResponse
 --
@@ -1309,6 +1351,16 @@
     "AttachClassicLinkVPC"
     "fixture/AttachClassicLinkVPC.yaml"
 
+testDescribeVPCClassicLinkDNSSupport :: DescribeVPCClassicLinkDNSSupport -> TestTree
+testDescribeVPCClassicLinkDNSSupport = req
+    "DescribeVPCClassicLinkDNSSupport"
+    "fixture/DescribeVPCClassicLinkDNSSupport.yaml"
+
+testRunScheduledInstances :: RunScheduledInstances -> TestTree
+testRunScheduledInstances = req
+    "RunScheduledInstances"
+    "fixture/RunScheduledInstances.yaml"
+
 testCancelSpotFleetRequests :: CancelSpotFleetRequests -> TestTree
 testCancelSpotFleetRequests = req
     "CancelSpotFleetRequests"
@@ -1539,6 +1591,11 @@
     "DescribeConversionTasks"
     "fixture/DescribeConversionTasks.yaml"
 
+testDisableVPCClassicLinkDNSSupport :: DisableVPCClassicLinkDNSSupport -> TestTree
+testDisableVPCClassicLinkDNSSupport = req
+    "DisableVPCClassicLinkDNSSupport"
+    "fixture/DisableVPCClassicLinkDNSSupport.yaml"
+
 testAllocateAddress :: AllocateAddress -> TestTree
 testAllocateAddress = req
     "AllocateAddress"
@@ -1609,11 +1666,21 @@
     "RevokeSecurityGroupIngress"
     "fixture/RevokeSecurityGroupIngress.yaml"
 
+testEnableVPCClassicLinkDNSSupport :: EnableVPCClassicLinkDNSSupport -> TestTree
+testEnableVPCClassicLinkDNSSupport = req
+    "EnableVPCClassicLinkDNSSupport"
+    "fixture/EnableVPCClassicLinkDNSSupport.yaml"
+
 testModifyReservedInstances :: ModifyReservedInstances -> TestTree
 testModifyReservedInstances = req
     "ModifyReservedInstances"
     "fixture/ModifyReservedInstances.yaml"
 
+testDescribeScheduledInstances :: DescribeScheduledInstances -> TestTree
+testDescribeScheduledInstances = req
+    "DescribeScheduledInstances"
+    "fixture/DescribeScheduledInstances.yaml"
+
 testCreateFlowLogs :: CreateFlowLogs -> TestTree
 testCreateFlowLogs = req
     "CreateFlowLogs"
@@ -1694,6 +1761,11 @@
     "CreateVolume"
     "fixture/CreateVolume.yaml"
 
+testDescribeScheduledInstanceAvailability :: DescribeScheduledInstanceAvailability -> TestTree
+testDescribeScheduledInstanceAvailability = req
+    "DescribeScheduledInstanceAvailability"
+    "fixture/DescribeScheduledInstanceAvailability.yaml"
+
 testModifyVolumeAttribute :: ModifyVolumeAttribute -> TestTree
 testModifyVolumeAttribute = req
     "ModifyVolumeAttribute"
@@ -1939,6 +2011,11 @@
     "DescribePlacementGroups"
     "fixture/DescribePlacementGroups.yaml"
 
+testPurchaseScheduledInstances :: PurchaseScheduledInstances -> TestTree
+testPurchaseScheduledInstances = req
+    "PurchaseScheduledInstances"
+    "fixture/PurchaseScheduledInstances.yaml"
+
 testEnableVGWRoutePropagation :: EnableVGWRoutePropagation -> TestTree
 testEnableVGWRoutePropagation = req
     "EnableVGWRoutePropagation"
@@ -2165,1349 +2242,1398 @@
 testImportInstanceResponse = res
     "ImportInstanceResponse"
     "fixture/ImportInstanceResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ImportInstance)
 
 testRevokeSecurityGroupEgressResponse :: RevokeSecurityGroupEgressResponse -> TestTree
 testRevokeSecurityGroupEgressResponse = res
     "RevokeSecurityGroupEgressResponse"
     "fixture/RevokeSecurityGroupEgressResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy RevokeSecurityGroupEgress)
 
 testCreateVPNGatewayResponse :: CreateVPNGatewayResponse -> TestTree
 testCreateVPNGatewayResponse = res
     "CreateVPNGatewayResponse"
     "fixture/CreateVPNGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateVPNGateway)
 
 testCreateNetworkACLResponse :: CreateNetworkACLResponse -> TestTree
 testCreateNetworkACLResponse = res
     "CreateNetworkACLResponse"
     "fixture/CreateNetworkACLResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateNetworkACL)
 
 testDeleteKeyPairResponse :: DeleteKeyPairResponse -> TestTree
 testDeleteKeyPairResponse = res
     "DeleteKeyPairResponse"
     "fixture/DeleteKeyPairResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteKeyPair)
 
 testDescribeTagsResponse :: DescribeTagsResponse -> TestTree
 testDescribeTagsResponse = res
     "DescribeTagsResponse"
     "fixture/DescribeTagsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeTags)
 
 testDetachNetworkInterfaceResponse :: DetachNetworkInterfaceResponse -> TestTree
 testDetachNetworkInterfaceResponse = res
     "DetachNetworkInterfaceResponse"
     "fixture/DetachNetworkInterfaceResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DetachNetworkInterface)
 
 testDetachInternetGatewayResponse :: DetachInternetGatewayResponse -> TestTree
 testDetachInternetGatewayResponse = res
     "DetachInternetGatewayResponse"
     "fixture/DetachInternetGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DetachInternetGateway)
 
 testDeleteVPCEndpointsResponse :: DeleteVPCEndpointsResponse -> TestTree
 testDeleteVPCEndpointsResponse = res
     "DeleteVPCEndpointsResponse"
     "fixture/DeleteVPCEndpointsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteVPCEndpoints)
 
 testDeleteFlowLogsResponse :: DeleteFlowLogsResponse -> TestTree
 testDeleteFlowLogsResponse = res
     "DeleteFlowLogsResponse"
     "fixture/DeleteFlowLogsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteFlowLogs)
 
 testDescribeVPCClassicLinkResponse :: DescribeVPCClassicLinkResponse -> TestTree
 testDescribeVPCClassicLinkResponse = res
     "DescribeVPCClassicLinkResponse"
     "fixture/DescribeVPCClassicLinkResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVPCClassicLink)
 
 testModifySubnetAttributeResponse :: ModifySubnetAttributeResponse -> TestTree
 testModifySubnetAttributeResponse = res
     "ModifySubnetAttributeResponse"
     "fixture/ModifySubnetAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifySubnetAttribute)
 
 testDetachVolumeResponse :: VolumeAttachment -> TestTree
 testDetachVolumeResponse = res
     "DetachVolumeResponse"
     "fixture/DetachVolumeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DetachVolume)
 
 testCancelBundleTaskResponse :: CancelBundleTaskResponse -> TestTree
 testCancelBundleTaskResponse = res
     "CancelBundleTaskResponse"
     "fixture/CancelBundleTaskResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CancelBundleTask)
 
 testReleaseAddressResponse :: ReleaseAddressResponse -> TestTree
 testReleaseAddressResponse = res
     "ReleaseAddressResponse"
     "fixture/ReleaseAddressResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ReleaseAddress)
 
 testCreateInternetGatewayResponse :: CreateInternetGatewayResponse -> TestTree
 testCreateInternetGatewayResponse = res
     "CreateInternetGatewayResponse"
     "fixture/CreateInternetGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateInternetGateway)
 
 testDeleteVPNConnectionResponse :: DeleteVPNConnectionResponse -> TestTree
 testDeleteVPNConnectionResponse = res
     "DeleteVPNConnectionResponse"
     "fixture/DeleteVPNConnectionResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteVPNConnection)
 
 testDescribeBundleTasksResponse :: DescribeBundleTasksResponse -> TestTree
 testDescribeBundleTasksResponse = res
     "DescribeBundleTasksResponse"
     "fixture/DescribeBundleTasksResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeBundleTasks)
 
 testAuthorizeSecurityGroupEgressResponse :: AuthorizeSecurityGroupEgressResponse -> TestTree
 testAuthorizeSecurityGroupEgressResponse = res
     "AuthorizeSecurityGroupEgressResponse"
     "fixture/AuthorizeSecurityGroupEgressResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AuthorizeSecurityGroupEgress)
 
 testDeregisterImageResponse :: DeregisterImageResponse -> TestTree
 testDeregisterImageResponse = res
     "DeregisterImageResponse"
     "fixture/DeregisterImageResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeregisterImage)
 
 testModifyNetworkInterfaceAttributeResponse :: ModifyNetworkInterfaceAttributeResponse -> TestTree
 testModifyNetworkInterfaceAttributeResponse = res
     "ModifyNetworkInterfaceAttributeResponse"
     "fixture/ModifyNetworkInterfaceAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyNetworkInterfaceAttribute)
 
 testCancelReservedInstancesListingResponse :: CancelReservedInstancesListingResponse -> TestTree
 testCancelReservedInstancesListingResponse = res
     "CancelReservedInstancesListingResponse"
     "fixture/CancelReservedInstancesListingResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CancelReservedInstancesListing)
 
 testAttachClassicLinkVPCResponse :: AttachClassicLinkVPCResponse -> TestTree
 testAttachClassicLinkVPCResponse = res
     "AttachClassicLinkVPCResponse"
     "fixture/AttachClassicLinkVPCResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AttachClassicLinkVPC)
 
+testDescribeVPCClassicLinkDNSSupportResponse :: DescribeVPCClassicLinkDNSSupportResponse -> TestTree
+testDescribeVPCClassicLinkDNSSupportResponse = res
+    "DescribeVPCClassicLinkDNSSupportResponse"
+    "fixture/DescribeVPCClassicLinkDNSSupportResponse.proto"
+    ec2
+    (Proxy :: Proxy DescribeVPCClassicLinkDNSSupport)
+
+testRunScheduledInstancesResponse :: RunScheduledInstancesResponse -> TestTree
+testRunScheduledInstancesResponse = res
+    "RunScheduledInstancesResponse"
+    "fixture/RunScheduledInstancesResponse.proto"
+    ec2
+    (Proxy :: Proxy RunScheduledInstances)
+
 testCancelSpotFleetRequestsResponse :: CancelSpotFleetRequestsResponse -> TestTree
 testCancelSpotFleetRequestsResponse = res
     "CancelSpotFleetRequestsResponse"
     "fixture/CancelSpotFleetRequestsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CancelSpotFleetRequests)
 
 testDescribeSpotPriceHistoryResponse :: DescribeSpotPriceHistoryResponse -> TestTree
 testDescribeSpotPriceHistoryResponse = res
     "DescribeSpotPriceHistoryResponse"
     "fixture/DescribeSpotPriceHistoryResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSpotPriceHistory)
 
 testDescribeDHCPOptionsResponse :: DescribeDHCPOptionsResponse -> TestTree
 testDescribeDHCPOptionsResponse = res
     "DescribeDHCPOptionsResponse"
     "fixture/DescribeDHCPOptionsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeDHCPOptions)
 
 testImportImageResponse :: ImportImageResponse -> TestTree
 testImportImageResponse = res
     "ImportImageResponse"
     "fixture/ImportImageResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ImportImage)
 
 testStopInstancesResponse :: StopInstancesResponse -> TestTree
 testStopInstancesResponse = res
     "StopInstancesResponse"
     "fixture/StopInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy StopInstances)
 
 testDescribeInternetGatewaysResponse :: DescribeInternetGatewaysResponse -> TestTree
 testDescribeInternetGatewaysResponse = res
     "DescribeInternetGatewaysResponse"
     "fixture/DescribeInternetGatewaysResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeInternetGateways)
 
 testDisableVPCClassicLinkResponse :: DisableVPCClassicLinkResponse -> TestTree
 testDisableVPCClassicLinkResponse = res
     "DisableVPCClassicLinkResponse"
     "fixture/DisableVPCClassicLinkResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DisableVPCClassicLink)
 
 testBundleInstanceResponse :: BundleInstanceResponse -> TestTree
 testBundleInstanceResponse = res
     "BundleInstanceResponse"
     "fixture/BundleInstanceResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy BundleInstance)
 
 testDescribeNetworkInterfacesResponse :: DescribeNetworkInterfacesResponse -> TestTree
 testDescribeNetworkInterfacesResponse = res
     "DescribeNetworkInterfacesResponse"
     "fixture/DescribeNetworkInterfacesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeNetworkInterfaces)
 
 testReplaceNetworkACLAssociationResponse :: ReplaceNetworkACLAssociationResponse -> TestTree
 testReplaceNetworkACLAssociationResponse = res
     "ReplaceNetworkACLAssociationResponse"
     "fixture/ReplaceNetworkACLAssociationResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ReplaceNetworkACLAssociation)
 
 testDescribeNatGatewaysResponse :: DescribeNatGatewaysResponse -> TestTree
 testDescribeNatGatewaysResponse = res
     "DescribeNatGatewaysResponse"
     "fixture/DescribeNatGatewaysResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeNatGateways)
 
 testDescribeAddressesResponse :: DescribeAddressesResponse -> TestTree
 testDescribeAddressesResponse = res
     "DescribeAddressesResponse"
     "fixture/DescribeAddressesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeAddresses)
 
 testDescribeSnapshotAttributeResponse :: DescribeSnapshotAttributeResponse -> TestTree
 testDescribeSnapshotAttributeResponse = res
     "DescribeSnapshotAttributeResponse"
     "fixture/DescribeSnapshotAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSnapshotAttribute)
 
 testReplaceRouteResponse :: ReplaceRouteResponse -> TestTree
 testReplaceRouteResponse = res
     "ReplaceRouteResponse"
     "fixture/ReplaceRouteResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ReplaceRoute)
 
 testDescribeVPCEndpointServicesResponse :: DescribeVPCEndpointServicesResponse -> TestTree
 testDescribeVPCEndpointServicesResponse = res
     "DescribeVPCEndpointServicesResponse"
     "fixture/DescribeVPCEndpointServicesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVPCEndpointServices)
 
 testAuthorizeSecurityGroupIngressResponse :: AuthorizeSecurityGroupIngressResponse -> TestTree
 testAuthorizeSecurityGroupIngressResponse = res
     "AuthorizeSecurityGroupIngressResponse"
     "fixture/AuthorizeSecurityGroupIngressResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AuthorizeSecurityGroupIngress)
 
 testCreateVPCPeeringConnectionResponse :: CreateVPCPeeringConnectionResponse -> TestTree
 testCreateVPCPeeringConnectionResponse = res
     "CreateVPCPeeringConnectionResponse"
     "fixture/CreateVPCPeeringConnectionResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateVPCPeeringConnection)
 
 testDescribeSubnetsResponse :: DescribeSubnetsResponse -> TestTree
 testDescribeSubnetsResponse = res
     "DescribeSubnetsResponse"
     "fixture/DescribeSubnetsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSubnets)
 
 testCreateTagsResponse :: CreateTagsResponse -> TestTree
 testCreateTagsResponse = res
     "CreateTagsResponse"
     "fixture/CreateTagsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateTags)
 
 testPurchaseReservedInstancesOfferingResponse :: PurchaseReservedInstancesOfferingResponse -> TestTree
 testPurchaseReservedInstancesOfferingResponse = res
     "PurchaseReservedInstancesOfferingResponse"
     "fixture/PurchaseReservedInstancesOfferingResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy PurchaseReservedInstancesOffering)
 
 testDeleteNetworkACLEntryResponse :: DeleteNetworkACLEntryResponse -> TestTree
 testDeleteNetworkACLEntryResponse = res
     "DeleteNetworkACLEntryResponse"
     "fixture/DeleteNetworkACLEntryResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteNetworkACLEntry)
 
 testResetSnapshotAttributeResponse :: ResetSnapshotAttributeResponse -> TestTree
 testResetSnapshotAttributeResponse = res
     "ResetSnapshotAttributeResponse"
     "fixture/ResetSnapshotAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ResetSnapshotAttribute)
 
 testDescribeVPNConnectionsResponse :: DescribeVPNConnectionsResponse -> TestTree
 testDescribeVPNConnectionsResponse = res
     "DescribeVPNConnectionsResponse"
     "fixture/DescribeVPNConnectionsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVPNConnections)
 
 testDeleteRouteResponse :: DeleteRouteResponse -> TestTree
 testDeleteRouteResponse = res
     "DeleteRouteResponse"
     "fixture/DeleteRouteResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteRoute)
 
 testReplaceNetworkACLEntryResponse :: ReplaceNetworkACLEntryResponse -> TestTree
 testReplaceNetworkACLEntryResponse = res
     "ReplaceNetworkACLEntryResponse"
     "fixture/ReplaceNetworkACLEntryResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ReplaceNetworkACLEntry)
 
 testDescribeVPCEndpointsResponse :: DescribeVPCEndpointsResponse -> TestTree
 testDescribeVPCEndpointsResponse = res
     "DescribeVPCEndpointsResponse"
     "fixture/DescribeVPCEndpointsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVPCEndpoints)
 
 testResetInstanceAttributeResponse :: ResetInstanceAttributeResponse -> TestTree
 testResetInstanceAttributeResponse = res
     "ResetInstanceAttributeResponse"
     "fixture/ResetInstanceAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ResetInstanceAttribute)
 
 testAttachNetworkInterfaceResponse :: AttachNetworkInterfaceResponse -> TestTree
 testAttachNetworkInterfaceResponse = res
     "AttachNetworkInterfaceResponse"
     "fixture/AttachNetworkInterfaceResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AttachNetworkInterface)
 
 testDescribeInstanceStatusResponse :: DescribeInstanceStatusResponse -> TestTree
 testDescribeInstanceStatusResponse = res
     "DescribeInstanceStatusResponse"
     "fixture/DescribeInstanceStatusResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeInstanceStatus)
 
 testImportKeyPairResponse :: ImportKeyPairResponse -> TestTree
 testImportKeyPairResponse = res
     "ImportKeyPairResponse"
     "fixture/ImportKeyPairResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ImportKeyPair)
 
 testDeleteTagsResponse :: DeleteTagsResponse -> TestTree
 testDeleteTagsResponse = res
     "DeleteTagsResponse"
     "fixture/DeleteTagsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteTags)
 
 testConfirmProductInstanceResponse :: ConfirmProductInstanceResponse -> TestTree
 testConfirmProductInstanceResponse = res
     "ConfirmProductInstanceResponse"
     "fixture/ConfirmProductInstanceResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ConfirmProductInstance)
 
 testDescribeInstanceAttributeResponse :: DescribeInstanceAttributeResponse -> TestTree
 testDescribeInstanceAttributeResponse = res
     "DescribeInstanceAttributeResponse"
     "fixture/DescribeInstanceAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeInstanceAttribute)
 
 testDescribeReservedInstancesOfferingsResponse :: DescribeReservedInstancesOfferingsResponse -> TestTree
 testDescribeReservedInstancesOfferingsResponse = res
     "DescribeReservedInstancesOfferingsResponse"
     "fixture/DescribeReservedInstancesOfferingsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeReservedInstancesOfferings)
 
 testCreateCustomerGatewayResponse :: CreateCustomerGatewayResponse -> TestTree
 testCreateCustomerGatewayResponse = res
     "CreateCustomerGatewayResponse"
     "fixture/CreateCustomerGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateCustomerGateway)
 
 testDeleteSecurityGroupResponse :: DeleteSecurityGroupResponse -> TestTree
 testDeleteSecurityGroupResponse = res
     "DeleteSecurityGroupResponse"
     "fixture/DeleteSecurityGroupResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteSecurityGroup)
 
 testDeleteVPCPeeringConnectionResponse :: DeleteVPCPeeringConnectionResponse -> TestTree
 testDeleteVPCPeeringConnectionResponse = res
     "DeleteVPCPeeringConnectionResponse"
     "fixture/DeleteVPCPeeringConnectionResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteVPCPeeringConnection)
 
 testAttachInternetGatewayResponse :: AttachInternetGatewayResponse -> TestTree
 testAttachInternetGatewayResponse = res
     "AttachInternetGatewayResponse"
     "fixture/AttachInternetGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AttachInternetGateway)
 
 testModifyInstancePlacementResponse :: ModifyInstancePlacementResponse -> TestTree
 testModifyInstancePlacementResponse = res
     "ModifyInstancePlacementResponse"
     "fixture/ModifyInstancePlacementResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyInstancePlacement)
 
 testDescribeFlowLogsResponse :: DescribeFlowLogsResponse -> TestTree
 testDescribeFlowLogsResponse = res
     "DescribeFlowLogsResponse"
     "fixture/DescribeFlowLogsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeFlowLogs)
 
 testRunInstancesResponse :: Reservation -> TestTree
 testRunInstancesResponse = res
     "RunInstancesResponse"
     "fixture/RunInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy RunInstances)
 
 testAssociateDHCPOptionsResponse :: AssociateDHCPOptionsResponse -> TestTree
 testAssociateDHCPOptionsResponse = res
     "AssociateDHCPOptionsResponse"
     "fixture/AssociateDHCPOptionsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AssociateDHCPOptions)
 
 testDescribeReservedInstancesResponse :: DescribeReservedInstancesResponse -> TestTree
 testDescribeReservedInstancesResponse = res
     "DescribeReservedInstancesResponse"
     "fixture/DescribeReservedInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeReservedInstances)
 
 testDescribeIdFormatResponse :: DescribeIdFormatResponse -> TestTree
 testDescribeIdFormatResponse = res
     "DescribeIdFormatResponse"
     "fixture/DescribeIdFormatResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeIdFormat)
 
 testDescribeVPCsResponse :: DescribeVPCsResponse -> TestTree
 testDescribeVPCsResponse = res
     "DescribeVPCsResponse"
     "fixture/DescribeVPCsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVPCs)
 
 testDescribeConversionTasksResponse :: DescribeConversionTasksResponse -> TestTree
 testDescribeConversionTasksResponse = res
     "DescribeConversionTasksResponse"
     "fixture/DescribeConversionTasksResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeConversionTasks)
 
+testDisableVPCClassicLinkDNSSupportResponse :: DisableVPCClassicLinkDNSSupportResponse -> TestTree
+testDisableVPCClassicLinkDNSSupportResponse = res
+    "DisableVPCClassicLinkDNSSupportResponse"
+    "fixture/DisableVPCClassicLinkDNSSupportResponse.proto"
+    ec2
+    (Proxy :: Proxy DisableVPCClassicLinkDNSSupport)
+
 testAllocateAddressResponse :: AllocateAddressResponse -> TestTree
 testAllocateAddressResponse = res
     "AllocateAddressResponse"
     "fixture/AllocateAddressResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AllocateAddress)
 
 testCancelConversionTaskResponse :: CancelConversionTaskResponse -> TestTree
 testCancelConversionTaskResponse = res
     "CancelConversionTaskResponse"
     "fixture/CancelConversionTaskResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CancelConversionTask)
 
 testModifyImageAttributeResponse :: ModifyImageAttributeResponse -> TestTree
 testModifyImageAttributeResponse = res
     "ModifyImageAttributeResponse"
     "fixture/ModifyImageAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyImageAttribute)
 
 testCreateRouteTableResponse :: CreateRouteTableResponse -> TestTree
 testCreateRouteTableResponse = res
     "CreateRouteTableResponse"
     "fixture/CreateRouteTableResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateRouteTable)
 
 testReportInstanceStatusResponse :: ReportInstanceStatusResponse -> TestTree
 testReportInstanceStatusResponse = res
     "ReportInstanceStatusResponse"
     "fixture/ReportInstanceStatusResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ReportInstanceStatus)
 
 testAttachVolumeResponse :: VolumeAttachment -> TestTree
 testAttachVolumeResponse = res
     "AttachVolumeResponse"
     "fixture/AttachVolumeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AttachVolume)
 
 testRequestSpotInstancesResponse :: RequestSpotInstancesResponse -> TestTree
 testRequestSpotInstancesResponse = res
     "RequestSpotInstancesResponse"
     "fixture/RequestSpotInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy RequestSpotInstances)
 
 testDescribeVolumesResponse :: DescribeVolumesResponse -> TestTree
 testDescribeVolumesResponse = res
     "DescribeVolumesResponse"
     "fixture/DescribeVolumesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVolumes)
 
 testRejectVPCPeeringConnectionResponse :: RejectVPCPeeringConnectionResponse -> TestTree
 testRejectVPCPeeringConnectionResponse = res
     "RejectVPCPeeringConnectionResponse"
     "fixture/RejectVPCPeeringConnectionResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy RejectVPCPeeringConnection)
 
 testDeleteVPNConnectionRouteResponse :: DeleteVPNConnectionRouteResponse -> TestTree
 testDeleteVPNConnectionRouteResponse = res
     "DeleteVPNConnectionRouteResponse"
     "fixture/DeleteVPNConnectionRouteResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteVPNConnectionRoute)
 
 testModifyVPCEndpointResponse :: ModifyVPCEndpointResponse -> TestTree
 testModifyVPCEndpointResponse = res
     "ModifyVPCEndpointResponse"
     "fixture/ModifyVPCEndpointResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyVPCEndpoint)
 
 testAllocateHostsResponse :: AllocateHostsResponse -> TestTree
 testAllocateHostsResponse = res
     "AllocateHostsResponse"
     "fixture/AllocateHostsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AllocateHosts)
 
 testRegisterImageResponse :: RegisterImageResponse -> TestTree
 testRegisterImageResponse = res
     "RegisterImageResponse"
     "fixture/RegisterImageResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy RegisterImage)
 
 testRevokeSecurityGroupIngressResponse :: RevokeSecurityGroupIngressResponse -> TestTree
 testRevokeSecurityGroupIngressResponse = res
     "RevokeSecurityGroupIngressResponse"
     "fixture/RevokeSecurityGroupIngressResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy RevokeSecurityGroupIngress)
 
+testEnableVPCClassicLinkDNSSupportResponse :: EnableVPCClassicLinkDNSSupportResponse -> TestTree
+testEnableVPCClassicLinkDNSSupportResponse = res
+    "EnableVPCClassicLinkDNSSupportResponse"
+    "fixture/EnableVPCClassicLinkDNSSupportResponse.proto"
+    ec2
+    (Proxy :: Proxy EnableVPCClassicLinkDNSSupport)
+
 testModifyReservedInstancesResponse :: ModifyReservedInstancesResponse -> TestTree
 testModifyReservedInstancesResponse = res
     "ModifyReservedInstancesResponse"
     "fixture/ModifyReservedInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyReservedInstances)
 
+testDescribeScheduledInstancesResponse :: DescribeScheduledInstancesResponse -> TestTree
+testDescribeScheduledInstancesResponse = res
+    "DescribeScheduledInstancesResponse"
+    "fixture/DescribeScheduledInstancesResponse.proto"
+    ec2
+    (Proxy :: Proxy DescribeScheduledInstances)
+
 testCreateFlowLogsResponse :: CreateFlowLogsResponse -> TestTree
 testCreateFlowLogsResponse = res
     "CreateFlowLogsResponse"
     "fixture/CreateFlowLogsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateFlowLogs)
 
 testDescribeSpotFleetRequestsResponse :: DescribeSpotFleetRequestsResponse -> TestTree
 testDescribeSpotFleetRequestsResponse = res
     "DescribeSpotFleetRequestsResponse"
     "fixture/DescribeSpotFleetRequestsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSpotFleetRequests)
 
 testMoveAddressToVPCResponse :: MoveAddressToVPCResponse -> TestTree
 testMoveAddressToVPCResponse = res
     "MoveAddressToVPCResponse"
     "fixture/MoveAddressToVPCResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy MoveAddressToVPC)
 
 testDeleteNetworkACLResponse :: DeleteNetworkACLResponse -> TestTree
 testDeleteNetworkACLResponse = res
     "DeleteNetworkACLResponse"
     "fixture/DeleteNetworkACLResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteNetworkACL)
 
 testDeleteVPNGatewayResponse :: DeleteVPNGatewayResponse -> TestTree
 testDeleteVPNGatewayResponse = res
     "DeleteVPNGatewayResponse"
     "fixture/DeleteVPNGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteVPNGateway)
 
 testDescribeImportImageTasksResponse :: DescribeImportImageTasksResponse -> TestTree
 testDescribeImportImageTasksResponse = res
     "DescribeImportImageTasksResponse"
     "fixture/DescribeImportImageTasksResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeImportImageTasks)
 
 testDescribeVolumeAttributeResponse :: DescribeVolumeAttributeResponse -> TestTree
 testDescribeVolumeAttributeResponse = res
     "DescribeVolumeAttributeResponse"
     "fixture/DescribeVolumeAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVolumeAttribute)
 
 testDescribeMovingAddressesResponse :: DescribeMovingAddressesResponse -> TestTree
 testDescribeMovingAddressesResponse = res
     "DescribeMovingAddressesResponse"
     "fixture/DescribeMovingAddressesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeMovingAddresses)
 
 testGetPasswordDataResponse :: GetPasswordDataResponse -> TestTree
 testGetPasswordDataResponse = res
     "GetPasswordDataResponse"
     "fixture/GetPasswordDataResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy GetPasswordData)
 
 testCreateVPCResponse :: CreateVPCResponse -> TestTree
 testCreateVPCResponse = res
     "CreateVPCResponse"
     "fixture/CreateVPCResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateVPC)
 
 testCopySnapshotResponse :: CopySnapshotResponse -> TestTree
 testCopySnapshotResponse = res
     "CopySnapshotResponse"
     "fixture/CopySnapshotResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CopySnapshot)
 
 testDisassociateAddressResponse :: DisassociateAddressResponse -> TestTree
 testDisassociateAddressResponse = res
     "DisassociateAddressResponse"
     "fixture/DisassociateAddressResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DisassociateAddress)
 
 testDeleteVPCResponse :: DeleteVPCResponse -> TestTree
 testDeleteVPCResponse = res
     "DeleteVPCResponse"
     "fixture/DeleteVPCResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteVPC)
 
 testCreateInstanceExportTaskResponse :: CreateInstanceExportTaskResponse -> TestTree
 testCreateInstanceExportTaskResponse = res
     "CreateInstanceExportTaskResponse"
     "fixture/CreateInstanceExportTaskResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateInstanceExportTask)
 
 testDescribeVPCAttributeResponse :: DescribeVPCAttributeResponse -> TestTree
 testDescribeVPCAttributeResponse = res
     "DescribeVPCAttributeResponse"
     "fixture/DescribeVPCAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVPCAttribute)
 
 testCreateVolumeResponse :: Volume -> TestTree
 testCreateVolumeResponse = res
     "CreateVolumeResponse"
     "fixture/CreateVolumeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateVolume)
 
+testDescribeScheduledInstanceAvailabilityResponse :: DescribeScheduledInstanceAvailabilityResponse -> TestTree
+testDescribeScheduledInstanceAvailabilityResponse = res
+    "DescribeScheduledInstanceAvailabilityResponse"
+    "fixture/DescribeScheduledInstanceAvailabilityResponse.proto"
+    ec2
+    (Proxy :: Proxy DescribeScheduledInstanceAvailability)
+
 testModifyVolumeAttributeResponse :: ModifyVolumeAttributeResponse -> TestTree
 testModifyVolumeAttributeResponse = res
     "ModifyVolumeAttributeResponse"
     "fixture/ModifyVolumeAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyVolumeAttribute)
 
 testDescribeSpotDatafeedSubscriptionResponse :: DescribeSpotDatafeedSubscriptionResponse -> TestTree
 testDescribeSpotDatafeedSubscriptionResponse = res
     "DescribeSpotDatafeedSubscriptionResponse"
     "fixture/DescribeSpotDatafeedSubscriptionResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSpotDatafeedSubscription)
 
 testDescribePrefixListsResponse :: DescribePrefixListsResponse -> TestTree
 testDescribePrefixListsResponse = res
     "DescribePrefixListsResponse"
     "fixture/DescribePrefixListsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribePrefixLists)
 
 testDeletePlacementGroupResponse :: DeletePlacementGroupResponse -> TestTree
 testDeletePlacementGroupResponse = res
     "DeletePlacementGroupResponse"
     "fixture/DeletePlacementGroupResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeletePlacementGroup)
 
 testRequestSpotFleetResponse :: RequestSpotFleetResponse -> TestTree
 testRequestSpotFleetResponse = res
     "RequestSpotFleetResponse"
     "fixture/RequestSpotFleetResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy RequestSpotFleet)
 
 testCreateSubnetResponse :: CreateSubnetResponse -> TestTree
 testCreateSubnetResponse = res
     "CreateSubnetResponse"
     "fixture/CreateSubnetResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateSubnet)
 
 testCreateNetworkInterfaceResponse :: CreateNetworkInterfaceResponse -> TestTree
 testCreateNetworkInterfaceResponse = res
     "CreateNetworkInterfaceResponse"
     "fixture/CreateNetworkInterfaceResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateNetworkInterface)
 
 testDescribeSecurityGroupsResponse :: DescribeSecurityGroupsResponse -> TestTree
 testDescribeSecurityGroupsResponse = res
     "DescribeSecurityGroupsResponse"
     "fixture/DescribeSecurityGroupsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSecurityGroups)
 
 testDescribeExportTasksResponse :: DescribeExportTasksResponse -> TestTree
 testDescribeExportTasksResponse = res
     "DescribeExportTasksResponse"
     "fixture/DescribeExportTasksResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeExportTasks)
 
 testModifySpotFleetRequestResponse :: ModifySpotFleetRequestResponse -> TestTree
 testModifySpotFleetRequestResponse = res
     "ModifySpotFleetRequestResponse"
     "fixture/ModifySpotFleetRequestResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifySpotFleetRequest)
 
 testDetachVPNGatewayResponse :: DetachVPNGatewayResponse -> TestTree
 testDetachVPNGatewayResponse = res
     "DetachVPNGatewayResponse"
     "fixture/DetachVPNGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DetachVPNGateway)
 
 testEnableVolumeIOResponse :: EnableVolumeIOResponse -> TestTree
 testEnableVolumeIOResponse = res
     "EnableVolumeIOResponse"
     "fixture/EnableVolumeIOResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy EnableVolumeIO)
 
 testDescribeInstancesResponse :: DescribeInstancesResponse -> TestTree
 testDescribeInstancesResponse = res
     "DescribeInstancesResponse"
     "fixture/DescribeInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeInstances)
 
 testCreateNatGatewayResponse :: CreateNatGatewayResponse -> TestTree
 testCreateNatGatewayResponse = res
     "CreateNatGatewayResponse"
     "fixture/CreateNatGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateNatGateway)
 
 testDescribeVPCPeeringConnectionsResponse :: DescribeVPCPeeringConnectionsResponse -> TestTree
 testDescribeVPCPeeringConnectionsResponse = res
     "DescribeVPCPeeringConnectionsResponse"
     "fixture/DescribeVPCPeeringConnectionsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVPCPeeringConnections)
 
 testCancelExportTaskResponse :: CancelExportTaskResponse -> TestTree
 testCancelExportTaskResponse = res
     "CancelExportTaskResponse"
     "fixture/CancelExportTaskResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CancelExportTask)
 
 testDeleteNetworkInterfaceResponse :: DeleteNetworkInterfaceResponse -> TestTree
 testDeleteNetworkInterfaceResponse = res
     "DeleteNetworkInterfaceResponse"
     "fixture/DeleteNetworkInterfaceResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteNetworkInterface)
 
 testReplaceRouteTableAssociationResponse :: ReplaceRouteTableAssociationResponse -> TestTree
 testReplaceRouteTableAssociationResponse = res
     "ReplaceRouteTableAssociationResponse"
     "fixture/ReplaceRouteTableAssociationResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ReplaceRouteTableAssociation)
 
 testStartInstancesResponse :: StartInstancesResponse -> TestTree
 testStartInstancesResponse = res
     "StartInstancesResponse"
     "fixture/StartInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy StartInstances)
 
 testCreatePlacementGroupResponse :: CreatePlacementGroupResponse -> TestTree
 testCreatePlacementGroupResponse = res
     "CreatePlacementGroupResponse"
     "fixture/CreatePlacementGroupResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreatePlacementGroup)
 
 testDescribeSnapshotsResponse :: DescribeSnapshotsResponse -> TestTree
 testDescribeSnapshotsResponse = res
     "DescribeSnapshotsResponse"
     "fixture/DescribeSnapshotsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSnapshots)
 
 testAssociateAddressResponse :: AssociateAddressResponse -> TestTree
 testAssociateAddressResponse = res
     "AssociateAddressResponse"
     "fixture/AssociateAddressResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AssociateAddress)
 
 testDescribeNetworkInterfaceAttributeResponse :: DescribeNetworkInterfaceAttributeResponse -> TestTree
 testDescribeNetworkInterfaceAttributeResponse = res
     "DescribeNetworkInterfaceAttributeResponse"
     "fixture/DescribeNetworkInterfaceAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeNetworkInterfaceAttribute)
 
 testReleaseHostsResponse :: ReleaseHostsResponse -> TestTree
 testReleaseHostsResponse = res
     "ReleaseHostsResponse"
     "fixture/ReleaseHostsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ReleaseHosts)
 
 testResetNetworkInterfaceAttributeResponse :: ResetNetworkInterfaceAttributeResponse -> TestTree
 testResetNetworkInterfaceAttributeResponse = res
     "ResetNetworkInterfaceAttributeResponse"
     "fixture/ResetNetworkInterfaceAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ResetNetworkInterfaceAttribute)
 
 testDeleteInternetGatewayResponse :: DeleteInternetGatewayResponse -> TestTree
 testDeleteInternetGatewayResponse = res
     "DeleteInternetGatewayResponse"
     "fixture/DeleteInternetGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteInternetGateway)
 
 testDescribeReservedInstancesListingsResponse :: DescribeReservedInstancesListingsResponse -> TestTree
 testDescribeReservedInstancesListingsResponse = res
     "DescribeReservedInstancesListingsResponse"
     "fixture/DescribeReservedInstancesListingsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeReservedInstancesListings)
 
 testCreateVPNConnectionResponse :: CreateVPNConnectionResponse -> TestTree
 testCreateVPNConnectionResponse = res
     "CreateVPNConnectionResponse"
     "fixture/CreateVPNConnectionResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateVPNConnection)
 
 testDeleteNatGatewayResponse :: DeleteNatGatewayResponse -> TestTree
 testDeleteNatGatewayResponse = res
     "DeleteNatGatewayResponse"
     "fixture/DeleteNatGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteNatGateway)
 
 testDescribeImportSnapshotTasksResponse :: DescribeImportSnapshotTasksResponse -> TestTree
 testDescribeImportSnapshotTasksResponse = res
     "DescribeImportSnapshotTasksResponse"
     "fixture/DescribeImportSnapshotTasksResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeImportSnapshotTasks)
 
 testDescribeCustomerGatewaysResponse :: DescribeCustomerGatewaysResponse -> TestTree
 testDescribeCustomerGatewaysResponse = res
     "DescribeCustomerGatewaysResponse"
     "fixture/DescribeCustomerGatewaysResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeCustomerGateways)
 
 testDeleteSubnetResponse :: DeleteSubnetResponse -> TestTree
 testDeleteSubnetResponse = res
     "DeleteSubnetResponse"
     "fixture/DeleteSubnetResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteSubnet)
 
 testCopyImageResponse :: CopyImageResponse -> TestTree
 testCopyImageResponse = res
     "CopyImageResponse"
     "fixture/CopyImageResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CopyImage)
 
 testCreateVPCEndpointResponse :: CreateVPCEndpointResponse -> TestTree
 testCreateVPCEndpointResponse = res
     "CreateVPCEndpointResponse"
     "fixture/CreateVPCEndpointResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateVPCEndpoint)
 
 testUnmonitorInstancesResponse :: UnmonitorInstancesResponse -> TestTree
 testUnmonitorInstancesResponse = res
     "UnmonitorInstancesResponse"
     "fixture/UnmonitorInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy UnmonitorInstances)
 
 testCreateSecurityGroupResponse :: CreateSecurityGroupResponse -> TestTree
 testCreateSecurityGroupResponse = res
     "CreateSecurityGroupResponse"
     "fixture/CreateSecurityGroupResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateSecurityGroup)
 
 testImportVolumeResponse :: ImportVolumeResponse -> TestTree
 testImportVolumeResponse = res
     "ImportVolumeResponse"
     "fixture/ImportVolumeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ImportVolume)
 
 testDisableVGWRoutePropagationResponse :: DisableVGWRoutePropagationResponse -> TestTree
 testDisableVGWRoutePropagationResponse = res
     "DisableVGWRoutePropagationResponse"
     "fixture/DisableVGWRoutePropagationResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DisableVGWRoutePropagation)
 
 testCreateSpotDatafeedSubscriptionResponse :: CreateSpotDatafeedSubscriptionResponse -> TestTree
 testCreateSpotDatafeedSubscriptionResponse = res
     "CreateSpotDatafeedSubscriptionResponse"
     "fixture/CreateSpotDatafeedSubscriptionResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateSpotDatafeedSubscription)
 
 testCancelSpotInstanceRequestsResponse :: CancelSpotInstanceRequestsResponse -> TestTree
 testCancelSpotInstanceRequestsResponse = res
     "CancelSpotInstanceRequestsResponse"
     "fixture/CancelSpotInstanceRequestsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CancelSpotInstanceRequests)
 
 testCreateRouteResponse :: CreateRouteResponse -> TestTree
 testCreateRouteResponse = res
     "CreateRouteResponse"
     "fixture/CreateRouteResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateRoute)
 
 testDeleteSnapshotResponse :: DeleteSnapshotResponse -> TestTree
 testDeleteSnapshotResponse = res
     "DeleteSnapshotResponse"
     "fixture/DeleteSnapshotResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteSnapshot)
 
 testAssignPrivateIPAddressesResponse :: AssignPrivateIPAddressesResponse -> TestTree
 testAssignPrivateIPAddressesResponse = res
     "AssignPrivateIPAddressesResponse"
     "fixture/AssignPrivateIPAddressesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AssignPrivateIPAddresses)
 
 testModifyInstanceAttributeResponse :: ModifyInstanceAttributeResponse -> TestTree
 testModifyInstanceAttributeResponse = res
     "ModifyInstanceAttributeResponse"
     "fixture/ModifyInstanceAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyInstanceAttribute)
 
 testDeleteCustomerGatewayResponse :: DeleteCustomerGatewayResponse -> TestTree
 testDeleteCustomerGatewayResponse = res
     "DeleteCustomerGatewayResponse"
     "fixture/DeleteCustomerGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteCustomerGateway)
 
 testDisassociateRouteTableResponse :: DisassociateRouteTableResponse -> TestTree
 testDisassociateRouteTableResponse = res
     "DisassociateRouteTableResponse"
     "fixture/DisassociateRouteTableResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DisassociateRouteTable)
 
 testDeleteSpotDatafeedSubscriptionResponse :: DeleteSpotDatafeedSubscriptionResponse -> TestTree
 testDeleteSpotDatafeedSubscriptionResponse = res
     "DeleteSpotDatafeedSubscriptionResponse"
     "fixture/DeleteSpotDatafeedSubscriptionResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteSpotDatafeedSubscription)
 
 testEnableVPCClassicLinkResponse :: EnableVPCClassicLinkResponse -> TestTree
 testEnableVPCClassicLinkResponse = res
     "EnableVPCClassicLinkResponse"
     "fixture/EnableVPCClassicLinkResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy EnableVPCClassicLink)
 
 testDescribePlacementGroupsResponse :: DescribePlacementGroupsResponse -> TestTree
 testDescribePlacementGroupsResponse = res
     "DescribePlacementGroupsResponse"
     "fixture/DescribePlacementGroupsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribePlacementGroups)
 
+testPurchaseScheduledInstancesResponse :: PurchaseScheduledInstancesResponse -> TestTree
+testPurchaseScheduledInstancesResponse = res
+    "PurchaseScheduledInstancesResponse"
+    "fixture/PurchaseScheduledInstancesResponse.proto"
+    ec2
+    (Proxy :: Proxy PurchaseScheduledInstances)
+
 testEnableVGWRoutePropagationResponse :: EnableVGWRoutePropagationResponse -> TestTree
 testEnableVGWRoutePropagationResponse = res
     "EnableVGWRoutePropagationResponse"
     "fixture/EnableVGWRoutePropagationResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy EnableVGWRoutePropagation)
 
 testDescribeSpotFleetRequestHistoryResponse :: DescribeSpotFleetRequestHistoryResponse -> TestTree
 testDescribeSpotFleetRequestHistoryResponse = res
     "DescribeSpotFleetRequestHistoryResponse"
     "fixture/DescribeSpotFleetRequestHistoryResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSpotFleetRequestHistory)
 
 testModifySnapshotAttributeResponse :: ModifySnapshotAttributeResponse -> TestTree
 testModifySnapshotAttributeResponse = res
     "ModifySnapshotAttributeResponse"
     "fixture/ModifySnapshotAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifySnapshotAttribute)
 
 testCreateSnapshotResponse :: Snapshot -> TestTree
 testCreateSnapshotResponse = res
     "CreateSnapshotResponse"
     "fixture/CreateSnapshotResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateSnapshot)
 
 testCreateNetworkACLEntryResponse :: CreateNetworkACLEntryResponse -> TestTree
 testCreateNetworkACLEntryResponse = res
     "CreateNetworkACLEntryResponse"
     "fixture/CreateNetworkACLEntryResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateNetworkACLEntry)
 
 testCreateReservedInstancesListingResponse :: CreateReservedInstancesListingResponse -> TestTree
 testCreateReservedInstancesListingResponse = res
     "CreateReservedInstancesListingResponse"
     "fixture/CreateReservedInstancesListingResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateReservedInstancesListing)
 
 testAttachVPNGatewayResponse :: AttachVPNGatewayResponse -> TestTree
 testAttachVPNGatewayResponse = res
     "AttachVPNGatewayResponse"
     "fixture/AttachVPNGatewayResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AttachVPNGateway)
 
 testCreateDHCPOptionsResponse :: CreateDHCPOptionsResponse -> TestTree
 testCreateDHCPOptionsResponse = res
     "CreateDHCPOptionsResponse"
     "fixture/CreateDHCPOptionsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateDHCPOptions)
 
 testDescribeAccountAttributesResponse :: DescribeAccountAttributesResponse -> TestTree
 testDescribeAccountAttributesResponse = res
     "DescribeAccountAttributesResponse"
     "fixture/DescribeAccountAttributesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeAccountAttributes)
 
 testModifyHostsResponse :: ModifyHostsResponse -> TestTree
 testModifyHostsResponse = res
     "ModifyHostsResponse"
     "fixture/ModifyHostsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyHosts)
 
 testRebootInstancesResponse :: RebootInstancesResponse -> TestTree
 testRebootInstancesResponse = res
     "RebootInstancesResponse"
     "fixture/RebootInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy RebootInstances)
 
 testCreateImageResponse :: CreateImageResponse -> TestTree
 testCreateImageResponse = res
     "CreateImageResponse"
     "fixture/CreateImageResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateImage)
 
 testDescribeClassicLinkInstancesResponse :: DescribeClassicLinkInstancesResponse -> TestTree
 testDescribeClassicLinkInstancesResponse = res
     "DescribeClassicLinkInstancesResponse"
     "fixture/DescribeClassicLinkInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeClassicLinkInstances)
 
 testTerminateInstancesResponse :: TerminateInstancesResponse -> TestTree
 testTerminateInstancesResponse = res
     "TerminateInstancesResponse"
     "fixture/TerminateInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy TerminateInstances)
 
 testDescribeKeyPairsResponse :: DescribeKeyPairsResponse -> TestTree
 testDescribeKeyPairsResponse = res
     "DescribeKeyPairsResponse"
     "fixture/DescribeKeyPairsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeKeyPairs)
 
 testCreateVPNConnectionRouteResponse :: CreateVPNConnectionRouteResponse -> TestTree
 testCreateVPNConnectionRouteResponse = res
     "CreateVPNConnectionRouteResponse"
     "fixture/CreateVPNConnectionRouteResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateVPNConnectionRoute)
 
 testAssociateRouteTableResponse :: AssociateRouteTableResponse -> TestTree
 testAssociateRouteTableResponse = res
     "AssociateRouteTableResponse"
     "fixture/AssociateRouteTableResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AssociateRouteTable)
 
 testDescribeVPNGatewaysResponse :: DescribeVPNGatewaysResponse -> TestTree
 testDescribeVPNGatewaysResponse = res
     "DescribeVPNGatewaysResponse"
     "fixture/DescribeVPNGatewaysResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVPNGateways)
 
 testGetConsoleOutputResponse :: GetConsoleOutputResponse -> TestTree
 testGetConsoleOutputResponse = res
     "GetConsoleOutputResponse"
     "fixture/GetConsoleOutputResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy GetConsoleOutput)
 
 testDescribeHostsResponse :: DescribeHostsResponse -> TestTree
 testDescribeHostsResponse = res
     "DescribeHostsResponse"
     "fixture/DescribeHostsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeHosts)
 
 testDescribeImageAttributeResponse :: DescribeImageAttributeResponse -> TestTree
 testDescribeImageAttributeResponse = res
     "DescribeImageAttributeResponse"
     "fixture/DescribeImageAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeImageAttribute)
 
 testModifyIdFormatResponse :: ModifyIdFormatResponse -> TestTree
 testModifyIdFormatResponse = res
     "ModifyIdFormatResponse"
     "fixture/ModifyIdFormatResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyIdFormat)
 
 testDeleteRouteTableResponse :: DeleteRouteTableResponse -> TestTree
 testDeleteRouteTableResponse = res
     "DeleteRouteTableResponse"
     "fixture/DeleteRouteTableResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteRouteTable)
 
 testResetImageAttributeResponse :: ResetImageAttributeResponse -> TestTree
 testResetImageAttributeResponse = res
     "ResetImageAttributeResponse"
     "fixture/ResetImageAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ResetImageAttribute)
 
 testDescribeReservedInstancesModificationsResponse :: DescribeReservedInstancesModificationsResponse -> TestTree
 testDescribeReservedInstancesModificationsResponse = res
     "DescribeReservedInstancesModificationsResponse"
     "fixture/DescribeReservedInstancesModificationsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeReservedInstancesModifications)
 
 testDescribeSpotInstanceRequestsResponse :: DescribeSpotInstanceRequestsResponse -> TestTree
 testDescribeSpotInstanceRequestsResponse = res
     "DescribeSpotInstanceRequestsResponse"
     "fixture/DescribeSpotInstanceRequestsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSpotInstanceRequests)
 
 testUnassignPrivateIPAddressesResponse :: UnassignPrivateIPAddressesResponse -> TestTree
 testUnassignPrivateIPAddressesResponse = res
     "UnassignPrivateIPAddressesResponse"
     "fixture/UnassignPrivateIPAddressesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy UnassignPrivateIPAddresses)
 
 testDeleteDHCPOptionsResponse :: DeleteDHCPOptionsResponse -> TestTree
 testDeleteDHCPOptionsResponse = res
     "DeleteDHCPOptionsResponse"
     "fixture/DeleteDHCPOptionsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteDHCPOptions)
 
 testDescribeNetworkACLsResponse :: DescribeNetworkACLsResponse -> TestTree
 testDescribeNetworkACLsResponse = res
     "DescribeNetworkACLsResponse"
     "fixture/DescribeNetworkACLsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeNetworkACLs)
 
 testCancelImportTaskResponse :: CancelImportTaskResponse -> TestTree
 testCancelImportTaskResponse = res
     "CancelImportTaskResponse"
     "fixture/CancelImportTaskResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CancelImportTask)
 
 testDetachClassicLinkVPCResponse :: DetachClassicLinkVPCResponse -> TestTree
 testDetachClassicLinkVPCResponse = res
     "DetachClassicLinkVPCResponse"
     "fixture/DetachClassicLinkVPCResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DetachClassicLinkVPC)
 
 testDescribeRegionsResponse :: DescribeRegionsResponse -> TestTree
 testDescribeRegionsResponse = res
     "DescribeRegionsResponse"
     "fixture/DescribeRegionsResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeRegions)
 
 testMonitorInstancesResponse :: MonitorInstancesResponse -> TestTree
 testMonitorInstancesResponse = res
     "MonitorInstancesResponse"
     "fixture/MonitorInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy MonitorInstances)
 
 testAcceptVPCPeeringConnectionResponse :: AcceptVPCPeeringConnectionResponse -> TestTree
 testAcceptVPCPeeringConnectionResponse = res
     "AcceptVPCPeeringConnectionResponse"
     "fixture/AcceptVPCPeeringConnectionResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy AcceptVPCPeeringConnection)
 
 testImportSnapshotResponse :: ImportSnapshotResponse -> TestTree
 testImportSnapshotResponse = res
     "ImportSnapshotResponse"
     "fixture/ImportSnapshotResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ImportSnapshot)
 
 testDescribeVolumeStatusResponse :: DescribeVolumeStatusResponse -> TestTree
 testDescribeVolumeStatusResponse = res
     "DescribeVolumeStatusResponse"
     "fixture/DescribeVolumeStatusResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeVolumeStatus)
 
 testDescribeRouteTablesResponse :: DescribeRouteTablesResponse -> TestTree
 testDescribeRouteTablesResponse = res
     "DescribeRouteTablesResponse"
     "fixture/DescribeRouteTablesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeRouteTables)
 
 testDescribeAvailabilityZonesResponse :: DescribeAvailabilityZonesResponse -> TestTree
 testDescribeAvailabilityZonesResponse = res
     "DescribeAvailabilityZonesResponse"
     "fixture/DescribeAvailabilityZonesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeAvailabilityZones)
 
 testModifyVPCAttributeResponse :: ModifyVPCAttributeResponse -> TestTree
 testModifyVPCAttributeResponse = res
     "ModifyVPCAttributeResponse"
     "fixture/ModifyVPCAttributeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy ModifyVPCAttribute)
 
 testDescribeImagesResponse :: DescribeImagesResponse -> TestTree
 testDescribeImagesResponse = res
     "DescribeImagesResponse"
     "fixture/DescribeImagesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeImages)
 
 testRestoreAddressToClassicResponse :: RestoreAddressToClassicResponse -> TestTree
 testRestoreAddressToClassicResponse = res
     "RestoreAddressToClassicResponse"
     "fixture/RestoreAddressToClassicResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy RestoreAddressToClassic)
 
 testCreateKeyPairResponse :: CreateKeyPairResponse -> TestTree
 testCreateKeyPairResponse = res
     "CreateKeyPairResponse"
     "fixture/CreateKeyPairResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy CreateKeyPair)
 
 testDeleteVolumeResponse :: DeleteVolumeResponse -> TestTree
 testDeleteVolumeResponse = res
     "DeleteVolumeResponse"
     "fixture/DeleteVolumeResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DeleteVolume)
 
 testDescribeSpotFleetInstancesResponse :: DescribeSpotFleetInstancesResponse -> TestTree
 testDescribeSpotFleetInstancesResponse = res
     "DescribeSpotFleetInstancesResponse"
     "fixture/DescribeSpotFleetInstancesResponse.proto"
-    eC2
+    ec2
     (Proxy :: Proxy DescribeSpotFleetInstances)
