<?php

namespace Aws\Ec2;

use Aws\Api\ApiProvider;
use Aws\Api\DocModel;
use Aws\Api\Service;
use Aws\AwsClient;
use Aws\PresignUrlMiddleware;
use Aws\Result;
use GuzzleHttp\Promise\Promise;

/**
 * Client used to interact with Amazon EC2.
 *
 * @method Result acceptVpcPeeringConnection( array $args = [] )
 * @method Promise acceptVpcPeeringConnectionAsync( array $args = [] )
 * @method Result allocateAddress( array $args = [] )
 * @method Promise allocateAddressAsync( array $args = [] )
 * @method Result allocateHosts( array $args = [] )
 * @method Promise allocateHostsAsync( array $args = [] )
 * @method Result assignPrivateIpAddresses( array $args = [] )
 * @method Promise assignPrivateIpAddressesAsync( array $args = [] )
 * @method Result associateAddress( array $args = [] )
 * @method Promise associateAddressAsync( array $args = [] )
 * @method Result associateDhcpOptions( array $args = [] )
 * @method Promise associateDhcpOptionsAsync( array $args = [] )
 * @method Result associateRouteTable( array $args = [] )
 * @method Promise associateRouteTableAsync( array $args = [] )
 * @method Result attachClassicLinkVpc( array $args = [] )
 * @method Promise attachClassicLinkVpcAsync( array $args = [] )
 * @method Result attachInternetGateway( array $args = [] )
 * @method Promise attachInternetGatewayAsync( array $args = [] )
 * @method Result attachNetworkInterface( array $args = [] )
 * @method Promise attachNetworkInterfaceAsync( array $args = [] )
 * @method Result attachVolume( array $args = [] )
 * @method Promise attachVolumeAsync( array $args = [] )
 * @method Result attachVpnGateway( array $args = [] )
 * @method Promise attachVpnGatewayAsync( array $args = [] )
 * @method Result authorizeSecurityGroupEgress( array $args = [] )
 * @method Promise authorizeSecurityGroupEgressAsync( array $args = [] )
 * @method Result authorizeSecurityGroupIngress( array $args = [] )
 * @method Promise authorizeSecurityGroupIngressAsync( array $args = [] )
 * @method Result bundleInstance( array $args = [] )
 * @method Promise bundleInstanceAsync( array $args = [] )
 * @method Result cancelBundleTask( array $args = [] )
 * @method Promise cancelBundleTaskAsync( array $args = [] )
 * @method Result cancelConversionTask( array $args = [] )
 * @method Promise cancelConversionTaskAsync( array $args = [] )
 * @method Result cancelExportTask( array $args = [] )
 * @method Promise cancelExportTaskAsync( array $args = [] )
 * @method Result cancelImportTask( array $args = [] )
 * @method Promise cancelImportTaskAsync( array $args = [] )
 * @method Result cancelReservedInstancesListing( array $args = [] )
 * @method Promise cancelReservedInstancesListingAsync( array $args = [] )
 * @method Result cancelSpotFleetRequests( array $args = [] )
 * @method Promise cancelSpotFleetRequestsAsync( array $args = [] )
 * @method Result cancelSpotInstanceRequests( array $args = [] )
 * @method Promise cancelSpotInstanceRequestsAsync( array $args = [] )
 * @method Result confirmProductInstance( array $args = [] )
 * @method Promise confirmProductInstanceAsync( array $args = [] )
 * @method Result copyImage( array $args = [] )
 * @method Promise copyImageAsync( array $args = [] )
 * @method Result copySnapshot( array $args = [] )
 * @method Promise copySnapshotAsync( array $args = [] )
 * @method Result createCustomerGateway( array $args = [] )
 * @method Promise createCustomerGatewayAsync( array $args = [] )
 * @method Result createDhcpOptions( array $args = [] )
 * @method Promise createDhcpOptionsAsync( array $args = [] )
 * @method Result createFlowLogs( array $args = [] )
 * @method Promise createFlowLogsAsync( array $args = [] )
 * @method Result createImage( array $args = [] )
 * @method Promise createImageAsync( array $args = [] )
 * @method Result createInstanceExportTask( array $args = [] )
 * @method Promise createInstanceExportTaskAsync( array $args = [] )
 * @method Result createInternetGateway( array $args = [] )
 * @method Promise createInternetGatewayAsync( array $args = [] )
 * @method Result createKeyPair( array $args = [] )
 * @method Promise createKeyPairAsync( array $args = [] )
 * @method Result createNatGateway( array $args = [] )
 * @method Promise createNatGatewayAsync( array $args = [] )
 * @method Result createNetworkAcl( array $args = [] )
 * @method Promise createNetworkAclAsync( array $args = [] )
 * @method Result createNetworkAclEntry( array $args = [] )
 * @method Promise createNetworkAclEntryAsync( array $args = [] )
 * @method Result createNetworkInterface( array $args = [] )
 * @method Promise createNetworkInterfaceAsync( array $args = [] )
 * @method Result createPlacementGroup( array $args = [] )
 * @method Promise createPlacementGroupAsync( array $args = [] )
 * @method Result createReservedInstancesListing( array $args = [] )
 * @method Promise createReservedInstancesListingAsync( array $args = [] )
 * @method Result createRoute( array $args = [] )
 * @method Promise createRouteAsync( array $args = [] )
 * @method Result createRouteTable( array $args = [] )
 * @method Promise createRouteTableAsync( array $args = [] )
 * @method Result createSecurityGroup( array $args = [] )
 * @method Promise createSecurityGroupAsync( array $args = [] )
 * @method Result createSnapshot( array $args = [] )
 * @method Promise createSnapshotAsync( array $args = [] )
 * @method Result createSpotDatafeedSubscription( array $args = [] )
 * @method Promise createSpotDatafeedSubscriptionAsync( array $args = [] )
 * @method Result createSubnet( array $args = [] )
 * @method Promise createSubnetAsync( array $args = [] )
 * @method Result createTags( array $args = [] )
 * @method Promise createTagsAsync( array $args = [] )
 * @method Result createVolume( array $args = [] )
 * @method Promise createVolumeAsync( array $args = [] )
 * @method Result createVpc( array $args = [] )
 * @method Promise createVpcAsync( array $args = [] )
 * @method Result createVpcEndpoint( array $args = [] )
 * @method Promise createVpcEndpointAsync( array $args = [] )
 * @method Result createVpcPeeringConnection( array $args = [] )
 * @method Promise createVpcPeeringConnectionAsync( array $args = [] )
 * @method Result createVpnConnection( array $args = [] )
 * @method Promise createVpnConnectionAsync( array $args = [] )
 * @method Result createVpnConnectionRoute( array $args = [] )
 * @method Promise createVpnConnectionRouteAsync( array $args = [] )
 * @method Result createVpnGateway( array $args = [] )
 * @method Promise createVpnGatewayAsync( array $args = [] )
 * @method Result deleteCustomerGateway( array $args = [] )
 * @method Promise deleteCustomerGatewayAsync( array $args = [] )
 * @method Result deleteDhcpOptions( array $args = [] )
 * @method Promise deleteDhcpOptionsAsync( array $args = [] )
 * @method Result deleteFlowLogs( array $args = [] )
 * @method Promise deleteFlowLogsAsync( array $args = [] )
 * @method Result deleteInternetGateway( array $args = [] )
 * @method Promise deleteInternetGatewayAsync( array $args = [] )
 * @method Result deleteKeyPair( array $args = [] )
 * @method Promise deleteKeyPairAsync( array $args = [] )
 * @method Result deleteNatGateway( array $args = [] )
 * @method Promise deleteNatGatewayAsync( array $args = [] )
 * @method Result deleteNetworkAcl( array $args = [] )
 * @method Promise deleteNetworkAclAsync( array $args = [] )
 * @method Result deleteNetworkAclEntry( array $args = [] )
 * @method Promise deleteNetworkAclEntryAsync( array $args = [] )
 * @method Result deleteNetworkInterface( array $args = [] )
 * @method Promise deleteNetworkInterfaceAsync( array $args = [] )
 * @method Result deletePlacementGroup( array $args = [] )
 * @method Promise deletePlacementGroupAsync( array $args = [] )
 * @method Result deleteRoute( array $args = [] )
 * @method Promise deleteRouteAsync( array $args = [] )
 * @method Result deleteRouteTable( array $args = [] )
 * @method Promise deleteRouteTableAsync( array $args = [] )
 * @method Result deleteSecurityGroup( array $args = [] )
 * @method Promise deleteSecurityGroupAsync( array $args = [] )
 * @method Result deleteSnapshot( array $args = [] )
 * @method Promise deleteSnapshotAsync( array $args = [] )
 * @method Result deleteSpotDatafeedSubscription( array $args = [] )
 * @method Promise deleteSpotDatafeedSubscriptionAsync( array $args = [] )
 * @method Result deleteSubnet( array $args = [] )
 * @method Promise deleteSubnetAsync( array $args = [] )
 * @method Result deleteTags( array $args = [] )
 * @method Promise deleteTagsAsync( array $args = [] )
 * @method Result deleteVolume( array $args = [] )
 * @method Promise deleteVolumeAsync( array $args = [] )
 * @method Result deleteVpc( array $args = [] )
 * @method Promise deleteVpcAsync( array $args = [] )
 * @method Result deleteVpcEndpoints( array $args = [] )
 * @method Promise deleteVpcEndpointsAsync( array $args = [] )
 * @method Result deleteVpcPeeringConnection( array $args = [] )
 * @method Promise deleteVpcPeeringConnectionAsync( array $args = [] )
 * @method Result deleteVpnConnection( array $args = [] )
 * @method Promise deleteVpnConnectionAsync( array $args = [] )
 * @method Result deleteVpnConnectionRoute( array $args = [] )
 * @method Promise deleteVpnConnectionRouteAsync( array $args = [] )
 * @method Result deleteVpnGateway( array $args = [] )
 * @method Promise deleteVpnGatewayAsync( array $args = [] )
 * @method Result deregisterImage( array $args = [] )
 * @method Promise deregisterImageAsync( array $args = [] )
 * @method Result describeAccountAttributes( array $args = [] )
 * @method Promise describeAccountAttributesAsync( array $args = [] )
 * @method Result describeAddresses( array $args = [] )
 * @method Promise describeAddressesAsync( array $args = [] )
 * @method Result describeAvailabilityZones( array $args = [] )
 * @method Promise describeAvailabilityZonesAsync( array $args = [] )
 * @method Result describeBundleTasks( array $args = [] )
 * @method Promise describeBundleTasksAsync( array $args = [] )
 * @method Result describeClassicLinkInstances( array $args = [] )
 * @method Promise describeClassicLinkInstancesAsync( array $args = [] )
 * @method Result describeConversionTasks( array $args = [] )
 * @method Promise describeConversionTasksAsync( array $args = [] )
 * @method Result describeCustomerGateways( array $args = [] )
 * @method Promise describeCustomerGatewaysAsync( array $args = [] )
 * @method Result describeDhcpOptions( array $args = [] )
 * @method Promise describeDhcpOptionsAsync( array $args = [] )
 * @method Result describeExportTasks( array $args = [] )
 * @method Promise describeExportTasksAsync( array $args = [] )
 * @method Result describeFlowLogs( array $args = [] )
 * @method Promise describeFlowLogsAsync( array $args = [] )
 * @method Result describeHosts( array $args = [] )
 * @method Promise describeHostsAsync( array $args = [] )
 * @method Result describeIdFormat( array $args = [] )
 * @method Promise describeIdFormatAsync( array $args = [] )
 * @method Result describeImageAttribute( array $args = [] )
 * @method Promise describeImageAttributeAsync( array $args = [] )
 * @method Result describeImages( array $args = [] )
 * @method Promise describeImagesAsync( array $args = [] )
 * @method Result describeImportImageTasks( array $args = [] )
 * @method Promise describeImportImageTasksAsync( array $args = [] )
 * @method Result describeImportSnapshotTasks( array $args = [] )
 * @method Promise describeImportSnapshotTasksAsync( array $args = [] )
 * @method Result describeInstanceAttribute( array $args = [] )
 * @method Promise describeInstanceAttributeAsync( array $args = [] )
 * @method Result describeInstanceStatus( array $args = [] )
 * @method Promise describeInstanceStatusAsync( array $args = [] )
 * @method Result describeInstances( array $args = [] )
 * @method Promise describeInstancesAsync( array $args = [] )
 * @method Result describeInternetGateways( array $args = [] )
 * @method Promise describeInternetGatewaysAsync( array $args = [] )
 * @method Result describeKeyPairs( array $args = [] )
 * @method Promise describeKeyPairsAsync( array $args = [] )
 * @method Result describeMovingAddresses( array $args = [] )
 * @method Promise describeMovingAddressesAsync( array $args = [] )
 * @method Result describeNatGateways( array $args = [] )
 * @method Promise describeNatGatewaysAsync( array $args = [] )
 * @method Result describeNetworkAcls( array $args = [] )
 * @method Promise describeNetworkAclsAsync( array $args = [] )
 * @method Result describeNetworkInterfaceAttribute( array $args = [] )
 * @method Promise describeNetworkInterfaceAttributeAsync( array $args = [] )
 * @method Result describeNetworkInterfaces( array $args = [] )
 * @method Promise describeNetworkInterfacesAsync( array $args = [] )
 * @method Result describePlacementGroups( array $args = [] )
 * @method Promise describePlacementGroupsAsync( array $args = [] )
 * @method Result describePrefixLists( array $args = [] )
 * @method Promise describePrefixListsAsync( array $args = [] )
 * @method Result describeRegions( array $args = [] )
 * @method Promise describeRegionsAsync( array $args = [] )
 * @method Result describeReservedInstances( array $args = [] )
 * @method Promise describeReservedInstancesAsync( array $args = [] )
 * @method Result describeReservedInstancesListings( array $args = [] )
 * @method Promise describeReservedInstancesListingsAsync( array $args = [] )
 * @method Result describeReservedInstancesModifications( array $args = [] )
 * @method Promise describeReservedInstancesModificationsAsync( array $args = [] )
 * @method Result describeReservedInstancesOfferings( array $args = [] )
 * @method Promise describeReservedInstancesOfferingsAsync( array $args = [] )
 * @method Result describeRouteTables( array $args = [] )
 * @method Promise describeRouteTablesAsync( array $args = [] )
 * @method Result describeScheduledInstanceAvailability( array $args = [] )
 * @method Promise describeScheduledInstanceAvailabilityAsync( array $args = [] )
 * @method Result describeScheduledInstances( array $args = [] )
 * @method Promise describeScheduledInstancesAsync( array $args = [] )
 * @method Result describeSecurityGroupReferences( array $args = [] )
 * @method Promise describeSecurityGroupReferencesAsync( array $args = [] )
 * @method Result describeSecurityGroups( array $args = [] )
 * @method Promise describeSecurityGroupsAsync( array $args = [] )
 * @method Result describeSnapshotAttribute( array $args = [] )
 * @method Promise describeSnapshotAttributeAsync( array $args = [] )
 * @method Result describeSnapshots( array $args = [] )
 * @method Promise describeSnapshotsAsync( array $args = [] )
 * @method Result describeSpotDatafeedSubscription( array $args = [] )
 * @method Promise describeSpotDatafeedSubscriptionAsync( array $args = [] )
 * @method Result describeSpotFleetInstances( array $args = [] )
 * @method Promise describeSpotFleetInstancesAsync( array $args = [] )
 * @method Result describeSpotFleetRequestHistory( array $args = [] )
 * @method Promise describeSpotFleetRequestHistoryAsync( array $args = [] )
 * @method Result describeSpotFleetRequests( array $args = [] )
 * @method Promise describeSpotFleetRequestsAsync( array $args = [] )
 * @method Result describeSpotInstanceRequests( array $args = [] )
 * @method Promise describeSpotInstanceRequestsAsync( array $args = [] )
 * @method Result describeSpotPriceHistory( array $args = [] )
 * @method Promise describeSpotPriceHistoryAsync( array $args = [] )
 * @method Result describeStaleSecurityGroups( array $args = [] )
 * @method Promise describeStaleSecurityGroupsAsync( array $args = [] )
 * @method Result describeSubnets( array $args = [] )
 * @method Promise describeSubnetsAsync( array $args = [] )
 * @method Result describeTags( array $args = [] )
 * @method Promise describeTagsAsync( array $args = [] )
 * @method Result describeVolumeAttribute( array $args = [] )
 * @method Promise describeVolumeAttributeAsync( array $args = [] )
 * @method Result describeVolumeStatus( array $args = [] )
 * @method Promise describeVolumeStatusAsync( array $args = [] )
 * @method Result describeVolumes( array $args = [] )
 * @method Promise describeVolumesAsync( array $args = [] )
 * @method Result describeVpcAttribute( array $args = [] )
 * @method Promise describeVpcAttributeAsync( array $args = [] )
 * @method Result describeVpcClassicLink( array $args = [] )
 * @method Promise describeVpcClassicLinkAsync( array $args = [] )
 * @method Result describeVpcClassicLinkDnsSupport( array $args = [] )
 * @method Promise describeVpcClassicLinkDnsSupportAsync( array $args = [] )
 * @method Result describeVpcEndpointServices( array $args = [] )
 * @method Promise describeVpcEndpointServicesAsync( array $args = [] )
 * @method Result describeVpcEndpoints( array $args = [] )
 * @method Promise describeVpcEndpointsAsync( array $args = [] )
 * @method Result describeVpcPeeringConnections( array $args = [] )
 * @method Promise describeVpcPeeringConnectionsAsync( array $args = [] )
 * @method Result describeVpcs( array $args = [] )
 * @method Promise describeVpcsAsync( array $args = [] )
 * @method Result describeVpnConnections( array $args = [] )
 * @method Promise describeVpnConnectionsAsync( array $args = [] )
 * @method Result describeVpnGateways( array $args = [] )
 * @method Promise describeVpnGatewaysAsync( array $args = [] )
 * @method Result detachClassicLinkVpc( array $args = [] )
 * @method Promise detachClassicLinkVpcAsync( array $args = [] )
 * @method Result detachInternetGateway( array $args = [] )
 * @method Promise detachInternetGatewayAsync( array $args = [] )
 * @method Result detachNetworkInterface( array $args = [] )
 * @method Promise detachNetworkInterfaceAsync( array $args = [] )
 * @method Result detachVolume( array $args = [] )
 * @method Promise detachVolumeAsync( array $args = [] )
 * @method Result detachVpnGateway( array $args = [] )
 * @method Promise detachVpnGatewayAsync( array $args = [] )
 * @method Result disableVgwRoutePropagation( array $args = [] )
 * @method Promise disableVgwRoutePropagationAsync( array $args = [] )
 * @method Result disableVpcClassicLink( array $args = [] )
 * @method Promise disableVpcClassicLinkAsync( array $args = [] )
 * @method Result disableVpcClassicLinkDnsSupport( array $args = [] )
 * @method Promise disableVpcClassicLinkDnsSupportAsync( array $args = [] )
 * @method Result disassociateAddress( array $args = [] )
 * @method Promise disassociateAddressAsync( array $args = [] )
 * @method Result disassociateRouteTable( array $args = [] )
 * @method Promise disassociateRouteTableAsync( array $args = [] )
 * @method Result enableVgwRoutePropagation( array $args = [] )
 * @method Promise enableVgwRoutePropagationAsync( array $args = [] )
 * @method Result enableVolumeIO( array $args = [] )
 * @method Promise enableVolumeIOAsync( array $args = [] )
 * @method Result enableVpcClassicLink( array $args = [] )
 * @method Promise enableVpcClassicLinkAsync( array $args = [] )
 * @method Result enableVpcClassicLinkDnsSupport( array $args = [] )
 * @method Promise enableVpcClassicLinkDnsSupportAsync( array $args = [] )
 * @method Result getConsoleOutput( array $args = [] )
 * @method Promise getConsoleOutputAsync( array $args = [] )
 * @method Result getConsoleScreenshot( array $args = [] )
 * @method Promise getConsoleScreenshotAsync( array $args = [] )
 * @method Result getPasswordData( array $args = [] )
 * @method Promise getPasswordDataAsync( array $args = [] )
 * @method Result importImage( array $args = [] )
 * @method Promise importImageAsync( array $args = [] )
 * @method Result importInstance( array $args = [] )
 * @method Promise importInstanceAsync( array $args = [] )
 * @method Result importKeyPair( array $args = [] )
 * @method Promise importKeyPairAsync( array $args = [] )
 * @method Result importSnapshot( array $args = [] )
 * @method Promise importSnapshotAsync( array $args = [] )
 * @method Result importVolume( array $args = [] )
 * @method Promise importVolumeAsync( array $args = [] )
 * @method Result modifyHosts( array $args = [] )
 * @method Promise modifyHostsAsync( array $args = [] )
 * @method Result modifyIdFormat( array $args = [] )
 * @method Promise modifyIdFormatAsync( array $args = [] )
 * @method Result modifyImageAttribute( array $args = [] )
 * @method Promise modifyImageAttributeAsync( array $args = [] )
 * @method Result modifyInstanceAttribute( array $args = [] )
 * @method Promise modifyInstanceAttributeAsync( array $args = [] )
 * @method Result modifyInstancePlacement( array $args = [] )
 * @method Promise modifyInstancePlacementAsync( array $args = [] )
 * @method Result modifyNetworkInterfaceAttribute( array $args = [] )
 * @method Promise modifyNetworkInterfaceAttributeAsync( array $args = [] )
 * @method Result modifyReservedInstances( array $args = [] )
 * @method Promise modifyReservedInstancesAsync( array $args = [] )
 * @method Result modifySnapshotAttribute( array $args = [] )
 * @method Promise modifySnapshotAttributeAsync( array $args = [] )
 * @method Result modifySpotFleetRequest( array $args = [] )
 * @method Promise modifySpotFleetRequestAsync( array $args = [] )
 * @method Result modifySubnetAttribute( array $args = [] )
 * @method Promise modifySubnetAttributeAsync( array $args = [] )
 * @method Result modifyVolumeAttribute( array $args = [] )
 * @method Promise modifyVolumeAttributeAsync( array $args = [] )
 * @method Result modifyVpcAttribute( array $args = [] )
 * @method Promise modifyVpcAttributeAsync( array $args = [] )
 * @method Result modifyVpcEndpoint( array $args = [] )
 * @method Promise modifyVpcEndpointAsync( array $args = [] )
 * @method Result modifyVpcPeeringConnectionOptions( array $args = [] )
 * @method Promise modifyVpcPeeringConnectionOptionsAsync( array $args = [] )
 * @method Result monitorInstances( array $args = [] )
 * @method Promise monitorInstancesAsync( array $args = [] )
 * @method Result moveAddressToVpc( array $args = [] )
 * @method Promise moveAddressToVpcAsync( array $args = [] )
 * @method Result purchaseReservedInstancesOffering( array $args = [] )
 * @method Promise purchaseReservedInstancesOfferingAsync( array $args = [] )
 * @method Result purchaseScheduledInstances( array $args = [] )
 * @method Promise purchaseScheduledInstancesAsync( array $args = [] )
 * @method Result rebootInstances( array $args = [] )
 * @method Promise rebootInstancesAsync( array $args = [] )
 * @method Result registerImage( array $args = [] )
 * @method Promise registerImageAsync( array $args = [] )
 * @method Result rejectVpcPeeringConnection( array $args = [] )
 * @method Promise rejectVpcPeeringConnectionAsync( array $args = [] )
 * @method Result releaseAddress( array $args = [] )
 * @method Promise releaseAddressAsync( array $args = [] )
 * @method Result releaseHosts( array $args = [] )
 * @method Promise releaseHostsAsync( array $args = [] )
 * @method Result replaceNetworkAclAssociation( array $args = [] )
 * @method Promise replaceNetworkAclAssociationAsync( array $args = [] )
 * @method Result replaceNetworkAclEntry( array $args = [] )
 * @method Promise replaceNetworkAclEntryAsync( array $args = [] )
 * @method Result replaceRoute( array $args = [] )
 * @method Promise replaceRouteAsync( array $args = [] )
 * @method Result replaceRouteTableAssociation( array $args = [] )
 * @method Promise replaceRouteTableAssociationAsync( array $args = [] )
 * @method Result reportInstanceStatus( array $args = [] )
 * @method Promise reportInstanceStatusAsync( array $args = [] )
 * @method Result requestSpotFleet( array $args = [] )
 * @method Promise requestSpotFleetAsync( array $args = [] )
 * @method Result requestSpotInstances( array $args = [] )
 * @method Promise requestSpotInstancesAsync( array $args = [] )
 * @method Result resetImageAttribute( array $args = [] )
 * @method Promise resetImageAttributeAsync( array $args = [] )
 * @method Result resetInstanceAttribute( array $args = [] )
 * @method Promise resetInstanceAttributeAsync( array $args = [] )
 * @method Result resetNetworkInterfaceAttribute( array $args = [] )
 * @method Promise resetNetworkInterfaceAttributeAsync( array $args = [] )
 * @method Result resetSnapshotAttribute( array $args = [] )
 * @method Promise resetSnapshotAttributeAsync( array $args = [] )
 * @method Result restoreAddressToClassic( array $args = [] )
 * @method Promise restoreAddressToClassicAsync( array $args = [] )
 * @method Result revokeSecurityGroupEgress( array $args = [] )
 * @method Promise revokeSecurityGroupEgressAsync( array $args = [] )
 * @method Result revokeSecurityGroupIngress( array $args = [] )
 * @method Promise revokeSecurityGroupIngressAsync( array $args = [] )
 * @method Result runInstances( array $args = [] )
 * @method Promise runInstancesAsync( array $args = [] )
 * @method Result runScheduledInstances( array $args = [] )
 * @method Promise runScheduledInstancesAsync( array $args = [] )
 * @method Result startInstances( array $args = [] )
 * @method Promise startInstancesAsync( array $args = [] )
 * @method Result stopInstances( array $args = [] )
 * @method Promise stopInstancesAsync( array $args = [] )
 * @method Result terminateInstances( array $args = [] )
 * @method Promise terminateInstancesAsync( array $args = [] )
 * @method Result unassignPrivateIpAddresses( array $args = [] )
 * @method Promise unassignPrivateIpAddressesAsync( array $args = [] )
 * @method Result unmonitorInstances( array $args = [] )
 * @method Promise unmonitorInstancesAsync( array $args = [] )
 * @method Result describeHostReservationOfferings( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Promise describeHostReservationOfferingsAsync( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Result describeHostReservations( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Promise describeHostReservationsAsync( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Result describeIdentityIdFormat( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Promise describeIdentityIdFormatAsync( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Result getHostReservationPurchasePreview( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Promise getHostReservationPurchasePreviewAsync( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Result modifyIdentityIdFormat( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Promise modifyIdentityIdFormatAsync( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Result purchaseHostReservation( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Promise purchaseHostReservationAsync( array $args = [] ) ( supported in versions 2016-04-01, 2016-09-15, 2016-11-15 )
 * @method Result acceptReservedInstancesExchangeQuote( array $args = [] ) ( supported in versions 2016-09-15, 2016-11-15 )
 * @method Promise acceptReservedInstancesExchangeQuoteAsync( array $args = [] ) ( supported in versions 2016-09-15, 2016-11-15 )
 * @method Result getReservedInstancesExchangeQuote( array $args = [] ) ( supported in versions 2016-09-15, 2016-11-15 )
 * @method Promise getReservedInstancesExchangeQuoteAsync( array $args = [] ) ( supported in versions 2016-09-15, 2016-11-15 )
 * @method Result acceptTransitGatewayVpcAttachment( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise acceptTransitGatewayVpcAttachmentAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result acceptVpcEndpointConnections( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise acceptVpcEndpointConnectionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result advertiseByoipCidr( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise advertiseByoipCidrAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result applySecurityGroupsToClientVpnTargetNetwork( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise applySecurityGroupsToClientVpnTargetNetworkAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result assignIpv6Addresses( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise assignIpv6AddressesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result associateClientVpnTargetNetwork( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise associateClientVpnTargetNetworkAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result associateIamInstanceProfile( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise associateIamInstanceProfileAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result associateSubnetCidrBlock( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise associateSubnetCidrBlockAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result associateTransitGatewayRouteTable( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise associateTransitGatewayRouteTableAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result associateVpcCidrBlock( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise associateVpcCidrBlockAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result authorizeClientVpnIngress( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise authorizeClientVpnIngressAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result cancelCapacityReservation( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise cancelCapacityReservationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result copyFpgaImage( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise copyFpgaImageAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createCapacityReservation( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createCapacityReservationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createClientVpnEndpoint( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createClientVpnEndpointAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createClientVpnRoute( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createClientVpnRouteAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createDefaultSubnet( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createDefaultSubnetAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createDefaultVpc( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createDefaultVpcAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createEgressOnlyInternetGateway( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createEgressOnlyInternetGatewayAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createFleet( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createFleetAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createFpgaImage( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createFpgaImageAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createLaunchTemplate( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createLaunchTemplateAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createLaunchTemplateVersion( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createLaunchTemplateVersionAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createNetworkInterfacePermission( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createNetworkInterfacePermissionAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createSnapshots( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createSnapshotsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createTrafficMirrorFilter( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createTrafficMirrorFilterAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createTrafficMirrorFilterRule( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createTrafficMirrorFilterRuleAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createTrafficMirrorSession( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createTrafficMirrorSessionAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createTrafficMirrorTarget( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createTrafficMirrorTargetAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createTransitGateway( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createTransitGatewayAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createTransitGatewayRoute( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createTransitGatewayRouteAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createTransitGatewayRouteTable( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createTransitGatewayRouteTableAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createTransitGatewayVpcAttachment( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createTransitGatewayVpcAttachmentAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createVpcEndpointConnectionNotification( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createVpcEndpointConnectionNotificationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result createVpcEndpointServiceConfiguration( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise createVpcEndpointServiceConfigurationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteClientVpnEndpoint( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteClientVpnEndpointAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteClientVpnRoute( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteClientVpnRouteAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteEgressOnlyInternetGateway( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteEgressOnlyInternetGatewayAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteFleets( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteFleetsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteFpgaImage( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteFpgaImageAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteLaunchTemplate( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteLaunchTemplateAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteLaunchTemplateVersions( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteLaunchTemplateVersionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteNetworkInterfacePermission( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteNetworkInterfacePermissionAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteTrafficMirrorFilter( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteTrafficMirrorFilterAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteTrafficMirrorFilterRule( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteTrafficMirrorFilterRuleAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteTrafficMirrorSession( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteTrafficMirrorSessionAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteTrafficMirrorTarget( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteTrafficMirrorTargetAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteTransitGateway( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteTransitGatewayAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteTransitGatewayRoute( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteTransitGatewayRouteAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteTransitGatewayRouteTable( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteTransitGatewayRouteTableAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteTransitGatewayVpcAttachment( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteTransitGatewayVpcAttachmentAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteVpcEndpointConnectionNotifications( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteVpcEndpointConnectionNotificationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deleteVpcEndpointServiceConfigurations( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deleteVpcEndpointServiceConfigurationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result deprovisionByoipCidr( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise deprovisionByoipCidrAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeAggregateIdFormat( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeAggregateIdFormatAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeByoipCidrs( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeByoipCidrsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeCapacityReservations( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeCapacityReservationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeClientVpnAuthorizationRules( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeClientVpnAuthorizationRulesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeClientVpnConnections( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeClientVpnConnectionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeClientVpnEndpoints( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeClientVpnEndpointsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeClientVpnRoutes( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeClientVpnRoutesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeClientVpnTargetNetworks( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeClientVpnTargetNetworksAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeEgressOnlyInternetGateways( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeEgressOnlyInternetGatewaysAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeElasticGpus( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeElasticGpusAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeFleetHistory( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeFleetHistoryAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeFleetInstances( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeFleetInstancesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeFleets( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeFleetsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeFpgaImageAttribute( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeFpgaImageAttributeAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeFpgaImages( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeFpgaImagesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeIamInstanceProfileAssociations( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeIamInstanceProfileAssociationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeInstanceCreditSpecifications( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeInstanceCreditSpecificationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeLaunchTemplateVersions( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeLaunchTemplateVersionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeLaunchTemplates( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeLaunchTemplatesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeNetworkInterfacePermissions( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeNetworkInterfacePermissionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describePrincipalIdFormat( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describePrincipalIdFormatAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describePublicIpv4Pools( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describePublicIpv4PoolsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeTrafficMirrorFilters( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeTrafficMirrorFiltersAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeTrafficMirrorSessions( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeTrafficMirrorSessionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeTrafficMirrorTargets( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeTrafficMirrorTargetsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeTransitGatewayAttachments( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeTransitGatewayAttachmentsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeTransitGatewayRouteTables( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeTransitGatewayRouteTablesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeTransitGatewayVpcAttachments( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeTransitGatewayVpcAttachmentsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeTransitGateways( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeTransitGatewaysAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeVolumesModifications( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeVolumesModificationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeVpcEndpointConnectionNotifications( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeVpcEndpointConnectionNotificationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeVpcEndpointConnections( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeVpcEndpointConnectionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeVpcEndpointServiceConfigurations( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeVpcEndpointServiceConfigurationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result describeVpcEndpointServicePermissions( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise describeVpcEndpointServicePermissionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result disableEbsEncryptionByDefault( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise disableEbsEncryptionByDefaultAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result disableTransitGatewayRouteTablePropagation( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise disableTransitGatewayRouteTablePropagationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result disassociateClientVpnTargetNetwork( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise disassociateClientVpnTargetNetworkAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result disassociateIamInstanceProfile( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise disassociateIamInstanceProfileAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result disassociateSubnetCidrBlock( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise disassociateSubnetCidrBlockAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result disassociateTransitGatewayRouteTable( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise disassociateTransitGatewayRouteTableAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result disassociateVpcCidrBlock( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise disassociateVpcCidrBlockAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result enableEbsEncryptionByDefault( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise enableEbsEncryptionByDefaultAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result enableTransitGatewayRouteTablePropagation( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise enableTransitGatewayRouteTablePropagationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result exportClientVpnClientCertificateRevocationList( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise exportClientVpnClientCertificateRevocationListAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result exportClientVpnClientConfiguration( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise exportClientVpnClientConfigurationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result exportTransitGatewayRoutes( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise exportTransitGatewayRoutesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result getEbsDefaultKmsKeyId( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise getEbsDefaultKmsKeyIdAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result getEbsEncryptionByDefault( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise getEbsEncryptionByDefaultAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result getLaunchTemplateData( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise getLaunchTemplateDataAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result getTransitGatewayAttachmentPropagations( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise getTransitGatewayAttachmentPropagationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result getTransitGatewayRouteTableAssociations( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise getTransitGatewayRouteTableAssociationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result getTransitGatewayRouteTablePropagations( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise getTransitGatewayRouteTablePropagationsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result importClientVpnClientCertificateRevocationList( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise importClientVpnClientCertificateRevocationListAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyCapacityReservation( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyCapacityReservationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyClientVpnEndpoint( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyClientVpnEndpointAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyEbsDefaultKmsKeyId( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyEbsDefaultKmsKeyIdAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyFleet( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyFleetAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyFpgaImageAttribute( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyFpgaImageAttributeAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyInstanceCapacityReservationAttributes( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyInstanceCapacityReservationAttributesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyInstanceCreditSpecification( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyInstanceCreditSpecificationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyInstanceEventStartTime( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyInstanceEventStartTimeAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyLaunchTemplate( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyLaunchTemplateAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyTrafficMirrorFilterNetworkServices( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyTrafficMirrorFilterNetworkServicesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyTrafficMirrorFilterRule( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyTrafficMirrorFilterRuleAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyTrafficMirrorSession( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyTrafficMirrorSessionAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyTransitGatewayVpcAttachment( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyTransitGatewayVpcAttachmentAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyVolume( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyVolumeAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyVpcEndpointConnectionNotification( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyVpcEndpointConnectionNotificationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyVpcEndpointServiceConfiguration( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyVpcEndpointServiceConfigurationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyVpcEndpointServicePermissions( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyVpcEndpointServicePermissionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyVpcTenancy( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyVpcTenancyAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result modifyVpnConnection( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise modifyVpnConnectionAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result provisionByoipCidr( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise provisionByoipCidrAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result rejectTransitGatewayVpcAttachment( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise rejectTransitGatewayVpcAttachmentAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result rejectVpcEndpointConnections( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise rejectVpcEndpointConnectionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result replaceIamInstanceProfileAssociation( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise replaceIamInstanceProfileAssociationAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result replaceTransitGatewayRoute( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise replaceTransitGatewayRouteAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result resetEbsDefaultKmsKeyId( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise resetEbsDefaultKmsKeyIdAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result resetFpgaImageAttribute( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise resetFpgaImageAttributeAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result revokeClientVpnIngress( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise revokeClientVpnIngressAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result searchTransitGatewayRoutes( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise searchTransitGatewayRoutesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result terminateClientVpnConnections( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise terminateClientVpnConnectionsAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result unassignIpv6Addresses( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise unassignIpv6AddressesAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result updateSecurityGroupRuleDescriptionsEgress( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise updateSecurityGroupRuleDescriptionsEgressAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result updateSecurityGroupRuleDescriptionsIngress( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise updateSecurityGroupRuleDescriptionsIngressAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Result withdrawByoipCidr( array $args = [] ) ( supported in versions 2016-11-15 )
 * @method Promise withdrawByoipCidrAsync( array $args = [] ) ( supported in versions 2016-11-15 )
 */
class Ec2Client extends AwsClient {
	public function __construct( array $args ) {
		$args['with_resolved'] = function ( array $args ) {
			$this->getHandlerList()->appendInit(
				PresignUrlMiddleware::wrap(
					$this,
					$args['endpoint_provider'],
					[
						'operations'    => [
							'CopySnapshot',
						],
						'service'       => 'ec2',
						'presign_param' => 'PresignedUrl',
					]
				),
				'ec2.copy_snapshot'
			);
		};

		parent::__construct( $args );
	}

	/**
	 * @internal
	 * @codeCoverageIgnore
	 */
	public static function applyDocFilters( array $api, array $docs ) {
		// Several copy snapshot parameters are optional.
		$docs['shapes']['String']['refs']['CopySnapshotRequest$PresignedUrl']
			= '<div class="alert alert-info">The SDK will compute this value '
			  . 'for you on your behalf.</div>';
		$docs['shapes']['String']['refs']['CopySnapshotRequest$DestinationRegion']
			= '<div class="alert alert-info">The SDK will populate this '
			  . 'parameter on your behalf using the configured region value of '
			  . 'the client.</div>';

		return [
			new Service( $api, ApiProvider::defaultProvider() ),
			new DocModel( $docs )
		];
	}
}
