> ## Documentation Index
> Fetch the complete documentation index at: https://tyk.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Step by step guide using Curity

<Warning>
  **Legacy: Tyk Classic Portal**

  You're viewing documentation for the **Tyk Classic Portal**, which is no longer actively maintained.

  If you're looking for the latest API documentation for the **new Tyk Developer Portal**, please refer to the
  [Postman collection](/nightly/product-stack/tyk-enterprise-developer-portal/api-documentation/tyk-edp-api) or visit the
  [Tyk Developer Portal](/nightly/portal/overview/intro) section.

  The Classic Portal is in maintenance mode and will be deprecated soon. For questions or support, contact us at
  [support@tyk.io](<mailto:support@tyk.io?subject=Tyk classic developer portal>).
</Warning>

This guide describes how to integrate [The Curity Identity Server](https://curity.io/) with the Tyk Developer Portal using [OpenID Connect Dynamic Client Registration protocol](https://tools.ietf.org/html/rfc7591).

Use case outline:

1. A developer registers an account with the Tyk Developer Portal and uses the portal to create a new client.

2. Tyk sends a <Tooltip tip="Dynamic Client Registration">DCR</Tooltip> request to the <Tooltip tip="Identity Provider">IDP</Tooltip>, in this case The Curity Identity Server. The IDP replies with the Client ID and Secret.

3. Using the provided Client ID and Secret, the developer (or an application) can initiate an Authorization flow to obtain an Access Token from The Curity Identity Server.

4. The developer (or the application) can then use the Access Token when calling an API exposed by Tyk. In the case when a JWT is used to protect the API, Tyk validates the token using the <Tooltip tip="JSON Web Key Sets">JWKS</Tooltip> provided by The Curity Identity Server. The API can also be protected using the [Split Token Approach](https://github.com/sedkis/split-token-tyk).

### Requirements

* An installation of The Curity Identity Server. Follow the [Getting Started Guide](https://curity.io/resources/getting-started/) if an installation is not already available.
* A [Tyk Self-Managed installation](/nightly/tyk-self-managed/install) (Gateway + Dashboard).

### Enable DCR in The Curity Identity Server

By default, DCR is not enabled in The Curity Identity Server. In the Admin UI, go to **Profiles** → **Token Service** → **General** → **Dynamic Registration**. Set both **Enable DCR** and **Non-templatized** to enabled and set the **Authentication Method** to `no-authentication`.

<img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/1-curity-admin-ui-dcr.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=0cd966f0682aca03b1e028ce694969a8" alt="Enable DCR" width="3583" height="2071" data-path="img/dcr/curity/1-curity-admin-ui-dcr.png" />

Navigate to **Profiles** → **Token Service** → **Endpoints** and locate the path of the DCR endpoint. The path is needed later when configuring DCR in Tyk.

<img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/2-curity-dcr-endpoint.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=4145b55cd473bac5bd3abe12a27198de" alt="DCR Endpoint" width="3579" height="2068" data-path="img/dcr/curity/2-curity-dcr-endpoint.png" />

<Note>
  **Commit the changes**

  Remember to **Commit** the changes by going to **Changes** → **Commit**.
</Note>

### Setting up Tyk

First check `tyk_analytics.conf` and make sure that a proper `oauth_redirect_uri_separator` parameter is set. This sets the character that separates multiple redirect uri's to `;`.

```json theme={null}
    "oauth_redirect_uri_separator": ";",
```

If a change is needed in `tyk_analytics.conf`, remember to restart the service to apply the change.

#### Create DCR proxy API

The Curity Identity Server requires a token with a `dcr` scope in order to authenticate the DCR endpoint. A workaround is to configure the DCR endpoint to use no-authentication. A proxy API can be configured in such a way that Tyk will proxy the DCR request to the Curity Identity Server and a static token used to authenticate the DCR proxy API.

<Warning>
  **Use in secure environments only**

  Make sure that the communication between Tyk and the Curity Identity Server is appropriately secured. The DCR endpoint on the Curity Identity Server if set to `no-authentication` should only be accessible by Tyk.
</Warning>

In the Tyk Dashboard, navigate to **System Management** → **APIs**. Create a new API and give it the name, `dcr`. Make sure the **API Listen Path** is set to `/dcr/`.
Set the Target URL to the DCR endpoint of the Curity Identity Server (Ex. [https://idsvr.example.com/token-service/oauth-registration](https://idsvr.example.com/token-service/oauth-registration)).

In the **Authentication** section, set **Authentication Mode** to `Authentication Token`.

#### Create an example API

In the Tyk Dashboard, navigate to **System Management** → **APIs**. Create a new API and give it the name, ex. `curity-api`:

<img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/3-curity-create-api.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=0abe31b9a4c39743306ba5d0017845f7" alt="Create API" width="3580" height="1897" data-path="img/dcr/curity/3-curity-create-api.png" />

Click **Configure API** and scroll down to the **Authentication** section. Two options to protect an API are outlined below. Choose the options that best fits your needs.

1. **Split Token Approach** - This would be the preferred option and is fully detailed in the [split-token-tyk](https://github.com/sedkis/split-token-tyk) GitHub repository with examples. The basics of this approach is that Tyk proxies the IDP's token endpoint and splits the token to only return the signature of the JWT instead of the complete JWT. The client calling the API will use the signature as an opaque token in the Authorize header. Tyk will then look up the complete JWT using the signature as the key and then add the complete JWT to the Authorization header in the request to the upstream API.

2. **JWT Approach** - This approach means that the IDP issues a JWT to the client (using the dynamically registered client) and the complete JWT is sent in the Authorization header in the API request to Tyk. Although this is absolutely a viable approach there are some potential risks with issuing JWTs to public clients since they could contain Personal Identifiable Information (PII).

<Tabs>
  <Tab title="Split Token Approach">
    The configuration of the Split Token Approach is outlined in the readme in the [GitHub repository](https://github.com/sedkis/split-token-tyk). Make sure to follow the instructions to configure Tyk to handle the Split Token Approach before continuing.

    For the Split Token Approach, configure the Authentication as outlined in the below screenshot for an example API.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/4-split-curity-configure-api.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=1c4636e21609e1fd6f8d209f4f95e200" alt="Configure Split Token API" width="3080" height="1756" data-path="img/dcr/curity/4-split-curity-configure-api.png" />

    #### Create a facade API

    The Tyk Gateway needs to make use of a facade API in order for the API to be published to the Developer Portal when protected with the Split Token Approach.

    In the Tyk Dashboard, navigate to **System Management** → **APIs**. Create a new API and give it the name `facade-oauth-registration`.
    Set the Target URL to `http://httpbin.org`.

    <Warning>
      **NOTE**

      The `path` and `Target URL` for this API doesn't matter and will never be used.
    </Warning>

    In the **Authentication** section, set **Authentication Mode** to `JSON Web Token (JWT)`.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/5-split-facade-curity-configure-api.png.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=2e66ec214eb1738accf892f84af8c07e" alt="Configure Facade API" width="3108" height="1666" data-path="img/dcr/curity/5-split-facade-curity-configure-api.png.png" />

    <Note>
      **Obtaining the JWKS URI**

      The JWKS URI can be obtained via the `.well-known/openid-configuration` endpoint as it's a required value. The below cURL command can get the `"jwks_uri"` value directly.

      ```shell theme={null}
      curl -sS https://idsvr.example.com/oauth/v2/oauth-anonymous/.well-known/openid-configuration | grep -o '"jwks_uri":"[^"]*' | cut -d'"' -f4
      ```
    </Note>

    #### Create and assign a policy

    The Facade API needs a policy in order to be published to the Developer Portal.

    Switch to **System Management** → **Policies**. Click **Add Policy** and select the Facade API created previously (`facade-oauth-registration`) from the list. Then switch to the **Configurations** tab. Name the policy `facade-policy`. Select an expiry and click `Create Policy`.

    Navigate back to **System Management** → **APIs**, click `facade-oauth-registration`, scroll down to the **Authentication** section and select the newly created policy in the **Default Policy** setting. Click `Update` to save the changes.

    #### Create a Key for the DCR proxy

    Navigate to **System Management** → **Keys**, click `Add Key`. Switch to the `Choose API` tab. Select the previously created `DCR` API. Under `2. Configurations` give the key an alias and set an expiry. Then click `Create Key`.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/6-split-dcr-key-curity.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=7d7e6c1a2b7ef12229f2adc3a164051d" alt="DCR API Key" width="1026" height="338" data-path="img/dcr/curity/6-split-dcr-key-curity.png" />

    <Warning>
      **Important**

      Take note of the `Key Hash` and `Key ID` as they will be needed later.
    </Warning>

    #### Publish the API to the Developer Portal

    The API and the Facade API are now configured and can used to publish the API to the Tyk Developer Portal. Navigate to **Portal Management** → **Catalog**, then click **Add New API**. Give it a public name, ex. `OAuth Facade API` and select the `facade-policy`.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/7-split-curity-publish-api.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=7ece9b7b54dd7c83c32eebdc7887c75e" alt="Publish API" width="3008" height="520" data-path="img/dcr/curity/7-split-curity-publish-api.png" />

    Navigate to the **Settings** tab and check the box `Override global settings`. Then scroll down to the **Dynamic Client Registration for portal APIs** section and toggle the switch to enable. Configure as pictured below:

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/8-split-curity-configure-dcr.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=6634f4ae930edd1230b1a50c780c04f6" alt="Configure DCR" width="2994" height="734" data-path="img/dcr/curity/8-split-curity-configure-dcr.png" />

    | Config parameter                  | Description                                                  | Value                                            |
    | --------------------------------- | ------------------------------------------------------------ | ------------------------------------------------ |
    | Providers                         | The IDP vendor                                               | `Other`                                          |
    | Grant Types                       | What grant types the DCR client will support                 | `Client Credentials` and/or `Authorization Code` |
    | Token Endpoint Auth Method        | How the client authenticates against the IDPs token endpoint | `Client Secret - Post`                           |
    | Response Types                    | OAuth 2.0 response types that will be used by the client.    | `Token` and/or `Authorization Code`              |
    | Identity Provider Host            | The Base URL of the IDP                                      | Ex. `https://idsvr.example.com`                  |
    | Client Registration Endpoint      | The proxy DCR endpoint created previously                    | Ex. `https://tyk-gateway/dcr/`                   |
    | Initial Registration Access Token | Token to authenticate the DCR endpoint                       | Add the DCR `Key ID` created in previous step    |

    ### Testing the flow

    Tyk and The Curity Identity Server should now be configured and the flow to register an OAuth client using the Tyk Developer Portal can be tested.

    #### Create an OAuth Client

    Start by registering a developer by navigating to **Portal Management** → **Developers** and add a developer. Then open the Tyk Developer Portal (ex. `http://<host>:3000/portal`) and open the **OAuth clients** page. Start the wizard by clicking **Create first Oauth Client**.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/9-split-curity-create-oauth-client-wizard.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=37e79da6178105cf0067f5f47c1f207e" alt="Create OAuth client wizard" width="2164" height="900" data-path="img/dcr/curity/9-split-curity-create-oauth-client-wizard.png" />

    Select the API previously published named **OAuth Facade API** and then click **Save and continue**.

    Enter a Client name and add at least one redirect URL(separate with `;`), then click **Create**.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/10-split-curity-application-details.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=94ce2c2826dc3299e31158c956caee1f" alt="Application details" width="1658" height="964" data-path="img/dcr/curity/10-split-curity-application-details.png" />

    <Note>
      **OAuth.Tools**

      If using [OAuth.tools](https://oauth.tools/) to obtain a token, make sure to add the appropriate redirect URL. Ex:

      ```
      http://localhost:7777;https://oauth.tools/callback/code;app://oauth.tools/callback/code
      ```

      The web-based version of [OAuth.tools](https://oauth.tools/) using the Code Flow would require `https://oauth.tools/callback/code` and the [App version of OAuth.tools](https://developer.curity.io/oauth-tools) requires `app://oauth.tools/callback/code`.
    </Note>

    Tyk will make a call to the DCR proxy endpoint that will in turn call The Curity Identity Server and its DCR endpoint to register a dynamic client. The details of the dynamically registered client will be displayed.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/11-split-curity-dcr-client-details.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=9219413ec64ad1295c308aab39084b6c" alt="DCR client details" width="1208" height="1020" data-path="img/dcr/curity/11-split-curity-dcr-client-details.png" />

    #### Obtain a token using DCR client

    [OAuth.tools](https://oauth.tools/) can be used to obtain an access token from The Curity Identity Server using the DCR information. This call needs to be made to the token endpoint configured on Tyk to handle the [Split Token Approach](https://github.com/sedkis/split-token-tyk).

    Start an External API Flow. Copy the **Client ID** and the **Client Secret** to the appropriate fields in [OAuth.tools](https://oauth.tools/). Run the flow to obtain a token.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/12-split-curity-oauth-tools.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=4bfb75e5b1e1f377bd5ec7eabf5fb618" alt="OAuth.tools" width="3496" height="2120" data-path="img/dcr/curity/12-split-curity-oauth-tools.png" />

    <Note>
      **Split Token**

      Note that the token returned is the signature of a JWT as this is executing the Split Token Approach.
    </Note>

    #### Use token in request to API

    The token can now be used in an **External API** flow in [OAuth.tools](https://oauth.tools/) to call the API that Tyk is proxying. Tyk will use the signature passed in the Authorization header and lookup the complete JWT in its cache. The complete JWT is then added to the upstream Authorization header as shown in the echo response from Httpbin.org in the below example.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/13-split-curity-external-api-flow.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=0ae3c437de56bb417834ac8be5bd9175" alt="Call API" width="3496" height="2120" data-path="img/dcr/curity/13-split-curity-external-api-flow.png" />
  </Tab>

  <Tab title="JWT Approach">
    For the JWT Approach, configure the Authentication as outlined in the below screenshot.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/4-jwt-curity-configure-api.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=b25b21cfaece031d1ac58677bd37ed9f" alt="Configure API" width="3056" height="1784" data-path="img/dcr/curity/4-jwt-curity-configure-api.png" />

    <Note>
      **Obtaining the JWKS URI**

      The JWKS URI can be obtained via the `.well-known/openid-configuration` endpoint as it's a required value. The below cURL command can get the `"jwks_uri"` value directly.

      ```shell theme={null}
      curl -sS https://idsvr.example.com/oauth/v2/oauth-anonymous/.well-known/openid-configuration | grep -o '"jwks_uri":"[^"]*' | cut -d'"' -f4
      ```
    </Note>

    Click **Save** to save the API.

    #### Create and assign a policy

    Switch to **System Management** → **Policies**. Click **Add Policy** and select the API created previously (`curity-api`) from the list. Then switch to the **Configurations** tab. Name the policy `Curity Policy`. Select an expiry and click `Create Policy`.

    Navigate to **System Management** → **APIs**, click `curity-api`, scroll down to the **Authentication** section and select the newly created policy in the **Default Policy** setting.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/5-jwt-curity-configure-policy.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=d5fad8e65ac74f756acea91f5665a20b" alt="Configure policy" width="2130" height="390" data-path="img/dcr/curity/5-jwt-curity-configure-policy.png" />

    #### Create a Key for the DCR proxy

    Navigate to **System Management** → **Keys**, click `Add Key`. Switch to the `Choose API` tab. Select the previously created `DCR` API. Under `2. Configurations` give the key an alias and set an expiry. Then click `Create Key`.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/6-jwt-dcr-key-curity.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=e31a7ac5b4fecad50b6a665d6df30338" alt="DCR API Key" width="1026" height="338" data-path="img/dcr/curity/6-jwt-dcr-key-curity.png" />

    <Warning>
      **Important**

      Take note of the `Key Hash` and `Key ID` as they will be needed later.
    </Warning>

    #### Publish the API to the Developer Portal

    The API is now configured and can be published to the Tyk Developer Portal. Navigate to **Portal Management** → **Catalog**, then click **Add New API**. Give it a public name, ex. `Curity Demo API` and select the `Curity Policy`.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/7-jwt-curity-publish-api.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=1ece65ac52cfa02167156a0fe63ed053" alt="Publish API" width="2962" height="682" data-path="img/dcr/curity/7-jwt-curity-publish-api.png" />

    Navigate to the **Settings** tab and check the box `Override global settings`. Then scroll down to the **Dynamic Client Registration for portal APIs** section and toggle the switch to enable. Configure as pictured below:

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/8-jwt-curity-configure-dcr.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=b03446d8e4968c349b399a7bf1022084" alt="Configure DCR" width="2994" height="734" data-path="img/dcr/curity/8-jwt-curity-configure-dcr.png" />

    | Config parameter                  | Description                                                  | Value                                            |
    | --------------------------------- | ------------------------------------------------------------ | ------------------------------------------------ |
    | Providers                         | The IDP vendor                                               | `Other`                                          |
    | Grant Types                       | What grant types the DCR client will support                 | `Client Credentials` and/or `Authorization Code` |
    | Token Endpoint Auth Method        | How the client authenticates against the IDPs token endpoint | `Client Secret - Post`                           |
    | Response Types                    | OAuth 2.0 response types that will be used by the client.    | `Token` and/or `Authorization Code`              |
    | Identity Provider Host            | The Base URL of the IDP                                      | Ex. `https://idsvr.example.com`                  |
    | Client Registration Endpoint      | The DCR endpoint created previously                          | Ex. `https://tyk-gateway/dcr/`                   |
    | Initial Registration Access Token | Token to authenticate the DCR endpoint                       | Add the key created in previous step             |

    ### Testing the flow

    Tyk and The Curity Identity Server should now be configured and the flow to register an OAuth client using the Tyk Developer Portal can be tested.

    #### Create an OAuth Client

    Start by registering a developer by navigating to **Portal Management** → **Developers** and add a developer. Then open the Tyk Developer Portal (ex. `http://<host>:3000/portal`) and open the **OAuth clients** page. Start the wizard by clicking **Create first Oauth Client**.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/9-jwt-curity-create-oauth-client-wizard.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=e6fd85307da12c6b9e24523f7866a16a" alt="Create OAuth client wizard" width="2352" height="1204" data-path="img/dcr/curity/9-jwt-curity-create-oauth-client-wizard.png" />

    Select the API previously published named **Curity API** and then click **Save and continue**.

    Enter a Client name and add at least one redirect URL, then click **Create**.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/10-jwt-curity-application-details.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=ea83ea9d036651d7a3ccca307e6ff1d8" alt="Application details" width="1658" height="964" data-path="img/dcr/curity/10-jwt-curity-application-details.png" />

    <Note>
      **OAuth.Tools**

      If using [OAuth.tools](https://oauth.tools/) to obtain a token, make sure to add the appropriate redirect URL. Ex:

      ```
      http://localhost:7777;https://oauth.tools/callback/code;app://oauth.tools/callback/code
      ```

      The web-based version of [OAuth.tools](https://oauth.tools/) using the Code Flow would require `https://oauth.tools/callback/code` and the [App version of OAuth.tools](https://developer.curity.io/oauth-tools) requires `app://oauth.tools/callback/code`.
    </Note>

    Tyk will make a call to The Curity Identity Server and the DCR endpoint to register a dynamic client. The details of the dynamically registered client will be displayed.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/11-jwt-curity-dcr-client-details.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=2c2a3f7fe301b37339fbc71007f2b062" alt="DCR client details" width="1208" height="1020" data-path="img/dcr/curity/11-jwt-curity-dcr-client-details.png" />

    #### Obtain a token using DCR client

    [OAuth.tools](https://oauth.tools/) can be used to obtain an access token from The Curity Identity Server using the DCR information.

    Start a Code or Client Credentials Flow. Copy the **Client ID** and the **Client Secret** to the appropriate fields in [OAuth.tools](https://oauth.tools/). Run the flow to obtain a token (JWT).

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/12-jwt-curity-oauth-tools.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=909ddb87a2a3525d2f628ce6ce8176ed" alt="OAuth.tools" width="3496" height="1994" data-path="img/dcr/curity/12-jwt-curity-oauth-tools.png" />

    #### Use access token in request to API

    The token can now be used in an **External API** flow in [OAuth.tools](https://oauth.tools/) to call the API that Tyk is proxying. Tyk will validate the JWT and allow the call to the upstream API (httpbin.org in this example). The response from the API is displayed in the right panel in [OAuth.tools](https://oauth.tools/). Httpbin.org echoes back what it receives in the request from Tyk. Note that the complete JWT is forwarded.

    <img src="https://mintcdn.com/tyk/gQqrg0xptB2_TmVu/img/dcr/curity/13-jwt-curity-external-api-flow.png?fit=max&auto=format&n=gQqrg0xptB2_TmVu&q=85&s=f9ee034514558ec3035442d2b5e57491" alt="Call API" width="3272" height="1688" data-path="img/dcr/curity/13-jwt-curity-external-api-flow.png" />
  </Tab>
</Tabs>
