Commit Graph

33020 Commits

Author SHA1 Message Date
Calvin Peyron
fe56b68514 Remove trailing spaces
Signed-off-by: Calvin Peyron <calvin.peyron@open-cells.com>
2026-07-06 11:54:57 +02:00
Calvin Peyron
ad304b62d6 With SC-FDMA, scheduler in uplink needs to schedule N_PRB=2^x3^y5^z
Signed-off-by: Calvin Peyron <calvin.peyron@open-cells.com>
2026-07-06 11:54:50 +02:00
Robert Schmidt
0dab3bb6a1 Merge remote-tracking branch 'origin/integration_2026_w27' into develop
Integration: 2026.w27

- #227 Cleanup: NGAP reconnection debug log
- #233 fix: proper SA/NSA mode detection
- #239 Fix function init_context_sss_nr()
- #256 ci: Move test pcaps to github
- #244 fix(zmq): Fix clang compiler warnings in zmq radio
- #220 fix(NR_UE): gate half-frame PBCH mirror on caller-provided ssb_period
- #257 [FHI72] Update the xran K release tag due to the PR https://github.com/openairinterface/o-du-phy/pull/3
- #192 DLSIM test for type0 PDSCH frequency allocation
- #238 minorfix(imscope): moving alignas from struct type to atomic variable
- #255 ci: Speedup unit test dockerfile
- #217 NAS: refactor Identity Request handler and enforce spec-compliant security checks
- #243 Clean up openair0_device, remove eth_params usage in L2/L3
- #204 Implementation of the E3 Agent for dApps and E3AP (no service models)
- #258 NR UE: add assert for reserved bits per symbol not multiple of Qm
- #253 CI: Collect amariue logs, update eNB configs
- #203 CI: Add label check and signature verification in GitHub Actions

Closes: #219
Closes: #82
2026.w27
2026-07-04 17:24:07 +02:00
Robert Schmidt
ecb98e575f Merge remote-tracking branch 'origin/ci-duranta-fixes' into integration_2026_w27
CI: Add label check and signature verification in GitHub Actions (#203)

- Update contributing guidelines for signing of commits
- Check for unsigned commits in the github actions workflow
- Skip CI when no mandatory CI label present on the PR
- Always remove retrigger-ci label when present - Like post-always or
  post-cleanup

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
Reviewed-by: Sagar Arora <sagar.arora@openairinterface.org>
Reviewed-by: Shubhika Garg <shubhika.garg@openairinterface.org>
2026-07-03 15:56:17 +02:00
Shubhika Garg
f63c444bb7 ci: ensure maintainer approval job is evaluated correctly on push events
- The require-maintainer-approval job was being skipped on push event
    when upstream jobs (verify-signed-commits and check-labels) were skipped,
    even though detect-changes job successfully marked protected files as changed.
  - GitHub Actions may skip dependent jobs due to upstream skipped states before
    evaluating custom conditions.
  - Adding always() ensures the job condition is evaluated regardless of
    the status of upstream jobs, while still enforcing the rule that the job
    only runs when protected_files_changed == true.

Signed-off-by: Shubhika Garg <shubhika.garg@openairinterface.org>
2026-07-03 13:19:58 +02:00
Robert Schmidt
1cbfef20f4 Merge remote-tracking branch 'origin/ci-various-adjustments' into integration_2026_w27
CI: Collect amariue logs, update eNB configs (#253)

- collect amarisoft UE logs
- improve stability in LTE pipelines with prach_dtx_threshold

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-07-03 08:42:50 +02:00
Jaroslava Fiedlerova
2828e63dd8 CI: Remove OAI-CN5G-COTS-UE-Test from parent pipeline
The executor machine for this test is currently unavailable. The test
will be re-enabled once the replacement machine is configured.

Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-07-03 08:32:51 +02:00
Jaroslava Fiedlerova
384186b0a6 CI: Configuration file adjustment for LTE-FDD-LTEBOX-Container
Try to reduce number of false RA attempts on eNB

Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-07-03 08:32:51 +02:00
Jaroslava Fiedlerova
aa6f141498 CI: Configuration file adjustment for LTE-TDD-LTEBOX-Container
Try to reduce number of false RA attempts on eNB

Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-07-03 08:32:51 +02:00
Jaroslava Fiedlerova
32847ee143 CI: Enable UE log collection in RAN-SA-FHI72-MPLANE-CN5G
Signed-off-by: Jaroslava Fiedlerova <jaroslava.fiedlerova@openairinterface.org>
2026-07-03 08:32:51 +02:00
Robert Schmidt
b1c7bdf99b Merge remote-tracking branch 'alexjiao2021/assert_uci_on_pusch' into integration_2026_w27
NR UE: add assert for reserved bits per symbol not multiple of Qm (#258)

map_overlapped_ack() divides num_reserved_bits_on_sym by Qm to get the
number of reserved REs. Add assertion to catch cases where the reserved
bit count is not a multiple of Qm, which would indicate a bug in the
upstream UCI-on-PUSCH mapping.

This is a follow-up of comment after PR #221

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-07-02 18:40:17 +02:00
Robert Schmidt
69a017f57b Merge remote-tracking branch 'Thecave3/e3-agent-framework' into integration_2026_w27
Implementation of the E3 Agent for dApps and E3AP (no service models) (#204)

These changes introduce an E3 Agent for dApps in the OAI codebase. dApps
are real-time microservices designed to operate within the O-RAN
ecosystem, enabling sub-10 ms Artificial Intelligence (AI) routines in
the Radio Access Network (RAN).

The E3 Agent enables spectrum sensing, frequency-domain signal logging,
and dynamic PRB (Physical Resource Block) policies through IPC/ZMQ
communication with dApps or xApps.

The dApps are designed for co-location with the CU/DU, where it can
interact directly with user-plane data to enable different network
management scenarios such as optimizing network slicing, scheduling, and
resource management.  A python library for the creation of the dApps is
available here [1].

Additional information about dApps:

- Paper on the dApp architecture [2]
- dApp framework presentation [3]
- Tutorial on dApp deployment on OAI [4]

As agreed in the original MR [5], this PR includes only the agent lifecycle,
configuration parsing, build plumbing, and the nr-softmodem init/destroy
hook.

It registers zero service models, so it builds and runs as an idle
agent. Concrete service models (e.g. spectrum sensing) and the PHY/MAC
hooks that drive them follow in later PRs.

Opt-in and dependencies

- Gated behind the E3_AGENT CMake option (OFF by default) / the
  --build-e3 build flag.  The default build is unaffected — e3ap is only
  compiled and linked into nr-softmodem when E3_AGENT=ON.

- When enabled, requires the external libe3 library [6] (vendor-neutral
  E3AP C++ lib), discovered via pkg_check_modules(CLIBE3 REQUIRED
  libe3). It is not vendored.

  Install libe3 (Debian/Ubuntu):

      git clone https://github.com/wineslab/libe3 && cd libe3
      ./build_libe3 -I      # installs deps: build-essential cmake pkg-config libzmq3-dev asn1c nlohmann-json3-dev libsctp-dev ...
      ./build_libe3 --install      # release build + installation

Build & test

Tested in RFsim: the gNB initializes the E3 agent, opens its setup
socket (/tmp/dapps/setup), registers zero service models, and runs
without crashing.  Configuration

The agent reads an optional E3Configuration section from the gNB config
file (parsed only when E3_AGENT=ON). If absent, it falls back to
built-in defaults (posix/ipc).

    E3Configuration : {
        link = "zmq";        # posix | zmq
        transport = "ipc";   # tcp | sctp | ipc
    };

The same parameters can be overridden on the command line (no
config-file edit required):

    sudo ./nr-softmodem -O <gnb.conf> ... --E3Configuration.link zmq --E3Configuration.transport ipc

Validated link/transport combinations: (zmq,ipc) (zmq,tcp) (posix,tcp)
(posix,sctp) (posix,ipc).

Notes

- I have added a new log component E3AP specific for the ops performed
  by the E3 Agent.
- This PR ships no gNB config file; the E3Configuration block / CLI
  override above is the documented way to enable the agent. Example
  configs follow in the next PRs.

[1] https://pypi.org/project/dapps/
[2] https://arxiv.org/pdf/2501.16502
[3] https://openrangym.com/o-ran-frameworks/dapps
[4] https://openrangym.com/tutorials/dapps-oai
[5] https://gitlab.eurecom.fr/oai/openairinterface5g/-/merge_requests/3361
[6] https://github.com/wineslab/libe3

Reviewed-by: Teodora Vladić <teodora.vladic@openairinterface.org>
Reviewed-by: Sagar Arora <sagar.arora@openairinterface.org>
Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-07-02 18:35:23 +02:00
Andrea Lacava
602d729d43 e3ap: add README with dApp overview, prerequisites, and startup guide
Signed-off-by: Andrea Lacava <thecave003@gmail.com>
2026-07-02 09:55:05 -04:00
Andrea Lacava
29c20ac232 e3ap: add E3 agent lifecycle and nr-softmodem init hook
Add the E3 agent lifecycle on top of libe3: configuration mapping,
agent creation/init/start, dApp report and status-change handlers,
and xApp control and subscription-query helpers. Wire e3_init() and
e3_destroy() into nr-softmodem under the E3_AGENT guard.

The agent registers no concrete service models: service models (such
as spectrum sensing) live in their own modules and register
themselves, keeping the framework decoupled from any specific use
case.

Signed-off-by: Andrea Lacava <thecave003@gmail.com>
2026-07-02 09:53:52 -04:00
Andrea Lacava
0a885dcf5a e3ap: add E3 agent configuration and CMake target
Add the E3AP CMake target, which links the external libe3 library
discovered via pkg-config, and the E3Configuration parser that reads
the link and transport selection from the gNB configuration file and
validates the supported link/transport combinations.

libe3 is kept external and is only required when E3_AGENT is enabled.

Signed-off-by: Andrea Lacava <thecave003@gmail.com>
2026-07-02 09:53:16 -04:00
Andrea Lacava
447ff67aba build: add opt-in E3_AGENT build option for the O-RAN E3 agent
Introduce the E3_AGENT CMake option (default OFF) and the matching
--build-e3 flag in build_oai so the E3 agent for O-RAN dApps can be
compiled opt-in. Gate the E3AP subdirectory and the nr-softmodem
linkage behind the option, and register an E3AP log component
together with its legacy T-tracer message IDs.

The E3 interface (nGRG) lets the gNB exchange real-time reports and
controls with external dApps. Keeping it behind a build flag leaves
the default CI build unchanged and avoids pulling in the external
libe3 dependency unless the agent is explicitly requested.

Signed-off-by: Andrea Lacava <thecave003@gmail.com>
2026-07-02 09:51:58 -04:00
Robert Schmidt
465b57d8c5 Merge remote-tracking branch 'rorsc/more-cleanup-split8-api' into integration_2026_w27
Clean up openair0_device, remove eth_params usage in L2/L3 (#243)

This PR has three goals

- Remove the usage of eth_params in L2/L3 code, and replace with
  tailored data structures for IP connectivity where necessary
- Remove many of the includes of common_lib.h where possible
- Slightly clean up openair0_device and in particular move fields to
  eth_state_t where appropriate

Reviewed-by: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
Reviewed-by: Teodora Vladić <teodora.vladic@openairinterface.org>
2026-07-02 14:55:07 +02:00
Robert Schmidt
35cf1c91bb Merge remote-tracking branch 'GuidoCasati/issue-963' into integration_2026_w27
NAS: refactor Identity Request handler and enforce spec-compliant security checks (#217)

Align UE Identity Request handling with TS 24.501 by checking the NAS
security header and rejecting unprotected non-SUCI requests.

Also, refactor Identity Response identity selection based on the
requested identity types, add to a helper and handle unavailable
identities in the UE context.

Closes: #82
Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
Reviewed-By: Rakesh Mundlamuri <rakesh.mundlamuri@openairinterface.org
2026-07-02 14:54:04 +02:00
Robert Schmidt
b58631ce79 Merge remote-tracking branch 'bpodrygajlo/ut-speedup' into integration_2026_w27
ci: Speedup unit test dockerfile (#255)

Use docker cache, reduce the number of installed apt packages and reduce
compilation scope.

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-07-02 14:53:15 +02:00
Robert Schmidt
11cf337b6a Merge remote-tracking branch 'turkeryilmaz/minorfix_imscope_psABInote' into integration_2026_w27
minorfix(imscope): moving alignas from struct type to atomic variable (#238)

I was receiving the note below when I built with "imscope_record", so
this is the simplest PR to avoid the psABI note while signing the new
individual CLA.

    [194/11156] Building CXX object openair1/PHY/TOOLS/imscope/CMakeFiles/imscope_record.dir/imscope_record.cpp.o
    In file included from /home/turker/Documents/OpenAirInterface/26w25/openair1/PHY/defs_nr_UE.h:12,
    from /home/turker/Documents/OpenAirInterface/26w25/openair1/PHY/TOOLS/imscope/imscope_internal.h:12,
    from /home/turker/Documents/OpenAirInterface/26w25/openair1/PHY/TOOLS/imscope/imscope_record.cpp:5:
    /usr/include/c++/13/atomic: In member function ‘_Tp std::atomic<_Tp>::exchange(_Tp, std::memory_order) [with _Tp = ImScopeDumpInstruction]’:
    /usr/include/c++/13/atomic:311:7: note: the ABI for passing parameters with 64-byte alignment has changed in GCC 4.6
    311 | exchange(_Tp __i, memory_order __m = memory_order_seq_cst) noexcept
    | ^~~~~~~~

Reviewed-by: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
2026-07-02 13:34:58 +02:00
Robert Schmidt
c5d1895540 Merge remote-tracking branch 'origin/dlsim_type0_test' into integration_2026_w27
DLSIM test for type0 PDSCH frequency allocation (#192)

Adding the test requires some changes in gNB L2 structures but it
doesn't implement the full support of type0 allocation in L2

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-07-02 13:34:58 +02:00
Robert Schmidt
58eebfe1d8 Merge remote-tracking branch 'origin/large-du-profile-k' into integration_2026_w27
[FHI72] Update the xran K release tag due to the PR openairinterface/o-du-phy#3 (#257)

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-07-02 13:34:42 +02:00
Turker Yilmaz
3dbb22cad8 minorfix(imscope): moving alignas from struct type to atomic variable to avoid psABI note
Signed-off-by: Turker Yilmaz <turker87@gmail.com>
2026-07-02 12:47:57 +02:00
Guido Casati
3226e5bb34 doc (NAS): update doc/5Gnas.md
Signed-off-by: Guido Casati <guido.casati@openairinterface.org>
2026-07-02 11:04:27 +02:00
Guido Casati
b61d41a440 tests: add --identity-guti to nr-ue-nas-simulator
Add an optional Identity Request test to the NAS/NGAP simulator.
With --identity-guti, the Initial UE Message carries a random 5G-GUTI
plus matching NGAP 5G-S-TMSI and GUAMI so the AMF requests SUCI per TS 23.502
registration step 6. The simulator then continues the usual attach, PDU
session, and deregistration flow.

Changes:
- nr-ue-nas-simulator: seed_unknown_guti(), identity_request BOOLPARAM,
  NGAP ue_identity fill in send_initial_ue_message()
- Update README

Signed-off-by: Guido Casati <guido.casati@openairinterface.org>
2026-07-02 11:03:57 +02:00
Bartosz Podrygajlo
cea29f9c3f ci: Speedup unit test dockerfile
Use docker cache, reduce the number of installed apt packages, add docker ignore
entry for build directory

Signed-off-by: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
2026-07-02 10:18:42 +02:00
Robert Schmidt
a65ddf5cd3 Merge remote-tracking branch 'ChrisAB/pbch_decoding_slot_five_before_phy_config' into integration_2026_w27
fix(NR_UE): gate half-frame PBCH mirror on caller-provided ssb_period (#220)

is_ssb_in_symbol() read cfg->ssb_table.ssb_period directly, but before
the FAPI PHY config request arrives (received_config_request == false)
that field is still 0, which it interprets as a 5ms period and enables
the half-frame PBCH mirror. get_ssb_index_in_symbol() already assumes
the 20ms default period for its frame-periodicity test, so the two
disagree and the UE attempts a spurious PBCH decode in the second
half-frame (slot 5 for mu=0) before being configured.

Closes: #219
Reviewed-by: Francesco Mani <email@francescomani.it>
2026-07-02 09:04:35 +02:00
Robert Schmidt
e47e28301f Merge remote-tracking branch 'bpodrygajlo/zmq-warning-cleanup' into integration_2026_w27
fix(zmq): Fix clang compiler warnings in zmq radio (#244)

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-07-02 09:00:33 +02:00
Robert Schmidt
8c4e48a670 Merge remote-tracking branch 'bpodrygajlo/pcap-to-github' into integration_2026_w27
ci: Move test pcaps to github (#256)

Move fronthaul capture artifact to my github fork to improve CI
stability.

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-07-02 08:59:00 +02:00
Robert Schmidt
6d75ca8e9c Move fhstate into eth structure
fhstate is only used in the ETHERNET library, so move it to a smaller
scope. In AW2S it is write-only, so we can remove it.

Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-07-02 08:46:09 +02:00
Robert Schmidt
0d4a4a6d78 Merge remote-tracking branch 'rmagueta/fix_init_context_sss_nr' into integration_2026_w27
Fix function init_context_sss_nr() (#239)

Reduce of the size of the d_sss matrix.  This PR resolves a regression
found in the PR #152

Reviewed-by: Laurent THOMAS <laurent.thomas@open-cells.com>
2026-07-02 07:59:09 +02:00
Guido Casati
0abc46b708 NAS: refactor Identity Request handler and enforce spec-compliant security checks
Align UE Identity Request handling with TS 24.501 by checking the NAS
security header and rejecting unprotected non-SUCI requests.

Also, refactor Identity Response identity selection based on the
requested identity types, add to a helper and handle unavailable
identities in the UE context.

Closes #82

Signed-off-by: Guido Casati <guido.casati@openairinterface.org>
2026-07-01 19:09:48 +02:00
Teodora Vladić
05af0556af Update the xran K release tag due to the PR https://github.com/openairinterface/o-du-phy/pull/3
Signed-off-by: Teodora Vladić <teodora.vladic@openairinterface.org>
2026-07-01 13:29:10 +02:00
Alex Jiao
14ec3a930f NR UE: add assert for reserved bits per symbol not multiple of Qm
map_overlapped_ack() divides num_reserved_bits_on_sym by Qm to get the
number of reserved REs. Add assertion to catch cases where the reserved
bit count is not a multiple of Qm, which would indicate a bug in the
upstream UCI-on-PUSCH mapping.

Signed-off-by: Alex Jiao <alex.jiao@keysight.com>
2026-07-01 19:23:41 +08:00
Bartosz Podrygajlo
cd376c904b ci: Move test pcaps to github
Move fronthaul capture artifact to my github fork to improve CI stability.

Signed-off-by: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
2026-07-01 11:37:43 +02:00
Bartosz Podrygajlo
2a3f0ffc02 fix: Address clang compiler warning in zmq_radio (non-c-typedef-for-linkage)
Signed-off-by: Bartosz Podrygajlo <bartosz.podrygajlo@openairinterface.org>
2026-07-01 10:39:41 +02:00
Roberto Louro Magueta
e59473f8fe Fix function init_context_sss_nr() and reduction of the size of the d_sss matrix
Signed-off-by: Roberto Louro Magueta <rmagueta@allbesmart.pt>
2026-06-30 17:01:32 +01:00
Francesco Mani
ea3e1dbaf2 remove negative init for dlsim parameters
Signed-off-by: Francesco Mani <email@francescomani.it>
2026-06-30 14:08:03 +02:00
Robert Schmidt
326f2a0cfb Merge remote-tracking branch 'aswanthkc/fix-check-sa/nsa' into integration_2026_w27
fix: proper SA/NSA mode detection (#233)

Use IS_SA_MODE(get_softmodem_params()) for proper SA/NSA check

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 12:30:58 +02:00
Robert Schmidt
fd794a85c1 Merge remote-tracking branch 'aswanthkc/issue-911-fix-3' into integration_2026_w27
Cleanup: NGAP reconnection debug log (#227)

I was using this print statement just for debugging Also this debug
statement should be shown only after reconnecting not at the first
connection.

Reviewed-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 12:29:20 +02:00
Robert Schmidt
9c0577ad1e Remove unused is_init
This field is never used anywhere.

Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 11:34:09 +02:00
Robert Schmidt
102792c373 Move eCPRI fields to ethernet struct
These fields are only accessed from the ETHERNET library, which has a
dedicated ethernet struct (which is in device->priv). Move in there to
reduce visibility.

Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 11:34:09 +02:00
Robert Schmidt
61a1e8c0d8 Remove common_lib.h includes
After having removed eth_params_t from all L2/L3 files, we can reduce
the scope of common_lib.h, and remove the include from many files.

Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 11:34:09 +02:00
Robert Schmidt
c2dbfd79d5 Reformat ethernet_lib.c with clang-format
Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 11:34:08 +02:00
Robert Schmidt
bc32bf8875 Remove eth_params_s from nr_mac_gNB.h
We don't actually configure ethernet paramaters, only IP. Further, the
appropriate type f1ap_net_config_t already exists, so use this instead.

Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 11:34:08 +02:00
Robert Schmidt
9f5ac5ac8e Remove eth_params_t from configure_nr_nfapi_vnf()
There are no ethernet parameters to be configured, and it can be
simplified.

Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 11:34:08 +02:00
Robert Schmidt
ac738ae714 Remove RRC eth_params
In 4G, it's not used.
In 5G, there is no need, as we can pass it directly to the CU task.

Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 11:34:08 +02:00
Robert Schmidt
6f7a26d681 Remove duplicate code
The same code is further up.

Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 11:34:08 +02:00
Robert Schmidt
6d437cffcf Remove unused MAC.eth_params_s
This field is used as an intermediate "storage facility", but is never
really used. Besides, in the MAC, we store IP information, not Ethernet
information, so it's wrong anyway.

Also remove memory leaks through strdup(), the pointer lifetime is
smaller than that of MacRLC_ParamList.

Signed-off-by: Robert Schmidt <robert.schmidt@openairinterface.org>
2026-06-30 11:34:08 +02:00
aswanthkc
52c53c868f fix: proper SA/NSA mode detection
- Use IS_SA_MODE(get_softmodem_params()) for proper SA/NSA check

Signed-off-by: aswanthkc <a.kallangaattuvalasu@northeastern.edu>
2026-06-29 21:33:16 +00:00