1 /** 2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 * SPDX-License-Identifier: Apache-2.0. 4 */ 5 6 #pragma once 7 #include <aws/ec2/EC2_EXPORTS.h> 8 #include <aws/core/utils/memory/stl/AWSStreamFwd.h> 9 #include <aws/core/utils/memory/stl/AWSVector.h> 10 #include <aws/ec2/model/AutoAcceptSharedAttachmentsValue.h> 11 #include <aws/ec2/model/DefaultRouteTableAssociationValue.h> 12 #include <aws/core/utils/memory/stl/AWSString.h> 13 #include <aws/ec2/model/DefaultRouteTablePropagationValue.h> 14 #include <aws/ec2/model/VpnEcmpSupportValue.h> 15 #include <aws/ec2/model/DnsSupportValue.h> 16 #include <aws/ec2/model/MulticastSupportValue.h> 17 #include <utility> 18 19 namespace Aws 20 { 21 namespace Utils 22 { 23 namespace Xml 24 { 25 class XmlNode; 26 } // namespace Xml 27 } // namespace Utils 28 namespace EC2 29 { 30 namespace Model 31 { 32 33 /** 34 * <p>Describes the options for a transit gateway.</p><p><h3>See Also:</h3> <a 35 * href="http://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15/TransitGatewayOptions">AWS 36 * API Reference</a></p> 37 */ 38 class AWS_EC2_API TransitGatewayOptions 39 { 40 public: 41 TransitGatewayOptions(); 42 TransitGatewayOptions(const Aws::Utils::Xml::XmlNode& xmlNode); 43 TransitGatewayOptions& operator=(const Aws::Utils::Xml::XmlNode& xmlNode); 44 45 void OutputToStream(Aws::OStream& ostream, const char* location, unsigned index, const char* locationValue) const; 46 void OutputToStream(Aws::OStream& oStream, const char* location) const; 47 48 49 /** 50 * <p>A private Autonomous System Number (ASN) for the Amazon side of a BGP 51 * session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 52 * 4294967294 for 32-bit ASNs.</p> 53 */ GetAmazonSideAsn()54 inline long long GetAmazonSideAsn() const{ return m_amazonSideAsn; } 55 56 /** 57 * <p>A private Autonomous System Number (ASN) for the Amazon side of a BGP 58 * session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 59 * 4294967294 for 32-bit ASNs.</p> 60 */ AmazonSideAsnHasBeenSet()61 inline bool AmazonSideAsnHasBeenSet() const { return m_amazonSideAsnHasBeenSet; } 62 63 /** 64 * <p>A private Autonomous System Number (ASN) for the Amazon side of a BGP 65 * session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 66 * 4294967294 for 32-bit ASNs.</p> 67 */ SetAmazonSideAsn(long long value)68 inline void SetAmazonSideAsn(long long value) { m_amazonSideAsnHasBeenSet = true; m_amazonSideAsn = value; } 69 70 /** 71 * <p>A private Autonomous System Number (ASN) for the Amazon side of a BGP 72 * session. The range is 64512 to 65534 for 16-bit ASNs and 4200000000 to 73 * 4294967294 for 32-bit ASNs.</p> 74 */ WithAmazonSideAsn(long long value)75 inline TransitGatewayOptions& WithAmazonSideAsn(long long value) { SetAmazonSideAsn(value); return *this;} 76 77 78 /** 79 * <p>The transit gateway CIDR blocks.</p> 80 */ GetTransitGatewayCidrBlocks()81 inline const Aws::Vector<Aws::String>& GetTransitGatewayCidrBlocks() const{ return m_transitGatewayCidrBlocks; } 82 83 /** 84 * <p>The transit gateway CIDR blocks.</p> 85 */ TransitGatewayCidrBlocksHasBeenSet()86 inline bool TransitGatewayCidrBlocksHasBeenSet() const { return m_transitGatewayCidrBlocksHasBeenSet; } 87 88 /** 89 * <p>The transit gateway CIDR blocks.</p> 90 */ SetTransitGatewayCidrBlocks(const Aws::Vector<Aws::String> & value)91 inline void SetTransitGatewayCidrBlocks(const Aws::Vector<Aws::String>& value) { m_transitGatewayCidrBlocksHasBeenSet = true; m_transitGatewayCidrBlocks = value; } 92 93 /** 94 * <p>The transit gateway CIDR blocks.</p> 95 */ SetTransitGatewayCidrBlocks(Aws::Vector<Aws::String> && value)96 inline void SetTransitGatewayCidrBlocks(Aws::Vector<Aws::String>&& value) { m_transitGatewayCidrBlocksHasBeenSet = true; m_transitGatewayCidrBlocks = std::move(value); } 97 98 /** 99 * <p>The transit gateway CIDR blocks.</p> 100 */ WithTransitGatewayCidrBlocks(const Aws::Vector<Aws::String> & value)101 inline TransitGatewayOptions& WithTransitGatewayCidrBlocks(const Aws::Vector<Aws::String>& value) { SetTransitGatewayCidrBlocks(value); return *this;} 102 103 /** 104 * <p>The transit gateway CIDR blocks.</p> 105 */ WithTransitGatewayCidrBlocks(Aws::Vector<Aws::String> && value)106 inline TransitGatewayOptions& WithTransitGatewayCidrBlocks(Aws::Vector<Aws::String>&& value) { SetTransitGatewayCidrBlocks(std::move(value)); return *this;} 107 108 /** 109 * <p>The transit gateway CIDR blocks.</p> 110 */ AddTransitGatewayCidrBlocks(const Aws::String & value)111 inline TransitGatewayOptions& AddTransitGatewayCidrBlocks(const Aws::String& value) { m_transitGatewayCidrBlocksHasBeenSet = true; m_transitGatewayCidrBlocks.push_back(value); return *this; } 112 113 /** 114 * <p>The transit gateway CIDR blocks.</p> 115 */ AddTransitGatewayCidrBlocks(Aws::String && value)116 inline TransitGatewayOptions& AddTransitGatewayCidrBlocks(Aws::String&& value) { m_transitGatewayCidrBlocksHasBeenSet = true; m_transitGatewayCidrBlocks.push_back(std::move(value)); return *this; } 117 118 /** 119 * <p>The transit gateway CIDR blocks.</p> 120 */ AddTransitGatewayCidrBlocks(const char * value)121 inline TransitGatewayOptions& AddTransitGatewayCidrBlocks(const char* value) { m_transitGatewayCidrBlocksHasBeenSet = true; m_transitGatewayCidrBlocks.push_back(value); return *this; } 122 123 124 /** 125 * <p>Indicates whether attachment requests are automatically accepted.</p> 126 */ GetAutoAcceptSharedAttachments()127 inline const AutoAcceptSharedAttachmentsValue& GetAutoAcceptSharedAttachments() const{ return m_autoAcceptSharedAttachments; } 128 129 /** 130 * <p>Indicates whether attachment requests are automatically accepted.</p> 131 */ AutoAcceptSharedAttachmentsHasBeenSet()132 inline bool AutoAcceptSharedAttachmentsHasBeenSet() const { return m_autoAcceptSharedAttachmentsHasBeenSet; } 133 134 /** 135 * <p>Indicates whether attachment requests are automatically accepted.</p> 136 */ SetAutoAcceptSharedAttachments(const AutoAcceptSharedAttachmentsValue & value)137 inline void SetAutoAcceptSharedAttachments(const AutoAcceptSharedAttachmentsValue& value) { m_autoAcceptSharedAttachmentsHasBeenSet = true; m_autoAcceptSharedAttachments = value; } 138 139 /** 140 * <p>Indicates whether attachment requests are automatically accepted.</p> 141 */ SetAutoAcceptSharedAttachments(AutoAcceptSharedAttachmentsValue && value)142 inline void SetAutoAcceptSharedAttachments(AutoAcceptSharedAttachmentsValue&& value) { m_autoAcceptSharedAttachmentsHasBeenSet = true; m_autoAcceptSharedAttachments = std::move(value); } 143 144 /** 145 * <p>Indicates whether attachment requests are automatically accepted.</p> 146 */ WithAutoAcceptSharedAttachments(const AutoAcceptSharedAttachmentsValue & value)147 inline TransitGatewayOptions& WithAutoAcceptSharedAttachments(const AutoAcceptSharedAttachmentsValue& value) { SetAutoAcceptSharedAttachments(value); return *this;} 148 149 /** 150 * <p>Indicates whether attachment requests are automatically accepted.</p> 151 */ WithAutoAcceptSharedAttachments(AutoAcceptSharedAttachmentsValue && value)152 inline TransitGatewayOptions& WithAutoAcceptSharedAttachments(AutoAcceptSharedAttachmentsValue&& value) { SetAutoAcceptSharedAttachments(std::move(value)); return *this;} 153 154 155 /** 156 * <p>Indicates whether resource attachments are automatically associated with the 157 * default association route table.</p> 158 */ GetDefaultRouteTableAssociation()159 inline const DefaultRouteTableAssociationValue& GetDefaultRouteTableAssociation() const{ return m_defaultRouteTableAssociation; } 160 161 /** 162 * <p>Indicates whether resource attachments are automatically associated with the 163 * default association route table.</p> 164 */ DefaultRouteTableAssociationHasBeenSet()165 inline bool DefaultRouteTableAssociationHasBeenSet() const { return m_defaultRouteTableAssociationHasBeenSet; } 166 167 /** 168 * <p>Indicates whether resource attachments are automatically associated with the 169 * default association route table.</p> 170 */ SetDefaultRouteTableAssociation(const DefaultRouteTableAssociationValue & value)171 inline void SetDefaultRouteTableAssociation(const DefaultRouteTableAssociationValue& value) { m_defaultRouteTableAssociationHasBeenSet = true; m_defaultRouteTableAssociation = value; } 172 173 /** 174 * <p>Indicates whether resource attachments are automatically associated with the 175 * default association route table.</p> 176 */ SetDefaultRouteTableAssociation(DefaultRouteTableAssociationValue && value)177 inline void SetDefaultRouteTableAssociation(DefaultRouteTableAssociationValue&& value) { m_defaultRouteTableAssociationHasBeenSet = true; m_defaultRouteTableAssociation = std::move(value); } 178 179 /** 180 * <p>Indicates whether resource attachments are automatically associated with the 181 * default association route table.</p> 182 */ WithDefaultRouteTableAssociation(const DefaultRouteTableAssociationValue & value)183 inline TransitGatewayOptions& WithDefaultRouteTableAssociation(const DefaultRouteTableAssociationValue& value) { SetDefaultRouteTableAssociation(value); return *this;} 184 185 /** 186 * <p>Indicates whether resource attachments are automatically associated with the 187 * default association route table.</p> 188 */ WithDefaultRouteTableAssociation(DefaultRouteTableAssociationValue && value)189 inline TransitGatewayOptions& WithDefaultRouteTableAssociation(DefaultRouteTableAssociationValue&& value) { SetDefaultRouteTableAssociation(std::move(value)); return *this;} 190 191 192 /** 193 * <p>The ID of the default association route table.</p> 194 */ GetAssociationDefaultRouteTableId()195 inline const Aws::String& GetAssociationDefaultRouteTableId() const{ return m_associationDefaultRouteTableId; } 196 197 /** 198 * <p>The ID of the default association route table.</p> 199 */ AssociationDefaultRouteTableIdHasBeenSet()200 inline bool AssociationDefaultRouteTableIdHasBeenSet() const { return m_associationDefaultRouteTableIdHasBeenSet; } 201 202 /** 203 * <p>The ID of the default association route table.</p> 204 */ SetAssociationDefaultRouteTableId(const Aws::String & value)205 inline void SetAssociationDefaultRouteTableId(const Aws::String& value) { m_associationDefaultRouteTableIdHasBeenSet = true; m_associationDefaultRouteTableId = value; } 206 207 /** 208 * <p>The ID of the default association route table.</p> 209 */ SetAssociationDefaultRouteTableId(Aws::String && value)210 inline void SetAssociationDefaultRouteTableId(Aws::String&& value) { m_associationDefaultRouteTableIdHasBeenSet = true; m_associationDefaultRouteTableId = std::move(value); } 211 212 /** 213 * <p>The ID of the default association route table.</p> 214 */ SetAssociationDefaultRouteTableId(const char * value)215 inline void SetAssociationDefaultRouteTableId(const char* value) { m_associationDefaultRouteTableIdHasBeenSet = true; m_associationDefaultRouteTableId.assign(value); } 216 217 /** 218 * <p>The ID of the default association route table.</p> 219 */ WithAssociationDefaultRouteTableId(const Aws::String & value)220 inline TransitGatewayOptions& WithAssociationDefaultRouteTableId(const Aws::String& value) { SetAssociationDefaultRouteTableId(value); return *this;} 221 222 /** 223 * <p>The ID of the default association route table.</p> 224 */ WithAssociationDefaultRouteTableId(Aws::String && value)225 inline TransitGatewayOptions& WithAssociationDefaultRouteTableId(Aws::String&& value) { SetAssociationDefaultRouteTableId(std::move(value)); return *this;} 226 227 /** 228 * <p>The ID of the default association route table.</p> 229 */ WithAssociationDefaultRouteTableId(const char * value)230 inline TransitGatewayOptions& WithAssociationDefaultRouteTableId(const char* value) { SetAssociationDefaultRouteTableId(value); return *this;} 231 232 233 /** 234 * <p>Indicates whether resource attachments automatically propagate routes to the 235 * default propagation route table.</p> 236 */ GetDefaultRouteTablePropagation()237 inline const DefaultRouteTablePropagationValue& GetDefaultRouteTablePropagation() const{ return m_defaultRouteTablePropagation; } 238 239 /** 240 * <p>Indicates whether resource attachments automatically propagate routes to the 241 * default propagation route table.</p> 242 */ DefaultRouteTablePropagationHasBeenSet()243 inline bool DefaultRouteTablePropagationHasBeenSet() const { return m_defaultRouteTablePropagationHasBeenSet; } 244 245 /** 246 * <p>Indicates whether resource attachments automatically propagate routes to the 247 * default propagation route table.</p> 248 */ SetDefaultRouteTablePropagation(const DefaultRouteTablePropagationValue & value)249 inline void SetDefaultRouteTablePropagation(const DefaultRouteTablePropagationValue& value) { m_defaultRouteTablePropagationHasBeenSet = true; m_defaultRouteTablePropagation = value; } 250 251 /** 252 * <p>Indicates whether resource attachments automatically propagate routes to the 253 * default propagation route table.</p> 254 */ SetDefaultRouteTablePropagation(DefaultRouteTablePropagationValue && value)255 inline void SetDefaultRouteTablePropagation(DefaultRouteTablePropagationValue&& value) { m_defaultRouteTablePropagationHasBeenSet = true; m_defaultRouteTablePropagation = std::move(value); } 256 257 /** 258 * <p>Indicates whether resource attachments automatically propagate routes to the 259 * default propagation route table.</p> 260 */ WithDefaultRouteTablePropagation(const DefaultRouteTablePropagationValue & value)261 inline TransitGatewayOptions& WithDefaultRouteTablePropagation(const DefaultRouteTablePropagationValue& value) { SetDefaultRouteTablePropagation(value); return *this;} 262 263 /** 264 * <p>Indicates whether resource attachments automatically propagate routes to the 265 * default propagation route table.</p> 266 */ WithDefaultRouteTablePropagation(DefaultRouteTablePropagationValue && value)267 inline TransitGatewayOptions& WithDefaultRouteTablePropagation(DefaultRouteTablePropagationValue&& value) { SetDefaultRouteTablePropagation(std::move(value)); return *this;} 268 269 270 /** 271 * <p>The ID of the default propagation route table.</p> 272 */ GetPropagationDefaultRouteTableId()273 inline const Aws::String& GetPropagationDefaultRouteTableId() const{ return m_propagationDefaultRouteTableId; } 274 275 /** 276 * <p>The ID of the default propagation route table.</p> 277 */ PropagationDefaultRouteTableIdHasBeenSet()278 inline bool PropagationDefaultRouteTableIdHasBeenSet() const { return m_propagationDefaultRouteTableIdHasBeenSet; } 279 280 /** 281 * <p>The ID of the default propagation route table.</p> 282 */ SetPropagationDefaultRouteTableId(const Aws::String & value)283 inline void SetPropagationDefaultRouteTableId(const Aws::String& value) { m_propagationDefaultRouteTableIdHasBeenSet = true; m_propagationDefaultRouteTableId = value; } 284 285 /** 286 * <p>The ID of the default propagation route table.</p> 287 */ SetPropagationDefaultRouteTableId(Aws::String && value)288 inline void SetPropagationDefaultRouteTableId(Aws::String&& value) { m_propagationDefaultRouteTableIdHasBeenSet = true; m_propagationDefaultRouteTableId = std::move(value); } 289 290 /** 291 * <p>The ID of the default propagation route table.</p> 292 */ SetPropagationDefaultRouteTableId(const char * value)293 inline void SetPropagationDefaultRouteTableId(const char* value) { m_propagationDefaultRouteTableIdHasBeenSet = true; m_propagationDefaultRouteTableId.assign(value); } 294 295 /** 296 * <p>The ID of the default propagation route table.</p> 297 */ WithPropagationDefaultRouteTableId(const Aws::String & value)298 inline TransitGatewayOptions& WithPropagationDefaultRouteTableId(const Aws::String& value) { SetPropagationDefaultRouteTableId(value); return *this;} 299 300 /** 301 * <p>The ID of the default propagation route table.</p> 302 */ WithPropagationDefaultRouteTableId(Aws::String && value)303 inline TransitGatewayOptions& WithPropagationDefaultRouteTableId(Aws::String&& value) { SetPropagationDefaultRouteTableId(std::move(value)); return *this;} 304 305 /** 306 * <p>The ID of the default propagation route table.</p> 307 */ WithPropagationDefaultRouteTableId(const char * value)308 inline TransitGatewayOptions& WithPropagationDefaultRouteTableId(const char* value) { SetPropagationDefaultRouteTableId(value); return *this;} 309 310 311 /** 312 * <p>Indicates whether Equal Cost Multipath Protocol support is enabled.</p> 313 */ GetVpnEcmpSupport()314 inline const VpnEcmpSupportValue& GetVpnEcmpSupport() const{ return m_vpnEcmpSupport; } 315 316 /** 317 * <p>Indicates whether Equal Cost Multipath Protocol support is enabled.</p> 318 */ VpnEcmpSupportHasBeenSet()319 inline bool VpnEcmpSupportHasBeenSet() const { return m_vpnEcmpSupportHasBeenSet; } 320 321 /** 322 * <p>Indicates whether Equal Cost Multipath Protocol support is enabled.</p> 323 */ SetVpnEcmpSupport(const VpnEcmpSupportValue & value)324 inline void SetVpnEcmpSupport(const VpnEcmpSupportValue& value) { m_vpnEcmpSupportHasBeenSet = true; m_vpnEcmpSupport = value; } 325 326 /** 327 * <p>Indicates whether Equal Cost Multipath Protocol support is enabled.</p> 328 */ SetVpnEcmpSupport(VpnEcmpSupportValue && value)329 inline void SetVpnEcmpSupport(VpnEcmpSupportValue&& value) { m_vpnEcmpSupportHasBeenSet = true; m_vpnEcmpSupport = std::move(value); } 330 331 /** 332 * <p>Indicates whether Equal Cost Multipath Protocol support is enabled.</p> 333 */ WithVpnEcmpSupport(const VpnEcmpSupportValue & value)334 inline TransitGatewayOptions& WithVpnEcmpSupport(const VpnEcmpSupportValue& value) { SetVpnEcmpSupport(value); return *this;} 335 336 /** 337 * <p>Indicates whether Equal Cost Multipath Protocol support is enabled.</p> 338 */ WithVpnEcmpSupport(VpnEcmpSupportValue && value)339 inline TransitGatewayOptions& WithVpnEcmpSupport(VpnEcmpSupportValue&& value) { SetVpnEcmpSupport(std::move(value)); return *this;} 340 341 342 /** 343 * <p>Indicates whether DNS support is enabled.</p> 344 */ GetDnsSupport()345 inline const DnsSupportValue& GetDnsSupport() const{ return m_dnsSupport; } 346 347 /** 348 * <p>Indicates whether DNS support is enabled.</p> 349 */ DnsSupportHasBeenSet()350 inline bool DnsSupportHasBeenSet() const { return m_dnsSupportHasBeenSet; } 351 352 /** 353 * <p>Indicates whether DNS support is enabled.</p> 354 */ SetDnsSupport(const DnsSupportValue & value)355 inline void SetDnsSupport(const DnsSupportValue& value) { m_dnsSupportHasBeenSet = true; m_dnsSupport = value; } 356 357 /** 358 * <p>Indicates whether DNS support is enabled.</p> 359 */ SetDnsSupport(DnsSupportValue && value)360 inline void SetDnsSupport(DnsSupportValue&& value) { m_dnsSupportHasBeenSet = true; m_dnsSupport = std::move(value); } 361 362 /** 363 * <p>Indicates whether DNS support is enabled.</p> 364 */ WithDnsSupport(const DnsSupportValue & value)365 inline TransitGatewayOptions& WithDnsSupport(const DnsSupportValue& value) { SetDnsSupport(value); return *this;} 366 367 /** 368 * <p>Indicates whether DNS support is enabled.</p> 369 */ WithDnsSupport(DnsSupportValue && value)370 inline TransitGatewayOptions& WithDnsSupport(DnsSupportValue&& value) { SetDnsSupport(std::move(value)); return *this;} 371 372 373 /** 374 * <p>Indicates whether multicast is enabled on the transit gateway</p> 375 */ GetMulticastSupport()376 inline const MulticastSupportValue& GetMulticastSupport() const{ return m_multicastSupport; } 377 378 /** 379 * <p>Indicates whether multicast is enabled on the transit gateway</p> 380 */ MulticastSupportHasBeenSet()381 inline bool MulticastSupportHasBeenSet() const { return m_multicastSupportHasBeenSet; } 382 383 /** 384 * <p>Indicates whether multicast is enabled on the transit gateway</p> 385 */ SetMulticastSupport(const MulticastSupportValue & value)386 inline void SetMulticastSupport(const MulticastSupportValue& value) { m_multicastSupportHasBeenSet = true; m_multicastSupport = value; } 387 388 /** 389 * <p>Indicates whether multicast is enabled on the transit gateway</p> 390 */ SetMulticastSupport(MulticastSupportValue && value)391 inline void SetMulticastSupport(MulticastSupportValue&& value) { m_multicastSupportHasBeenSet = true; m_multicastSupport = std::move(value); } 392 393 /** 394 * <p>Indicates whether multicast is enabled on the transit gateway</p> 395 */ WithMulticastSupport(const MulticastSupportValue & value)396 inline TransitGatewayOptions& WithMulticastSupport(const MulticastSupportValue& value) { SetMulticastSupport(value); return *this;} 397 398 /** 399 * <p>Indicates whether multicast is enabled on the transit gateway</p> 400 */ WithMulticastSupport(MulticastSupportValue && value)401 inline TransitGatewayOptions& WithMulticastSupport(MulticastSupportValue&& value) { SetMulticastSupport(std::move(value)); return *this;} 402 403 private: 404 405 long long m_amazonSideAsn; 406 bool m_amazonSideAsnHasBeenSet; 407 408 Aws::Vector<Aws::String> m_transitGatewayCidrBlocks; 409 bool m_transitGatewayCidrBlocksHasBeenSet; 410 411 AutoAcceptSharedAttachmentsValue m_autoAcceptSharedAttachments; 412 bool m_autoAcceptSharedAttachmentsHasBeenSet; 413 414 DefaultRouteTableAssociationValue m_defaultRouteTableAssociation; 415 bool m_defaultRouteTableAssociationHasBeenSet; 416 417 Aws::String m_associationDefaultRouteTableId; 418 bool m_associationDefaultRouteTableIdHasBeenSet; 419 420 DefaultRouteTablePropagationValue m_defaultRouteTablePropagation; 421 bool m_defaultRouteTablePropagationHasBeenSet; 422 423 Aws::String m_propagationDefaultRouteTableId; 424 bool m_propagationDefaultRouteTableIdHasBeenSet; 425 426 VpnEcmpSupportValue m_vpnEcmpSupport; 427 bool m_vpnEcmpSupportHasBeenSet; 428 429 DnsSupportValue m_dnsSupport; 430 bool m_dnsSupportHasBeenSet; 431 432 MulticastSupportValue m_multicastSupport; 433 bool m_multicastSupportHasBeenSet; 434 }; 435 436 } // namespace Model 437 } // namespace EC2 438 } // namespace Aws 439