Closed mijuny closed 3 years ago
And the Dockerfile for the container where this is run:
FROM ubuntu:latest
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get -y update
RUN apt-get install -y locales apt-utils
# Set the locale
RUN locale-gen fi_FI.UTF-8
ENV LANG fi_FI.UTF-8
ENV LANGUAGE fi_FI:en
ENV LC_MESSAGES C
ENV LC_ALL fi_FI.UTF-8
RUN apt-get install -y build-essential python3.6 python3-pip python3-dev locales console-common
# python3 packages
RUN pip3 -q install pip --upgrade
RUN pip3 install jupyter pynetdicom pydicom
EXPOSE 8888 11112
CMD ["jupyter", "notebook", "--port=8888", "--no-browser", "--ip=0.0.0.0", "--allow-root"]
Why have you done ds = event.dataset(encoding="utf-8")
? It should be just event.dataset
.
Anyway, it seems like whatever you're associating with is using non-conformant UIDs (they're supposed to be encoded as ASCII). Could you bind the following to EVT_DATA_RECV
and post the output?
from pydicom.utils import pretty_bytes
def debug_data(event):
data = event.data
LOGGER.debug(f"{' DEBUG - ENCODED PDU ':=^76}")
slist = pretty_bytes(
data, prefix=' ', delimiter=' ', max_size=None, items_per_line=25
)
for s in slist:
LOGGER.debug(s)
LOGGER.debug(f"{' END ENCODED PDU ':=^76}")
handlers = [(evt.EVT_C_STORE, handle_store), (evt.EVT_DATA_RECV, debug_data)]
Thank You for your help!
Fixed that event-dataset, it was a part of my uninformed debugging.
The code I run now is this:
import logging
from pynetdicom import AE, evt, AllStoragePresentationContexts, debug_logger
from pynetdicom.utils import pretty_bytes
debug_logger()
# Implement a handler for evt.EVT_C_STORE
def handle_store(event):
"""Handle a C-STORE request event."""
# Decode the C-STORE request's *Data Set* parameter to a pydicom Dataset
ds = event.dataset
# Add the File Meta Information
ds.file_meta = event.file_meta
# Save the dataset using the SOP Instance UID as the filename
ds.save_as(ds.SOPInstanceUID, write_like_original=False)
# Return a 'Success' status
return 0x0000
def debug_data(event):
data = event.data
LOGGER = logging.getLogger('pynetdicom')
LOGGER.debug(f"{' DEBUG - ENCODED PDU ':=^76}")
slist = pretty_bytes(
data, prefix=' ', delimiter=' ', max_size=None, items_per_line=25
)
for s in slist:
LOGGER.debug(s)
LOGGER.debug(f"{' END ENCODED PDU ':=^76}")
handlers = [(evt.EVT_C_STORE, handle_store), (evt.EVT_DATA_RECV, debug_data)]
# Initialise the Application Entity
ae = AE(ae_title=b'TEST')
# Support presentation contexts for all storage SOP Classes
ae.supported_contexts = AllStoragePresentationContexts
# Start listening for incoming association requests
ae.start_server(('', 11112), evt_handlers=handlers)
And it gives me this after I send an MRI image using OsiriX a to it:
D: =========================== DEBUG - ENCODED PDU ============================
D: 01 00 00 00 25 9c 00 01 00 00 54 45 53 54 20 20 20 20 20 20 20 20 20 20 20
D: 20 54 39 34 32 4d 42 50 30 30 31 20 20 20 20 20 20 00 00 00 00 00 00 00 00
D: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10
D: 00 00 15 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 33 2e 31 2e 31 2e 31 20
D: 00 00 3c 01 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 35 2e 31 2e 34 2e 31 2e 31 2e 39 2e 31 2e 33 40 00 00 13 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 03 00 ff 00 30 00 00 1d
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 39
D: 2e 31 2e 33 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00
D: 00 3c 05 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35
D: 2e 31 2e 34 2e 31 2e 31 2e 38 38 2e 31 31 40 00 00 13 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 07 00 ff 00 30 00 00 1d 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38 38
D: 2e 31 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e
D: 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00
D: 3c 09 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e
D: 31 2e 34 2e 31 2e 31 2e 39 2e 34 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 0b 00 ff 00 30 00 00 1d 31 2e
D: 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 39 2e 34
D: 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32
D: 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3b
D: 0d 00 ff 00 30 00 00 1c 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31
D: 2e 34 2e 31 2e 31 2e 31 31 2e 34 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 31 2e 32 2e 31 20 00 00 50 0f 00 ff 00 30 00 00 1c 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 31 2e 34 40
D: 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00
D: 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3d 11 00 ff
D: 00 30 00 00 1e 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e
D: 31 2e 31 2e 31 33 2e 31 2e 33 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 31 2e 32 2e 31 20 00 00 52 13 00 ff 00 30 00 00 1e 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 33 2e 31 2e 33
D: 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00
D: 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3c 15 00
D: ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34
D: 2e 31 2e 31 2e 39 2e 33 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 31 2e 32 2e 31 20 00 00 51 17 00 ff 00 30 00 00 1d 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 39 2e 33 2e 31 40
D: 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00
D: 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3c 19 00 ff
D: 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e
D: 31 2e 31 2e 38 38 2e 36 35 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 31 2e 32 2e 31 20 00 00 51 1b 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38 38 2e 36 35 40 00
D: 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3c 1d 00 ff 00
D: 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31
D: 2e 31 2e 38 38 2e 36 39 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 2e 31 20 00 00 51 1f 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38 38 2e 36 39 40 00 00
D: 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3b 21 00 ff 00 30
D: 00 00 1c 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e
D: 31 2e 31 31 2e 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 2e 31 20 00 00 50 23 00 ff 00 30 00 00 1c 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 31 2e 32 40 00 00 13 31 2e
D: 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3c 25 00 ff 00 30 00 00 1d
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38
D: 38 2e 33 33 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 2e 31 20 00 00 51 27 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38 38 2e 33 33 40 00 00 13 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 38 29 00 ff 00 30 00 00 19 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 40
D: 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00
D: 4d 2b 00 ff 00 30 00 00 19 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e
D: 31 2e 34 2e 31 2e 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 31 2e 32 20 00 00 38 2d 00 ff 00 30 00 00 19 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 32 40 00 00 13 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 4d 2f 00 ff 00 30 00 00 19
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 32
D: 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00
D: 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3a 31 00
D: ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34
D: 2e 31 2e 31 2e 31 2e 33 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 2e 31 20 00 00 4f 33 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 2e 33 40 00 00 13 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3c 35 00 ff 00 30 00 00
D: 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e
D: 31 2e 33 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e
D: 32 2e 31 20 00 00 51 37 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 2e 33 2e 31 40 00 00 13 31 2e
D: 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3a 39 00 ff 00 30 00 00 1b
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31
D: 2e 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31
D: 20 00 00 4f 3b 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 2e 32 40 00 00 13 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 31 2e 32 20 00 00 3c 3d 00 ff 00 30 00 00 1d 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 2e 32 2e 31 40
D: 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00
D: 51 3f 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e
D: 31 2e 34 2e 31 2e 31 2e 31 2e 32 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 31 2e 32 20 00 00 3a 41 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 2e 31 40 00 00 13
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 4f 43 00
D: ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34
D: 2e 31 2e 31 2e 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 20 00 00 3c 45 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 2e 31 2e 31 40 00 00 13 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 47 00 ff 00 30
D: 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e
D: 31 2e 31 2e 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e
D: 32 20 00 00 3c 49 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 30 34 2e 31 40 00 00 13 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 4b 00 ff 00 30 00
D: 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31
D: 2e 31 30 34 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 20 00 00 51 4d 00 ff 00 30 00 00 32 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e e2 80 8b 35 2e e2 80 8b 31 2e e2 80 8b 34 2e e2 80 8b 31 2e e2 80 8b 31
D: 2e e2 80 8b 31 30 34 2e e2 80 8b 33 40 00 00 13 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 66 4f 00 ff 00 30 00 00 32 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e e2 80 8b 35 2e e2 80 8b 31 2e e2 80 8b 34
D: 2e e2 80 8b 31 2e e2 80 8b 31 2e e2 80 8b 31 30 34 2e e2 80 8b 33 40 00 00
D: 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3a 51 00 ff 00 30
D: 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e
D: 31 2e 32 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e
D: 32 2e 31 20 00 00 4f 53 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 32 2e 31 40 00 00 13 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3a 55 00 ff 00 30 00 00 1b 31 2e
D: 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 2e 31
D: 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00
D: 00 4f 57 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35
D: 2e 31 2e 34 2e 31 2e 31 2e 34 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 31 2e 32 20 00 00 3c 59 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38 38 2e 32 32 40 00 00
D: 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 5b
D: 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e
D: 34 2e 31 2e 31 2e 38 38 2e 32 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 31 2e 32 20 00 00 3d 5d 00 ff 00 30 00 00 1e 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 32 2e 31 2e 31 40 00 00
D: 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 52 5f
D: 00 ff 00 30 00 00 1e 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e
D: 34 2e 31 2e 31 2e 31 32 2e 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 31 2e 32 20 00 00 3d 61 00 ff 00 30 00 00 1e 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 32 2e 32 2e 31 40 00
D: 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 52
D: 63 00 ff 00 30 00 00 1e 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31
D: 2e 34 2e 31 2e 31 2e 31 32 2e 32 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 31 2e 32 20 00 00 3c 65 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 39 2e 31 2e 32 40 00
D: 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51
D: 67 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31
D: 2e 34 2e 31 2e 31 2e 39 2e 31 2e 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 31 2e 32 20 00 00 3b 69 00 ff 00 30 00 00 1c 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 31 2e 31 40 00 00 13
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 50 6b 00
D: ff 00 30 00 00 1c 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34
D: 2e 31 2e 31 2e 31 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 31 2e 32 20 00 00 3c 6d 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38 38 2e 35 39 40 00 00 13 31 2e
D: 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 6f 00 ff 00
D: 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31
D: 2e 31 2e 38 38 2e 35 39 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 20 00 00 3c 71 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38 38 2e 35 30 40 00 00 13 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 73 00 ff 00 30
D: 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e
D: 31 2e 38 38 2e 35 30 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e
D: 32 20 00 00 38 75 00 ff 00 30 00 00 19 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 40 00 00 13 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 4d 77 00 ff 00 30 00 00 19 31 2e
D: 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 40 00
D: 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3a 79 00 ff 00
D: 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31
D: 2e 31 2e 34 2e 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 2e 31 20 00 00 4f 7b 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 2e 32 40 00 00 13 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3a 7d 00 ff 00 30 00 00 1b 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 2e
D: 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20
D: 00 00 4f 7f 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 35 2e 31 2e 34 2e 31 2e 31 2e 37 2e 32 40 00 00 13 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 31 2e 32 20 00 00 3a 81 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 2e 33 40 00 00 13
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 4f 83 00
D: ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34
D: 2e 31 2e 31 2e 37 2e 33 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 20 00 00 3a 85 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 2e 31 40 00 00 13 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 4f 87 00 ff 00 30 00 00
D: 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e
D: 37 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e
D: 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00
D: 3a 89 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e
D: 31 2e 34 2e 31 2e 31 2e 37 2e 34 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 31 2e 32 2e 31 20 00 00 4f 8b 00 ff 00 30 00 00 1b 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 2e 34 40 00
D: 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 39 8d 00 ff 00
D: 30 00 00 1a 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31
D: 2e 31 2e 32 30 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e
D: 32 2e 31 20 00 00 4e 8f 00 ff 00 30 00 00 1a 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 32 30 40 00 00 13 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3f 91 00 ff 00 30 00 00 20 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 37 2e 31
D: 2e 35 2e 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 2e 31 20 00 00 54 93 00 ff 00 30 00 00 20 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 37 2e 31 2e 35 2e 32 40 00 00 13
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e
D: 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3f 95 00 ff 00 30 00
D: 00 20 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31
D: 2e 37 37 2e 31 2e 35 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 31 2e 32 2e 31 20 00 00 54 97 00 ff 00 30 00 00 20 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 37 2e 31 2e 35 2e
D: 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40
D: 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3f 99
D: 00 ff 00 30 00 00 20 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e
D: 34 2e 31 2e 31 2e 37 37 2e 31 2e 35 2e 34 40 00 00 13 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 54 9b 00 ff 00 30 00 00 20 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 37
D: 2e 31 2e 35 2e 34 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 20 00 00 3a 9d 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 32 38 40 00 00 13 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 4f 9f 00 ff 00 30 00 00 1b 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 32
D: 38 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40
D: 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3c a1
D: 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e
D: 34 2e 31 2e 31 2e 38 38 2e 34 30 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 a3 00 ff 00 30 00 00 1d 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38 38 2e 34 30
D: 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00
D: 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3b a5 00
D: ff 00 30 00 00 1c 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34
D: 2e 31 2e 31 2e 31 31 2e 33 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 31 2e 32 2e 31 20 00 00 50 a7 00 ff 00 30 00 00 1c 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 31 2e 33 40 00 00
D: 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 39 a9 00 ff 00 30
D: 00 00 1a 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e
D: 31 2e 36 36 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 2e 31 20 00 00 4e ab 00 ff 00 30 00 00 1a 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 36 36 40 00 00 13 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 31 2e 32 20 00 00 39 ad 00 ff 00 30 00 00 1a 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 36 37 40 00 00
D: 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 4e af
D: 00 ff 00 30 00 00 1a 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e
D: 34 2e 31 2e 31 2e 36 37 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 20 00 00 3c b1 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 34 40 00 00 13 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 b3 00 ff 00 30
D: 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e
D: 31 2e 34 38 31 2e 34 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e
D: 32 20 00 00 3c b5 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 36 40 00 00 13 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 b7 00 ff 00 30 00
D: 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31
D: 2e 34 38 31 2e 36 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 20 00 00 3c b9 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 32 40 00 00 13 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 bb 00 ff 00 30 00 00
D: 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e
D: 34 38 31 2e 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e
D: 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20
D: 00 00 3c bd 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 35 2e 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 31 40 00 00 13 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 bf 00 ff 00 30 00 00 1d
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34
D: 38 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00
D: 00 3c c1 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35
D: 2e 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 35 40 00 00 13 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 c3 00 ff 00 30 00 00 1d 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 38
D: 31 2e 35 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e
D: 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00
D: 3c c5 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e
D: 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 33 40 00 00 13 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 c7 00 ff 00 30 00 00 1d 31 2e
D: 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 38 31
D: 2e 33 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32
D: 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3c
D: c9 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31
D: 2e 34 2e 31 2e 31 2e 34 38 31 2e 37 40 00 00 13 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 cb 00 ff 00 30 00 00 1d 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 34 38 31 2e
D: 37 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40
D: 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 38 cd
D: 00 ff 00 30 00 00 19 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e
D: 34 2e 31 2e 31 2e 37 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 31 2e 32 2e 31 20 00 00 4d cf 00 ff 00 30 00 00 19 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 40 00 00 13 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00 3b d1 00 ff 00 30 00 00 1c 31 2e
D: 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 36 36 2e
D: 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20
D: 00 00 50 d3 00 ff 00 30 00 00 1c 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 35 2e 31 2e 34 2e 31 2e 31 2e 36 36 2e 31 40 00 00 13 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 31 2e 32 20 00 00 3c d5 00 ff 00 30 00 00 1d 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 39 2e 31 2e 31 40
D: 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00
D: 51 d7 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e
D: 31 2e 34 2e 31 2e 31 2e 39 2e 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 31 2e 32 20 00 00 3a d9 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34
D: 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 36 2e 31 40 00 00 13
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 4f db 00
D: ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34
D: 2e 31 2e 31 2e 36 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 20 00 00 3a dd 00 ff 00 30 00 00 1b 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 33 2e 31 40 00 00 13 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 4f df 00 ff 00 30 00 00
D: 1b 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e
D: 33 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e
D: 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00 00
D: 3d e1 00 ff 00 30 00 00 1e 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e
D: 31 2e 34 2e 31 2e 31 2e 37 37 2e 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30
D: 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 52 e3 00 ff 00 30 00 00 1e 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 37
D: 2e 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00
D: 00 3f e5 00 ff 00 30 00 00 20 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35
D: 2e 31 2e 34 2e 31 2e 31 2e 37 37 2e 31 2e 31 2e 31 40 00 00 13 31 2e 32 2e
D: 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 54 e7 00 ff 00 30 00
D: 00 20 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31
D: 2e 37 37 2e 31 2e 31 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 31 2e 32 20 00 00 3d e9 00 ff 00 30 00 00 1e 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 37 2e 31 2e 32 40 00 00 13 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 52 eb 00 ff
D: 00 30 00 00 1e 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e
D: 31 2e 31 2e 37 37 2e 31 2e 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 20 00 00 3d ed 00 ff 00 30 00 00 1e 31 2e 32 2e 38 34 30 2e 31
D: 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 37 37 2e 31 2e 34 40 00 00 13
D: 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 52 ef 00
D: ff 00 30 00 00 1e 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34
D: 2e 31 2e 31 2e 37 37 2e 31 2e 34 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30
D: 30 30 38 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 31 2e 32 20 00 00 3b f1 00 ff 00 30 00 00 1c 31 2e 32 2e 38 34 30 2e
D: 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 32 2e 31 40 00 00 13 31
D: 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 50 f3 00 ff
D: 00 30 00 00 1c 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e
D: 31 2e 31 2e 31 32 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 20 00 00 3c f5 00 ff 00 30 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30
D: 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 38 38 2e 36 37 40 00 00 13 31 2e 32
D: 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 51 f7 00 ff 00 30
D: 00 00 1d 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e
D: 31 2e 38 38 2e 36 37 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e
D: 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e
D: 32 20 00 00 3b f9 00 ff 00 30 00 00 1c 31 2e 32 2e 38 34 30 2e 31 30 30 30
D: 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e 31 32 2e 32 40 00 00 13 31 2e 32 2e 38
D: 34 30 2e 31 30 30 30 38 2e 31 2e 32 2e 31 20 00 00 50 fb 00 ff 00 30 00 00
D: 1c 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 31 2e 31 2e
D: 31 32 2e 32 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 20 00
D: 00 32 fd 00 ff 00 30 00 00 13 31 2e 33 2e 31 32 2e 32 2e 31 31 30 37 2e 35
D: 2e 39 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32
D: 2e 31 20 00 00 47 ff 00 ff 00 30 00 00 13 31 2e 33 2e 31 32 2e 32 2e 31 31
D: 30 37 2e 35 2e 39 2e 31 40 00 00 13 31 2e 32 2e 38 34 30 2e 31 30 30 30 38
D: 2e 31 2e 32 2e 32 40 00 00 11 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 31
D: 2e 32 50 00 00 35 51 00 00 04 00 00 40 00 52 00 00 1b 31 2e 32 2e 32 37 36
D: 2e 30 2e 37 32 33 30 30 31 30 2e 33 2e 30 2e 33 2e 36 2e 31 55 00 00 0a 4f
D: 53 49 52 49 58 5f 33 36 31
D: ============================= END ENCODED PDU ==============================
E: Unable to decode the received PDU data
E: 'ascii' codec can't decode byte 0xe2 in position 14: ordinal not in range(128)
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/pynetdicom/dul.py", line 301, in _read_pdu_data
pdu, event = self._decode_pdu(bytestream)
File "/usr/local/lib/python3.8/dist-packages/pynetdicom/dul.py", line 133, in _decode_pdu
pdu.decode(bytestream)
File "/usr/local/lib/python3.8/dist-packages/pynetdicom/pdu.py", line 83, in decode
self, attr_name, func(bytestream[sl], *args)
File "/usr/local/lib/python3.8/dist-packages/pynetdicom/pdu.py", line 283, in _wrap_generate_items
item.decode(item_bytes)
File "/usr/local/lib/python3.8/dist-packages/pynetdicom/pdu_items.py", line 93, in decode
setattr(self, attr_name, func(bytestream[sl], *args))
File "/usr/local/lib/python3.8/dist-packages/pynetdicom/pdu_items.py", line 307, in _wrap_generate_items
item.decode(item_bytes)
File "/usr/local/lib/python3.8/dist-packages/pynetdicom/pdu_items.py", line 93, in decode
setattr(self, attr_name, func(bytestream[sl], *args))
File "/usr/local/lib/python3.8/dist-packages/pynetdicom/pdu_items.py", line 1386, in abstract_syntax_name
value = UID(value.decode('ascii'))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 14: ordinal not in range(128)
D: Abort Parameters:
D: =========================== OUTGOING A-ABORT PDU ===========================
D: Abort Source: DUL service-user
D: Abort Reason: No reason given
D: ============================= END A-ABORT PDU ==============================
Yeah, there are two presentation contexts containing UIDs that aren't encoded in ASCII:
>>> raw = (
... b"\x31\x2e\x32\x2e\x38\x34\x30\x2e\x31\x30\x30\x30\x38"
... b"\x2e\xe2\x80\x8b\x35\x2e\xe2\x80\x8b\x31\x2e\xe2\x80\x8b\x34\x2e\xe2\x80\x8b\x31\x2e\xe2\x80\x8b\x31"
... b"\x2e\xe2\x80\x8b\x31\x30\x34\x2e\xe2\x80\x8b\x33"
... )
>>> raw.decode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 14: ordinal not in range(128)
>>> raw.decode('utf-8')
'1.2.840.10008.5.1.4.1.1.104.3'
0xe2
isn't part of the ASCII character set.
Ok, good to know! This is odd, it is just normal clinical dicom images. Any hints how I should fix this?
The two non-conformant presentation contexts both have an invalid '1.2.840.10008.5.1.4.1.1.104.3', which should be Encapsulated STL Storage. I'd take a look in the configuration for Osirix and make sure the entry there is in ASCII rather than UTF-8 (they'll look identical, but if you copy the UID in ASCII and use it to overwrite the value maybe it'll fix it?). Alternatively you could just remove Encapsulated STL Storage from the config, provided you don't need it.
It'd be nice to let Osirix know about the issue, but from a brief googling it looks like you need to pay for the privilege :roll_eyes:
I'm trying to decide if I should add UTF-8 decoding as a fallback... in the meantime I think you can do the following as a workaround (should be done before importing anything else):
from pydicom.uid import UID
from pynetdicom.pdu_items import AbstractSyntaxSubItem
from pynetdicom.utils import validate_uid
def my_setter(self, value):
if isinstance(value, UID):
pass
elif isinstance(value, str):
value = UID(value)
elif isinstance(value, bytes):
try:
value = UID(value.decode('ascii'))
except UnicodeDecodeError:
value = UID(value.decode('utf-8'))
elif value is None:
pass
else:
raise TypeError(
'Abstract Syntax Name must be a pydicom.uid.UID, str or bytes'
)
if value is not None and not validate_uid(value):
LOGGER.error("Abstract Syntax Name is an invalid UID")
raise ValueError("Abstract Syntax Name is an invalid UID")
self._abstract_syntax_name = value
AbstractSyntaxSubItem.abstract_syntax_name = AbstractSyntaxSubItem.abstract_syntax_name.setter(my_setter)
from pynetdicom import pdu
pdu.AbstractSyntaxSubItem = AbstractSyntaxSubItem
from pynetdicom import AE
# ... etc
@mijuny I know this has been closed for a while now but I recently encountered the same issue with Osirix and it seems like there is still no fix/way around. This solution here works fine but would require me to change the pynetdicom code. So I was wondering if you ever found another solution maybe within Osirix?
Hi!
I'm not aware if any other solution. For me, this simple and crude node is working with OsiriX:
import logging
from pydicom.uid import UID
from pynetdicom import AE, evt, AllStoragePresentationContexts, debug_logger, pdu
from pynetdicom.pdu_items import AbstractSyntaxSubItem
from pynetdicom.utils import validate_uid
def my_setter(self, value):
if isinstance(value, UID):
pass
elif isinstance(value, str):
value = UID(value)
elif isinstance(value, bytes):
try:
value = UID(value.decode('ascii'))
except UnicodeDecodeError:
value = UID(value.decode('utf-8'))
elif value is None:
pass
else:
raise TypeError(
'Abstract Syntax Name must be a pydicom.uid.UID, str or bytes'
)
if value is not None and not validate_uid(value):
LOGGER.error("Abstract Syntax Name is an invalid UID")
raise ValueError("Abstract Syntax Name is an invalid UID")
self._abstract_syntax_name = value
AbstractSyntaxSubItem.abstract_syntax_name = AbstractSyntaxSubItem.abstract_syntax_name.setter(my_setter)
pdu.AbstractSyntaxSubItem = AbstractSyntaxSubItem
debug_logger()
# Implement a handler for evt.EVT_C_STORE
def handle_store(event):
"""Handle a C-STORE request event."""
# Decode the C-STORE request's *Data Set* parameter to a pydicom Dataset
ds = event.dataset
# Add the File Meta Information
ds.file_meta = event.file_meta
# Save the dataset using the SOP Instance UID as the filename
ds.save_as(ds.SOPInstanceUID, write_like_original=False)
# Return a 'Success' status
return 0x0000
handlers = [(evt.EVT_C_STORE, handle_store)]
# Initialise the Application Entity
ae = AE(ae_title=b'TEST')
# Support presentation contexts for all storage SOP Classes
ae.supported_contexts = AllStoragePresentationContexts
# Start listening for incoming association requests
ae.start_server(('', 11112), evt_handlers=handlers)
Running this in this conda env in macOS:
# Name Version Build Channel
bzip2 1.0.8 h620ffc9_4
ca-certificates 2022.12.7 h4653dfc_0 conda-forge
certifi 2022.12.7 pyhd8ed1ab_0 conda-forge
libffi 3.4.2 hca03da5_6
ncurses 6.3 h1a28f6b_3
openssl 1.1.1s h03a7124_1 conda-forge
pip 22.3.1 py310hca03da5_0
pydicom 2.3.1 pyh1a96a4e_0 conda-forge
pynetdicom 2.0.2 pyhd8ed1ab_0 conda-forge
python 3.10.8 hc0d8a6c_1
readline 8.2 h1a28f6b_0
setuptools 65.5.0 py310hca03da5_0
sqlite 3.40.0 h7a7dc30_0
tk 8.6.12 hb8d0fd4_0
tzdata 2022g h04d1e81_0
wheel 0.37.1 pyhd3eb1b0_0
xz 5.2.8 h80987f9_0
zlib 1.2.13 h5a0b063_0
For anyone else, the easier way to workaround this issue is by setting the _config.CODECS variable to include UTF-8.
Or pester Osirix for a fix.
Hi!
I'm getting the error above when running a simple pynetdicom storage SCP.
I'm a bit new to python so it is sure to be a simple thing. Have been googling around for a while now without luck. Any help would really welcome!
And the error: