@Generated(value="OracleSDKGenerator", comments="API Version: 20240531") public class GenerativeAiAgentAsyncClient extends BaseAsyncClient implements GenerativeAiAgentAsync
Async client implementation for GenerativeAiAgent service.
There are two ways to use async client: 1. Use AsyncHandler: using AsyncHandler, if the response
to the call is an InputStream
, like getObject Api in object storage service,
developers need to process the stream in AsyncHandler, and not anywhere else, because the stream
will be closed right after the AsyncHandler is invoked.
2. Use Java Future: using Java Future, developers need to close the stream after they are done
with the Java Future.
Accessing the result should be done in a mutually exclusive manner, either through the Future or
the AsyncHandler, but not both. If the Future is used, the caller should pass in null as the
AsyncHandler. If the AsyncHandler is used, it is still safe to use the Future to determine
whether or not the request was completed via Future.isDone/isCancelled.
Please refer to
https://github.com/oracle/oci-java-sdk/blob/master/bmc-examples/src/main/java/ResteasyClientWithObjectStorageExample.java
Modifier and Type | Class and Description |
---|---|
static class |
GenerativeAiAgentAsyncClient.Builder
Builder class for this client.
|
Modifier and Type | Field and Description |
---|---|
String |
clientCommonLibraryVersion
Compatible SDK version, provided by the codegen.
|
Optional<String> |
minimumClientCommonLibraryVersionFromClient
Minimum compatible SDK version, maybe provided by the codegen.
|
static Service |
SERVICE
Service instance for GenerativeAiAgent.
|
Constructor and Description |
---|
GenerativeAiAgentAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator,
RequestSignerFactory defaultRequestSignerFactory)
Deprecated.
Use the
builder instead. |
GenerativeAiAgentAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator,
RequestSignerFactory defaultRequestSignerFactory,
List<ClientConfigurator> additionalClientConfigurators)
Deprecated.
Use the
builder instead. |
GenerativeAiAgentAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator,
RequestSignerFactory defaultRequestSignerFactory,
List<ClientConfigurator> additionalClientConfigurators,
String endpoint)
Deprecated.
Use the
builder instead. |
GenerativeAiAgentAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator,
RequestSignerFactory defaultRequestSignerFactory,
Map<SigningStrategy,RequestSignerFactory> signingStrategyRequestSignerFactories,
List<ClientConfigurator> additionalClientConfigurators,
String endpoint)
Deprecated.
Use the
builder instead. |
GenerativeAiAgentAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider)
Deprecated.
Use the
builder instead. |
GenerativeAiAgentAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration)
Deprecated.
Use the
builder instead. |
GenerativeAiAgentAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider,
ClientConfiguration configuration,
ClientConfigurator clientConfigurator)
Deprecated.
Use the
builder instead. |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getEndpoint, refreshClient, setEndpoint, useRealmSpecificEndpointTemplate
close
public static final Service SERVICE
Service instance for GenerativeAiAgent.
public final String clientCommonLibraryVersion
@Deprecated public GenerativeAiAgentAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see GenerativeAiAgentAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)@Deprecated public GenerativeAiAgentAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see GenerativeAiAgentAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
@Deprecated public GenerativeAiAgentAsyncClient(BasicAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see GenerativeAiAgentAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
@Deprecated public GenerativeAiAgentAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator, RequestSignerFactory defaultRequestSignerFactory)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see GenerativeAiAgentAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
defaultRequestSignerFactory
- ClientBuilderBase.requestSignerFactory
@Deprecated public GenerativeAiAgentAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator, RequestSignerFactory defaultRequestSignerFactory, List<ClientConfigurator> additionalClientConfigurators)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see GenerativeAiAgentAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
defaultRequestSignerFactory
- ClientBuilderBase.requestSignerFactory
additionalClientConfigurators
- ClientBuilderBase.additionalClientConfigurators
@Deprecated public GenerativeAiAgentAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator, RequestSignerFactory defaultRequestSignerFactory, List<ClientConfigurator> additionalClientConfigurators, String endpoint)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see GenerativeAiAgentAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
defaultRequestSignerFactory
- ClientBuilderBase.requestSignerFactory
additionalClientConfigurators
- ClientBuilderBase.additionalClientConfigurators
endpoint
- ClientBuilderBase.endpoint(java.lang.String)
@Deprecated public GenerativeAiAgentAsyncClient(AbstractAuthenticationDetailsProvider authenticationDetailsProvider, ClientConfiguration configuration, ClientConfigurator clientConfigurator, RequestSignerFactory defaultRequestSignerFactory, Map<SigningStrategy,RequestSignerFactory> signingStrategyRequestSignerFactories, List<ClientConfigurator> additionalClientConfigurators, String endpoint)
builder
instead.Create a new client instance.
authenticationDetailsProvider
- The authentication details (see GenerativeAiAgentAsyncClient.Builder.build(com.oracle.bmc.auth.AbstractAuthenticationDetailsProvider)
)configuration
- ClientBuilderBase.configuration
clientConfigurator
- ClientBuilderBase.clientConfigurator(com.oracle.bmc.http.ClientConfigurator)
defaultRequestSignerFactory
- ClientBuilderBase.requestSignerFactory
additionalClientConfigurators
- ClientBuilderBase.additionalClientConfigurators
endpoint
- ClientBuilderBase.endpoint(java.lang.String)
signingStrategyRequestSignerFactories
- ClientBuilderBase.signingStrategyRequestSignerFactories
public static GenerativeAiAgentAsyncClient.Builder builder()
Create a builder for this client.
public void setRegion(Region region)
GenerativeAiAgentAsync
Sets the region to call (ex, Region.US_PHOENIX_1).
Note, this will call setEndpoint
after resolving the
endpoint. If the service is not available in this region, however, an
IllegalArgumentException will be raised.
setRegion
in interface GenerativeAiAgentAsync
region
- The region of the service.public void setRegion(String regionId)
GenerativeAiAgentAsync
Sets the region to call (ex, ‘us-phoenix-1’).
Note, this will first try to map the region ID to a known Region and call setRegion
.
If no known Region could be determined, it will create an endpoint based on the default
endpoint format (Region.formatDefaultRegionEndpoint(Service, String)
and then call setEndpoint
.
setRegion
in interface GenerativeAiAgentAsync
regionId
- The public region ID.public Future<CancelWorkRequestResponse> cancelWorkRequest(CancelWorkRequestRequest request, AsyncHandler<CancelWorkRequestRequest,CancelWorkRequestResponse> handler)
GenerativeAiAgentAsync
Cancels a work request.
cancelWorkRequest
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ChangeAgentCompartmentResponse> changeAgentCompartment(ChangeAgentCompartmentRequest request, AsyncHandler<ChangeAgentCompartmentRequest,ChangeAgentCompartmentResponse> handler)
GenerativeAiAgentAsync
Moves an agent into a different compartment within the same tenancy. For information about moving resources between compartments, see Moving Resources to a Different Compartment.
changeAgentCompartment
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ChangeAgentEndpointCompartmentResponse> changeAgentEndpointCompartment(ChangeAgentEndpointCompartmentRequest request, AsyncHandler<ChangeAgentEndpointCompartmentRequest,ChangeAgentEndpointCompartmentResponse> handler)
GenerativeAiAgentAsync
Moves an endpoint into a different compartment within the same tenancy. For information about moving resources between compartments, see Moving Resources to a Different Compartment.
changeAgentEndpointCompartment
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ChangeKnowledgeBaseCompartmentResponse> changeKnowledgeBaseCompartment(ChangeKnowledgeBaseCompartmentRequest request, AsyncHandler<ChangeKnowledgeBaseCompartmentRequest,ChangeKnowledgeBaseCompartmentResponse> handler)
GenerativeAiAgentAsync
Moves a knowledge base into a different compartment within the same tenancy. For information about moving resources between compartments, see Moving Resources to a Different Compartment.
changeKnowledgeBaseCompartment
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<CreateAgentResponse> createAgent(CreateAgentRequest request, AsyncHandler<CreateAgentRequest,CreateAgentResponse> handler)
GenerativeAiAgentAsync
Creates an agent.
createAgent
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<CreateAgentEndpointResponse> createAgentEndpoint(CreateAgentEndpointRequest request, AsyncHandler<CreateAgentEndpointRequest,CreateAgentEndpointResponse> handler)
GenerativeAiAgentAsync
Creates an endpoint.
createAgentEndpoint
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<CreateDataIngestionJobResponse> createDataIngestionJob(CreateDataIngestionJobRequest request, AsyncHandler<CreateDataIngestionJobRequest,CreateDataIngestionJobResponse> handler)
GenerativeAiAgentAsync
Creates a data ingestion job.
createDataIngestionJob
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<CreateDataSourceResponse> createDataSource(CreateDataSourceRequest request, AsyncHandler<CreateDataSourceRequest,CreateDataSourceResponse> handler)
GenerativeAiAgentAsync
Creates a data source.
createDataSource
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<CreateKnowledgeBaseResponse> createKnowledgeBase(CreateKnowledgeBaseRequest request, AsyncHandler<CreateKnowledgeBaseRequest,CreateKnowledgeBaseResponse> handler)
GenerativeAiAgentAsync
Creates a knowledge base.
createKnowledgeBase
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<DeleteAgentResponse> deleteAgent(DeleteAgentRequest request, AsyncHandler<DeleteAgentRequest,DeleteAgentResponse> handler)
GenerativeAiAgentAsync
Deletes an agent.
deleteAgent
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<DeleteAgentEndpointResponse> deleteAgentEndpoint(DeleteAgentEndpointRequest request, AsyncHandler<DeleteAgentEndpointRequest,DeleteAgentEndpointResponse> handler)
GenerativeAiAgentAsync
Deletes an endpoint.
deleteAgentEndpoint
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<DeleteDataIngestionJobResponse> deleteDataIngestionJob(DeleteDataIngestionJobRequest request, AsyncHandler<DeleteDataIngestionJobRequest,DeleteDataIngestionJobResponse> handler)
GenerativeAiAgentAsync
Deletes a data ingestion job.
deleteDataIngestionJob
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<DeleteDataSourceResponse> deleteDataSource(DeleteDataSourceRequest request, AsyncHandler<DeleteDataSourceRequest,DeleteDataSourceResponse> handler)
GenerativeAiAgentAsync
Deletes a data source.
deleteDataSource
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<DeleteKnowledgeBaseResponse> deleteKnowledgeBase(DeleteKnowledgeBaseRequest request, AsyncHandler<DeleteKnowledgeBaseRequest,DeleteKnowledgeBaseResponse> handler)
GenerativeAiAgentAsync
Deletes a knowledge base.
deleteKnowledgeBase
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetAgentResponse> getAgent(GetAgentRequest request, AsyncHandler<GetAgentRequest,GetAgentResponse> handler)
GenerativeAiAgentAsync
Gets information about an agent.
getAgent
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetAgentEndpointResponse> getAgentEndpoint(GetAgentEndpointRequest request, AsyncHandler<GetAgentEndpointRequest,GetAgentEndpointResponse> handler)
GenerativeAiAgentAsync
Gets information about an endpoint.
getAgentEndpoint
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetDataIngestionJobResponse> getDataIngestionJob(GetDataIngestionJobRequest request, AsyncHandler<GetDataIngestionJobRequest,GetDataIngestionJobResponse> handler)
GenerativeAiAgentAsync
Gets information about a data ingestion job.
getDataIngestionJob
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetDataIngestionJobLogContentResponse> getDataIngestionJobLogContent(GetDataIngestionJobLogContentRequest request, AsyncHandler<GetDataIngestionJobLogContentRequest,GetDataIngestionJobLogContentResponse> handler)
GenerativeAiAgentAsync
Returns the raw log file for the specified data ingestion job in text format.
getDataIngestionJobLogContent
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetDataSourceResponse> getDataSource(GetDataSourceRequest request, AsyncHandler<GetDataSourceRequest,GetDataSourceResponse> handler)
GenerativeAiAgentAsync
Gets information about a data source.
getDataSource
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetKnowledgeBaseResponse> getKnowledgeBase(GetKnowledgeBaseRequest request, AsyncHandler<GetKnowledgeBaseRequest,GetKnowledgeBaseResponse> handler)
GenerativeAiAgentAsync
Gets information about a knowledge base.
getKnowledgeBase
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<GetWorkRequestResponse> getWorkRequest(GetWorkRequestRequest request, AsyncHandler<GetWorkRequestRequest,GetWorkRequestResponse> handler)
GenerativeAiAgentAsync
Gets the details of a work request.
getWorkRequest
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListAgentEndpointsResponse> listAgentEndpoints(ListAgentEndpointsRequest request, AsyncHandler<ListAgentEndpointsRequest,ListAgentEndpointsResponse> handler)
GenerativeAiAgentAsync
Gets a list of endpoints.
listAgentEndpoints
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListAgentsResponse> listAgents(ListAgentsRequest request, AsyncHandler<ListAgentsRequest,ListAgentsResponse> handler)
GenerativeAiAgentAsync
Gets a list of agents.
listAgents
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListDataIngestionJobsResponse> listDataIngestionJobs(ListDataIngestionJobsRequest request, AsyncHandler<ListDataIngestionJobsRequest,ListDataIngestionJobsResponse> handler)
GenerativeAiAgentAsync
Gets a list of data ingestion jobs.
listDataIngestionJobs
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListDataSourcesResponse> listDataSources(ListDataSourcesRequest request, AsyncHandler<ListDataSourcesRequest,ListDataSourcesResponse> handler)
GenerativeAiAgentAsync
Gets a list of data sources.
listDataSources
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListKnowledgeBasesResponse> listKnowledgeBases(ListKnowledgeBasesRequest request, AsyncHandler<ListKnowledgeBasesRequest,ListKnowledgeBasesResponse> handler)
GenerativeAiAgentAsync
Gets a list of knowledge bases.
listKnowledgeBases
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListWorkRequestErrorsResponse> listWorkRequestErrors(ListWorkRequestErrorsRequest request, AsyncHandler<ListWorkRequestErrorsRequest,ListWorkRequestErrorsResponse> handler)
GenerativeAiAgentAsync
Lists the errors for a work request.
listWorkRequestErrors
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListWorkRequestLogsResponse> listWorkRequestLogs(ListWorkRequestLogsRequest request, AsyncHandler<ListWorkRequestLogsRequest,ListWorkRequestLogsResponse> handler)
GenerativeAiAgentAsync
Lists the logs for a work request.
listWorkRequestLogs
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<ListWorkRequestsResponse> listWorkRequests(ListWorkRequestsRequest request, AsyncHandler<ListWorkRequestsRequest,ListWorkRequestsResponse> handler)
GenerativeAiAgentAsync
Lists the work requests in a compartment.
listWorkRequests
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<UpdateAgentResponse> updateAgent(UpdateAgentRequest request, AsyncHandler<UpdateAgentRequest,UpdateAgentResponse> handler)
GenerativeAiAgentAsync
Updates an agent.
updateAgent
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<UpdateAgentEndpointResponse> updateAgentEndpoint(UpdateAgentEndpointRequest request, AsyncHandler<UpdateAgentEndpointRequest,UpdateAgentEndpointResponse> handler)
GenerativeAiAgentAsync
Updates an endpoint.
updateAgentEndpoint
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<UpdateDataSourceResponse> updateDataSource(UpdateDataSourceRequest request, AsyncHandler<UpdateDataSourceRequest,UpdateDataSourceResponse> handler)
GenerativeAiAgentAsync
Updates a data source.
updateDataSource
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.public Future<UpdateKnowledgeBaseResponse> updateKnowledgeBase(UpdateKnowledgeBaseRequest request, AsyncHandler<UpdateKnowledgeBaseRequest,UpdateKnowledgeBaseResponse> handler)
GenerativeAiAgentAsync
Updates a knowledge base.
updateKnowledgeBase
in interface GenerativeAiAgentAsync
request
- The request object containing the details to sendhandler
- The request handler to invoke upon completion, may be null.protected ClientConfigurator getDefaultConfigurator()
public void useRealmSpecificEndpointTemplate(boolean useOfRealmSpecificEndpointTemplateEnabled)
useOfRealmSpecificEndpointTemplateEnabled
- This flag can be set to true or false to
enable or disable the use of realm-specific endpoint template respectivelypublic final void populateServiceParametersInEndpoint(String endpoint, Map<String,Object> requiredParametersMap)
endpoint
- The endpoint template in userequiredParametersMap
- Map of parameter name as key and value set in request path or
query parameter as valuepublic final void updateBaseEndpoint(String endpoint)
endpoint
- The updated endpoint to usepublic final void setEndpoint(String endpoint)
public final String getEndpoint()
public final void refreshClient()
HttpClient
. This will call ClientConfigurator
s again, and
can be used to e.g. refresh the SSL certificate.public final void close()
close
in interface AutoCloseable
public String getClientCommonLibraryVersion()
public Optional<String> getMinimumClientCommonLibraryVersionFromClient()
protected <REQ extends BmcRequest<?>,RESP extends BmcResponse,RESP_BUILDER extends BmcResponse.Builder<RESP>> ClientCall<REQ,RESP,RESP_BUILDER> clientCall(REQ request, Supplier<RESP_BUILDER> responseBuilder)
Copyright © 2016–2024. All rights reserved.