public interface AsyncClient
extends com.aliyun.core.utils.SdkAutoCloseable
static DefaultAsyncClientBuilder builder()
static AsyncClient create()
CompletableFuture<AddAccessControlListEntryResponse> addAccessControlListEntry(AddAccessControlListEntryRequest request)
Each network ACL can contain one or more IP addresses or CIDR blocks. Take note of the following limits on network ACLs:
request - the request parameters of AddAccessControlListEntry AddAccessControlListEntryRequestCompletableFuture<AddBackendServersResponse> addBackendServers(AddBackendServersRequest request)
If multiple identical Elastic Compute Service (ECS) instances are specified in a request, only the first ECS instance is added. The other ECS instances are ignored. If the backend server that you add is the same as one of the existing backend servers that are already associated with the listener, an error message is returned.
request - the request parameters of AddBackendServers AddBackendServersRequestCompletableFuture<AddListenerWhiteListItemResponse> addListenerWhiteListItem(AddListenerWhiteListItemRequest request)
request - the request parameters of AddListenerWhiteListItem AddListenerWhiteListItemRequestCompletableFuture<AddTagsResponse> addTags(AddTagsRequest request)
Before you call this API, note the following limits:
request - the request parameters of AddTags AddTagsRequestCompletableFuture<AddVServerGroupBackendServersResponse> addVServerGroupBackendServers(AddVServerGroupBackendServersRequest request)
request - the request parameters of AddVServerGroupBackendServers AddVServerGroupBackendServersRequestCompletableFuture<CreateAccessControlListResponse> createAccessControlList(CreateAccessControlListRequest request)
You can create multiple ACLs. Each ACL can contain one or more IP addresses or CIDR blocks. Before you create an ACL, take note of the following limits:
request - the request parameters of CreateAccessControlList CreateAccessControlListRequestCompletableFuture<CreateDomainExtensionResponse> createDomainExtension(CreateDomainExtensionRequest request)
request - the request parameters of CreateDomainExtension CreateDomainExtensionRequestCompletableFuture<CreateLoadBalancerResponse> createLoadBalancer(CreateLoadBalancerRequest request)
Before you create a CLB instance, call the DescribeAvailableResource operation to query the resources available for purchase in the region where you want to create the CLB instance.
request - the request parameters of CreateLoadBalancer CreateLoadBalancerRequestCompletableFuture<CreateLoadBalancerHTTPListenerResponse> createLoadBalancerHTTPListener(CreateLoadBalancerHTTPListenerRequest request)
A newly created listener is in the stopped state. After a listener is created, you can call the StartLoadBalancerListener operation to start the listener. After the listener is started, the listener can forward traffic to backend servers.
A Classic Load Balancer (CLB) instance is created. For more information, see CreateLoadBalancer.
request - the request parameters of CreateLoadBalancerHTTPListener CreateLoadBalancerHTTPListenerRequestCompletableFuture<CreateLoadBalancerHTTPSListenerResponse> createLoadBalancerHTTPSListener(CreateLoadBalancerHTTPSListenerRequest request)
A newly created listener is in the stopped state. After a listener is created, you can call the StartLoadBalancerListener operation to start the listener. After the listener is started, the listener can forward traffic to backend servers.
A Classic Load Balancer (CLB) instance is created. For more information, see CreateLoadBalancer.
request - the request parameters of CreateLoadBalancerHTTPSListener CreateLoadBalancerHTTPSListenerRequestCompletableFuture<CreateLoadBalancerTCPListenerResponse> createLoadBalancerTCPListener(CreateLoadBalancerTCPListenerRequest request)
Newly created listeners are in the stopped state. After a listener is created, call the StartLoadBalancerListener operation to enable the listener to forward network traffic.
request - the request parameters of CreateLoadBalancerTCPListener CreateLoadBalancerTCPListenerRequestCompletableFuture<CreateLoadBalancerUDPListenerResponse> createLoadBalancerUDPListener(CreateLoadBalancerUDPListenerRequest request)
UDP listeners of Classic Load Balancer (CLB) instances in a classic network cannot pass client IP addresses to backend servers.
A newly created listener is in the stopped state. After a listener is created, you can call the StartLoadBalancerListener operation to enable the listener to forward traffic to backend servers.
request - the request parameters of CreateLoadBalancerUDPListener CreateLoadBalancerUDPListenerRequestCompletableFuture<CreateMasterSlaveServerGroupResponse> createMasterSlaveServerGroup(CreateMasterSlaveServerGroupRequest request)
request - the request parameters of CreateMasterSlaveServerGroup CreateMasterSlaveServerGroupRequestCompletableFuture<CreateRulesResponse> createRules(CreateRulesRequest request)
request - the request parameters of CreateRules CreateRulesRequestCompletableFuture<CreateTLSCipherPolicyResponse> createTLSCipherPolicy(CreateTLSCipherPolicyRequest request)
request - the request parameters of CreateTLSCipherPolicy CreateTLSCipherPolicyRequestCompletableFuture<CreateVServerGroupResponse> createVServerGroup(CreateVServerGroupRequest request)
request - the request parameters of CreateVServerGroup CreateVServerGroupRequestCompletableFuture<DeleteAccessControlListResponse> deleteAccessControlList(DeleteAccessControlListRequest request)
You can delete an ACL only if it is not associated with a listener.
request - the request parameters of DeleteAccessControlList DeleteAccessControlListRequestCompletableFuture<DeleteAccessLogsDownloadAttributeResponse> deleteAccessLogsDownloadAttribute(DeleteAccessLogsDownloadAttributeRequest request)
request - the request parameters of DeleteAccessLogsDownloadAttribute DeleteAccessLogsDownloadAttributeRequestCompletableFuture<DeleteCACertificateResponse> deleteCACertificate(DeleteCACertificateRequest request)
You cannot delete a CA certificate that is in use.
request - the request parameters of DeleteCACertificate DeleteCACertificateRequestCompletableFuture<DeleteDomainExtensionResponse> deleteDomainExtension(DeleteDomainExtensionRequest request)
request - the request parameters of DeleteDomainExtension DeleteDomainExtensionRequestCompletableFuture<DeleteLoadBalancerResponse> deleteLoadBalancer(DeleteLoadBalancerRequest request)
The listeners and tags of the SLB instance are deleted along with the SLB instance.
request - the request parameters of DeleteLoadBalancer DeleteLoadBalancerRequestCompletableFuture<DeleteLoadBalancerListenerResponse> deleteLoadBalancerListener(DeleteLoadBalancerListenerRequest request)
You can delete only listeners that are in the stopped or running state.
request - the request parameters of DeleteLoadBalancerListener DeleteLoadBalancerListenerRequestCompletableFuture<DeleteMasterSlaveServerGroupResponse> deleteMasterSlaveServerGroup(DeleteMasterSlaveServerGroupRequest request)
request - the request parameters of DeleteMasterSlaveServerGroup DeleteMasterSlaveServerGroupRequestCompletableFuture<DeleteRulesResponse> deleteRules(DeleteRulesRequest request)
You must specify at least one forwarding rule that you want to delete. You can specify at most 10 forwarding rules in each call.
request - the request parameters of DeleteRules DeleteRulesRequestCompletableFuture<DeleteServerCertificateResponse> deleteServerCertificate(DeleteServerCertificateRequest request)
You cannot delete server certificates that are in use.
request - the request parameters of DeleteServerCertificate DeleteServerCertificateRequestCompletableFuture<DeleteTLSCipherPolicyResponse> deleteTLSCipherPolicy(DeleteTLSCipherPolicyRequest request)
request - the request parameters of DeleteTLSCipherPolicy DeleteTLSCipherPolicyRequestCompletableFuture<DeleteVServerGroupResponse> deleteVServerGroup(DeleteVServerGroupRequest request)
request - the request parameters of DeleteVServerGroup DeleteVServerGroupRequestCompletableFuture<DescribeAccessControlListAttributeResponse> describeAccessControlListAttribute(DescribeAccessControlListAttributeRequest request)
request - the request parameters of DescribeAccessControlListAttribute DescribeAccessControlListAttributeRequestCompletableFuture<DescribeAccessControlListsResponse> describeAccessControlLists(DescribeAccessControlListsRequest request)
request - the request parameters of DescribeAccessControlLists DescribeAccessControlListsRequestCompletableFuture<DescribeAccessLogsDownloadAttributeResponse> describeAccessLogsDownloadAttribute(DescribeAccessLogsDownloadAttributeRequest request)
request - the request parameters of DescribeAccessLogsDownloadAttribute DescribeAccessLogsDownloadAttributeRequestCompletableFuture<DescribeAvailableResourceResponse> describeAvailableResource(DescribeAvailableResourceRequest request)
Only the available resources and zones are returned.
request - the request parameters of DescribeAvailableResource DescribeAvailableResourceRequestCompletableFuture<DescribeCACertificatesResponse> describeCACertificates(DescribeCACertificatesRequest request)
To ensure data confidentiality, only the certificate fingerprint and name are returned. The certificate content is not returned.
request - the request parameters of DescribeCACertificates DescribeCACertificatesRequestCompletableFuture<DescribeDomainExtensionAttributeResponse> describeDomainExtensionAttribute(DescribeDomainExtensionAttributeRequest request)
request - the request parameters of DescribeDomainExtensionAttribute DescribeDomainExtensionAttributeRequestCompletableFuture<DescribeDomainExtensionsResponse> describeDomainExtensions(DescribeDomainExtensionsRequest request)
request - the request parameters of DescribeDomainExtensions DescribeDomainExtensionsRequestCompletableFuture<DescribeHealthStatusResponse> describeHealthStatus(DescribeHealthStatusRequest request)
request - the request parameters of DescribeHealthStatus DescribeHealthStatusRequestCompletableFuture<DescribeHighDefinationMonitorResponse> describeHighDefinationMonitor(DescribeHighDefinationMonitorRequest request)
request - the request parameters of DescribeHighDefinationMonitor DescribeHighDefinationMonitorRequestCompletableFuture<DescribeListenerAccessControlAttributeResponse> describeListenerAccessControlAttribute(DescribeListenerAccessControlAttributeRequest request)
request - the request parameters of DescribeListenerAccessControlAttribute DescribeListenerAccessControlAttributeRequestCompletableFuture<DescribeLoadBalancerAttributeResponse> describeLoadBalancerAttribute(DescribeLoadBalancerAttributeRequest request)
If backend servers are deployed in a vServer group, you can call the DescribeVServerGroupAttribute operation to query the backend servers.
request - the request parameters of DescribeLoadBalancerAttribute DescribeLoadBalancerAttributeRequestCompletableFuture<DescribeLoadBalancerHTTPListenerAttributeResponse> describeLoadBalancerHTTPListenerAttribute(DescribeLoadBalancerHTTPListenerAttributeRequest request)
A Classic Load Balancer (CLB) instance is created. For more information, see CreateLoadBalancer.
request - the request parameters of DescribeLoadBalancerHTTPListenerAttribute DescribeLoadBalancerHTTPListenerAttributeRequestCompletableFuture<DescribeLoadBalancerHTTPSListenerAttributeResponse> describeLoadBalancerHTTPSListenerAttribute(DescribeLoadBalancerHTTPSListenerAttributeRequest request)
A Classic Load Balancer (CLB) instance is created. For more information, see CreateLoadBalancer.
request - the request parameters of DescribeLoadBalancerHTTPSListenerAttribute DescribeLoadBalancerHTTPSListenerAttributeRequestCompletableFuture<DescribeLoadBalancerListenersResponse> describeLoadBalancerListeners(DescribeLoadBalancerListenersRequest request)
A CLB instance is created. For more information, see CreateLoadBalancer.
request - the request parameters of DescribeLoadBalancerListeners DescribeLoadBalancerListenersRequestCompletableFuture<DescribeLoadBalancerTCPListenerAttributeResponse> describeLoadBalancerTCPListenerAttribute(DescribeLoadBalancerTCPListenerAttributeRequest request)
request - the request parameters of DescribeLoadBalancerTCPListenerAttribute DescribeLoadBalancerTCPListenerAttributeRequestCompletableFuture<DescribeLoadBalancerUDPListenerAttributeResponse> describeLoadBalancerUDPListenerAttribute(DescribeLoadBalancerUDPListenerAttributeRequest request)
request - the request parameters of DescribeLoadBalancerUDPListenerAttribute DescribeLoadBalancerUDPListenerAttributeRequestCompletableFuture<DescribeLoadBalancersResponse> describeLoadBalancers(DescribeLoadBalancersRequest request)
request - the request parameters of DescribeLoadBalancers DescribeLoadBalancersRequestCompletableFuture<DescribeMasterSlaveServerGroupAttributeResponse> describeMasterSlaveServerGroupAttribute(DescribeMasterSlaveServerGroupAttributeRequest request)
request - the request parameters of DescribeMasterSlaveServerGroupAttribute DescribeMasterSlaveServerGroupAttributeRequestCompletableFuture<DescribeMasterSlaveServerGroupsResponse> describeMasterSlaveServerGroups(DescribeMasterSlaveServerGroupsRequest request)
request - the request parameters of DescribeMasterSlaveServerGroups DescribeMasterSlaveServerGroupsRequestCompletableFuture<DescribeRegionsResponse> describeRegions(DescribeRegionsRequest request)
request - the request parameters of DescribeRegions DescribeRegionsRequestCompletableFuture<DescribeRuleAttributeResponse> describeRuleAttribute(DescribeRuleAttributeRequest request)
request - the request parameters of DescribeRuleAttribute DescribeRuleAttributeRequestCompletableFuture<DescribeRulesResponse> describeRules(DescribeRulesRequest request)
request - the request parameters of DescribeRules DescribeRulesRequestCompletableFuture<DescribeServerCertificatesResponse> describeServerCertificates(DescribeServerCertificatesRequest request)
For security reasons, only the fingerprints and names of server certificates are returned. The content of server certificates and private keys is not returned.
request - the request parameters of DescribeServerCertificates DescribeServerCertificatesRequestCompletableFuture<DescribeTagsResponse> describeTags(DescribeTagsRequest request)
Take note of the following items:
request - the request parameters of DescribeTags DescribeTagsRequestCompletableFuture<DescribeVServerGroupAttributeResponse> describeVServerGroupAttribute(DescribeVServerGroupAttributeRequest request)
request - the request parameters of DescribeVServerGroupAttribute DescribeVServerGroupAttributeRequestCompletableFuture<DescribeVServerGroupsResponse> describeVServerGroups(DescribeVServerGroupsRequest request)
request - the request parameters of DescribeVServerGroups DescribeVServerGroupsRequestCompletableFuture<DescribeZonesResponse> describeZones(DescribeZonesRequest request)
request - the request parameters of DescribeZones DescribeZonesRequestCompletableFuture<EnableHighDefinationMonitorResponse> enableHighDefinationMonitor(EnableHighDefinationMonitorRequest request)
request - the request parameters of EnableHighDefinationMonitor EnableHighDefinationMonitorRequestCompletableFuture<ListTLSCipherPoliciesResponse> listTLSCipherPolicies(ListTLSCipherPoliciesRequest request)
request - the request parameters of ListTLSCipherPolicies ListTLSCipherPoliciesRequestCompletableFuture<ListTagResourcesResponse> listTagResources(ListTagResourcesRequest request)
Set ResourceId.N or Tag.N that consists of Tag.N.Key and Tag.N.Value in the request to specify the object to be queried.
request - the request parameters of ListTagResources ListTagResourcesRequestCompletableFuture<ModifyHighDefinationMonitorResponse> modifyHighDefinationMonitor(ModifyHighDefinationMonitorRequest request)
request - the request parameters of ModifyHighDefinationMonitor ModifyHighDefinationMonitorRequestCompletableFuture<ModifyLoadBalancerInstanceChargeTypeResponse> modifyLoadBalancerInstanceChargeType(ModifyLoadBalancerInstanceChargeTypeRequest request)
- For pay-as-you-go CLB instances, you can only change the metering method from pay-by-specification to pay-by-LCU. You cannot change the metering method from pay-by-LCU to pay-by-specification.
- This operation can change the metering method of only one instance at a time.
request - the request parameters of ModifyLoadBalancerInstanceChargeType ModifyLoadBalancerInstanceChargeTypeRequestCompletableFuture<ModifyLoadBalancerInstanceSpecResponse> modifyLoadBalancerInstanceSpec(ModifyLoadBalancerInstanceSpecRequest request)
request - the request parameters of ModifyLoadBalancerInstanceSpec ModifyLoadBalancerInstanceSpecRequestCompletableFuture<ModifyLoadBalancerInternetSpecResponse> modifyLoadBalancerInternetSpec(ModifyLoadBalancerInternetSpecRequest request)
request - the request parameters of ModifyLoadBalancerInternetSpec ModifyLoadBalancerInternetSpecRequest@Deprecated CompletableFuture<ModifyLoadBalancerPayTypeResponse> modifyLoadBalancerPayType(ModifyLoadBalancerPayTypeRequest request)
CompletableFuture<ModifyVServerGroupBackendServersResponse> modifyVServerGroupBackendServers(ModifyVServerGroupBackendServersRequest request)
This operation can be used only to replace backend servers in a vServer group. To modify the attributes of backend servers, such as weights, call the SetVServerGroupAttribute operation.
request - the request parameters of ModifyVServerGroupBackendServers ModifyVServerGroupBackendServersRequestCompletableFuture<MoveResourceGroupResponse> moveResourceGroup(MoveResourceGroupRequest request)
request - the request parameters of MoveResourceGroup MoveResourceGroupRequestCompletableFuture<RemoveAccessControlListEntryResponse> removeAccessControlListEntry(RemoveAccessControlListEntryRequest request)
request - the request parameters of RemoveAccessControlListEntry RemoveAccessControlListEntryRequestCompletableFuture<RemoveBackendServersResponse> removeBackendServers(RemoveBackendServersRequest request)
If the backend servers that you want to remove are not in the server list of the Classic Load Balancer (CLB) instance, the request fails. However, the system does not report an error.
request - the request parameters of RemoveBackendServers RemoveBackendServersRequestCompletableFuture<RemoveListenerWhiteListItemResponse> removeListenerWhiteListItem(RemoveListenerWhiteListItemRequest request)
request - the request parameters of RemoveListenerWhiteListItem RemoveListenerWhiteListItemRequestCompletableFuture<RemoveTagsResponse> removeTags(RemoveTagsRequest request)
request - the request parameters of RemoveTags RemoveTagsRequestCompletableFuture<RemoveVServerGroupBackendServersResponse> removeVServerGroupBackendServers(RemoveVServerGroupBackendServersRequest request)
If the backend servers specified by the BackendServers parameter do not exist in the vServer group, the backend servers are ignored. No error message is returned.
request - the request parameters of RemoveVServerGroupBackendServers RemoveVServerGroupBackendServersRequestCompletableFuture<SetAccessControlListAttributeResponse> setAccessControlListAttribute(SetAccessControlListAttributeRequest request)
request - the request parameters of SetAccessControlListAttribute SetAccessControlListAttributeRequestCompletableFuture<SetAccessLogsDownloadAttributeResponse> setAccessLogsDownloadAttribute(SetAccessLogsDownloadAttributeRequest request)
request - the request parameters of SetAccessLogsDownloadAttribute SetAccessLogsDownloadAttributeRequestCompletableFuture<SetBackendServersResponse> setBackendServers(SetBackendServersRequest request)
request - the request parameters of SetBackendServers SetBackendServersRequestCompletableFuture<SetCACertificateNameResponse> setCACertificateName(SetCACertificateNameRequest request)
request - the request parameters of SetCACertificateName SetCACertificateNameRequestCompletableFuture<SetDomainExtensionAttributeResponse> setDomainExtensionAttribute(SetDomainExtensionAttributeRequest request)
You cannot replace an additional certificate for a listener that is added to a shared-resource Server Load Balancer (SLB) instance.
request - the request parameters of SetDomainExtensionAttribute SetDomainExtensionAttributeRequestCompletableFuture<SetListenerAccessControlStatusResponse> setListenerAccessControlStatus(SetListenerAccessControlStatusRequest request)
request - the request parameters of SetListenerAccessControlStatus SetListenerAccessControlStatusRequestCompletableFuture<SetLoadBalancerDeleteProtectionResponse> setLoadBalancerDeleteProtection(SetLoadBalancerDeleteProtectionRequest request)
request - the request parameters of SetLoadBalancerDeleteProtection SetLoadBalancerDeleteProtectionRequestCompletableFuture<SetLoadBalancerHTTPListenerAttributeResponse> setLoadBalancerHTTPListenerAttribute(SetLoadBalancerHTTPListenerAttributeRequest request)
request - the request parameters of SetLoadBalancerHTTPListenerAttribute SetLoadBalancerHTTPListenerAttributeRequestCompletableFuture<SetLoadBalancerHTTPSListenerAttributeResponse> setLoadBalancerHTTPSListenerAttribute(SetLoadBalancerHTTPSListenerAttributeRequest request)
A Classic Load Balancer (CLB) instance is created. For more information, see CreateLoadBalancer.
request - the request parameters of SetLoadBalancerHTTPSListenerAttribute SetLoadBalancerHTTPSListenerAttributeRequestCompletableFuture<SetLoadBalancerModificationProtectionResponse> setLoadBalancerModificationProtection(SetLoadBalancerModificationProtectionRequest request)
request - the request parameters of SetLoadBalancerModificationProtection SetLoadBalancerModificationProtectionRequestCompletableFuture<SetLoadBalancerNameResponse> setLoadBalancerName(SetLoadBalancerNameRequest request)
request - the request parameters of SetLoadBalancerName SetLoadBalancerNameRequestCompletableFuture<SetLoadBalancerStatusResponse> setLoadBalancerStatus(SetLoadBalancerStatusRequest request)
request - the request parameters of SetLoadBalancerStatus SetLoadBalancerStatusRequestCompletableFuture<SetLoadBalancerTCPListenerAttributeResponse> setLoadBalancerTCPListenerAttribute(SetLoadBalancerTCPListenerAttributeRequest request)
A CLB instance is created. For more information, see CreateLoadBalancer.
request - the request parameters of SetLoadBalancerTCPListenerAttribute SetLoadBalancerTCPListenerAttributeRequestCompletableFuture<SetLoadBalancerUDPListenerAttributeResponse> setLoadBalancerUDPListenerAttribute(SetLoadBalancerUDPListenerAttributeRequest request)
A Classic Load Balancer (CLB) instance is created. For more information, see CreateLoadBalancer.
request - the request parameters of SetLoadBalancerUDPListenerAttribute SetLoadBalancerUDPListenerAttributeRequestCompletableFuture<SetRuleResponse> setRule(SetRuleRequest request)
request - the request parameters of SetRule SetRuleRequestCompletableFuture<SetServerCertificateNameResponse> setServerCertificateName(SetServerCertificateNameRequest request)
request - the request parameters of SetServerCertificateName SetServerCertificateNameRequestCompletableFuture<SetTLSCipherPolicyAttributeResponse> setTLSCipherPolicyAttribute(SetTLSCipherPolicyAttributeRequest request)
request - the request parameters of SetTLSCipherPolicyAttribute SetTLSCipherPolicyAttributeRequestCompletableFuture<SetVServerGroupAttributeResponse> setVServerGroupAttribute(SetVServerGroupAttributeRequest request)
This operation can be used to modify the weights of backend servers and names of vServer groups.
request - the request parameters of SetVServerGroupAttribute SetVServerGroupAttributeRequestCompletableFuture<StartLoadBalancerListenerResponse> startLoadBalancerListener(StartLoadBalancerListenerRequest request)
When you call this operation, take note of the following items:
request - the request parameters of StartLoadBalancerListener StartLoadBalancerListenerRequestCompletableFuture<StopLoadBalancerListenerResponse> stopLoadBalancerListener(StopLoadBalancerListenerRequest request)
Before you make this API call, note the following:
If you stop the listener, your services will be disrupted. Exercise caution when you perform this action.
request - the request parameters of StopLoadBalancerListener StopLoadBalancerListenerRequestCompletableFuture<TagResourcesResponse> tagResources(TagResourcesRequest request)
You can add at most 20 tags to each instance. Before you add tags to a resource, Alibaba Cloud checks the number of existing tags of the resource. If the maximum number is reached, an error message is returned.
request - the request parameters of TagResources TagResourcesRequestCompletableFuture<UntagResourcesResponse> untagResources(UntagResourcesRequest request)
request - the request parameters of UntagResources UntagResourcesRequestCompletableFuture<UploadCACertificateResponse> uploadCACertificate(UploadCACertificateRequest request)
You can upload only one CA certificate at a time. After a CA certificate is uploaded, the certificate ID, name, and fingerprint are returned.
request - the request parameters of UploadCACertificate UploadCACertificateRequestCompletableFuture<UploadServerCertificateResponse> uploadServerCertificate(UploadServerCertificateRequest request)
You can upload only one server certificate and its private key in each call.
request - the request parameters of UploadServerCertificate UploadServerCertificateRequestCopyright © 2026. All rights reserved.