|
|
|
|
@ -22,6 +22,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <returns>An <see cref="McpClient"/> that's connected to the specified server.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="clientTransport"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="HttpRequestException">An error occurred while connecting to the server over HTTP.</exception>
|
|
|
|
|
/// <exception cref="McpException">The server returned an error response during initialization.</exception>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// When using an HTTP-based transport (such as <see cref="HttpClientTransport"/>), this method may throw
|
|
|
|
|
@ -139,6 +140,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="options">Optional request options including metadata, serialization settings, and progress tracking.</param>
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>A list of all available tools as <see cref="McpClientTool"/> instances.</returns>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public async ValueTask<IList<McpClientTool>> ListToolsAsync(
|
|
|
|
|
RequestOptions? options = null,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
@ -168,6 +170,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request as provided by the server.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// The <see cref="ListToolsAsync(RequestOptions?, CancellationToken)"/> overload retrieves all tools by automatically handling pagination.
|
|
|
|
|
/// This overload works with the lower-level <see cref="ListToolsRequestParams"/> and <see cref="ListToolsResult"/>, returning the raw result from the server.
|
|
|
|
|
@ -193,6 +196,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="options">Optional request options including metadata, serialization settings, and progress tracking.</param>
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>A list of all available prompts as <see cref="McpClientPrompt"/> instances.</returns>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public async ValueTask<IList<McpClientPrompt>> ListPromptsAsync(
|
|
|
|
|
RequestOptions? options = null,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
@ -222,6 +226,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request as provided by the server.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// The <see cref="ListPromptsAsync(RequestOptions?, CancellationToken)"/> overload retrieves all prompts by automatically handling pagination.
|
|
|
|
|
/// This overload works with the lower-level <see cref="ListPromptsRequestParams"/> and <see cref="ListPromptsResult"/>, returning the raw result from the server.
|
|
|
|
|
@ -251,6 +256,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <returns>A task containing the prompt's result with content and messages.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="name"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="ArgumentException"><paramref name="name"/> is empty or composed entirely of whitespace.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<GetPromptResult> GetPromptAsync(
|
|
|
|
|
string name,
|
|
|
|
|
IReadOnlyDictionary<string, object?>? arguments = null,
|
|
|
|
|
@ -279,6 +285,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request as provided by the server.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<GetPromptResult> GetPromptAsync(
|
|
|
|
|
GetPromptRequestParams requestParams,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
@ -299,6 +306,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="options">Optional request options including metadata, serialization settings, and progress tracking.</param>
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>A list of all available resource templates as <see cref="ResourceTemplate"/> instances.</returns>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public async ValueTask<IList<McpClientResourceTemplate>> ListResourceTemplatesAsync(
|
|
|
|
|
RequestOptions? options = null,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
@ -328,6 +336,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request as provided by the server.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// The <see cref="ListResourceTemplatesAsync(RequestOptions?, CancellationToken)"/> overload retrieves all resource templates by automatically handling pagination.
|
|
|
|
|
/// This overload works with the lower-level <see cref="ListResourceTemplatesRequestParams"/> and <see cref="ListResourceTemplatesResult"/>, returning the raw result from the server.
|
|
|
|
|
@ -353,6 +362,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="options">Optional request options including metadata, serialization settings, and progress tracking.</param>
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>A list of all available resources as <see cref="Resource"/> instances.</returns>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public async ValueTask<IList<McpClientResource>> ListResourcesAsync(
|
|
|
|
|
RequestOptions? options = null,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
@ -382,6 +392,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request as provided by the server.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// The <see cref="ListResourcesAsync(RequestOptions?, CancellationToken)"/> overload retrieves all resources by automatically handling pagination.
|
|
|
|
|
/// This overload works with the lower-level <see cref="ListResourcesRequestParams"/> and <see cref="ListResourcesResult"/>, returning the raw result from the server.
|
|
|
|
|
@ -408,6 +419,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="options">Optional request options including metadata, serialization settings, and progress tracking.</param>
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<ReadResourceResult> ReadResourceAsync(
|
|
|
|
|
Uri uri, RequestOptions? options = null, CancellationToken cancellationToken = default)
|
|
|
|
|
{
|
|
|
|
|
@ -424,6 +436,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="ArgumentException"><paramref name="uri"/> is empty or composed entirely of whitespace.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<ReadResourceResult> ReadResourceAsync(
|
|
|
|
|
string uri, RequestOptions? options = null, CancellationToken cancellationToken = default)
|
|
|
|
|
{
|
|
|
|
|
@ -445,6 +458,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="uriTemplate"/> or <paramref name="arguments"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="ArgumentException"><paramref name="uriTemplate"/> is empty or composed entirely of whitespace.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<ReadResourceResult> ReadResourceAsync(
|
|
|
|
|
string uriTemplate, IReadOnlyDictionary<string, object?> arguments, RequestOptions? options = null, CancellationToken cancellationToken = default)
|
|
|
|
|
{
|
|
|
|
|
@ -467,6 +481,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<ReadResourceResult> ReadResourceAsync(
|
|
|
|
|
ReadResourceRequestParams requestParams,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
@ -492,6 +507,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <returns>A <see cref="CompleteResult"/> containing completion suggestions.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="reference"/> or <paramref name="argumentName"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="ArgumentException"><paramref name="argumentName"/> is empty or composed entirely of whitespace.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<CompleteResult> CompleteAsync(
|
|
|
|
|
Reference reference, string argumentName, string argumentValue,
|
|
|
|
|
RequestOptions? options = null, CancellationToken cancellationToken = default)
|
|
|
|
|
@ -516,6 +532,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<CompleteResult> CompleteAsync(
|
|
|
|
|
CompleteRequestParams requestParams,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
@ -538,6 +555,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>A task that represents the asynchronous operation.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public Task SubscribeToResourceAsync(Uri uri, RequestOptions? options = null, CancellationToken cancellationToken = default)
|
|
|
|
|
{
|
|
|
|
|
Throw.IfNull(uri);
|
|
|
|
|
@ -554,6 +572,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <returns>A task that represents the asynchronous operation.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="ArgumentException"><paramref name="uri"/> is empty or composed entirely of whitespace.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public Task SubscribeToResourceAsync(string uri, RequestOptions? options = null, CancellationToken cancellationToken = default)
|
|
|
|
|
{
|
|
|
|
|
Throw.IfNullOrWhiteSpace(uri);
|
|
|
|
|
@ -574,6 +593,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// This method subscribes to resource update notifications but does not register a handler.
|
|
|
|
|
@ -612,6 +632,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// and removes the notification handler.
|
|
|
|
|
/// </returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="uri"/> or <paramref name="handler"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// This method provides a convenient way to subscribe to resource updates and handle notifications in a single call.
|
|
|
|
|
@ -647,6 +668,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// </returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="uri"/> or <paramref name="handler"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="ArgumentException"><paramref name="uri"/> is empty or composed entirely of whitespace.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
/// <remarks>
|
|
|
|
|
/// <para>
|
|
|
|
|
/// This method provides a convenient way to subscribe to resource updates and handle notifications in a single call.
|
|
|
|
|
@ -742,6 +764,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>A task that represents the asynchronous operation.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public Task UnsubscribeFromResourceAsync(Uri uri, RequestOptions? options = null, CancellationToken cancellationToken = default)
|
|
|
|
|
{
|
|
|
|
|
Throw.IfNull(uri);
|
|
|
|
|
@ -758,6 +781,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <returns>A task that represents the asynchronous operation.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="uri"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="ArgumentException"><paramref name="uri"/> is empty or composed entirely of whitespace.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public Task UnsubscribeFromResourceAsync(string uri, RequestOptions? options = null, CancellationToken cancellationToken = default)
|
|
|
|
|
{
|
|
|
|
|
Throw.IfNullOrWhiteSpace(uri);
|
|
|
|
|
@ -778,6 +802,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public Task UnsubscribeFromResourceAsync(
|
|
|
|
|
UnsubscribeRequestParams requestParams,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
@ -802,6 +827,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The <see cref="CallToolResult"/> from the tool execution.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="toolName"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<CallToolResult> CallToolAsync(
|
|
|
|
|
string toolName,
|
|
|
|
|
IReadOnlyDictionary<string, object?>? arguments = null,
|
|
|
|
|
@ -871,6 +897,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public ValueTask<CallToolResult> CallToolAsync(
|
|
|
|
|
CallToolRequestParams requestParams,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
@ -892,6 +919,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="options">Optional request options including metadata, serialization settings, and progress tracking.</param>
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>A task representing the asynchronous operation.</returns>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public Task SetLoggingLevelAsync(LogLevel level, RequestOptions? options = null, CancellationToken cancellationToken = default) =>
|
|
|
|
|
SetLoggingLevelAsync(McpServerImpl.ToLoggingLevel(level), options, cancellationToken);
|
|
|
|
|
|
|
|
|
|
@ -902,6 +930,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="options">Optional request options including metadata, serialization settings, and progress tracking.</param>
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>A task representing the asynchronous operation.</returns>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public Task SetLoggingLevelAsync(LoggingLevel level, RequestOptions? options = null, CancellationToken cancellationToken = default)
|
|
|
|
|
{
|
|
|
|
|
return SetLoggingLevelAsync(
|
|
|
|
|
@ -920,6 +949,7 @@ public abstract partial class McpClient : McpSession
|
|
|
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
|
|
|
/// <returns>The result of the request.</returns>
|
|
|
|
|
/// <exception cref="ArgumentNullException"><paramref name="requestParams"/> is <see langword="null"/>.</exception>
|
|
|
|
|
/// <exception cref="McpException">The request failed or the server returned an error response.</exception>
|
|
|
|
|
public Task SetLoggingLevelAsync(
|
|
|
|
|
SetLevelRequestParams requestParams,
|
|
|
|
|
CancellationToken cancellationToken = default)
|
|
|
|
|
|