6*88I*C4k
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
literal 0
HcmV?d00001
diff --git a/documentation/API_documentation/resources/QoD_overview.PNG b/documentation/API_documentation/resources/QoD_overview.PNG
new file mode 100644
index 0000000000000000000000000000000000000000..006bb2434b00516b3b53fb94fde9fda63ddb1442
GIT binary patch
literal 15142
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
Date: Tue, 15 Nov 2022 13:44:51 +0100
Subject: [PATCH 03/38] Update QoD_API.md
---
documentation/API_documentation/QoD_API.md | 57 ++++++++++++----------
1 file changed, 32 insertions(+), 25 deletions(-)
diff --git a/documentation/API_documentation/QoD_API.md b/documentation/API_documentation/QoD_API.md
index bd0bbab1c5..fad3b36a75 100644
--- a/documentation/API_documentation/QoD_API.md
+++ b/documentation/API_documentation/QoD_API.md
@@ -8,7 +8,7 @@ Industrial (IoT), VR/Gaming, broadcasting, autonomous driving and many others sc
The QoD API offers the application developers the capability to request for stable latency (reduced jitter) or throughput for a specified App-Flow between User Equipment (application clients) and Application Servers (backend services). The developer has a pre-defined set of QoS\_Profiles which they could choose from depending on their latency or throughput requirements.
-
+
## 2\. Quick Start
@@ -18,7 +18,7 @@ The deletion of a requested session can be triggered by the user or can be trigg
Before starting to use the API, the developer needs to know about the below specified details:
**Base-URL**
-The RESTful Stable Throughput API endpoint, for example [**https://telekom-api.developer.telekom.com/5g-qod**](https://telekom-api.developer.telekom.com/5g-qod)
+The RESTful QoD API endpoint
**Authentication**
Configure security access keys such as OAuth 2.0 client credentials to be used by Client applications which will invoke the QoD API.
@@ -29,6 +29,9 @@ Define latency or throughput requirements of the application and identify QoS pr
**App-Flow**
Describes the precise flow the developer wants to prioritize and have stable latency or throughput for. This flow is described using source and destination IP addresses and ports/port-ranges.
+**Duration**
+Define the number of seconds for which the QoD session should be created. This parameter is optional and if not specified, the session is either deleted on user request or if default expiration limit has been reached (24 hours in reference implementation).
+
**Notification URL and token**
Developers have a chance to specify callback URL on which notifications (eg. session termination) regarding the session can be received from the service provider. This is an optional parameter.
@@ -53,18 +56,19 @@ Based on the API, QoS sessions can be created, queried, and deleted. Once an off
* A specified App-Flow is prioritized to ensure stable latency or throughput for that flow
* The prioritized App-Flow is described by providing information such as source & destination IP address and port/port-ranges
+* The developer can optionally specify the duration for which they need the prioritized App-flow
* Stable latency or throughput is requested by selecting from the list of QoS profiles made available by the service provider (e.g. QOS_E) to map latency requirements
* The developer can optionally also specify callback URL on which notifications for the session can be sent
Following diagram shows the interaction between different components
-
+
The below table shows sample QoS profiles and are subject to service provider customizations.
This sample is taken from the agreed sample (example) set from the Camara-project [2].
-| **QoD latency profile** | **Details** |
+| **QoD profile** | **Details** |
| ------------------- | ------- |
| QOS\_E | Enhanced communication class with with stable latency under congestion (e.g. throughput up-to 2Mbps) |
| QOS\_S | Small class of throughput profile - for example DL (Downlink) up-to 10Mbps |
@@ -86,19 +90,19 @@ Following table defines API endpoints of exposed REST based for QoD management o
| **Create QoD Session** |
| -------------------------- |
-| **HTTP Request**
POST \/qod-api/v0/sessions
**Query Parameters**
No query parameters are defined.
**Path Parameters**
No path parameters are defined.
**Request Body Parameters**
**duration (optional)**: Session duration in seconds. Maximal value of 24 hours is used if not set.
**ueAddr:** The IPv4 address of the user equipment. It can contain a single IP address or a range, using a mask.
Format: \[/\]
- address : an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.
- address/mask : an IP number as above with a mask width of the form 1.2.3.4/24.
*In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.*
**asAddr:** The IPv4 address of the application server. It can contain a single IP address or a range, using a mask.
**uePort (optional):** A list of single ports or port ranges on the user equipment.
Ports may be specified as <\{port\|port\-port\}\[\,ports\[\,\.\.\.\]\]\>\.
The '-' notation specifies a range of ports (including boundaries).
Example: '5010-5020,5021,5022'
**asPort (optional):** A list of single ports or port ranges on the application server.
**protocolIn:** The used transport protocol for the uplink.
TCP - TCP protocol
UDP - UDP protocol
ANY - all protocols
**protocolOut :** The used transport protocol for the downlink.
TCP - TCP protocol
UDP - UDP protocol
ANY - all protocols
**qos:** Qualifier for the requested latency/throughput profile.
LOW\_LATENCY - to request the stable latency
**notificationUri (optional):** URI of the callback receiver. Allows asynchronous delivery of session related events .
Example: '[https://application-server.com/notifications](https://application-server.com/notifications)'
**notificationAuthToken (optional):** Authentification token for callback API.
Example: 'c8974e592c2fa383d4a3960714'
**Response**
**201: Session created**
Response body:
**duration:** Session duration in seconds.
**ueAddr:** The ipv4 address of the user equipment.
**asAddr:** The ipv4 address of the application server.
**uePort (optional):** The requested port(s) on the user equipment.
**asPort (optional):** The requested port(s) on the user equipment.
**protocolIn:** The used transport protocol for the uplink.
**protocolOut:** The used transport protocol for the downlink.
**qos:** Qualifier of the requested throughput profile.
**notificationUri (optional):** URI of the callback receiver.
**notificationAuthToken (optional):** Authentication token for callback API.
**id:** Session ID in UUID format.
Example: 123e4567-e89b-12d3-a456-426614174000
**startedAt:** Timestamp of session start, in seconds since unix epoch.
Example: 1639479600
**expiresAt**: Timestamp of session expiration if the session was not deleted, in seconds since unix epoch.
**400:** **Invalid input.**
**401:** **Un-authorized, missing or incorrect authentication.**
**405:** **Invalid input**
**500:** **Session not created**
**503:** **Service temporarily unavailable** |
+| **HTTP Request**
POST \/qod-api/v0/sessions
**Query Parameters**
No query parameters are defined.
**Path Parameters**
No path parameters are defined.
**Request Body Parameters**
**duration (optional)**: Session duration in seconds. Maximal value of 24 hours is used if not set.
**ueAddr:** The IPv4 address of the user equipment. It can contain a single IP address or a range, using a mask.
Format: \[/\]
- address : an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.
- address/mask : an IP number as above with a mask width of the form 1.2.3.4/24.
*In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.*
**asAddr:** The IPv4 address of the application server. It can contain a single IP address or a range, using a mask.
**uePort (optional):** A list of single ports or port ranges on the user equipment.
Ports may be specified as <\{port\|port\-port\}\[\,ports\[\,\.\.\.\]\]\>\.
The '-' notation specifies a range of ports (including boundaries).
Example: '5010-5020,5021,5022'
**asPort (optional):** A list of single ports or port ranges on the application server.
**qos:** Qualifier for the requested latency/throughput profile.
LOW\_LATENCY - to request the stable latency
**notificationUri (optional):** URI of the callback receiver. Allows asynchronous delivery of session related events .
Example: '[https://application-server.com/notifications](https://application-server.com/notifications)'
**notificationAuthToken (optional):** Authentification token for callback API.
Example: 'c8974e592c2fa383d4a3960714'
**Response**
**201: Session created**
Response body:
**ueAddr:** The ipv4 address of the user equipment.
**asAddr:** The ipv4 address of the application server.
**uePort (optional):** The requested port(s) on the user equipment.
**asPort (optional):** The requested port(s) on the user equipment.
**qos:** Qualifier of the requested throughput profile.
**notificationUri (optional):** URI of the callback receiver.
**notificationAuthToken (optional):** Authentication token for callback API.
**id:** Session ID in UUID format.
Example: 123e4567-e89b-12d3-a456-426614174000
**startedAt:** Timestamp of session start, in seconds since unix epoch.
Example: 1639479600
**expiresAt**: Timestamp of session expiration if the session was not deleted, in seconds since unix epoch.
**400:** **Invalid input.**
**401:** **Un-authorized, missing or incorrect authentication.**
**405:** **Invalid input**
**500:** **Session not created**
**503:** **Service temporarily unavailable** |
-#### QoD Query for Latency QoS Session
+#### QoD Query for QoS Session
-| **Quering QoS Session Latency information** |
+| **Quering QoS Session information** |
| --------------------------------------- |
-| **HTTP Request**
GET\/qod-latency-api/v0/sessions/{sessionId}
**Query Parameters**
No query parameters are defined.
**Path Parameters**
sessionId: Session id that was obtained from the Create QoS Session operation.
**Request Body Parameters**
No request body parameters are defined.
**Response**
**200: Session information returned.**
Response body:
**duration:** Session duration in seconds.
**ueAddr:** The ipv4 address of the user equipment.
**asAddr:** The ipv4 address of the application server.
**uePort (optional):** The requested port(s) on the user equipment.
**asPort (optional):** The requested port(s) on the user equipment.
**protocolIn:** The used transport protocol for the uplink.
**protocolOut:** The used transport protocol for the downlink.
**qos:** Qualifier of the requested Latency profile.
**notificationUri (optional):** URI of the callback receiver.
**notificationAuthToken (optional):** Authentication token for callback API.
**id:** Session ID in UUID format.
**startedAt:** Timestamp of session start in seconds since unix epoch.
**expiresAt:** Timestamp of session expiration if the session was not deleted in seconds since unix epoch.
**401:** Un-authorised, missing or incorrect authentication.
**404:** Session not found.
**503:** Service temporarily unavailable. |
+| **HTTP Request**
GET\/qod-latency-api/v0/sessions/{sessionId}
**Query Parameters**
No query parameters are defined.
**Path Parameters**
sessionId: Session id that was obtained from the Create QoS Session operation.
**Request Body Parameters**
No request body parameters are defined.
**Response**
**200: Session information returned.**
Response body:
**ueAddr:** The ipv4 address of the user equipment.
**asAddr:** The ipv4 address of the application server.
**uePort (optional):** The requested port(s) on the user equipment.
**asPort (optional):** The requested port(s) on the user equipment.
**qos:** Qualifier of the requested Latency profile.
**notificationUri (optional):** URI of the callback receiver.
**notificationAuthToken (optional):** Authentication token for callback API.
**id:** Session ID in UUID format.
**startedAt:** Timestamp of session start in seconds since unix epoch.
**expiresAt:** Timestamp of session expiration if the session was not deleted in seconds since unix epoch.
**401:** Un-authorised, missing or incorrect authentication.
**404:** Session not found.
**503:** Service temporarily unavailable. |
-#### QoD Delete Latency QoS Session
+#### QoD Delete QoS Session
-| **Deleting QoS Latency session** |
+| **Deleting QoS session** |
| ---------------------------- |
| **HTTP Request**
DELETE\/qod-latency-api/v0/sessions/{sessionId}
**Query Parameters**
No query parameters are defined.
**Path Parameters**
sessionId: Session ID that need to terminated.
**Request Body Parameters**
No request body parameters are defined.
**Response**
**204:** Session deleted
**401:** Un-authorized, missing or incorrect authentication.
**404:** Session not found |
@@ -112,15 +116,18 @@ Following table provides an overview of common error names, codes and messages a
| No | Error Name | Error Code | Error Message |
| --- | ---------- | ---------- | ------------- |
-| 1 | Invalid port(s) | 400 | "Ports specification not valid |
-| 2 | Invalid protocol | 400 | "Validation failed for parameter: protocol" |
-| 3 | Invalid QoS profile | 400 | "Validation failed for parameter: QoS-profile" |
-| 4 | Invalid IP address (format) | 400 | "Validation failed for parameter: IP-addr" |
-| 5 | Invalid duration | 400 | "Validation failed for parameter: Session duration" |
-| 6 | Unauthorized | 401 | "Un-authorized to invoke operation" |
-| 7 | Forbidden | 403 | "Forbidden to invoke operation" |
-| 8 | Session with same parameters already exists | 409 | "Found session \ already active until \" |
-| 9 | Service unavailable | 503 | “Internal error due to requrired telco service unvailability" |
+|1 |400 | INVALID_INPUT | "Expected property is missing: ueId.msisdn" |
+|2 |400 | INVALID_INPUT | "Expected property is missing: ueId.ipv4addr" |
+|3 |400 | INVALID_INPUT | "Expected property is missing: ueId.ipv4addr or ueId.ipv6addr" |
+|4 |400 | INVALID_INPUT | "Expected property is missing: uePorts" |
+|5 |400 | INVALID_INPUT | "Expected property is missing: qos" |
+|6 |400 | INVALID_INPUT | "Ranges not allowed: uePorts" |
+|7 |401 | UNAUTHORIZED | "Authorization to invoke operation" |
+|8 |403 | FORBIDDEN | "Operation not allowed" |
+|9 |404 | NOT_FOUND | "Session Id does not exist" |
+|10 |409 | CONFLICT | "Another session is created for the same UE" |
+|11 |500 | INTERNAL | "Session could not be created" |
+|12 |503 | SERVICE_UNAVAILABLE | "Service unavailable" |
### 4.5 Policies
@@ -130,20 +137,20 @@ N/A
Snippet 1, elaborates REST based API call with "*curl"* to create a QoS session for sample streaming service with following parameters:
-* Latency QoS session with 1H duration and QoS-profile "LOW\_Latency" mapping,
-* App-Flow is specified for UDP protocol with UE-Terminal IP address (ueAddr=10.0.0.1), Application server network (asAddr=54.204.25.0/28) and Port number (asPorts=33001).
+* Latency QoS session with QoS-profile "QOS_E" mapping,
+* App-Flow is specified for UE-Terminal IP address (ueAddr=10.0.0.1), Application server network (asAddr=54.204.25.0/28) and Port number (asPorts=33001).
Please note, the credentials for API authentication purposes need to be adjusted based on target security system configuration.
-| Snippet 1. Create QoS session to manage latency |
+| Snippet 1. Create QoS session |
| ----------------------------------------------- |
-| curl -X 'POST' `https://sample-base-url/qod-latency-api/v0/sessions`
-H 'accept: application/json'
-H 'Content-Type: application/json'
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbG...."
-d '{
"duration": 3600,
"ueAddr": "10.0.0.1",
"asAddr": "54.204.25.0/28",
"asPorts": "33001",
"protocolOut": "UDP",
"qos": "LOW\_Latency",
"notificationUri": `https://your-callback-server.com/notifications`,
"notificationAuthToken": "c8974e592c2fa383d4a3960714"
}' |
+| curl -X 'POST' `https://sample-base-url/qod-api/v0/sessions`
-H 'accept: application/json'
-H 'Content-Type: application/json'
-H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbG...."
-d '{
"ueAddr": "10.0.0.1",
"asAddr": "54.204.25.0/28",
"asPorts": "33001",
"qos": "QOS_E",
"notificationUri": `https://your-callback-server.com/notifications`,
"notificationAuthToken": "c8974e592c2fa383d4a3960714"
}' |
-Snippet 2, elaborates sample QoS notification "SESSION\_TERMINATION" message distributed from QoD backend to client callback function.
+Snippet 2, elaborates sample QoS notification "SESSION_TERMINATION" message distributed from QoD backend to client callback function.
| Snippet 2. Sample QoS session notification |
| ------------------------------------------ |
-| {
"sessionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "event": "SESSION\_TERMINATED"
} |
+| {
"sessionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6", "event": "SESSION_TERMINATED"
} |
### 4.7 FAQ's
From 769972267df3cdcf1059b326fa8cfaf6a2d2b61e Mon Sep 17 00:00:00 2001
From: Shilpa Padgaonkar <77152136+shilpa-padgaonkar@users.noreply.github.com>
Date: Tue, 15 Nov 2022 17:17:13 +0100
Subject: [PATCH 04/38] Update QoD_API.md
---
documentation/API_documentation/QoD_API.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/documentation/API_documentation/QoD_API.md b/documentation/API_documentation/QoD_API.md
index fad3b36a75..5777e7d72c 100644
--- a/documentation/API_documentation/QoD_API.md
+++ b/documentation/API_documentation/QoD_API.md
@@ -70,10 +70,10 @@ This sample is taken from the agreed sample (example) set from the Camara-projec
| **QoD profile** | **Details** |
| ------------------- | ------- |
-| QOS\_E | Enhanced communication class with with stable latency under congestion (e.g. throughput up-to 2Mbps) |
-| QOS\_S | Small class of throughput profile - for example DL (Downlink) up-to 10Mbps |
-| QOS\_M | Medium class of throughput profile - for example DL (Downlink) up-to 30Mbps |
-| QOS\_L | Large class of throughput profile - for example DL (Downlink) up-to 100Mbps |
+| QOS_E | Enhanced communication class with with stable latency under congestion (e.g. throughput up-to 2Mbps) |
+| QOS_S | Small class of throughput profile - for example DL (Downlink) up-to 10Mbps |
+| QOS_M | Medium class of throughput profile - for example DL (Downlink) up-to 30Mbps |
+| QOS_L | Large class of throughput profile - for example DL (Downlink) up-to 100Mbps |
### 4.3 Endpoint Definitions
From 557243557853121398519f6f3199f4b7819f5cd4 Mon Sep 17 00:00:00 2001
From: Shilpa Padgaonkar <77152136+shilpa-padgaonkar@users.noreply.github.com>
Date: Tue, 15 Nov 2022 19:35:57 +0100
Subject: [PATCH 05/38] Update QoD_API.md
---
documentation/API_documentation/QoD_API.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/documentation/API_documentation/QoD_API.md b/documentation/API_documentation/QoD_API.md
index 5777e7d72c..988ffa0946 100644
--- a/documentation/API_documentation/QoD_API.md
+++ b/documentation/API_documentation/QoD_API.md
@@ -90,7 +90,7 @@ Following table defines API endpoints of exposed REST based for QoD management o
| **Create QoD Session** |
| -------------------------- |
-| **HTTP Request**
POST \/qod-api/v0/sessions
**Query Parameters**
No query parameters are defined.
**Path Parameters**
No path parameters are defined.
**Request Body Parameters**
**duration (optional)**: Session duration in seconds. Maximal value of 24 hours is used if not set.
**ueAddr:** The IPv4 address of the user equipment. It can contain a single IP address or a range, using a mask.
Format: \[/\]
- address : an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.
- address/mask : an IP number as above with a mask width of the form 1.2.3.4/24.
*In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.*
**asAddr:** The IPv4 address of the application server. It can contain a single IP address or a range, using a mask.
**uePort (optional):** A list of single ports or port ranges on the user equipment.
Ports may be specified as <\{port\|port\-port\}\[\,ports\[\,\.\.\.\]\]\>\.
The '-' notation specifies a range of ports (including boundaries).
Example: '5010-5020,5021,5022'
**asPort (optional):** A list of single ports or port ranges on the application server.
**qos:** Qualifier for the requested latency/throughput profile.
LOW\_LATENCY - to request the stable latency
**notificationUri (optional):** URI of the callback receiver. Allows asynchronous delivery of session related events .
Example: '[https://application-server.com/notifications](https://application-server.com/notifications)'
**notificationAuthToken (optional):** Authentification token for callback API.
Example: 'c8974e592c2fa383d4a3960714'
**Response**
**201: Session created**
Response body:
**ueAddr:** The ipv4 address of the user equipment.
**asAddr:** The ipv4 address of the application server.
**uePort (optional):** The requested port(s) on the user equipment.
**asPort (optional):** The requested port(s) on the user equipment.
**qos:** Qualifier of the requested throughput profile.
**notificationUri (optional):** URI of the callback receiver.
**notificationAuthToken (optional):** Authentication token for callback API.
**id:** Session ID in UUID format.
Example: 123e4567-e89b-12d3-a456-426614174000
**startedAt:** Timestamp of session start, in seconds since unix epoch.
Example: 1639479600
**expiresAt**: Timestamp of session expiration if the session was not deleted, in seconds since unix epoch.
**400:** **Invalid input.**
**401:** **Un-authorized, missing or incorrect authentication.**
**405:** **Invalid input**
**500:** **Session not created**
**503:** **Service temporarily unavailable** |
+| **HTTP Request**
POST \/qod-api/v0/sessions
**Query Parameters**
No query parameters are defined.
**Path Parameters**
No path parameters are defined.
**Request Body Parameters**
**duration (optional)**: Session duration in seconds. Maximal value of 24 hours is used if not set.
**ueAddr:** The IPv4 address of the user equipment. It can contain a single IP address or a range, using a mask.
Format: \[/\]
- address : an IPv4 number in dotted-quad form 1.2.3.4. Only this exact IP number will match the flow control rule.
- address/mask : an IP number as above with a mask width of the form 1.2.3.4/24.
*In this case, all IP numbers from 1.2.3.0 to 1.2.3.255 will match. The bit width MUST be valid for the IP version.*
**asAddr:** The IPv4 address of the application server. It can contain a single IP address or a range, using a mask.
**uePort (optional):** A list of single ports or port ranges on the user equipment.
Ports may be specified as <\{port\|port\-port\}\[\,ports\[\,\.\.\.\]\]\>\.
The '-' notation specifies a range of ports (including boundaries).
Example: '5010-5020,5021,5022'
**asPort (optional):** A list of single ports or port ranges on the application server.
**qos:** Qualifier for the requested latency/throughput profile.
LOW\_LATENCY - to request the stable latency
**notificationUri (optional):** URI of the callback receiver. Allows asynchronous delivery of session related events .
Example: '[https://application-server.com/notifications](https://application-server.com/notifications)'
**notificationAuthToken (optional):** Authentification token for callback API.
Example: 'c8974e592c2fa383d4a3960714'
**Response**
**201: Session created**
Response body:
**duration:** Session duration in seconds.
**ueAddr:** The ipv4 address of the user equipment.
**asAddr:** The ipv4 address of the application server.
**uePort (optional):** The requested port(s) on the user equipment.
**asPort (optional):** The requested port(s) on the user equipment.
**qos:** Qualifier of the requested throughput profile.
**notificationUri (optional):** URI of the callback receiver.
**notificationAuthToken (optional):** Authentication token for callback API.
**id:** Session ID in UUID format.
Example: 123e4567-e89b-12d3-a456-426614174000
**startedAt:** Timestamp of session start, in seconds since unix epoch.
Example: 1639479600
**expiresAt**: Timestamp of session expiration if the session was not deleted, in seconds since unix epoch.
**400:** **Invalid input.**
**401:** **Un-authorized, missing or incorrect authentication.**
**405:** **Invalid input**
**500:** **Session not created**
**503:** **Service temporarily unavailable** |
#### QoD Query for QoS Session
From 0b6addd4e27344501f659a6d3dfd80b29d08ead2 Mon Sep 17 00:00:00 2001
From: Shilpa Padgaonkar <77152136+shilpa-padgaonkar@users.noreply.github.com>
Date: Tue, 15 Nov 2022 19:39:10 +0100
Subject: [PATCH 06/38] Add files via upload
---
.../resources/QoD_overview.PNG | Bin 15142 -> 14712 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/documentation/API_documentation/resources/QoD_overview.PNG b/documentation/API_documentation/resources/QoD_overview.PNG
index 006bb2434b00516b3b53fb94fde9fda63ddb1442..b066939cf94a4e752dda4098e0096995c4b885a3 100644
GIT binary patch
literal 14712
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