1
0
mirror of https://github.com/JvanKatwijk/qt-dab.git synced 2025-10-05 15:52:39 +02:00

restructured sourcetree

This commit is contained in:
Jan
2025-07-16 20:32:47 +02:00
parent 2382a9c8a3
commit 5300396ada
608 changed files with 1925 additions and 7799 deletions

19
.gitignore vendored
View File

@@ -1,15 +1,10 @@
obsolete/
qt-dab-6.8/linux-bin
qt-dab-6.8/.qmake.stash
qt-dab-6.8/build
qt-dab-6.8/Makefile
qt-dab-6.8/Output
qt-dab-6.9/linux-bin
qt-dab-6.9/.qmake.stash
qt-dab-6.9/build
qt-dab-6.9/Makefile
qt-dab-6.9/Output
qt-dab-6.9/todo
./obsolete/
./Makefile
.qmake.stash
./linux-bin
./moc*
./*.o
./build

734
CMakeLists.txt Normal file
View File

@@ -0,0 +1,734 @@
cmake_minimum_required( VERSION 3.21 )
# set CMAKE_BUILD_TYPE to "Release" if not defined (like call from command line)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Set build type to Release if not specified" FORCE)
endif()
include(${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/CMakeFunctions.cmake)
project(Qt-DAB VERSION 6)
set (objectName qt-dab-6.9.2)
set (objectName "Qt-DAB")
set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTORCC ON)
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set (CMAKE_INSTALL_PREFIX "/usr/local/bin" CACHE PATH "default install path" FORCE )
endif()
add_definitions(-DAPP_NAME="${objectName}")
add_definitions(-DPRJ_NAME="${PROJECT_NAME}")
add_definitions(-DPRJ_VERS="${PROJECT_VERSION}")
if(CMAKE_BUILD_TYPE STREQUAL "Release")
# regarding using QWT < 6.2.0 (6.1.4) to avoid many deprecated massages (only suppressed on release versions)
add_definitions(-DQT_NO_DEPRECATED_WARNINGS)
endif()
if(MINGW)
add_definitions ( -municode)
endif()
add_definitions (-D__HAS_CHANNEL__)
add_definitions (-D__FFTW3__)
# handle GIT hash
get_git_commit_hash() # returns GIT_COMMIT_HASH
print(GIT_COMMIT_HASH)
if (GIT_COMMIT_HASH)
add_definitions("-DGITHASH=\"${GIT_COMMIT_HASH}\"")
else ()
add_definitions("-DGITHASH=\"(unknown)\"")
endif ()
########################################################################
# select the release build type by default to get optimization flags
########################################################################
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
### make sure our local CMake Modules path comes first
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
######################################################################
#
# if you want the audio output sent over the internet:
set (TCP_STREAMER OFF)
#####################################################################
#
# select one or more devices (set to ON)
# Note that since there are problems with the rtlsdr interface under Windows we split the rtlsdr interface
# into two versions one for Linux and one for Window
option(RTLSDR_LINUX OFF) # use for Linux type systems
option(RTLSDR_WIN OFF) # only for windows
option(AIRSPY OFF)
option(SDRPLAY_V2 ON)
option(SDRPLAY_V3 OFF)
option(HACKRF OFF)
option(LIMESDR OFF)
option(PLUTO OFF)
option(SOAPY OFF)
option(SPY_SERVER_8 OFF)
option(SPY_SERVER_16 OFF)
option(UHD OFF) # untested
option(RTL_TCP OFF)
# additional options
option(USE_LTO "Set -flto flag" ON)
# special release version flags
if (USE_LTO)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")
endif ()
option(FDK_AAC ON)
option(DATA_STREAMER OFF)
option(VITERBI_SSE OFF)
option(VITERBI_NEON OFF)
####################################################################
# Use first option on "slow" cpus, i.e. RPI 3 or so
# Most of the FFT processing will be done in functions eunning
# in its own thread
#add_definitions (-D__MSC_THREAD__) # do not uncomment this
#
# Since more than one backend may be active, activating this
# option makes that each backend runs in its own thread
add_definitions (-D__THREADED_BACKEND__) # uncomment for use for an RPI
#
########################################################################
########################################################################
find_package (PkgConfig)
find_package (LSBId)
find_package (Qt6Core REQUIRED)
find_package (Qt6Widgets REQUIRED)
find_package (Qt6Network REQUIRED)
find_package (Qt6Xml REQUIRED)
include_directories (
${Qt6Network_INCLUDE_DIRS}
${Qt6Xml_INCLUDE_DIRS}
)
search_for_library (QWT Qwt)
search_for_library (ZLIB zlib)
find_package(FFTW3f)
if (NOT FFTW3F_FOUND)
message(FATAL_ERROR "please install FFTW3")
endif ()
include_directories ( ${FFTW_INCLUDE_DIRS})
list(APPEND extraLibs ${FFTW3F_LIBRARIES})
if (NOT APPLE)
find_library (PTHREADS pthread)
if (NOT(PTHREADS))
message (FATAL_ERROR "please install libpthread")
else (NOT(PTHREADS))
set (extraLibs ${extraLibs} ${PTHREADS})
endif (NOT(PTHREADS))
endif (NOT APPLE)
#######################################################################
#
# Here we really start
include_directories (
${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
${QT6Widgets_INCLUDES}
${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR}
./sources/main
./sources/main/forms-v7
./sources/main/forms-v7/new-display
./sources/main/forms-v7/new-display/scopes
./sources/main/forms-v7/snr-viewer
./sources/eti-handler
./sources/support
./sources/support/gui-elements
./sources/frontend
./sources/backend
./sources/backend/audio
./sources/backend/data
./sources/backend/data/journaline
./sources/backend/data/mot
./sources/backend/data/epg
./sources/backend/reed-solomon
./sources/protection
./sources/output
./sources/output/portaudio
./sources/output/Qt6
./sources/qt-devices
./sources/qt-devices/filereaders/
./sources/qt-devices/filereaders/new-reader
./sources/qt-devices/filereaders/rawfiles-new
./sources/qt-devices/filereaders/xml-filereader
/usr/include/
)
set (${objectName}_HDRS
./sources/main/radio.h
./sources/main/aboutdialog.h
./sources/main/config-handler.h
./sources/main/ensemble-handler.h
./sources/main/techdata.h
./sources/main/forms-v7/new-display/display-widget.h
./sources/main/forms-v7/new-display/scopes/correlation-scope.h
./sources/main/forms-v7/new-display/scopes/spectrum-scope.h
./sources/main/forms-v7/new-display/scopes/null-scope.h
./sources/main/forms-v7/new-display/scopes/channel-scope.h
./sources/main/forms-v7/new-display/scopes/dev-scope.h
./sources/main/forms-v7/new-display/scopes/waterfall-scope.h
./sources/main/forms-v7/new-display/scopes/iqdisplay.h
./sources/main/forms-v7/new-display/scopes/audio-display.h
./sources/main/forms-v7/new-display/scopes/spectrogramdata.h
./sources/main/forms-v7/snr-viewer/snr-viewer.h
./sources/eti-handler/eti-generator.h
./sources/frontend/ofdm-handler.h
./sources/frontend/sample-reader.h
./sources/frontend/correlator.h
./sources/frontend/freqsyncer.h
./sources/frontend/ofdm-decoder.h
./sources/frontend/phasetable.h
./sources/frontend/freq-interleaver.h
./sources/frontend/fic-handler.h
./sources/frontend/ensemble.h
./sources/frontend/fib-config.h
./sources/frontend/fib-printer.h
./sources/frontend/fib-decoder.h
./sources/frontend/fib-table.h
./sources/frontend/tii-detector.h
./sources/frontend/tii-detector-1.h
./sources/frontend/tii-detector-2.h
./sources/frontend/timesyncer.h
./sources/frontend/estimator.h
./sources/protection/protTables.h
./sources/protection/protection.h
./sources/protection/uep-protection.h
./sources/protection/eep-protection.h
./sources/support/audiosystem-selector.h
./sources/support/bandpass-filter.h
./sources/support/bit-extractor.h
./sources/support/cacheElement.h
./sources/support/content-table.h
./sources/support/converter_48000.h
./sources/support/coordinates.h
./sources/support/country-codes.h
./sources/support/crc-handlers.h
./sources/support/dab-constants.h
./sources/support/dab-params.h
./sources/support/dab-tables.h
./sources/support/distances.h
./sources/support/dl-cache.h
./sources/support/dxDisplay.h
./sources/support/element-selector.h
./sources/support/fft-handler.h
./sources/support/findfilenames.h
./sources/support/fir-filters.h
./sources/support/http-handler.h
./sources/support/ITU_Region_1.h
./sources/support/logger.h
./sources/support/mapport.h
./sources/support/mot-content-types.h
./sources/support/position-handler.h
./sources/support/presetcombobox.h
./sources/support/preset-handler.h
./sources/support/process-params.h
./sources/support/ringbuffer.h
./sources/support/scan-handler.h
./sources/support/scanlist-handler.h
./sources/support/scantable-handler.h
./sources/support/scheduler.h
./sources/support/schedule-selector.h
./sources/support/settingNames.h
./sources/support/settings-handler.h
./sources/support/skin-handler.h
./sources/support/tii-mapper.h
./sources/support/tii-reader.h
./sources/support/time-converter.h
./sources/support/time-table.h
./sources/support/uploader.h
./sources/support/wavWriter.h
./sources/support/gui-elements/circular-button.h
./sources/support/gui-elements/clickable-label.h
./sources/support/gui-elements/color-selector.h
./sources/support/gui-elements/font-chooser.h
./sources/support/gui-elements/icon-label.h
./sources/support/gui-elements/newpushbutton.h
./sources/support/gui-elements//normalpushbutton.h
./sources/support/gui-elements/smallcombobox.h
./sources/support/gui-elements/smallpushbutton.h
./sources/support/gui-elements/smallqlistview.h
./sources/support/gui-elements/smallspinbox.h
./sources/support/gui-elements/super-frame.h
./sources/support/gui-elements/verysmallpushbutton.h
./sources/backend/backend.h
./sources/backend/backend-deconvolver.h
./sources/backend/backend-driver.h
./sources/backend/charsets.h
./sources/backend/frame-processor.h
./sources/backend/msc-handler.h
./sources/backend/reed-solomon/galois.h
./sources/backend/reed-solomon/reed-solomon.h
./sources/backend/audio/bitWriter.h
./sources/backend/audio/firecode-checker.h
./sources/backend/audio/mp2processor.h
./sources/backend/audio/mp4processor.h
./sources/backend/audio/neaacdec.h
./sources/backend/data/adv-datahandler.h
./sources/backend/data/data-processor.h
./sources/backend/data/ip-datahandler.h
./sources/backend/data/journaline-datahandler.h
./sources/backend/data/journaline-screen.h
./sources/backend/data/pad-handler.h
./sources/backend/data/tdc-datahandler.h
./sources/backend/data/virtual-datahandler.h
./sources/backend/data/epg/epg-compiler.h
./sources/backend/data/epg/xml-extractor.h
./sources/backend/data/journaline/cpplog.h
./sources/backend/data/journaline/crc_8_16.h
./sources/backend/data/journaline/dabdatagroupdecoder.h
./sources/backend/data/journaline/dabdgdec_impl.h
./sources/backend/data/journaline/log.h
./sources/backend/data/journaline/newsobject.h
./sources/backend/data/journaline/newssvcdec_impl.h
./sources/backend/data/journaline/NML.h
./sources/backend/data/journaline/Splitter.h
./sources/backend/data/mot/mot-dir.h
./sources/backend/data/mot/mot-handler.h
./sources/backend/data/mot/mot-object.h
./sources/output/audio-player.h
./sources/qt-devices/device-handler.h
./sources/qt-devices/device-exceptions.h
./sources/qt-devicces/xml-filewriter.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
./sources/main/main.cpp
./sources/main/radio.cpp
./sources/main/aboutdialog.cpp
./sources/main/config-handler.cpp
./sources/main/ensemble-handler.cpp
./sources/main/techdata.cpp
./sources/main/forms-v7/new-display/display-widget.cpp
./sources/main/forms-v7/new-display/scopes/correlation-scope.cpp
./sources/main/forms-v7/new-display/scopes/spectrum-scope.cpp
./sources/main/forms-v7/new-display/scopes/null-scope.cpp
./sources/main/forms-v7/new-display/scopes/channel-scope.cpp
./sources/main/forms-v7/new-display/scopes/dev-scope.cpp
./sources/main/forms-v7/new-display/scopes/waterfall-scope.cpp
./sources/main/forms-v7/new-display/scopes/iqdisplay.cpp
./sources/main/forms-v7/new-display/scopes/audio-display.cpp
./sources/main/forms-v7/new-display/scopes/spectrogramdata.cpp
./sources/main/forms-v7/snr-viewer/snr-viewer.cpp
./sources/eti-handler/eti-generator.cpp
./sources/frontend/ofdm-handler.cpp
./sources/frontend/sample-reader.cpp
./sources/frontend/correlator.cpp
./sources/frontend/freqsyncer.cpp
./sources/frontend/ofdm-decoder.cpp
./sources/frontend/phasetable.cpp
./sources/frontend/freq-interleaver.cpp
./sources/frontend/fic-handler.cpp
./sources/frontend/ensemble.cpp
./sources/frontend/fib-config.cpp
./sources/frontend/fib-printer.cpp
./sources/frontend/fib-decoder.cpp
./sources/frontend/tii-detector.cpp
./sources/frontend/tii-detector-1.cpp
./sources/frontend/tii-detector-2.cpp
./sources/frontend/timesyncer.cpp
./sources/frontend/estimator.cpp
./sources/protection/protTables.cpp
./sources/protection/protection.cpp
./sources/protection/uep-protection.cpp
./sources/protection/eep-protection.cpp
./sources/support/audiosystem-selector.cpp
./sources/support/bandpass-filter.cpp
./sources/support/content-table.cpp
./sources/support/converter_48000.cpp
./sources/support/coordinates.cpp
./sources/support/dab-params.cpp
./sources/support/dab-tables.cpp
./sources/support/distances.cpp
./sources/support/dxDisplay.cpp
./sources/support/element-selector.cpp
./sources/support/fft-handler.cpp
./sources/support/findfilenames.cpp
./sources/support/fir-filters.cpp
./sources/support/http-handler.cpp
./sources/support/ITU_Region_1.cpp
./sources/support/logger.cpp
./sources/support/mapport.cpp
./sources/support/position-handler.cpp
./sources/support/presetcombobox.cpp
./sources/support/preset-handler.cpp
./sources/support/scan-handler.cpp
./sources/support/scanlist-handler.cpp
./sources/support/scantable-handler.cpp
./sources/support/scheduler.cpp
./sources/support/schedule-selector.cpp
./sources/support/settings-handler.cpp
./sources/support/skin-handler.cpp
./sources/support/tii-mapper.cpp
./sources/support/tii-reader.cpp
./sources/support/time-converter.cpp
./sources/support/time-table.cpp
./sources/support/uploader.cpp
./sources/support/wavWriter.cpp
./sources/support/gui-elements/circular-button.cpp
./sources/support/gui-elements/clickable-label.cpp
./sources/support/gui-elements/color-selector.cpp
./sources/support/gui-elements/font-chooser.cpp
./sources/support/gui-elements/icon-label.cpp
./sources/support/gui-elements/newpushbutton.cpp
./sources/support/gui-elements//normalpushbutton.cpp
./sources/support/gui-elements/smallcombobox.cpp
./sources/support/gui-elements/smallpushbutton.cpp
./sources/support/gui-elements/smallqlistview.cpp
./sources/support/gui-elements/smallspinbox.cpp
./sources/support/gui-elements/super-frame.cpp
./sources/support/gui-elements/verysmallpushbutton.cpp
./sources/backend/backend.cpp
./sources/backend/backend-deconvolver.cpp
./sources/backend/backend-driver.cpp
./sources/backend/charsets.cpp
./sources/backend/msc-handler.cpp
./sources/backend/reed-solomon/galois.cpp
./sources/backend/reed-solomon/reed-solomon.cpp
./sources/backend/audio/bitWriter.cpp
./sources/backend/audio/faad-decoder.cpp
./sources/backend/audio/firecode-checker.cpp
./sources/backend/audio/mp2processor.cpp
./sources/backend/audio/mp4processor.cpp
./sources/backend/data/adv-datahandler.cpp
./sources/backend/data/data-processor.cpp
./sources/backend/data/ip-datahandler.cpp
./sources/backend/data/journaline-datahandler.cpp
./sources/backend/data/journaline-screen.cpp
./sources/backend/data/pad-handler.cpp
./sources/backend/data/tdc-datahandler.cpp
./sources/backend/data/epg/epg-compiler.cpp
./sources/backend/data/epg/xml-extractor.cpp
./sources/backend/data/journaline/crc_8_16.c
./sources/backend/data/journaline/dabdgdec_impl.c
./sources/backend/data/journaline/log.c
./sources/backend/data/journaline/newsobject.cpp
./sources/backend/data/journaline/newssvcdec_impl.cpp
./sources/backend/data/journaline/NML.cpp
./sources/backend/data/journaline/Splitter.cpp
./sources/backend/data/mot/mot-dir.cpp
./sources/backend/data/mot/mot-handler.cpp
./sources/backend/data/mot/mot-object.cpp
./sources/output/audio-player.cpp
./sources/qt-devices/device-handler.cpp
./sources/qt-devices/xml-filewriter.cpp
)
set (${objectName}_MOCS
./sources/main/radio.h
./sources/main/ensemble-handler.h
./sources/main/config-handler.h
./sources/main/techdata.h
./sources/main/aboutdialog.h
./sources/main/forms-v7/new-display/display-widget.h
./sources/main/forms-v7/new-display/scopes/correlation-scope.h
./sources/main/forms-v7/new-display/scopes/spectrum-scope.h
./sources/main/forms-v7/new-display/scopes/null-scope.h
./sources/main/forms-v7/new-display/scopes/channel-scope.h
./sources/main/forms-v7/new-display/scopes/dev-scope.h
./sources/main/forms-v7/new-display/scopes/waterfall-scope.h
./sources/main/forms-v7/new-display/scopes/iqdisplay.h
./sources/main/forms-v7/new-display/scopes/audio-display.h
./sources/main/forms-v7/snr-viewer/snr-viewer.h
./sources/frontend/ofdm-handler.h
./sources/frontend/sample-reader.h
./sources/frontend/ofdm-decoder.h
./sources/frontend/correlator.h
./sources/frontend/freqsyncer.h
./sources/frontend/fic-handler.h
./sources/frontend/fib-decoder.h
./sources/frontend/tii-detector.h
./sources/frontend/estimator.h
./sources/support/gui-elements/clickable-label.h
./sources/support/gui-elements/color-selector.h
./sources/support/gui-elements/font-chooser.h
./sources/support/gui-elements/icon-label.h
./sources/support/gui-elements/newpushbutton.h
./sources/support/gui-elements/normalpushbutton.h
./sources/support/gui-elements/smallcombobox.h
./sources/support/gui-elements/smallpushbutton.h
./sources/support/gui-elements/smallqlistview.h
./sources/support/gui-elements/smallspinbox.h
./sources/support/gui-elements/super-frame.h
./sources/support/gui-elements/verysmallpushbutton.h
./sources/support/scan-handler.h
./sources/support/scantable-handler.h
./sources/support/audiosystem-selector.h
./sources/support/dxDisplay.h
./sources/support/converter_48000.h
./sources/support/preset-handler.h
./sources/support/presetcombobox.h
./sources/support/scanlist-handler.h
./sources/support/scheduler.h
./sources/support/schedule-selector.h
./sources/support/element-selector.h
./sources/support/time-table.h
./sources/support/content-table.h
./sources/support/coordinates.h
./sources/support/skin-handler.h
./sources/support/mapport.h
./sources/support/http-handler.h
./sources/backend/msc-handler.h
./sources/backend/backend.h
./sources/backend/audio/mp2processor.h
./sources/backend/audio/mp4processor.h
./sources/backend/data/data-processor.h
./sources/backend/data/virtual-datahandler.h
./sources/backend/data/pad-handler.h
./sources/backend/data/mot/mot-handler.h
./sources/backend/data/mot/mot-object.h
./sources/backend/data/mot/mot-dir.h
./sources/backend/data/ip-datahandler.h
./sources/backend/data/adv-datahandler.h
./sources/backend/data/tdc-datahandler.h
./sources/backend/data/journaline-datahandler.h
./sources/backend/data/journaline-screen.h
./sources/backend/data/epg/epg-compiler.h
./sources/backend/data/epg/xml-extractor.h
./sources/output/audio-player.h
)
set (${objectName}_UIS
${${objectName}_UIS}
./sources/main/aboutdialog.ui
./sources/main/forms-v7/dabradio-6.ui
./sources/main/forms-v7/technical_data.ui
./sources/main/forms-v7/config-helper.ui
./sources/main/forms-v7/new-display/scopewidget.ui
./sources/main/forms-v7/snr-viewer/snr-widget.ui
./sources/qt-devices/filereaders/xml-filereader/xmlfiles.ui
)
#########################################################################
if (FDK_AAC)
find_package(Fdk-AAC)
if (NOT LIBFDK_AAC_FOUND)
message(FATAL_ERROR, "Please install libfdk-aac")
endif ()
include_directories (../helpers/specials/fdk-aac)
set($(objectName)_HDRS
${${objectName}_HDRS}
./sources//backend/audio/fdk-aac.h
)
set(${objectName}_SRCS
${${objectName}_SRCS}
./sources/backend/audio/fdk-aac.cpp
)
set (${objectName}_MOCS
${${objectName}_MOCS}
./sources/backend/audio/fdk-aac.h
)
list(APPEND extraLibs ${FDK_AAC_LIBRARIES})
add_definitions(-D__WITH_FDK_AAC__)
elseif (NOT FDK_AAC)
find_package (Faad)
if (NOT FAAD_FOUND)
message(FATAL_ERROR "Please install libfaad")
endif ()
set(${objectName}_HDRS
${${objectName}_HDRS}
./sources/backend/audio/faad-decoder.h
)
set(${objectName}_SRCS
${${objectName}_SRCS}
./sources/backend/audio/faad-decoder.cpp
)
set (${objectName}_MOCS
${${objectName}_MOCS}
./sources/backend/audio/faad-decoder.h
)
add_definitions(-D__WITH_FAAD__)
endif (FDK_AAC)
# the viterbi decoder
#
if (VITERBI_NEON)
set(VITERBI_SSE false)
set (${objectName}_HDRS
${${objectName}_HDRS}
./sources/support/viterbi-spiral/spiral-neon.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
./sources/support/viterbi-spiral/spiral-neon.c
)
add_definitions (-DNEON_AVAILABLE)
elseif(VITERBI_SSE)
include_directories (
./sources/support/viterbi-spiral
./sources/support/viterbi-spiral/includes
)
set ($(objectName)_HDRS
${${objectName}_HDRS}
./sources.support/viterbi-spiral/viterbi.h
./sources/support/viterbi-spiral/spiral-sse.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
./sources/support/viterbi-spiral/viterbi.cpp
./sources/support/viterbi-spiral/spiral-sse.c
)
add_definitions (-DSSE_AVAILABLE)
else (VITERBI_SSE)
include_directories (
./sources/support/viterbi-spiral
)
set ($(objectName)_HDRS
${${objectName}_HDRS}
./sources/support/viterbi-spiral/viterbi.h
./sources/support/viterbi-spiral/spiral-no-sse.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
./sources/support/viterbi-spiral/viterbi.cpp
./sources/support/viterbi-spiral/spiral-no-sse.c
)
endif (VITERBI_NEON)
if (TCP_STREAMER)
add_definitions (-DTCP_STREAMER)
find_package (Qt6Network REQUIRED)
set (${objectName}_MOCS
${${objectName}_MOCS}
./sources/output/tcp-streamer.h
)
set (${objectName}_HDRS
${${objectName}_HDRS}
./sources/output/tcp-streamer.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
./sources/output/tcp-streamer.cpp
)
endif (TCP_STREAMER)
if (DATA_STREAMER)
include_directories (
./server-thread
)
set ($(objectName)_HDRS
${${objectName}_HDRS}
./server-thread/tcp-server.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
./server-thread/tcp-server.cpp
)
add_definitions (-DDATA_STREAMER)
endif (DATA_STREAMER)
if (NOT TCP_STREAMER)
add_definitions (-DQT_AUDIO)
find_package(Portaudio)
if (NOT PORTAUDIO_FOUND)
message(FATAL_ERROR "please install portaudio V19")
endif ()
list(APPEND extraLibs ${PORTAUDIO_LIBRARIES})
find_package (Qt6Multimedia REQUIRED)
include_directories (
${Qt6Multimedia_INCLUDE_DIRS}
./sources/output/portaudio
./sources/output/Qt6
)
set (${objectName}_HDRS
${${objectName}_HDRS}
./sources/output/portadio/audiosink.h
./sources/output/Qt6/Qt-audio.h
./sources/output/Qt6/Qt-audiodevice.h
)
set (${objectName}_MOCS
${${objectName}_MOCS}
./sources/output/portaudio/audiosink.h
./sources/output/Qt6/Qt-audio.h
./sources/output/Qt6/Qt-audiodevice.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
./sources/output/portaudio/audiosink.cpp
./sources/output/Qt6/Qt-audio.cpp
./sources/output/Qt6/Qt-audiodevice.cpp
)
endif (NOT TCP_STREAMER)
QT6_WRAP_UI (UIS ${${objectName}_UIS}
./sources/qt-devices/filereaders/filereader-widget.ui)
include_directories (
${SDRPLAY_INCLUDES}
${QT6Widgets_INCLUDES}
${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR}
${PORTAUDIO_INCLUDE_DIRS}
${FAAD_INCLUDE_DIRS}
)
QT6_WRAP_CPP (MOCS ${${objectName}_MOCS})
add_executable (${objectName}
${${objectName}_SRCS}
${UIS}
${RSCS}
${TRS}
${MOCS}
resources.qrc
)
target_link_libraries (${objectName}
PRIVATE
Qt6::Widgets
Qt6::Network
Qt6::Xml
Qt6::Multimedia
${RTLTCP_lib}
${extraLibs}
${FAAD_LIBRARIES}
${CMAKE_DL_LIBS}
)
add_subdirectory (./sources/qt-devices/ /tmp)
target_link_libraries (${objectName} PRIVATE ${objectName}_devices)
INSTALL (TARGETS ${objectName} DESTINATION ${CMAKE_INSTALL_PREFIX})
# INSTALL (TARGETS ${objectName} DESTINATION ./linux-bin)
########################################################################
# Create uninstall target
########################################################################
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY)
add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)

View File

@@ -4,6 +4,12 @@
![6.9](/res/read_me/front-picture.png?raw=true)
-------------------------------------------------------------------------
Restructured source tree
--------------------------------------------------------------------------
Note that the sourcetree is now restructured.
--------------------------------------------------------------------------
About Qt-DAB
-------------------------------------------------------------------------

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

0
testband → helpers/testband Executable file → Normal file
View File

View File

@@ -1,142 +0,0 @@
#
/*
* Copyright (C) 2013
* Jan van Katwijk (J.vanKatwijk@gmail.com)
* Lazy Chair Programming
*
* This file is part of the SDR-J (JSDR).
* SDR-J is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* SDR-J is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with SDR-J; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* This file will be included in mp4processor
*/
#
#include "neaacdec.h"
#include "audiosink.h"
#include "newconverter.h"
class faadDecoder {
private:
bool processorOK;
bool aacInitialized;
uint32_t aacCap;
NeAACDecHandle aacHandle;
NeAACDecConfigurationPtr aacConf;
NeAACDecFrameInfo hInfo;
audioSink *ourSink;
int32_t baudRate;
newConverter *myConverter;
DSPCOMPLEX *tempBuffer;
bool corrector;
//
public:
faadDecoder (audioSink *as, bool corrector) {
ourSink = as;
this -> corrector = corrector;
aacCap = NeAACDecGetCapabilities ();
aacHandle = NeAACDecOpen ();
aacConf = NeAACDecGetCurrentConfiguration (aacHandle);
aacInitialized = false;
baudRate = 48000;
myConverter = new newConverter ();
// fprintf (stderr, "for 4096 samples in krijgen we %d samples uit\n",
// myConverter -> getOutputSize ());
tempBuffer = new DSPCOMPLEX [480];
}
~faadDecoder (void) {
NeAACDecClose (aacHandle);
delete myConverter;
delete [] tempBuffer;
}
int16_t MP42PCM (uint8_t buffer [], int16_t bufferLength) {
int16_t len;
int16_t i;
int16_t samples;
uint8_t channels;
long unsigned int sample_rate;
int16_t *outBuffer;
NeAACDecFrameInfo hInfo;
if (!aacInitialized) {
len = NeAACDecInit (aacHandle,
buffer, bufferLength, &sample_rate, &channels);
if (len < 0) {
fprintf (stderr, "Cannot handle this frame\n");
return 0;
}
outBuffer = (int16_t *)NeAACDecDecode (aacHandle,
&hInfo,
&buffer [len],
(uint64_t)(bufferLength - len));
aacInitialized = true;
}
else
outBuffer = (int16_t *)NeAACDecDecode (aacHandle,
&hInfo,
buffer,
(uint64_t)bufferLength);
sample_rate = hInfo. samplerate;
samples = hInfo. samples;
if ((sample_rate == 24000) ||
(sample_rate == 48000) ||
(sample_rate != baudRate))
baudRate = sample_rate;
// fprintf (stderr, "bytes consumed %d\n", (int)(hInfo. bytesconsumed));
// fprintf (stderr, "samplerate = %d, samples = %d, channels = %d, error = %d, sbr = %d\n", sample_rate, samples,
// hInfo. channels,
// hInfo. error,
// hInfo. sbr);
// fprintf (stderr, "header = %d\n", hInfo. header_type);
channels = hInfo. channels;
if (hInfo. error != 0) {
fprintf (stderr, "Warning: %s\n",
faacDecGetErrorMessage (hInfo. error));
return 0;
}
if (channels == 2 && corrector) {
int16_t amount;
for (i = 0; i < samples / 2; i ++) {
if (myConverter -> add (outBuffer [2 * i],
outBuffer [2 * i + 1],
tempBuffer, &amount)) {
ourSink -> putSamples (tempBuffer, amount);
}
}
}
else
if (channels == 2)
ourSink -> audioOut (outBuffer, samples / 2);
else
if (channels == 1) {
int16_t *buffer = (int16_t *)alloca (2 * samples);
int16_t i;
for (i = 0; i < samples; i ++) {
buffer [2 * i] = ((int16_t *)outBuffer) [i];
buffer [2 * i + 1] = buffer [2 * i];
}
ourSink -> audioOut (buffer, samples);
}
else
fprintf (stderr, "Cannot handle these channels\n");
return samples / 2;
}
};

View File

@@ -1,149 +0,0 @@
#
/*
* Copyright (C) 2016 .. 2022
* Jan van Katwijk (J.vanKatwijk@gmail.com)
* Lazy Chair Computing
*
* This file is part of Qt-DAB
*
* Qt-DAB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Qt-DAB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Qt-DAB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
// special instantiation for pairs of int16_t
// to be used for the faad decoder
#pragma once
//
// Very straightforward fractional resampler
#include "dab-constants.h"
class converter_2 {
private:
int32_t rateIn;
int32_t rateOut;
int32_t blockLength;
int32_t width;
DSPCOMPLEX *buffer;
int32_t bufferP;
long double floatTime;
long double inPeriod;
long double outPeriod;
//
// sin (-a) = - sin (--a)
double sincPI (double a) {
if (a == 0)
return 1.0;
return sin (M_PI * a) / (M_PI * a);
}
//
// cos (-a) = cos (a)
double HannCoeff (double a, int16_t width) {
DSPFLOAT x = 2 * M_PI * (0.5 + a / width);
if (x < 0)
x = - x;
return 0.5 - 0.5 * cos (x);
}
//
// Shannon applied to floatTime
// We determine the entry in the table acting as zero
DSPCOMPLEX getInterpolate (double floatTime) {
int32_t index = (int32_t)(floor (floatTime * rateIn));
int32_t i;
DSPCOMPLEX res = 0;
double localTime = floatTime - index * inPeriod;
//
// Due to rounding of the (floating) computation, it
// might happen that index + i is sometimes out of bounds
for (i = - width / 2; i < width / 2; i ++) {
if (index + i < 0 || index + i >= blockLength + width)
continue;
double ag = (localTime - i * inPeriod) / inPeriod;
double factor = HannCoeff (ag, width) * sincPI (ag);
res = res + DSPCOMPLEX (real (buffer [index + i]) * factor,
imag (buffer [index + i]) * factor);
}
return res;
}
//
public:
converter_2 (int32_t rateIn,
int32_t rateOut,
int32_t blockLength,
int16_t width) {
this -> rateIn = rateIn;
this -> rateOut = rateOut;
this -> blockLength = blockLength;
this -> width = width;
buffer = new DSPCOMPLEX [blockLength + width];
bufferP = 0;
inPeriod = 1.0 / rateIn;
outPeriod = 1.0 / rateOut;
fprintf (stderr, "converter from %d to %d\n", rateIn, rateOut);
// the first width / 2 samples are only used in the interpolation
// furthermore, they are neglected. So, we start with:
floatTime = width / 2 * inPeriod;
}
~converter_2 (void) {
delete [] buffer;
}
//
// The buffer consists of three parts
// width / 2 "old" values
// blockLength values that will be processed
// width / 2 "future" values
//
// Whenever the buffer filling reaches blockLength + width,
// we map the blockLength samples in the middle
bool add (int16_t in_re, int16_t in_im,
int16_t *out, int16_t *nOut) {
int32_t i;
int outP = 0;
double endTime;
buffer [bufferP ++] = DSPCOMPLEX (in_re, in_im);
if (bufferP < blockLength + width)
return false;
endTime = floatTime + blockLength * inPeriod;
// floatTime indicates the current time for the
// output samples, endtime is the time of the last
// input sample
while (floatTime < endTime ) {
DSPCOMPLEX temp = getInterpolate (floatTime);
out [2 * outP] = real (temp);
out [2 * outP + 1] = imag (temp);
outP += 1;
floatTime += outPeriod;
}
//
// shift the "width" samples at the end of the buffer
// The first "width / 2" samples of the buffer now are already processed
// but required for processing the next series
for (i = 0; i < width; i ++)
buffer [i] = buffer [blockLength + i];
//
// adjust the begin and end time
floatTime -= outP * outPeriod;
bufferP = floatTime / inPeriod + width / 2;
*nOut = outP;
return true;
}
int32_t getOutputSize (void) {
return rateOut * blockLength / rateIn;
}
};

View File

@@ -1,94 +0,0 @@
#
/*
* Copyright (C) 2013 .. 2020
* Jan van Katwijk (J.vanKatwijk@gmail.com)
* Lazy Chair Computing
*
* This file is part of the Qt-DAB
*
* Qt-DAB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Qt-DAB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Qt-TAB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __EPG_DECODER__
#define __EPG_DECODER__
#include <QObject>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <QString>
class progDesc {
public:
QString ident;
QString shortName;
QString mediumName;
QString longName;
int startTime;
progDesc () {
startTime = -1;
}
void clean () {
startTime = -1;
longName = "";
mediumName = "";
shortName = "";
ident = "";
}
};
class epgDecoder: public QObject {
Q_OBJECT
public:
epgDecoder ();
~epgDecoder ();
int process_epg (uint8_t *, int, uint32_t);
private:
uint32_t SId;
QString stringTable [20];
int getBit (uint8_t *, int);
uint32_t getBits (uint8_t *, int, int);
int process_epgElement (uint8_t *, int);
int schedule_element (uint8_t *, int);
int programme_element (uint8_t *, int, progDesc *);
int process_mediaDescription (uint8_t *, int);
int process_location (uint8_t *, int, progDesc *);
int location_element (uint8_t *, int, progDesc *);
int time_element (uint8_t *, int);
int genre_element (uint8_t *, int);
int bearer_element (uint8_t *, int);
int multimedia (uint8_t *, int);
void process_tokens (uint8_t *, int, int);
int process_token (uint8_t *, int);
void process_45 (uint8_t *, int, int);
void process_46 (uint8_t *, int, int);
QString process_471 (uint8_t *, int, int);
void process_472 (uint8_t *, int, int);
void process_473 (uint8_t *, int, int);
int process_474 (uint8_t *, int, int);
void process_475 (uint8_t *, int, int);
void process_476 (uint8_t *, int, int);
QString process_481 (uint8_t *, int, int);
void process_483 (uint8_t *, int, int);
void record (progDesc *);
signals:
void set_epgData (int, int, const QString &);
};
#endif

View File

@@ -1,140 +0,0 @@
#
/*
* Copyright (C) 2013 .. 2020
* Jan van Katwijk (J.vanKatwijk@gmail.com)
* Lazy Chair Computing
*
* This file is part of the Qt-DAB
*
* Qt-DAB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Qt-DAB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Qt-TAB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#pragma once
#include <QObject>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <QString>
class progDesc {
public:
QString ident;
QString bearer;
QString shortName;
QString mediumName;
QString longName;
QString shortDescription;
QString longDescription;
int startTime;
int stopTime;
progDesc () {
startTime = -1;
stopTime = -1;
}
void clean () {
startTime = -1;
longName = "";
mediumName = "";
shortName = "";
ident = "";
shortDescription = "";
longDescription = "";
}
};
class epgDecoder: public QObject {
Q_OBJECT
public:
epgDecoder ();
~epgDecoder ();
int process_epg (uint8_t *v, int e_length,
uint32_t SId, int subType, uint32_t theDay);
private:
uint32_t SId;
QString stringTable [20];
int subType;
uint32_t julianDate;
int getBit (uint8_t *v, int bitnr);
uint32_t getBits (uint8_t *v, int bitnr, int length);
int process_programGroups (uint8_t *v, int index);
int process_programGroup (uint8_t *v, int index);
int process_schedule (uint8_t *v, int index);
int process_program (uint8_t *v, int index, progDesc *);
int process_scope (uint8_t *v, int index, progDesc *);
int process_serviceScope (uint8_t *v, int index, progDesc *);
int process_mediaDescription (uint8_t *v, int index, progDesc *);
int process_ensemble (uint8_t *v, int index);
int process_service (uint8_t *v, int index, progDesc *);
int process_location (uint8_t *v, int index, progDesc *);
int process_bearer (uint8_t *v, int index, progDesc *);
int process_geoLocation (uint8_t *v, int index);
int process_programmeEvent (uint8_t *v, int index);
int process_onDemand (uint8_t *v, int index);
int process_genre (uint8_t *v, int index, progDesc *);
int process_keyWords (uint8_t *v, int index);
int process_link (uint8_t *v, int index);
int process_shortName (uint8_t *v, int index, progDesc *);
int process_mediumName (uint8_t *v, int index, progDesc *);
int process_longName (uint8_t *v, int index, progDesc *);
int process_shortDescription (uint8_t *v, int index, progDesc *);
int process_longDescription (uint8_t *v, int index, progDesc *);
int process_multiMedia (uint8_t *v, int index);
int process_radiodns (uint8_t *v, int index);
int process_time (uint8_t *v, int index, int *);
int process_relativeTime (uint8_t *v, int index);
int process_memberOf (uint8_t *v, int index);
int process_presentationTime (uint8_t *v, int index);
int process_acquisitionTime (uint8_t *v, int index);
int process_country (uint8_t *v, int index);
int process_point (uint8_t *v, int index);
int process_polygon (uint8_t *v, int index);
//
int process_412 (uint8_t *v, int index);
int process_440 (uint8_t *v, int index);
int process_46 (uint8_t *v, int index);
int process_471 (uint8_t *v, int index);
int process_472 (uint8_t *v, int index);
int process_473 (uint8_t *v, int index);
int process_474 (uint8_t *v, int index, int *);
int process_475 (uint8_t *v, int index);
int process_476_p (uint8_t *v, int index, QString *);
int process_476 (uint8_t *v, int index);
int process_481 (uint8_t *v, int index);
int process_482 (uint8_t *v, int index);
int process_483 (uint8_t *v, int index);
int process_484 (uint8_t *v, int index);
int process_485 (uint8_t *v, int index);
int process_4171 (uint8_t *v, int index);
int process_tokenTable (uint8_t *v, int index);
int process_token (uint8_t *v, int index);
int process_defaultLanguage (uint8_t *v, int index);
int process_obsolete (uint8_t *v, int index);
int get_shortId (uint8_t *v, int index);
void record (progDesc *);
QString getCData (uint8_t *v, int index, int elength);
signals:
void set_epgData (int, int,
const QString &,
const QString &);
};

View File

@@ -1,79 +0,0 @@
/******************************************************************************\
* British Broadcasting Corporation
* Copyright (c) 2006
*
* Author(s):
* Julian Cable
*
* Description:
* ETSI DAB/DRM Electronic Programme Guide XML Decompressor
*
*
******************************************************************************
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
\******************************************************************************/
#pragma once
#include <cstdint>
#include <vector>
#include <qdom.h>
using namespace std;
#define _BYTE uint8_t
class tag_length_value {
public:
uint8_t tag;
tag_length_value (const _BYTE* p);
bool is_cdata() const { return tag == 1; }
bool is_epg() const { return tag == 2; }
bool is_service_information() const { return tag == 3; }
bool is_string_token_table() const { return tag == 4; }
bool is_default_id() const { return tag == 5; }
bool is_child_element() const { return (5<tag) && (tag<0x80); }
bool is_attribute() const { return tag>=0x80; }
size_t length;
_BYTE* value;
};
class CEPGDecoder {
public:
CEPGDecoder() {
}
void decode (const std::vector<_BYTE>&,
const QString &);
QDomDocument doc;
};
/* Modified Julian Date ----------------------------------------------------- */
class CModJulDate
{
public:
CModJulDate() : iYear(0), iDay(0), iMonth(0) {}
CModJulDate(const uint32_t iModJulDate) {Set(iModJulDate);}
void Set(const uint32_t iModJulDate);
int GetYear() {return iYear;}
int GetDay() {return iDay;}
int GetMonth() {return iMonth;}
protected:
int iYear, iDay, iMonth;
};

View File

@@ -1,36 +0,0 @@
/**
* static inline parity(int x) -- compute parity (up to 32 bits?)
*/
/* Determine parity of argument: 1 = odd, 0 = even */
#ifdef __i386__
static inline int parityb(unsigned char x){
__asm__ __volatile__ ("test %1,%1;setpo %0" : "=g"(x) : "r" (x));
return x;
}
#else
#if __cplusplus
extern "C" {
#endif
void partab_init();
#if __cplusplus
};
#endif
static inline int parityb(unsigned char x){
extern unsigned char Partab[256];
extern int Parity_initialized;
if(!Parity_initialized){
partab_init();
}
return Partab[x];
}
#endif
static inline int parity(int x){
/* Fold down to one byte */
x ^= (x >> 16);
x ^= (x >> 8);
return parityb(x);
}

View File

@@ -1,63 +0,0 @@
#
#ifndef __VITERBI__
#define __VITERBI__
/*
* Viterbi.h according to the SPIRAL project
*/
#include "dab-constants.h"
// For our particular viterbi decoder, we have
class viterbi {
#define RATE 4
#define NUMSTATES 64
#define BITS_PER_BYTE 8
// decision_t is a BIT vector
typedef union {
uint8_t t [NUMSTATES / BITS_PER_BYTE];
uint32_t w [NUMSTATES / 32];
uint16_t s [NUMSTATES / 16];
uint8_t c [NUMSTATES / 8];
} decision_t __attribute__ ((aligned (16)));
typedef union {
int16_t t[NUMSTATES];
} metric_t __attribute__ ((aligned (16)));
/*
* State info for instance of Viterbi decoder
*/
struct v {
/* path metric buffer 1 */
__attribute__ ((aligned (16))) metric_t metrics1;
/* path metric buffer 2 */
__attribute__ ((aligned (16))) metric_t metrics2;
/* Pointers to path metrics, swapped on every bit */
metric_t *old_metrics,*new_metrics;
decision_t *decisions; /* decisions */
};
public:
viterbi (int16_t);
~viterbi (void);
void deconvolve (int16_t *, uint8_t *);
private:
struct v vp;
int16_t Branchtab [NUMSTATES / 2 * RATE] __attribute__ ((aligned (16)));
int16_t parity (int16_t);
void init_viterbi (struct v *, int16_t);
void update_viterbi_blk_GENERIC (struct v *, int16_t *,
int16_t);
void chainback_viterbi (struct v *, uint8_t *, int16_t, uint16_t);
void BFLY (int32_t, int, int16_t *,
struct v *, decision_t *);
uint8_t *data;
int16_t *symbols;
int16_t frameBits;
};
#endif

View File

@@ -1,62 +0,0 @@
#
/*
* Copyright (C) 2011 .. 2023
* Jan van Katwijk (J.vanKatwijk@gmail.com)
* Lazy Chair Computing
*
* This file is part of Qt-DAB
*
* Qt-DAB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Qt-DAB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Qt-DAB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#pragma once
#include <dab-constants.h>
#include <QString>
#include <ringbuffer.h>
#include "rtpsession.h"
#include "rtpsessionparams.h"
#include "rtpudpv4transmitter.h"
#include "rtpipv4address.h"
#include "rtptimeutilities.h"
#include "rtppacket.h"
#include "audio-base.h"
using namespace jrtplib;
class rtpStreamer : public AudioBase {
Q_OBJECT
public:
rtpStreamer (QString name, int32_t port,
RingBuffer<int16_t> *);
~rtpStreamer (void);
void audioOutput (float *, int);
private:
QString theName;
int32_t thePort;
RingBuffer<float> *theBuffer;
RingBuffer<float> *inBuffer;
RTPSession session;
RTPSessionParams sessionparams;
RTPUDPv4TransmissionParams transparams;
void sendBuffer (uint8_t *, int16_t);
float left [481];
float right [481];
uint8_t buffer [1024];
int16_t fillP;
int16_t convIndex;
int mapTable_int [481];
float mapTable_float [481];
};

View File

@@ -1,66 +0,0 @@
#
/*
* Copyright (C) 2008, 2009, 2010
* Jan van Katwijk (J.vanKatwijk@gmail.com)
* Lazy Chair Computing
*
* This file is part of the Qt-DAB
*
* Qt-DAB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Qt-DAB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Qt-DAB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#pragma once
#include "dab-constants.h"
#include <vector>
#include <qwt.h>
#include <qwt_slider.h>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_marker.h>
#include <qwt_plot_grid.h>
#include <qwt_dial.h>
#include <qwt_dial_needle.h>
#include <qwt_plot_spectrogram.h>
#include <qwt_color_map.h>
#include <qwt_plot_spectrogram.h>
#include <qwt_scale_widget.h>
#include <qwt_scale_draw.h>
#include <qwt_plot_zoomer.h>
#include <qwt_plot_panner.h>
#include <qwt_plot_layout.h>
#include "dab-constants.h"
/*
* for the waterfall display
*/
class IQDisplay: public QObject, public QwtPlotSpectrogram {
Q_OBJECT
public:
IQDisplay (QwtPlot *, int16_t);
~IQDisplay();
void DisplayIQ (Complex *, int, float);
private:
int32_t x_amount;
std::vector<double> plotData;
std::vector<double> plot2;
// std::vector<complex<int> > Points;
// std::complex<int> *Points;
QwtPlot *plotgrid;
int _OutputRate;
int Radius;
int CycleCount;
void setPoint (int, int, int);
private slots:
};

View File

@@ -1,140 +0,0 @@
#
/*
* Copyright (C) 2016 .. 2022
* Jan van Katwijk (J.vanKatwijk@gmail.com)
* Lazy Chair Computing
*
* This file is part of Qt-DAB
*
* Qt-DAB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Qt-DAB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Qt-DAB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#pragma once
#include <QObject>
#include <QStackedWidget>
#include <qwt.h>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_marker.h>
#include <qwt_plot_grid.h>
#include <qwt_color_map.h>
#include <qwt_plot_spectrogram.h>
#include <qwt_plot_zoomer.h>
#include <qwt_plot_panner.h>
#include <qwt_plot_layout.h>
#include <qwt_scale_widget.h>
#include <QBrush>
#include <QTimer>
#include <stdint.h>
#include "spectrogramdata.h"
class SpectrumViewer;
class WaterfallViewer;
class QwtLinearColorMap;
class QwtScaleWidget;
/*
* The stacked object is called the scope, it is built as a wrapper
* around the actual display mechanisms the waterfall and the
* spectrumviewer.
*/
#define WATERFALL_MODE 0
#define SPECTRUM_MODE 1
class Scope: public QObject {
Q_OBJECT
public:
Scope (QwtPlot *, uint16_t, uint16_t);
~Scope (void);
void Display (double *, double *, double, int32_t);
void SelectView (uint8_t);
void setBitDepth (int16_t);
private:
QwtPlot *Plotter;
uint16_t Displaysize;
uint16_t Rastersize;
uint8_t CurrentWidget;
SpectrumViewer *Spectrum;
WaterfallViewer *Waterfall;
int16_t bitDepth;
float get_db (float);
private slots:
void leftClicked (int);
void rightClicked (int);
signals:
void clickedwithLeft (int);
void clickedwithRight (int);
};
/*
* for the waterfall display
*/
class WaterfallViewer: public QObject, public QwtPlotSpectrogram {
Q_OBJECT
public:
WaterfallViewer (QwtPlot *, uint16_t, uint16_t);
~WaterfallViewer ();
void ViewWaterfall (double *,
double *,
double,
int32_t);
private:
SpectrogramData *WaterfallData;
QwtPlot *plotgrid;
uint16_t Displaysize;
uint16_t Rastersize;
double *plotData;
QwtPlotMarker *Marker;
uint16_t IndexforMarker;
QwtPlotPicker *lm_picker;
uint8_t OneofTwo;
QwtLinearColorMap *colorMap;
QwtScaleWidget *rightAxis;
private slots:
void leftMouseClick (const QPointF &);
signals:
void leftClicked (int);
};
/*
* The spectrumDisplay
*/
class SpectrumViewer: public QObject {
Q_OBJECT
public:
SpectrumViewer (QwtPlot *, uint16_t);
~SpectrumViewer (void);
void ViewSpectrum (double *, double *, double, int32_t);
void setBitDepth (int16_t);
private:
QwtPlot *plotgrid;
uint16_t Displaysize;
QwtPlotGrid *grid;
QwtPlotCurve *SpectrumCurve;
QwtPlotMarker *Marker;
uint32_t IndexforMarker;
QwtPlotPicker *lm_picker;
QwtPlotPicker *rm_picker;
QBrush *ourBrush;
int16_t bitDepth;
int32_t normalizer;
float get_db (float);
private slots:
void leftMouseClick (const QPointF &);
void rightMouseClick (const QPointF &);
signals:
void leftClicked (int);
void rightClicked (int);
};

View File

@@ -1,57 +0,0 @@
#
/*
* Copyright (C) 2016 .. 2022
* Jan van Katwijk (J.vanKatwijk@gmail.com)
* Lazy Chair Computing
*
* This file is part of Qt-DAB
*
* Qt-DAB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Qt-DAB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Qt-DAB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#pragma once
#include <cstdio>
#include <cstdlib>
#include <qwt_interval.h>
#include <QPen>
//
// Qwt 6.2 is different from the 6.1 version, these mods
// seem to work
# include <qwt_raster_data.h>
class spectrogramData: public QwtRasterData {
public:
double *data; // pointer to actual data
int left; // index of left most element in raster
int width; // raster width
int height; // rasterheigth
int datawidth; // width of matrix
int dataheight; // for now == rasterheigth
double max;
spectrogramData (double *data, int left,
int width, int height,
int datawidth, double max);
~spectrogramData ();
void initRaster (const QRectF &x, const QSize &raster);
QwtInterval interval (Qt::Axis x) const;
double value (double x, double y) const;
};

View File

@@ -1,74 +0,0 @@
#
/*
* Copyright (C) 2016 .. 2023
* Jan van Katwijk (J.vanKatwijk@gmail.com)
* Lazy Chair Computing
*
* This file is part of the Qt-DAB program
*
* Qt-DAB is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Qt-DAB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Qt-DAB; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#pragma once
#include <cstdint>
#include <QComboBox>
#include <QObject>
#include <QString>
#include <QSettings>
#include <QTableWidget>
#include <QFile>
#include <QtXml>
#include <stdio.h>
//
// a simple convenience class
//
typedef struct {
QString key;
int fKHz;
bool skip;
} dabFrequencies;
class bandHandler: public QObject {
Q_OBJECT
public:
bandHandler (const QString &, QSettings *);
~bandHandler ();
void saveSettings ();
void setupChannels (QComboBox *s, uint8_t band);
void setup_skipList (const QString &);
int32_t Frequency (const QString &Channel);
int16_t channelIndex (const QString &channel);
int firstChannel ();
int nextChannel (int);
int prevChannel (int);
void show ();
void hide ();
bool isHidden ();
public slots:
void cellSelected (int, int);
private:
QSettings *dabSettings;
QString fileName;
int lastOf (dabFrequencies *);
dabFrequencies *selectedBand;
QTableWidget theTable;
void default_skipList ();
void file_skipList (const QString &);
void updateEntry (const QString &);
};

View File

@@ -1,966 +0,0 @@
#
#include <stdint.h>
// generated map
static uint8_t qt_map [] = {
60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, 62,
10, 10, 60, 104, 116, 109, 108, 62, 10, 32, 32, 60, 104, 101, 97,
100, 62, 10, 32, 32, 32, 32, 60, 109, 101, 116, 97, 32, 110, 97,
109, 101, 61, 34, 118, 105, 101, 119, 112, 111, 114, 116, 34, 32, 99,
111, 110, 116, 101, 110, 116, 61, 34, 105, 110, 105, 116, 105, 97, 108,
45, 115, 99, 97, 108, 101, 61, 49, 46, 48, 44, 32, 117, 115, 101,
114, 45, 115, 99, 97, 108, 97, 98, 108, 101, 61, 110, 111, 34, 32,
47, 62, 10, 32, 32, 32, 32, 32, 60, 108, 105, 110, 107, 32, 114,
101, 108, 61, 34, 115, 116, 121, 108, 101, 115, 104, 101, 101, 116, 34,
32, 104, 114, 101, 102, 61, 34, 104, 116, 116, 112, 115, 58, 47, 47,
117, 110, 112, 107, 103, 46, 99, 111, 109, 47, 108, 101, 97, 102, 108,
101, 116, 64, 49, 46, 54, 46, 48, 47, 100, 105, 115, 116, 47, 108,
101, 97, 102, 108, 101, 116, 46, 99, 115, 115, 34, 32, 105, 110, 116,
101, 103, 114, 105, 116, 121, 61, 34, 115, 104, 97, 53, 49, 50, 45,
120, 119, 69, 47, 65, 122, 57, 122, 114, 106, 66, 73, 112, 104, 65,
99, 66, 98, 51, 70, 54, 74, 86, 113, 120, 102, 52, 54, 43, 67,
68, 76, 119, 102, 76, 77, 72, 108, 111, 78, 117, 54, 75, 69, 81,
67, 65, 87, 105, 54, 72, 99, 68, 85, 98, 101, 79, 102, 66, 73,
112, 116, 70, 55, 116, 99, 67, 122, 117, 115, 75, 70, 106, 70, 119,
50, 121, 117, 118, 69, 112, 68, 76, 57, 119, 81, 61, 61, 34, 32,
99, 114, 111, 115, 115, 111, 114, 105, 103, 105, 110, 61, 34, 34, 47,
62, 10, 9, 60, 108, 105, 110, 107, 32, 114, 101, 108, 61, 34, 105,
99, 111, 110, 34, 32, 104, 114, 101, 102, 61, 34, 100, 97, 116, 97,
58, 44, 34, 62, 10, 9, 60, 115, 116, 121, 108, 101, 32, 116, 121,
112, 101, 61, 34, 116, 101, 120, 116, 47, 99, 115, 115, 34, 62, 10,
9, 32, 32, 32, 104, 116, 109, 108, 32, 123, 32, 104, 101, 105, 103,
104, 116, 58, 32, 49, 48, 48, 37, 32, 125, 10, 9, 32, 32, 32,
98, 111, 100, 121, 32, 123, 32, 104, 101, 105, 103, 104, 116, 58, 32,
49, 48, 48, 37, 59, 32, 109, 97, 114, 103, 105, 110, 58, 32, 48,
59, 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, 48, 32, 125, 10,
9, 32, 32, 32, 46, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101,
114, 45, 105, 99, 111, 110, 32, 123, 10, 9, 32, 32, 32, 32, 32,
32, 112, 97, 100, 100, 105, 110, 103, 58, 48, 112, 120, 59, 10, 9,
32, 32, 32, 32, 32, 32, 109, 97, 114, 103, 105, 110, 58, 48, 112,
120, 59, 10, 9, 32, 32, 32, 125, 10, 9, 32, 32, 32, 35, 109,
97, 112, 95, 99, 97, 110, 118, 97, 115, 32, 123, 32, 104, 101, 105,
103, 104, 116, 58, 32, 49, 48, 48, 37, 32, 125, 10, 9, 32, 32,
32, 35, 105, 110, 102, 111, 32, 123, 10, 9, 32, 32, 32, 32, 32,
32, 112, 111, 115, 105, 116, 105, 111, 110, 58, 32, 97, 98, 115, 111,
108, 117, 116, 101, 59, 10, 9, 32, 32, 32, 32, 32, 32, 119, 105,
100, 116, 104, 58, 50, 48, 37, 59, 10, 9, 32, 32, 32, 32, 32,
32, 104, 101, 105, 103, 104, 116, 58, 49, 48, 48, 37, 59, 10, 9,
32, 32, 32, 32, 32, 32, 98, 111, 116, 116, 111, 109, 58, 48, 112,
120, 59, 10, 9, 32, 32, 32, 32, 32, 32, 114, 105, 103, 104, 116,
58, 48, 112, 120, 59, 10, 9, 32, 32, 32, 32, 32, 32, 116, 111,
112, 58, 48, 112, 120, 59, 10, 9, 32, 32, 32, 32, 32, 32, 98,
97, 99, 107, 103, 114, 111, 117, 110, 100, 45, 99, 111, 108, 111, 114,
58, 32, 119, 104, 105, 116, 101, 59, 10, 9, 32, 32, 32, 32, 32,
32, 98, 111, 114, 100, 101, 114, 45, 108, 101, 102, 116, 58, 49, 112,
120, 32, 35, 54, 54, 54, 32, 115, 111, 108, 105, 100, 59, 10, 9,
32, 32, 32, 32, 32, 32, 102, 111, 110, 116, 45, 102, 97, 109, 105,
108, 121, 58, 72, 101, 108, 118, 101, 116, 105, 99, 97, 59, 10, 9,
32, 32, 32, 125, 10, 9, 32, 32, 32, 35, 105, 110, 102, 111, 32,
100, 105, 118, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 112, 97,
100, 100, 105, 110, 103, 58, 48, 112, 120, 59, 10, 9, 32, 32, 32,
32, 32, 32, 112, 97, 100, 100, 105, 110, 103, 45, 108, 101, 102, 116,
58, 49, 48, 112, 120, 59, 10, 9, 32, 32, 32, 32, 32, 32, 109,
97, 114, 103, 105, 110, 58, 48, 112, 120, 59, 10, 9, 32, 32, 32,
125, 10, 9, 32, 32, 32, 35, 105, 110, 102, 111, 32, 100, 105, 118,
32, 104, 49, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 109, 97,
114, 103, 105, 110, 45, 116, 111, 112, 58, 49, 48, 112, 120, 59, 10,
9, 32, 32, 32, 32, 32, 32, 102, 111, 110, 116, 45, 115, 105, 122,
101, 58, 49, 54, 112, 120, 59, 10, 9, 32, 32, 32, 125, 10, 9,
32, 32, 32, 35, 105, 110, 102, 111, 32, 100, 105, 118, 32, 112, 32,
123, 10, 9, 32, 32, 32, 32, 32, 32, 102, 111, 110, 116, 45, 115,
105, 122, 101, 58, 49, 52, 112, 120, 59, 10, 9, 32, 32, 32, 32,
32, 32, 99, 111, 108, 111, 114, 58, 35, 51, 51, 51, 59, 10, 9,
32, 32, 32, 125, 10, 9, 32, 32, 32, 46, 99, 111, 108, 111, 114,
105, 110, 103, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 99, 111,
108, 111, 114, 58, 32, 114, 101, 100, 10, 9, 32, 32, 32, 125, 10,
9, 60, 47, 115, 116, 121, 108, 101, 62, 10, 10, 9, 60, 115, 99,
114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 104, 116, 116, 112, 115,
58, 47, 47, 97, 106, 97, 120, 46, 103, 111, 111, 103, 108, 101, 97,
112, 105, 115, 46, 99, 111, 109, 47, 97, 106, 97, 120, 47, 108, 105,
98, 115, 47, 106, 113, 117, 101, 114, 121, 47, 51, 46, 52, 46, 49,
47, 106, 113, 117, 101, 114, 121, 46, 109, 105, 110, 46, 106, 115, 34,
62, 60, 47, 115, 99, 114, 105, 112, 116, 62, 10, 9, 60, 115, 99,
114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 104, 116, 116, 112, 115,
58, 47, 47, 117, 110, 112, 107, 103, 46, 99, 111, 109, 47, 108, 101,
97, 102, 108, 101, 116, 64, 49, 46, 54, 46, 48, 47, 100, 105, 115,
116, 47, 108, 101, 97, 102, 108, 101, 116, 46, 106, 115, 34, 32, 105,
110, 116, 101, 103, 114, 105, 116, 121, 61, 34, 115, 104, 97, 53, 49,
50, 45, 103, 90, 119, 73, 71, 57, 120, 51, 119, 85, 88, 103, 50,
104, 100, 88, 70, 54, 43, 114, 86, 107, 76, 70, 47, 48, 86, 105,
57, 85, 56, 68, 50, 78, 116, 103, 52, 71, 97, 53, 73, 53, 66,
90, 112, 86, 107, 86, 120, 108, 74, 87, 98, 83, 81, 116, 88, 80,
83, 105, 85, 84, 116, 67, 48, 84, 106, 116, 71, 79, 109, 120, 97,
49, 65, 74, 80, 117, 86, 48, 67, 80, 116, 104, 101, 119, 61, 61,
34, 32, 99, 114, 111, 115, 115, 111, 114, 105, 103, 105, 110, 61, 34,
34, 62, 60, 47, 115, 99, 114, 105, 112, 116, 62, 10, 9, 60, 115,
99, 114, 105, 112, 116, 32, 116, 121, 112, 101, 61, 34, 116, 101, 120,
116, 47, 106, 97, 118, 97, 115, 99, 114, 105, 112, 116, 34, 62, 10,
9, 32, 32, 32, 77, 97, 112, 32, 61, 32, 110, 117, 108, 108, 59,
10, 9, 32, 32, 32, 118, 97, 114, 32, 104, 111, 109, 101, 76, 97,
116, 105, 116, 117, 100, 101, 32, 61, 32, 36, 59, 10, 9, 32, 32,
32, 118, 97, 114, 32, 104, 111, 109, 101, 76, 111, 110, 103, 105, 116,
117, 100, 101, 32, 61, 32, 36, 59, 10, 9, 32, 32, 32, 118, 97,
114, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32,
61, 32, 123, 125, 59, 10, 9, 32, 32, 32, 118, 97, 114, 32, 116,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120,
9, 61, 32, 48, 59, 10, 10, 9, 32, 32, 32, 99, 111, 110, 115,
116, 32, 77, 65, 80, 95, 82, 69, 83, 69, 84, 9, 9, 61, 32,
48, 59, 10, 9, 32, 32, 32, 99, 111, 110, 115, 116, 32, 77, 65,
80, 95, 70, 82, 65, 77, 69, 9, 9, 61, 32, 49, 59, 10, 9,
32, 32, 32, 99, 111, 110, 115, 116, 32, 77, 65, 80, 95, 77, 65,
88, 95, 84, 82, 65, 78, 83, 9, 9, 61, 32, 50, 59, 10, 9,
32, 32, 32, 99, 111, 110, 115, 116, 32, 77, 65, 80, 95, 78, 79,
82, 77, 95, 84, 82, 65, 78, 83, 32, 9, 61, 32, 52, 59, 10,
9, 32, 32, 32, 99, 111, 110, 115, 116, 32, 77, 65, 80, 95, 67,
85, 82, 82, 69, 78, 84, 32, 9, 9, 61, 32, 56, 59, 10, 10,
9, 32, 32, 32, 99, 111, 110, 115, 116, 32, 73, 67, 79, 78, 95,
79, 84, 72, 69, 82, 70, 82, 65, 77, 69, 9, 61, 32, 48, 59,
10, 9, 32, 32, 32, 99, 111, 110, 115, 116, 32, 73, 67, 79, 78,
95, 70, 85, 82, 84, 72, 69, 83, 84, 9, 9, 61, 32, 49, 59,
10, 9, 32, 32, 32, 99, 111, 110, 115, 116, 32, 73, 67, 79, 78,
95, 84, 79, 80, 70, 82, 65, 77, 69, 9, 9, 61, 32, 50, 59,
10, 9, 32, 32, 32, 99, 111, 110, 115, 116, 32, 73, 67, 79, 78,
95, 67, 85, 82, 82, 69, 78, 84, 9, 9, 61, 32, 51, 59, 10,
10, 9, 32, 32, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 103,
101, 116, 73, 99, 111, 110, 70, 111, 114, 72, 111, 109, 101, 32, 40,
41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 118, 97, 114, 32,
104, 101, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32,
99, 114, 101, 97, 116, 101, 69, 108, 101, 109, 101, 110, 116, 32, 40,
34, 80, 34, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 104, 101,
46, 105, 110, 110, 101, 114, 72, 84, 77, 76, 32, 61, 32, 39, 42,
39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 118, 97, 114, 32, 115,
101, 108, 104, 116, 109, 108, 32, 61, 32, 39, 39, 59, 10, 9, 32,
32, 32, 32, 32, 32, 104, 101, 32, 61, 32, 39, 60, 100, 105, 118,
32, 115, 116, 121, 108, 101, 61, 34, 102, 111, 110, 116, 45, 115, 105,
122, 101, 58, 49, 114, 101, 109, 34, 62, 38, 35, 120, 50, 66, 53,
53, 60, 47, 100, 105, 118, 62, 39, 59, 10, 9, 32, 32, 32, 32,
32, 32, 118, 97, 114, 32, 105, 99, 111, 110, 32, 61, 32, 76, 46,
100, 105, 118, 73, 99, 111, 110, 32, 40, 123, 104, 116, 109, 108, 58,
32, 104, 101, 44, 32, 99, 108, 97, 115, 115, 78, 97, 109, 101, 58,
32, 39, 104, 111, 109, 101, 45, 105, 99, 111, 110, 39, 125, 41, 59,
10, 9, 32, 32, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32,
105, 99, 111, 110, 59, 10, 9, 32, 32, 32, 125, 10, 10, 9, 32,
32, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 103, 101, 116, 73,
99, 111, 110, 70, 111, 114, 84, 114, 97, 110, 115, 109, 105, 116, 116,
101, 114, 32, 40, 107, 101, 121, 41, 32, 123, 10, 9, 32, 32, 32,
32, 32, 32, 118, 97, 114, 32, 104, 101, 32, 61, 32, 100, 111, 99,
117, 109, 101, 110, 116, 46, 32, 99, 114, 101, 97, 116, 101, 69, 108,
101, 109, 101, 110, 116, 32, 40, 34, 80, 34, 41, 59, 10, 47, 47,
9, 32, 32, 32, 32, 32, 32, 104, 101, 46, 105, 110, 110, 101, 114,
72, 84, 77, 76, 32, 61, 32, 39, 42, 39, 59, 10, 10, 9, 32,
32, 32, 32, 32, 32, 118, 97, 114, 32, 115, 101, 108, 104, 116, 109,
108, 32, 61, 32, 39, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32,
105, 102, 32, 40, 107, 101, 121, 32, 61, 61, 32, 73, 67, 79, 78,
95, 79, 84, 72, 69, 82, 70, 82, 65, 77, 69, 41, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 104, 101, 32, 61, 32, 39, 60,
100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 102, 111, 110, 116,
45, 115, 105, 122, 101, 32, 58, 49, 46, 53, 114, 101, 109, 59, 34,
62, 32, 38, 35, 120, 49, 70, 52, 67, 67, 60, 47, 100, 105, 118,
62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 101, 108, 115, 101,
10, 9, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 107, 101, 121,
32, 61, 61, 32, 73, 67, 79, 78, 95, 70, 85, 82, 84, 72, 69,
83, 84, 41, 10, 47, 47, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 104, 101, 32, 61, 32, 39, 60, 100, 105, 118, 32, 115, 116, 121,
108, 101, 61, 34, 102, 111, 110, 116, 45, 115, 105, 122, 101, 32, 58,
49, 46, 50, 114, 101, 109, 34, 62, 32, 38, 35, 120, 240, 159, 143,
129, 60, 47, 100, 105, 118, 62, 39, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 104, 101, 32, 61, 32, 39, 60, 100, 105, 118,
32, 115, 116, 121, 108, 101, 61, 34, 102, 111, 110, 116, 45, 115, 105,
122, 101, 32, 58, 49, 46, 52, 114, 101, 109, 34, 62, 32, 38, 35,
120, 49, 70, 51, 67, 49, 60, 47, 100, 105, 118, 62, 39, 59, 10,
9, 32, 32, 32, 32, 32, 32, 101, 108, 115, 101, 10, 9, 32, 32,
32, 32, 32, 32, 105, 102, 32, 40, 107, 101, 121, 32, 61, 61, 32,
73, 67, 79, 78, 95, 84, 79, 80, 70, 82, 65, 77, 69, 41, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 104, 101, 32, 61, 32,
39, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 102, 111,
110, 116, 45, 115, 105, 122, 101, 32, 58, 48, 46, 55, 114, 101, 109,
59, 34, 62, 32, 38, 35, 120, 50, 54, 65, 66, 60, 47, 100, 105,
118, 62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 101, 108, 115,
101, 9, 47, 47, 32, 73, 67, 79, 78, 95, 67, 85, 82, 82, 69,
78, 84, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 104, 101,
32, 61, 32, 39, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, 61,
34, 102, 111, 110, 116, 45, 115, 105, 122, 101, 32, 58, 49, 46, 52,
114, 101, 109, 59, 34, 62, 32, 38, 35, 120, 49, 70, 54, 65, 57,
60, 47, 100, 105, 118, 62, 39, 59, 10, 9, 32, 32, 32, 32, 32,
32, 10, 9, 32, 32, 32, 32, 32, 32, 118, 97, 114, 32, 105, 99,
111, 110, 32, 61, 32, 76, 46, 100, 105, 118, 73, 99, 111, 110, 32,
40, 123, 104, 116, 109, 108, 58, 32, 104, 101, 44, 32, 99, 108, 97,
115, 115, 78, 97, 109, 101, 58, 32, 39, 116, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 45, 105, 99, 111, 110, 39, 125, 41, 59, 10,
9, 32, 32, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 105,
99, 111, 110, 59, 10, 9, 32, 32, 32, 125, 10, 10, 9, 32, 32,
32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 104, 97, 110, 100, 108,
101, 95, 109, 97, 112, 95, 114, 101, 115, 101, 116, 32, 40, 41, 32,
123, 10, 9, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118,
97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 116,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120,
59, 32, 105, 32, 43, 43, 41, 32, 123, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 77, 97, 112, 46, 32, 114, 101, 109, 111, 118,
101, 76, 97, 121, 101, 114, 32, 40, 84, 114, 97, 110, 115, 109, 105,
116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 109, 97, 114, 107,
101, 114, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
100, 101, 108, 101, 116, 101, 32, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 115, 32, 91, 105, 93, 59, 10, 9, 32, 32, 32, 32,
32, 32, 125, 10, 10, 9, 32, 32, 32, 32, 32, 32, 84, 114, 97,
110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 61, 32, 123, 125, 59,
10, 9, 32, 32, 32, 32, 32, 32, 116, 114, 97, 110, 115, 109, 105,
116, 116, 101, 114, 73, 110, 100, 101, 120, 32, 61, 32, 48, 59, 10,
9, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 120, 120, 32, 61,
32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 103, 101, 116, 69,
108, 101, 109, 101, 110, 116, 66, 121, 73, 100, 32, 40, 39, 115, 101,
108, 105, 110, 102, 111, 39, 41, 59, 10, 9, 32, 32, 32, 32, 32,
32, 120, 120, 32, 46, 32, 105, 110, 110, 101, 114, 72, 84, 77, 76,
32, 61, 32, 39, 32, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32,
108, 101, 116, 32, 121, 121, 32, 61, 32, 100, 111, 99, 117, 109, 101,
110, 116, 46, 32, 103, 101, 116, 69, 108, 101, 109, 101, 110, 116, 66,
121, 73, 100, 32, 40, 39, 115, 101, 108, 67, 111, 117, 110, 116, 39,
41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 121, 121, 46, 32, 105,
110, 110, 101, 114, 72, 84, 77, 76, 32, 61, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 39,
110, 117, 109, 98, 101, 114, 32, 111, 102, 32, 116, 114, 97, 110, 115,
109, 105, 116, 116, 101, 114, 115, 32, 39, 32, 43, 32, 116, 114, 97,
110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 59, 10,
9, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 122, 122, 32, 61,
32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 103, 101, 116, 69,
108, 101, 109, 101, 110, 116, 66, 121, 73, 100, 32, 40, 39, 100, 105,
115, 116, 97, 110, 99, 101, 39, 41, 59, 10, 9, 32, 32, 32, 32,
32, 32, 122, 122, 46, 32, 105, 110, 110, 101, 114, 72, 84, 77, 76,
32, 61, 32, 39, 39, 59, 10, 9, 32, 32, 32, 125, 10, 47, 47,
10, 47, 47, 9, 119, 104, 101, 110, 32, 101, 110, 116, 101, 114, 105,
110, 103, 32, 97, 32, 110, 101, 119, 32, 99, 104, 97, 110, 110, 101,
108, 44, 32, 119, 104, 105, 108, 101, 32, 109, 97, 105, 110, 116, 97,
105, 110, 105, 110, 103, 32, 97, 108, 108, 10, 47, 47, 9, 101, 108,
101, 109, 101, 110, 116, 115, 32, 111, 110, 32, 116, 104, 101, 32, 109,
97, 112, 44, 32, 109, 97, 107, 101, 32, 116, 104, 101, 32, 101, 108,
101, 109, 101, 110, 116, 115, 32, 100, 105, 102, 102, 101, 114, 101, 110,
116, 10, 47, 47, 9, 97, 110, 100, 32, 114, 101, 99, 111, 114, 100,
32, 116, 104, 97, 116, 32, 116, 104, 101, 32, 101, 108, 101, 109, 101,
110, 116, 115, 32, 97, 114, 101, 32, 110, 111, 116, 32, 105, 110, 32,
116, 104, 101, 32, 99, 117, 114, 114, 101, 110, 116, 32, 102, 114, 97,
109, 101, 32, 97, 110, 121, 109, 111, 114, 101, 10, 9, 32, 32, 32,
102, 117, 110, 99, 116, 105, 111, 110, 32, 104, 97, 110, 100, 108, 101,
95, 109, 97, 112, 95, 102, 114, 97, 109, 101, 32, 40, 41, 32, 123,
10, 9, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118, 97,
114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 116, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 59,
32, 105, 32, 43, 43, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 105, 102, 32, 40, 84, 114, 97, 110, 115, 109, 105,
116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 115, 116, 97, 116,
117, 115, 32, 61, 61, 32, 116, 114, 117, 101, 41, 32, 123, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 114, 97,
110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32,
115, 116, 97, 116, 117, 115, 32, 61, 32, 102, 97, 108, 115, 101, 59,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93,
46, 32, 99, 117, 114, 114, 101, 110, 116, 32, 61, 32, 102, 97, 108,
115, 101, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 105, 102, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116,
101, 114, 115, 32, 91, 105, 93, 46, 32, 102, 117, 114, 116, 104, 101,
115, 116, 41, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 99, 111, 110, 116, 105, 110, 117, 101, 59,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 77,
97, 112, 46, 32, 114, 101, 109, 111, 118, 101, 76, 97, 121, 101, 114,
32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32,
91, 105, 93, 46, 32, 109, 97, 114, 107, 101, 114, 41, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116,
32, 105, 99, 111, 110, 32, 61, 32, 103, 101, 116, 73, 99, 111, 110,
70, 111, 114, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 32,
40, 73, 67, 79, 78, 95, 79, 84, 72, 69, 82, 70, 82, 65, 77,
69, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 108, 101, 116, 32, 101, 108, 101, 109, 101, 110, 116, 32, 61,
32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91,
105, 93, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 108, 101, 116, 32, 101, 108, 101, 109, 101, 110, 116, 77, 97,
114, 107, 101, 114, 32, 61, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 76, 46, 109, 97, 114, 107, 101, 114, 32, 40, 91, 101, 108,
101, 109, 101, 110, 116, 46, 108, 97, 116, 44, 32, 101, 108, 101, 109,
101, 110, 116, 46, 108, 111, 110, 93, 44, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
123, 105, 99, 111, 110, 58, 32, 105, 99, 111, 110, 125, 41, 46, 97,
100, 100, 84, 111, 40, 77, 97, 112, 41, 59, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 108, 101, 109, 101, 110,
116, 77, 97, 114, 107, 101, 114, 46, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 97, 100, 100, 69, 118, 101, 110, 116, 76, 105, 115, 116,
101, 110, 101, 114, 32, 40, 39, 99, 108, 105, 99, 107, 39, 44, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 102, 117, 110, 99, 116,
105, 111, 110, 32, 40, 41, 32, 123, 32, 115, 101, 108, 101, 99, 116,
84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 67, 97, 108, 108,
98, 97, 99, 107, 32, 40, 101, 108, 101, 109, 101, 110, 116, 41, 59,
125, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32,
91, 105, 93, 46, 32, 109, 97, 114, 107, 101, 114, 32, 61, 32, 101,
108, 101, 109, 101, 110, 116, 77, 97, 114, 107, 101, 114, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32, 32, 32,
32, 32, 32, 125, 10, 9, 32, 32, 32, 125, 10, 10, 9, 32, 32,
32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 115, 101, 101, 110, 65,
108, 114, 101, 97, 100, 121, 32, 40, 116, 97, 114, 103, 101, 116, 41,
32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40,
118, 97, 114, 32, 106, 32, 61, 32, 48, 59, 32, 106, 32, 60, 32,
116, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101,
120, 59, 32, 106, 32, 43, 43, 41, 32, 123, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 40, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 106, 93, 46, 32, 108,
97, 116, 32, 61, 61, 32, 116, 97, 114, 103, 101, 116, 46, 32, 108,
97, 116, 41, 32, 38, 38, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 115, 32, 91, 106, 93, 46, 32, 108, 111, 110, 32, 61,
61, 32, 116, 97, 114, 103, 101, 116, 46, 32, 108, 111, 110, 41, 32,
38, 38, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115,
32, 91, 106, 93, 46, 32, 99, 104, 97, 110, 110, 101, 108, 32, 61,
61, 32, 116, 97, 114, 103, 101, 116, 46, 32, 99, 104, 97, 110, 110,
101, 108, 41, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110,
32, 116, 114, 117, 101, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32,
32, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 102, 97, 108,
115, 101, 59, 10, 9, 32, 32, 32, 125, 10, 10, 9, 32, 32, 32,
102, 117, 110, 99, 116, 105, 111, 110, 32, 99, 108, 101, 97, 114, 80,
114, 101, 118, 105, 111, 117, 115, 70, 117, 114, 116, 104, 101, 115, 116,
32, 40, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 102, 111,
114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32, 105,
32, 60, 32, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73,
110, 100, 101, 120, 59, 32, 105, 32, 43, 43, 41, 32, 123, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 84, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46,
32, 102, 117, 114, 116, 104, 101, 115, 116, 32, 61, 61, 32, 116, 114,
117, 101, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114,
115, 32, 91, 105, 93, 46, 32, 102, 117, 114, 116, 104, 101, 115, 116,
32, 61, 32, 102, 97, 108, 115, 101, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 77, 97, 112, 46, 32, 114, 101,
109, 111, 118, 101, 76, 97, 121, 101, 114, 32, 40, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 109,
97, 114, 107, 101, 114, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 116, 109, 112, 32, 61,
32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91,
105, 93, 46, 32, 99, 117, 114, 114, 101, 110, 116, 32, 63, 32, 73,
67, 79, 78, 95, 84, 79, 80, 70, 82, 65, 77, 69, 32, 58, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 73, 67, 79, 78, 95, 79, 84, 72, 69,
82, 70, 82, 65, 77, 69, 59, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 105, 99, 111, 110, 32,
61, 32, 103, 101, 116, 73, 99, 111, 110, 70, 111, 114, 84, 114, 97,
110, 115, 109, 105, 116, 116, 101, 114, 32, 40, 116, 109, 112, 41, 59,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108,
101, 116, 32, 101, 108, 101, 109, 101, 110, 116, 32, 61, 32, 84, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 59,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108,
101, 116, 32, 101, 108, 101, 109, 101, 110, 116, 77, 97, 114, 107, 101,
114, 32, 61, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 46, 109, 97, 114,
107, 101, 114, 32, 40, 91, 101, 108, 101, 109, 101, 110, 116, 46, 108,
97, 116, 44, 32, 101, 108, 101, 109, 101, 110, 116, 46, 108, 111, 110,
93, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 123, 105, 99, 111, 110, 58, 32, 105, 99, 111, 110,
125, 41, 46, 97, 100, 100, 84, 111, 40, 77, 97, 112, 41, 59, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 108,
101, 109, 101, 110, 116, 77, 97, 114, 107, 101, 114, 46, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 97, 100, 100, 69, 118, 101, 110, 116, 76, 105, 115,
116, 101, 110, 101, 114, 32, 40, 39, 99, 108, 105, 99, 107, 39, 44,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 102, 117, 110, 99,
116, 105, 111, 110, 32, 40, 41, 32, 123, 32, 115, 101, 108, 101, 99,
116, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 67, 97, 108,
108, 98, 97, 99, 107, 32, 40, 101, 108, 101, 109, 101, 110, 116, 41,
59, 125, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115,
32, 91, 105, 93, 46, 32, 109, 97, 114, 107, 101, 114, 32, 61, 32,
101, 108, 101, 109, 101, 110, 116, 77, 97, 114, 107, 101, 114, 59, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 114, 101,
116, 117, 114, 110, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32, 32,
32, 125, 10, 9, 32, 32, 32, 10, 9, 32, 32, 32, 102, 117, 110,
99, 116, 105, 111, 110, 32, 115, 104, 111, 119, 84, 114, 97, 110, 115,
109, 105, 116, 116, 101, 114, 65, 116, 83, 105, 100, 101, 66, 97, 114,
32, 40, 116, 97, 114, 103, 101, 116, 44, 32, 102, 105, 114, 115, 116,
79, 110, 101, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 108,
101, 116, 32, 110, 101, 119, 67, 104, 97, 110, 110, 101, 108, 32, 61,
32, 39, 60, 115, 112, 97, 110, 32, 115, 116, 121, 108, 101, 61, 92,
34, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 98, 111,
108, 100, 59, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49, 50,
48, 37, 92, 34, 62, 39, 32, 43, 32, 116, 97, 114, 103, 101, 116,
46, 32, 99, 104, 97, 110, 110, 101, 108, 32, 43, 32, 39, 60, 47,
115, 112, 97, 110, 62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32,
108, 101, 116, 32, 99, 111, 111, 114, 100, 115, 32, 61, 32, 39, 60,
115, 112, 97, 110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111,
110, 116, 45, 115, 116, 121, 108, 101, 58, 32, 105, 116, 97, 108, 105,
99, 59, 92, 34, 62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 108,
97, 116, 32, 43, 32, 39, 32, 39, 32, 43, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46,
32, 108, 111, 110, 32, 43, 32, 32, 39, 60, 47, 115, 112, 97, 110,
62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32,
120, 120, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32,
103, 101, 116, 69, 108, 101, 109, 101, 110, 116, 66, 121, 73, 100, 32,
40, 39, 115, 101, 108, 105, 110, 102, 111, 39, 41, 59, 10, 9, 32,
32, 32, 32, 32, 32, 105, 102, 32, 40, 102, 105, 114, 115, 116, 79,
110, 101, 41, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 120,
120, 46, 32, 105, 110, 110, 101, 114, 72, 84, 77, 76, 32, 61, 32,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 39, 60, 115, 112, 97, 110, 32, 115, 116, 121, 108, 101, 61, 92,
34, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 98, 111,
108, 100, 59, 34, 62, 39, 32, 43, 32, 39, 84, 114, 97, 110, 115,
109, 105, 116, 116, 101, 114, 115, 32, 60, 98, 114, 62, 39, 32, 43,
32, 39, 60, 47, 115, 112, 97, 110, 62, 39, 59, 10, 9, 32, 32,
32, 32, 32, 32, 120, 120, 46, 32, 105, 110, 110, 101, 114, 72, 84,
77, 76, 32, 43, 61, 32, 110, 101, 119, 67, 104, 97, 110, 110, 101,
108, 32, 43, 32, 39, 61, 62, 39, 32, 43, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 110, 97,
109, 101, 32, 43, 32, 39, 32, 40, 39, 32, 43, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 40, 116, 97, 114, 103, 101, 116, 46, 32,
112, 111, 119, 101, 114, 47, 32, 49, 48, 48, 46, 48, 41, 46, 116,
111, 70, 105, 120, 101, 100, 32, 40, 50, 41, 32, 43, 32, 39, 32,
107, 87, 41, 39, 32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101,
116, 46, 32, 100, 97, 116, 101, 84, 105, 109, 101, 32, 43, 32, 39,
60, 98, 114, 62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 99, 111, 111, 114, 100, 115, 32, 43, 32, 39, 60, 98, 114,
62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 39,
68, 105, 115, 116, 97, 110, 99, 101, 32, 116, 111, 32, 104, 111, 109,
101, 32, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103,
101, 116, 46, 32, 100, 105, 115, 116, 32, 43, 32, 39, 107, 109, 32,
39, 32, 43, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116,
97, 114, 103, 101, 116, 46, 32, 97, 122, 105, 109, 117, 116, 104, 32,
43, 32, 39, 38, 35, 120, 98, 48, 39, 32, 43, 32, 39, 60, 98,
114, 62, 60, 98, 114, 62, 39, 59, 10, 10, 9, 32, 32, 32, 32,
32, 32, 108, 101, 116, 32, 121, 121, 32, 61, 32, 100, 111, 99, 117,
109, 101, 110, 116, 46, 32, 103, 101, 116, 69, 108, 101, 109, 101, 110,
116, 66, 121, 73, 100, 32, 40, 39, 115, 101, 108, 67, 111, 117, 110,
116, 39, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 121, 121, 46,
32, 105, 110, 110, 101, 114, 72, 84, 77, 76, 32, 61, 32, 39, 60,
115, 112, 97, 110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111,
110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 98, 111, 108, 100, 59,
34, 62, 39, 32, 43, 32, 39, 78, 117, 109, 98, 101, 114, 32, 111,
102, 32, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 39,
32, 43, 32, 39, 60, 47, 115, 112, 97, 110, 62, 39, 32, 43, 32,
39, 32, 39, 32, 43, 32, 116, 114, 97, 110, 115, 109, 105, 116, 116,
101, 114, 73, 110, 100, 101, 120, 32, 43, 32, 39, 60, 98, 114, 62,
39, 59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 105, 102, 32, 32,
40, 116, 97, 114, 103, 101, 116, 46, 32, 116, 121, 112, 101, 32, 61,
61, 32, 77, 65, 80, 95, 77, 65, 88, 95, 84, 82, 65, 78, 83,
41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108,
101, 116, 32, 97, 97, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110,
116, 46, 32, 103, 101, 116, 69, 108, 101, 109, 101, 110, 116, 66, 121,
73, 100, 32, 40, 39, 100, 105, 115, 116, 97, 110, 99, 101, 39, 41,
59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 97, 46,
32, 105, 110, 110, 101, 114, 72, 84, 77, 76, 32, 32, 61, 32, 39,
60, 115, 112, 97, 110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102,
111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 98, 111, 108, 100,
59, 34, 62, 39, 32, 43, 32, 39, 70, 117, 114, 116, 104, 101, 115,
116, 32, 100, 105, 115, 116, 97, 110, 99, 101, 32, 98, 121, 32, 60,
98, 114, 62, 39, 32, 43, 32, 39, 60, 47, 115, 112, 97, 110, 62,
39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97,
114, 103, 101, 116, 46, 32, 99, 104, 97, 110, 110, 101, 108, 32, 43,
32, 39, 61, 62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 110, 97, 109, 101, 32,
32, 43, 32, 39, 32, 40, 39, 32, 43, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 40, 116, 97, 114, 103, 101, 116, 46, 32, 112, 111,
119, 101, 114, 32, 47, 32, 49, 48, 48, 46, 48, 41, 46, 32, 116,
111, 70, 105, 120, 101, 100, 32, 40, 50, 41, 32, 43, 32, 39, 32,
107, 87, 41, 39, 32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101,
116, 46, 32, 100, 97, 116, 101, 84, 105, 109, 101, 32, 43, 32, 39,
60, 98, 114, 62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 99, 111, 111, 114, 100, 115, 32, 43, 32, 39, 60, 98, 114,
62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 39,
68, 105, 115, 116, 97, 110, 99, 101, 32, 116, 111, 32, 104, 111, 109,
101, 32, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
116, 97, 114, 103, 101, 116, 46, 32, 100, 105, 115, 116, 32, 43, 32,
39, 107, 109, 32, 39, 32, 43, 32, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 97, 122, 105, 109,
117, 116, 104, 32, 43, 32, 39, 38, 35, 120, 98, 48, 39, 32, 43,
32, 39, 60, 98, 114, 62, 60, 98, 114, 62, 39, 59, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 9, 32, 32, 32,
32, 32, 32, 125, 10, 9, 32, 32, 32, 125, 10, 10, 9, 32, 32,
32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 97, 100, 100, 84, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 32, 40, 116, 97, 114, 103,
101, 116, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 108, 101,
116, 32, 102, 105, 114, 115, 116, 79, 110, 101, 32, 61, 32, 116, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 32,
61, 61, 32, 48, 59, 10, 9, 32, 32, 32, 32, 32, 32, 116, 97,
114, 103, 101, 116, 46, 32, 102, 117, 114, 116, 104, 101, 115, 116, 32,
61, 32, 116, 97, 114, 103, 101, 116, 46, 32, 116, 121, 112, 101, 32,
61, 61, 32, 77, 65, 80, 95, 77, 65, 88, 95, 84, 82, 65, 78,
83, 59, 10, 9, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 105,
99, 111, 110, 32, 61, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 103, 101, 116, 73, 99, 111, 110, 70, 111, 114,
84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 32, 40, 116, 97,
114, 103, 101, 116, 46, 32, 102, 117, 114, 116, 104, 101, 115, 116, 32,
63, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 73,
67, 79, 78, 95, 70, 85, 82, 84, 72, 69, 83, 84, 32, 58, 32,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 73, 67,
79, 78, 95, 67, 85, 82, 82, 69, 78, 84, 41, 59, 10, 9, 32,
32, 32, 32, 32, 32, 108, 101, 116, 32, 116, 97, 114, 103, 101, 116,
77, 97, 114, 107, 101, 114, 32, 61, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
76, 46, 32, 109, 97, 114, 107, 101, 114, 40, 91, 116, 97, 114, 103,
101, 116, 46, 108, 97, 116, 44, 32, 116, 97, 114, 103, 101, 116, 46,
108, 111, 110, 93, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 123, 105, 99, 111, 110, 58, 32, 105,
99, 111, 110, 125, 41, 32, 46, 97, 100, 100, 84, 111, 40, 77, 97,
112, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103,
101, 116, 46, 32, 109, 97, 114, 107, 101, 114, 32, 61, 32, 116, 97,
114, 103, 101, 116, 77, 97, 114, 107, 101, 114, 59, 10, 9, 32, 32,
32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 115, 116, 97,
116, 117, 115, 32, 61, 32, 116, 114, 117, 101, 59, 10, 9, 32, 32,
32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 99, 117, 114,
114, 101, 110, 116, 32, 61, 32, 116, 114, 117, 101, 59, 10, 9, 32,
32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 109, 97,
114, 107, 101, 114, 46, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 100, 100, 69, 118, 101,
110, 116, 76, 105, 115, 116, 101, 110, 101, 114, 32, 40, 39, 99, 108,
105, 99, 107, 39, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 102, 117,
110, 99, 116, 105, 111, 110, 32, 40, 41, 32, 123, 32, 115, 101, 108,
101, 99, 116, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 67,
97, 108, 108, 98, 97, 99, 107, 32, 40, 116, 97, 114, 103, 101, 116,
41, 59, 125, 41, 59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 84,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 116, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 93,
32, 61, 32, 116, 97, 114, 103, 101, 116, 59, 10, 9, 32, 32, 32,
32, 32, 32, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73,
110, 100, 101, 120, 32, 43, 43, 59, 10, 10, 9, 32, 32, 32, 32,
32, 32, 108, 101, 116, 32, 120, 120, 32, 61, 32, 100, 111, 99, 117,
109, 101, 110, 116, 46, 32, 103, 101, 116, 69, 108, 101, 109, 101, 110,
116, 66, 121, 73, 100, 32, 40, 39, 116, 101, 115, 116, 105, 110, 103,
39, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 120, 120, 46, 32,
105, 110, 110, 101, 114, 72, 84, 77, 76, 32, 61, 32, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 39, 60,
115, 112, 97, 110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111,
110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 98, 111, 108, 100, 59,
34, 62, 39, 32, 43, 32, 39, 67, 117, 114, 114, 101, 110, 116, 32,
58, 32, 39, 32, 43, 32, 116, 97, 114, 103, 101, 116, 46, 32, 110,
97, 109, 101, 32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43, 32,
39, 60, 47, 115, 112, 97, 110, 62, 39, 59, 10, 9, 32, 32, 32,
32, 32, 32, 115, 104, 111, 119, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 65, 116, 83, 105, 100, 101, 66, 97, 114, 32, 40, 116,
97, 114, 103, 101, 116, 44, 32, 102, 105, 114, 115, 116, 79, 110, 101,
41, 59, 10, 9, 32, 32, 32, 125, 10, 10, 9, 32, 32, 32, 102,
117, 110, 99, 116, 105, 111, 110, 32, 99, 108, 101, 97, 114, 67, 117,
114, 114, 101, 110, 116, 32, 40, 41, 32, 123, 10, 9, 32, 32, 32,
32, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61,
32, 48, 59, 32, 105, 32, 60, 32, 116, 114, 97, 110, 115, 109, 105,
116, 116, 101, 114, 73, 110, 100, 101, 120, 59, 32, 105, 32, 43, 43,
41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105,
102, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115,
32, 91, 105, 93, 46, 32, 99, 117, 114, 114, 101, 110, 116, 41, 32,
123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105,
93, 46, 32, 99, 117, 114, 114, 101, 110, 116, 32, 61, 32, 102, 97,
108, 115, 101, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 105, 102, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 102, 117, 114, 116, 104,
101, 115, 116, 41, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 9, 47, 47,
32, 104, 97, 100, 32, 110, 111, 32, 34, 99, 117, 114, 114, 101, 110,
116, 34, 32, 105, 99, 111, 110, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 77, 97, 112, 46, 32, 114, 101, 109, 111,
118, 101, 76, 97, 121, 101, 114, 32, 40, 84, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 109, 97, 114,
107, 101, 114, 41, 59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 118, 97, 114, 32, 105, 99, 111, 110, 32, 61,
32, 103, 101, 116, 73, 99, 111, 110, 70, 111, 114, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 32, 40, 73, 67, 79, 78, 95, 67,
85, 82, 82, 69, 78, 84, 41, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 102,
117, 114, 116, 104, 101, 115, 116, 41, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 99, 111, 110, 32,
61, 32, 103, 101, 116, 73, 99, 111, 110, 70, 111, 114, 84, 114, 97,
110, 115, 109, 105, 116, 116, 101, 114, 32, 40, 73, 67, 79, 78, 95,
70, 85, 82, 84, 72, 69, 83, 84, 41, 59, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 108, 115, 101, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32,
40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91,
105, 93, 46, 32, 115, 116, 97, 116, 117, 115, 41, 9, 47, 47, 32,
99, 117, 114, 114, 101, 110, 116, 32, 102, 114, 97, 109, 101, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
105, 99, 111, 110, 32, 61, 32, 103, 101, 116, 73, 99, 111, 110, 70,
111, 114, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 32, 40,
73, 67, 79, 78, 95, 84, 79, 80, 70, 82, 65, 77, 69, 41, 59,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101,
108, 115, 101, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 105, 99, 111, 110, 32, 61, 32, 103, 101, 116,
73, 99, 111, 110, 70, 111, 114, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 32, 40, 73, 67, 79, 78, 95, 79, 84, 72, 69, 82,
70, 82, 65, 77, 69, 41, 59, 10, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 101, 108, 101, 109,
101, 110, 116, 32, 61, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116,
101, 114, 115, 32, 91, 105, 93, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 101, 108, 101, 109,
101, 110, 116, 77, 97, 114, 107, 101, 114, 32, 61, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 76, 46, 109, 97, 114, 107, 101, 114, 32, 40, 91, 101,
108, 101, 109, 101, 110, 116, 46, 108, 97, 116, 44, 32, 101, 108, 101,
109, 101, 110, 116, 46, 108, 111, 110, 93, 44, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 123, 105, 99,
111, 110, 58, 32, 105, 99, 111, 110, 125, 41, 46, 97, 100, 100, 84,
111, 40, 77, 97, 112, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 101, 108, 101, 109, 101, 110, 116, 77, 97,
114, 107, 101, 114, 46, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 100, 100,
69, 118, 101, 110, 116, 76, 105, 115, 116, 101, 110, 101, 114, 32, 40,
39, 99, 108, 105, 99, 107, 39, 44, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 40, 41,
32, 123, 32, 115, 101, 108, 101, 99, 116, 84, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 67, 97, 108, 108, 98, 97, 99, 107, 32, 40,
101, 108, 101, 109, 101, 110, 116, 41, 59, 125, 41, 59, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 109,
97, 114, 107, 101, 114, 32, 61, 32, 101, 108, 101, 109, 101, 110, 116,
77, 97, 114, 107, 101, 114, 59, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32,
32, 32, 125, 10, 9, 32, 32, 32, 125, 10, 47, 47, 9, 116, 104,
101, 32, 67, 85, 82, 82, 69, 78, 84, 32, 99, 104, 97, 110, 103,
101, 100, 44, 32, 115, 111, 32, 119, 101, 32, 104, 97, 118, 101, 32,
116, 111, 32, 114, 101, 115, 116, 111, 114, 101, 32, 116, 104, 101, 32,
111, 108, 100, 10, 47, 47, 9, 109, 97, 114, 107, 101, 114, 32, 102,
111, 114, 32, 116, 104, 101, 32, 112, 114, 101, 118, 105, 111, 117, 115,
32, 99, 117, 114, 114, 101, 110, 116, 32, 45, 32, 105, 102, 32, 97,
110, 121, 32, 45, 32, 116, 104, 97, 116, 32, 105, 115, 10, 47, 47,
9, 115, 108, 105, 103, 104, 116, 108, 121, 32, 99, 111, 109, 112, 108,
105, 99, 97, 116, 101, 100, 32, 115, 105, 110, 99, 101, 32, 116, 104,
101, 114, 101, 32, 97, 114, 101, 32, 115, 101, 118, 101, 114, 97, 108,
32, 111, 112, 116, 105, 111, 110, 115, 10, 9, 32, 32, 32, 102, 117,
110, 99, 116, 105, 111, 110, 32, 117, 112, 100, 97, 116, 101, 67, 117,
114, 114, 101, 110, 116, 32, 40, 116, 97, 114, 103, 101, 116, 41, 32,
123, 10, 9, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118,
97, 114, 32, 106, 32, 61, 32, 48, 59, 32, 106, 32, 60, 32, 116,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120,
59, 32, 106, 32, 43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32,
40, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32,
91, 106, 93, 46, 32, 108, 97, 116, 32, 61, 61, 32, 116, 97, 114,
103, 101, 116, 46, 32, 108, 97, 116, 41, 32, 38, 38, 10, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101,
114, 115, 32, 91, 106, 93, 46, 32, 108, 111, 110, 32, 61, 61, 32,
116, 97, 114, 103, 101, 116, 46, 32, 108, 111, 110, 41, 32, 38, 38,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91,
106, 93, 46, 32, 99, 104, 97, 110, 110, 101, 108, 32, 61, 61, 32,
116, 97, 114, 103, 101, 116, 46, 32, 99, 104, 97, 110, 110, 101, 108,
41, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115,
32, 91, 106, 93, 46, 32, 99, 117, 114, 114, 101, 110, 116, 32, 61,
32, 116, 114, 117, 101, 59, 10, 47, 47, 10, 47, 47, 9, 114, 101,
99, 97, 108, 108, 32, 116, 104, 97, 116, 32, 34, 102, 117, 114, 116,
104, 101, 115, 116, 34, 32, 112, 111, 115, 105, 116, 105, 111, 110, 115,
32, 100, 111, 32, 110, 111, 116, 32, 115, 104, 111, 119, 32, 97, 32,
34, 99, 117, 114, 114, 101, 110, 116, 34, 32, 105, 99, 111, 110, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102,
32, 40, 33, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115,
32, 91, 106, 93, 46, 32, 102, 117, 114, 116, 104, 101, 115, 116, 41,
32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 77, 97, 112, 46, 32, 114, 101, 109, 111, 118, 101,
76, 97, 121, 101, 114, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 115, 32, 91, 106, 93, 46, 32, 109, 97, 114, 107, 101,
114, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 118, 97, 114, 32, 105, 99, 111, 110, 32, 61,
32, 103, 101, 116, 73, 99, 111, 110, 70, 111, 114, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 32, 40, 73, 67, 79, 78, 95, 67,
85, 82, 82, 69, 78, 84, 41, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 101,
108, 101, 109, 101, 110, 116, 32, 61, 32, 84, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 115, 32, 91, 106, 93, 59, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116,
32, 101, 108, 101, 109, 101, 110, 116, 77, 97, 114, 107, 101, 114, 32,
61, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 46, 109, 97,
114, 107, 101, 114, 32, 40, 91, 101, 108, 101, 109, 101, 110, 116, 46,
108, 97, 116, 44, 32, 101, 108, 101, 109, 101, 110, 116, 46, 108, 111,
110, 93, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 123, 105, 99, 111, 110, 58, 32, 105, 99, 111,
110, 125, 41, 46, 97, 100, 100, 84, 111, 40, 77, 97, 112, 41, 59,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 101, 108, 101, 109, 101, 110, 116, 77, 97, 114, 107, 101, 114,
46, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 100, 100, 69,
118, 101, 110, 116, 76, 105, 115, 116, 101, 110, 101, 114, 32, 40, 39,
99, 108, 105, 99, 107, 39, 44, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 40, 41, 32,
123, 32, 115, 101, 108, 101, 99, 116, 84, 114, 97, 110, 115, 109, 105,
116, 116, 101, 114, 67, 97, 108, 108, 98, 97, 99, 107, 32, 40, 101,
108, 101, 109, 101, 110, 116, 41, 59, 125, 41, 59, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 106, 93, 46,
32, 109, 97, 114, 107, 101, 114, 32, 61, 32, 101, 108, 101, 109, 101,
110, 116, 77, 97, 114, 107, 101, 114, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 120, 120, 32,
61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 103, 101, 116,
69, 108, 101, 109, 101, 110, 116, 66, 121, 73, 100, 32, 40, 39, 116,
101, 115, 116, 105, 110, 103, 39, 41, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 120, 120, 46, 32, 105, 110, 110,
101, 114, 72, 84, 77, 76, 32, 61, 32, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 39, 60, 115, 112, 97,
110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111, 110, 116, 45,
119, 101, 105, 103, 104, 116, 58, 98, 111, 108, 100, 59, 34, 62, 39,
32, 43, 32, 39, 67, 117, 114, 114, 101, 110, 116, 32, 58, 32, 39,
32, 43, 32, 116, 97, 114, 103, 101, 116, 46, 32, 110, 97, 109, 101,
32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43, 32, 39, 60, 47,
115, 112, 97, 110, 62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 98, 114, 101, 97, 107, 59, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32,
32, 32, 125, 10, 9, 32, 32, 32, 125, 10, 10, 9, 32, 32, 32,
102, 117, 110, 99, 116, 105, 111, 110, 32, 102, 101, 116, 99, 104, 68,
97, 116, 97, 32, 40, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32,
32, 36, 46, 103, 101, 116, 74, 83, 79, 78, 32, 40, 39, 47, 100,
97, 116, 97, 46, 106, 115, 111, 110, 39, 44, 32, 102, 117, 110, 99,
116, 105, 111, 110, 32, 40, 100, 97, 116, 97, 41, 32, 123, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 116, 116,
116, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 103,
101, 116, 69, 108, 101, 109, 101, 110, 116, 66, 121, 73, 100, 32, 40,
39, 99, 117, 114, 114, 101, 110, 116, 39, 41, 59, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114,
32, 116, 32, 61, 32, 48, 59, 32, 116, 32, 60, 32, 100, 97, 116,
97, 46, 32, 108, 101, 110, 103, 116, 104, 59, 32, 116, 32, 43, 43,
41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 108, 101, 116, 32, 116, 97, 114, 103, 101, 116, 32, 61, 32,
100, 97, 116, 97, 32, 91, 116, 93, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 116, 97, 114,
103, 101, 116, 46, 32, 116, 121, 112, 101, 32, 61, 61, 32, 77, 65,
80, 95, 82, 69, 83, 69, 84, 41, 32, 123, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110,
100, 108, 101, 95, 109, 97, 112, 95, 114, 101, 115, 101, 116, 32, 40,
41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 99, 111, 110, 116, 105, 110, 117, 101, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 108, 115,
101, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
105, 102, 32, 40, 116, 97, 114, 103, 101, 116, 46, 32, 116, 121, 112,
101, 32, 61, 61, 32, 77, 65, 80, 95, 70, 82, 65, 77, 69, 41,
32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 95, 109, 97, 112, 95,
102, 114, 97, 109, 101, 32, 40, 41, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 110, 116,
105, 110, 117, 101, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 101, 108, 115, 101, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 116, 97, 114, 103,
101, 116, 46, 32, 116, 121, 112, 101, 32, 61, 61, 32, 77, 65, 80,
95, 67, 85, 82, 82, 69, 78, 84, 41, 32, 123, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 117, 112,
100, 97, 116, 101, 67, 117, 114, 114, 101, 110, 116, 32, 40, 116, 97,
114, 103, 101, 116, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 110, 116, 105, 110, 117,
101, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 101, 108, 115, 101, 32, 123, 9, 9, 47, 47, 32, 119, 101, 32,
97, 100, 100, 32, 97, 110, 32, 101, 108, 101, 109, 101, 110, 116, 32,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 105, 102, 32, 40, 33, 40, 40, 116, 97, 114, 103, 101, 116,
46, 32, 116, 121, 112, 101, 32, 61, 61, 32, 77, 65, 80, 95, 77,
65, 88, 95, 84, 82, 65, 78, 83, 41, 32, 124, 124, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 40, 116, 97, 114, 103, 101, 116, 46, 32, 116, 121, 112, 101,
32, 61, 61, 32, 77, 65, 80, 95, 78, 79, 82, 77, 95, 84, 82,
65, 78, 83, 41, 41, 41, 32, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 110,
116, 105, 110, 117, 101, 59, 10, 47, 47, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 108, 101, 97,
114, 67, 117, 114, 114, 101, 110, 116, 32, 40, 41, 59, 9, 47, 47,
32, 97, 108, 119, 97, 121, 115, 32, 103, 111, 111, 100, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105,
102, 32, 40, 115, 101, 101, 110, 65, 108, 114, 101, 97, 100, 121, 32,
40, 116, 97, 114, 103, 101, 116, 41, 41, 32, 123, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 117, 112, 100, 97, 116, 101, 67, 117, 114, 114, 101, 110, 116, 32,
40, 116, 97, 114, 103, 101, 116, 41, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99,
111, 110, 116, 105, 110, 117, 101, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 108,
115, 101, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 116, 97,
114, 103, 101, 116, 46, 32, 116, 121, 112, 101, 32, 61, 61, 32, 77,
65, 80, 95, 77, 65, 88, 95, 84, 82, 65, 78, 83, 41, 32, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 99, 108, 101, 97, 114, 80, 114, 101,
118, 105, 111, 117, 115, 70, 117, 114, 116, 104, 101, 115, 116, 32, 40,
41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 97, 100, 100, 84, 114, 97, 110, 115,
109, 105, 116, 116, 101, 114, 32, 40, 116, 97, 114, 103, 101, 116, 41,
59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
125, 10, 9, 32, 32, 32, 32, 32, 32, 125, 41, 59, 10, 9, 32,
32, 32, 125, 10, 10, 9, 32, 32, 32, 102, 117, 110, 99, 116, 105,
111, 110, 32, 105, 110, 105, 116, 105, 97, 108, 105, 122, 101, 32, 40,
41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 77, 97, 112, 32,
61, 32, 76, 46, 109, 97, 112, 32, 40, 39, 109, 97, 112, 95, 99,
97, 110, 118, 97, 115, 39, 41, 46, 115, 101, 116, 86, 105, 101, 119,
40, 91, 104, 111, 109, 101, 76, 97, 116, 105, 116, 117, 100, 101, 44,
32, 104, 111, 109, 101, 76, 111, 110, 103, 105, 116, 117, 100, 101, 93,
44, 32, 56, 41, 59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 76,
46, 116, 105, 108, 101, 76, 97, 121, 101, 114, 32, 40, 39, 104, 116,
116, 112, 115, 58, 47, 47, 123, 115, 125, 46, 116, 105, 108, 101, 46,
111, 112, 101, 110, 115, 116, 114, 101, 101, 116, 109, 97, 112, 46, 111,
114, 103, 47, 123, 122, 125, 47, 123, 120, 125, 47, 123, 121, 125, 46,
112, 110, 103, 39, 44, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32,
97, 116, 116, 114, 105, 98, 117, 116, 105, 111, 110, 58, 32, 39, 77,
97, 112, 32, 100, 97, 116, 97, 32, 38, 99, 111, 112, 121, 59, 32,
60, 97, 32, 104, 114, 101, 102, 61, 34, 104, 116, 116, 112, 115, 58,
47, 47, 119, 119, 119, 46, 111, 112, 101, 110, 115, 116, 114, 101, 101,
116, 109, 97, 112, 46, 111, 114, 103, 47, 34, 62, 79, 112, 101, 110,
83, 116, 114, 101, 101, 116, 77, 97, 112, 60, 47, 97, 62, 32, 99,
111, 110, 116, 114, 105, 98, 117, 116, 111, 114, 115, 44, 32, 60, 97,
32, 104, 114, 101, 102, 61, 34, 104, 116, 116, 112, 115, 58, 47, 47,
99, 114, 101, 97, 116, 105, 118, 101, 99, 111, 109, 109, 111, 110, 115,
46, 111, 114, 103, 47, 108, 105, 99, 101, 110, 115, 101, 115, 47, 98,
121, 45, 115, 97, 47, 50, 46, 48, 47, 34, 62, 67, 67, 45, 66,
89, 45, 83, 65, 60, 47, 97, 62, 44, 32, 73, 109, 97, 103, 101,
114, 121, 32, 194, 169, 32, 60, 97, 32, 104, 114, 101, 102, 61, 34,
104, 116, 116, 112, 115, 58, 47, 47, 119, 119, 119, 46, 109, 97, 112,
98, 111, 120, 46, 99, 111, 109, 47, 34, 62, 77, 97, 112, 98, 111,
120, 60, 47, 97, 62, 39, 44, 10, 9, 32, 32, 32, 32, 32, 32,
32, 109, 97, 120, 90, 111, 111, 109, 58, 32, 49, 56, 44, 10, 9,
32, 32, 32, 32, 32, 32, 32, 105, 100, 58, 32, 39, 109, 97, 112,
98, 111, 120, 47, 115, 116, 114, 101, 101, 116, 115, 45, 118, 49, 49,
39, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 97, 99, 99, 101,
115, 115, 84, 111, 107, 101, 110, 58, 32, 39, 121, 111, 117, 114, 46,
109, 97, 112, 98, 111, 120, 46, 97, 99, 99, 101, 115, 115, 46, 116,
111, 107, 101, 110, 39, 10, 9, 32, 32, 32, 125, 41, 46, 97, 100,
100, 84, 111, 40, 77, 97, 112, 41, 59, 10, 10, 9, 32, 32, 32,
118, 97, 114, 32, 105, 99, 111, 110, 32, 61, 32, 103, 101, 116, 73,
99, 111, 110, 70, 111, 114, 72, 111, 109, 101, 32, 40, 41, 59, 10,
9, 32, 32, 32, 118, 97, 114, 32, 104, 111, 109, 101, 77, 97, 114,
107, 101, 114, 32, 61, 32, 76, 46, 109, 97, 114, 107, 101, 114, 40,
91, 104, 111, 109, 101, 76, 97, 116, 105, 116, 117, 100, 101, 44, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 104, 111, 109, 101, 76, 111, 110, 103, 105, 116, 117, 100, 101, 93,
44, 32, 123, 105, 99, 111, 110, 58, 32, 105, 99, 111, 110, 125, 41,
46, 97, 100, 100, 84, 111, 40, 77, 97, 112, 41, 59, 10, 10, 47,
42, 32, 83, 101, 116, 117, 112, 32, 111, 117, 114, 32, 116, 105, 109,
101, 114, 32, 116, 111, 32, 112, 111, 108, 108, 32, 102, 114, 111, 109,
32, 116, 104, 101, 32, 115, 101, 114, 118, 101, 114, 46, 32, 42, 47,
10, 9, 32, 32, 32, 119, 105, 110, 100, 111, 119, 46, 115, 101, 116,
73, 110, 116, 101, 114, 118, 97, 108, 40, 102, 117, 110, 99, 116, 105,
111, 110, 32, 40, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32,
102, 101, 116, 99, 104, 68, 97, 116, 97, 32, 40, 41, 59, 10, 9,
32, 32, 32, 125, 44, 32, 50, 48, 48, 48, 41, 59, 10, 9, 125,
10, 10, 9, 102, 117, 110, 99, 116, 105, 111, 110, 32, 115, 101, 108,
101, 99, 116, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 67,
97, 108, 108, 98, 97, 99, 107, 32, 40, 116, 97, 114, 103, 101, 116,
41, 32, 123, 10, 9, 32, 32, 32, 108, 101, 116, 32, 120, 120, 32,
61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 103, 101, 116,
69, 108, 101, 109, 101, 110, 116, 66, 121, 73, 100, 32, 40, 39, 115,
101, 108, 101, 99, 116, 101, 100, 39, 41, 59, 10, 9, 32, 32, 32,
108, 101, 116, 32, 110, 101, 119, 67, 104, 97, 110, 110, 101, 108, 32,
61, 32, 39, 60, 115, 112, 97, 110, 32, 115, 116, 121, 108, 101, 61,
92, 34, 102, 111, 110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 98,
111, 108, 100, 59, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49,
50, 48, 37, 92, 34, 62, 39, 32, 43, 32, 116, 97, 114, 103, 101,
116, 46, 32, 99, 104, 97, 110, 110, 101, 108, 32, 43, 32, 39, 60,
47, 115, 112, 97, 110, 62, 39, 59, 10, 9, 32, 32, 32, 108, 101,
116, 32, 99, 111, 111, 114, 100, 115, 32, 61, 32, 39, 60, 115, 112,
97, 110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111, 110, 116,
45, 115, 116, 121, 108, 101, 58, 32, 105, 116, 97, 108, 105, 99, 59,
92, 34, 62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 108, 97, 116,
32, 43, 32, 39, 45, 45, 39, 32, 43, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32,
108, 111, 110, 32, 43, 32, 32, 39, 60, 47, 115, 112, 97, 110, 62,
39, 59, 10, 9, 32, 32, 32, 120, 120, 46, 32, 105, 110, 110, 101,
114, 72, 84, 77, 76, 32, 61, 32, 39, 60, 112, 32, 115, 116, 121,
108, 101, 61, 92, 34, 112, 97, 100, 100, 105, 110, 103, 58, 32, 49,
48, 112, 120, 59, 32, 98, 111, 114, 100, 101, 114, 58, 50, 112, 120,
32, 115, 111, 108, 105, 100, 32, 98, 108, 97, 99, 107, 59, 92, 34,
62, 39, 32, 43, 32, 39, 83, 101, 108, 101, 99, 116, 101, 100, 58,
32, 32, 39, 32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 110, 101, 119, 67, 104, 97, 110, 110, 101,
108, 32, 43, 32, 39, 61, 62, 39, 32, 43, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 110, 97, 109, 101, 32,
43, 32, 32, 39, 32, 40, 39, 32, 43, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 40, 116, 97, 114, 103, 101, 116, 46,
32, 112, 111, 119, 101, 114, 32, 47, 32, 49, 48, 48, 46, 48, 41,
46, 32, 116, 111, 70, 105, 120, 101, 100, 32, 40, 50, 41, 32, 43,
32, 39, 32, 107, 87, 41, 39, 32, 43, 32, 39, 60, 98, 114, 62,
39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101,
116, 46, 32, 100, 97, 116, 101, 84, 105, 109, 101, 32, 43, 32, 39,
60, 98, 114, 62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99,
111, 111, 114, 100, 115, 32, 43, 32, 39, 60, 98, 114, 62, 39, 32,
43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 39, 68, 105, 115, 116, 97, 110,
99, 101, 32, 116, 111, 32, 104, 111, 109, 101, 32, 39, 32, 43, 32,
116, 97, 114, 103, 101, 116, 46, 32, 100, 105, 115, 116, 32, 43, 32,
39, 107, 109, 32, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46,
32, 97, 122, 105, 109, 117, 116, 104, 32, 43, 32, 39, 38, 35, 120,
98, 48, 39, 32, 43, 32, 39, 60, 98, 114, 62, 60, 47, 112, 62,
39, 10, 9, 125, 10, 10, 60, 47, 115, 99, 114, 105, 112, 116, 62,
10, 60, 47, 104, 101, 97, 100, 62, 10, 9, 60, 98, 111, 100, 121,
32, 111, 110, 108, 111, 97, 100, 61, 34, 105, 110, 105, 116, 105, 97,
108, 105, 122, 101, 40, 41, 34, 62, 10, 9, 60, 100, 105, 118, 32,
105, 100, 61, 34, 109, 97, 112, 95, 99, 97, 110, 118, 97, 115, 34,
32, 115, 116, 121, 108, 101, 61, 34, 119, 105, 100, 116, 104, 58, 56,
48, 37, 59, 32, 104, 101, 105, 103, 104, 116, 58, 49, 48, 48, 37,
34, 62, 60, 47, 100, 105, 118, 62, 10, 9, 60, 100, 105, 118, 32,
105, 100, 61, 34, 105, 110, 102, 111, 34, 62, 10, 9, 60, 100, 105,
118, 62, 10, 9, 32, 32, 32, 60, 104, 49, 62, 81, 116, 45, 68,
65, 66, 60, 47, 104, 49, 62, 10, 9, 32, 32, 32, 60, 112, 32,
105, 100, 61, 34, 116, 101, 115, 116, 105, 110, 103, 34, 62, 60, 47,
112, 62, 10, 9, 32, 32, 32, 60, 112, 32, 105, 100, 61, 34, 115,
101, 108, 101, 99, 116, 101, 100, 34, 62, 60, 47, 112, 62, 10, 9,
32, 32, 32, 60, 112, 32, 105, 100, 61, 34, 115, 101, 108, 67, 111,
117, 110, 116, 34, 62, 60, 47, 112, 62, 10, 9, 32, 32, 32, 60,
112, 32, 105, 100, 61, 34, 100, 105, 115, 116, 97, 110, 99, 101, 34,
62, 60, 47, 112, 62, 10, 9, 32, 32, 32, 60, 112, 32, 105, 100,
61, 34, 115, 101, 108, 105, 110, 102, 111, 34, 62, 60, 47, 112, 62,
10, 9, 32, 32, 32, 60, 112, 32, 105, 100, 61, 34, 99, 117, 114,
114, 101, 110, 116, 34, 62, 60, 47, 112, 62, 10, 9, 60, 47, 100,
105, 118, 62, 10, 9, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60,
47, 98, 111, 100, 121, 62, 10, 60, 47, 104, 116, 109, 108, 62, 10,
0};

View File

@@ -1,966 +0,0 @@
#
#include <stdint.h>
// generated map
static uint8_t qt_map [] = {
60, 33, 68, 79, 67, 84, 89, 80, 69, 32, 104, 116, 109, 108, 62,
10, 10, 60, 104, 116, 109, 108, 62, 10, 32, 32, 60, 104, 101, 97,
100, 62, 10, 32, 32, 32, 32, 60, 109, 101, 116, 97, 32, 110, 97,
109, 101, 61, 34, 118, 105, 101, 119, 112, 111, 114, 116, 34, 32, 99,
111, 110, 116, 101, 110, 116, 61, 34, 105, 110, 105, 116, 105, 97, 108,
45, 115, 99, 97, 108, 101, 61, 49, 46, 48, 44, 32, 117, 115, 101,
114, 45, 115, 99, 97, 108, 97, 98, 108, 101, 61, 110, 111, 34, 32,
47, 62, 10, 32, 32, 32, 32, 32, 60, 108, 105, 110, 107, 32, 114,
101, 108, 61, 34, 115, 116, 121, 108, 101, 115, 104, 101, 101, 116, 34,
32, 104, 114, 101, 102, 61, 34, 104, 116, 116, 112, 115, 58, 47, 47,
117, 110, 112, 107, 103, 46, 99, 111, 109, 47, 108, 101, 97, 102, 108,
101, 116, 64, 49, 46, 54, 46, 48, 47, 100, 105, 115, 116, 47, 108,
101, 97, 102, 108, 101, 116, 46, 99, 115, 115, 34, 32, 105, 110, 116,
101, 103, 114, 105, 116, 121, 61, 34, 115, 104, 97, 53, 49, 50, 45,
120, 119, 69, 47, 65, 122, 57, 122, 114, 106, 66, 73, 112, 104, 65,
99, 66, 98, 51, 70, 54, 74, 86, 113, 120, 102, 52, 54, 43, 67,
68, 76, 119, 102, 76, 77, 72, 108, 111, 78, 117, 54, 75, 69, 81,
67, 65, 87, 105, 54, 72, 99, 68, 85, 98, 101, 79, 102, 66, 73,
112, 116, 70, 55, 116, 99, 67, 122, 117, 115, 75, 70, 106, 70, 119,
50, 121, 117, 118, 69, 112, 68, 76, 57, 119, 81, 61, 61, 34, 32,
99, 114, 111, 115, 115, 111, 114, 105, 103, 105, 110, 61, 34, 34, 47,
62, 10, 9, 60, 108, 105, 110, 107, 32, 114, 101, 108, 61, 34, 105,
99, 111, 110, 34, 32, 104, 114, 101, 102, 61, 34, 100, 97, 116, 97,
58, 44, 34, 62, 10, 9, 60, 115, 116, 121, 108, 101, 32, 116, 121,
112, 101, 61, 34, 116, 101, 120, 116, 47, 99, 115, 115, 34, 62, 10,
9, 32, 32, 32, 104, 116, 109, 108, 32, 123, 32, 104, 101, 105, 103,
104, 116, 58, 32, 49, 48, 48, 37, 32, 125, 10, 9, 32, 32, 32,
98, 111, 100, 121, 32, 123, 32, 104, 101, 105, 103, 104, 116, 58, 32,
49, 48, 48, 37, 59, 32, 109, 97, 114, 103, 105, 110, 58, 32, 48,
59, 32, 112, 97, 100, 100, 105, 110, 103, 58, 32, 48, 32, 125, 10,
9, 32, 32, 32, 46, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101,
114, 45, 105, 99, 111, 110, 32, 123, 10, 9, 32, 32, 32, 32, 32,
32, 112, 97, 100, 100, 105, 110, 103, 58, 48, 112, 120, 59, 10, 9,
32, 32, 32, 32, 32, 32, 109, 97, 114, 103, 105, 110, 58, 48, 112,
120, 59, 10, 9, 32, 32, 32, 125, 10, 9, 32, 32, 32, 35, 109,
97, 112, 95, 99, 97, 110, 118, 97, 115, 32, 123, 32, 104, 101, 105,
103, 104, 116, 58, 32, 49, 48, 48, 37, 32, 125, 10, 9, 32, 32,
32, 35, 105, 110, 102, 111, 32, 123, 10, 9, 32, 32, 32, 32, 32,
32, 112, 111, 115, 105, 116, 105, 111, 110, 58, 32, 97, 98, 115, 111,
108, 117, 116, 101, 59, 10, 9, 32, 32, 32, 32, 32, 32, 119, 105,
100, 116, 104, 58, 50, 48, 37, 59, 10, 9, 32, 32, 32, 32, 32,
32, 104, 101, 105, 103, 104, 116, 58, 49, 48, 48, 37, 59, 10, 9,
32, 32, 32, 32, 32, 32, 98, 111, 116, 116, 111, 109, 58, 48, 112,
120, 59, 10, 9, 32, 32, 32, 32, 32, 32, 114, 105, 103, 104, 116,
58, 48, 112, 120, 59, 10, 9, 32, 32, 32, 32, 32, 32, 116, 111,
112, 58, 48, 112, 120, 59, 10, 9, 32, 32, 32, 32, 32, 32, 98,
97, 99, 107, 103, 114, 111, 117, 110, 100, 45, 99, 111, 108, 111, 114,
58, 32, 119, 104, 105, 116, 101, 59, 10, 9, 32, 32, 32, 32, 32,
32, 98, 111, 114, 100, 101, 114, 45, 108, 101, 102, 116, 58, 49, 112,
120, 32, 35, 54, 54, 54, 32, 115, 111, 108, 105, 100, 59, 10, 9,
32, 32, 32, 32, 32, 32, 102, 111, 110, 116, 45, 102, 97, 109, 105,
108, 121, 58, 72, 101, 108, 118, 101, 116, 105, 99, 97, 59, 10, 9,
32, 32, 32, 125, 10, 9, 32, 32, 32, 35, 105, 110, 102, 111, 32,
100, 105, 118, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 112, 97,
100, 100, 105, 110, 103, 58, 48, 112, 120, 59, 10, 9, 32, 32, 32,
32, 32, 32, 112, 97, 100, 100, 105, 110, 103, 45, 108, 101, 102, 116,
58, 49, 48, 112, 120, 59, 10, 9, 32, 32, 32, 32, 32, 32, 109,
97, 114, 103, 105, 110, 58, 48, 112, 120, 59, 10, 9, 32, 32, 32,
125, 10, 9, 32, 32, 32, 35, 105, 110, 102, 111, 32, 100, 105, 118,
32, 104, 49, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 109, 97,
114, 103, 105, 110, 45, 116, 111, 112, 58, 49, 48, 112, 120, 59, 10,
9, 32, 32, 32, 32, 32, 32, 102, 111, 110, 116, 45, 115, 105, 122,
101, 58, 49, 54, 112, 120, 59, 10, 9, 32, 32, 32, 125, 10, 9,
32, 32, 32, 35, 105, 110, 102, 111, 32, 100, 105, 118, 32, 112, 32,
123, 10, 9, 32, 32, 32, 32, 32, 32, 102, 111, 110, 116, 45, 115,
105, 122, 101, 58, 49, 52, 112, 120, 59, 10, 9, 32, 32, 32, 32,
32, 32, 99, 111, 108, 111, 114, 58, 35, 51, 51, 51, 59, 10, 9,
32, 32, 32, 125, 10, 9, 32, 32, 32, 46, 99, 111, 108, 111, 114,
105, 110, 103, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 99, 111,
108, 111, 114, 58, 32, 114, 101, 100, 10, 9, 32, 32, 32, 125, 10,
9, 60, 47, 115, 116, 121, 108, 101, 62, 10, 10, 9, 60, 115, 99,
114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 104, 116, 116, 112, 115,
58, 47, 47, 97, 106, 97, 120, 46, 103, 111, 111, 103, 108, 101, 97,
112, 105, 115, 46, 99, 111, 109, 47, 97, 106, 97, 120, 47, 108, 105,
98, 115, 47, 106, 113, 117, 101, 114, 121, 47, 51, 46, 52, 46, 49,
47, 106, 113, 117, 101, 114, 121, 46, 109, 105, 110, 46, 106, 115, 34,
62, 60, 47, 115, 99, 114, 105, 112, 116, 62, 10, 9, 60, 115, 99,
114, 105, 112, 116, 32, 115, 114, 99, 61, 34, 104, 116, 116, 112, 115,
58, 47, 47, 117, 110, 112, 107, 103, 46, 99, 111, 109, 47, 108, 101,
97, 102, 108, 101, 116, 64, 49, 46, 54, 46, 48, 47, 100, 105, 115,
116, 47, 108, 101, 97, 102, 108, 101, 116, 46, 106, 115, 34, 32, 105,
110, 116, 101, 103, 114, 105, 116, 121, 61, 34, 115, 104, 97, 53, 49,
50, 45, 103, 90, 119, 73, 71, 57, 120, 51, 119, 85, 88, 103, 50,
104, 100, 88, 70, 54, 43, 114, 86, 107, 76, 70, 47, 48, 86, 105,
57, 85, 56, 68, 50, 78, 116, 103, 52, 71, 97, 53, 73, 53, 66,
90, 112, 86, 107, 86, 120, 108, 74, 87, 98, 83, 81, 116, 88, 80,
83, 105, 85, 84, 116, 67, 48, 84, 106, 116, 71, 79, 109, 120, 97,
49, 65, 74, 80, 117, 86, 48, 67, 80, 116, 104, 101, 119, 61, 61,
34, 32, 99, 114, 111, 115, 115, 111, 114, 105, 103, 105, 110, 61, 34,
34, 62, 60, 47, 115, 99, 114, 105, 112, 116, 62, 10, 9, 60, 115,
99, 114, 105, 112, 116, 32, 116, 121, 112, 101, 61, 34, 116, 101, 120,
116, 47, 106, 97, 118, 97, 115, 99, 114, 105, 112, 116, 34, 62, 10,
9, 32, 32, 32, 77, 97, 112, 32, 61, 32, 110, 117, 108, 108, 59,
10, 9, 32, 32, 32, 118, 97, 114, 32, 104, 111, 109, 101, 76, 97,
116, 105, 116, 117, 100, 101, 32, 61, 32, 36, 59, 10, 9, 32, 32,
32, 118, 97, 114, 32, 104, 111, 109, 101, 76, 111, 110, 103, 105, 116,
117, 100, 101, 32, 61, 32, 36, 59, 10, 9, 32, 32, 32, 118, 97,
114, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32,
61, 32, 123, 125, 59, 10, 9, 32, 32, 32, 118, 97, 114, 32, 116,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120,
9, 61, 32, 48, 59, 10, 10, 9, 32, 32, 32, 99, 111, 110, 115,
116, 32, 77, 65, 80, 95, 82, 69, 83, 69, 84, 9, 61, 32, 48,
59, 10, 9, 32, 32, 32, 99, 111, 110, 115, 116, 32, 77, 65, 80,
95, 70, 82, 65, 77, 69, 9, 61, 32, 49, 59, 10, 9, 32, 32,
32, 99, 111, 110, 115, 116, 32, 77, 65, 80, 95, 77, 65, 88, 95,
84, 82, 65, 78, 83, 9, 61, 32, 50, 59, 10, 9, 32, 32, 32,
99, 111, 110, 115, 116, 32, 77, 65, 80, 95, 78, 79, 82, 77, 95,
84, 82, 65, 78, 83, 32, 61, 32, 52, 59, 10, 9, 32, 32, 32,
99, 111, 110, 115, 116, 32, 77, 65, 80, 95, 67, 85, 82, 82, 69,
78, 84, 32, 9, 61, 32, 56, 59, 10, 10, 9, 32, 32, 32, 99,
111, 110, 115, 116, 32, 73, 67, 79, 78, 95, 79, 84, 72, 69, 82,
70, 82, 65, 77, 69, 9, 61, 32, 48, 59, 10, 9, 32, 32, 32,
99, 111, 110, 115, 116, 32, 73, 67, 79, 78, 95, 70, 85, 82, 84,
72, 69, 83, 84, 9, 9, 61, 32, 49, 59, 10, 9, 32, 32, 32,
99, 111, 110, 115, 116, 32, 73, 67, 79, 78, 95, 84, 79, 80, 70,
82, 65, 77, 69, 9, 9, 61, 32, 50, 59, 10, 9, 32, 32, 32,
99, 111, 110, 115, 116, 32, 73, 67, 79, 78, 95, 67, 85, 82, 82,
69, 78, 84, 9, 9, 61, 32, 51, 59, 10, 10, 9, 32, 32, 32,
102, 117, 110, 99, 116, 105, 111, 110, 32, 103, 101, 116, 73, 99, 111,
110, 70, 111, 114, 72, 111, 109, 101, 32, 40, 41, 32, 123, 10, 9,
32, 32, 32, 32, 32, 32, 118, 97, 114, 32, 104, 101, 32, 61, 32,
100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 99, 114, 101, 97, 116,
101, 69, 108, 101, 109, 101, 110, 116, 32, 40, 34, 80, 34, 41, 59,
10, 9, 32, 32, 32, 32, 32, 32, 104, 101, 46, 105, 110, 110, 101,
114, 72, 84, 77, 76, 32, 61, 32, 39, 42, 39, 59, 10, 9, 32,
32, 32, 32, 32, 32, 118, 97, 114, 32, 115, 101, 108, 104, 116, 109,
108, 32, 61, 32, 39, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32,
104, 101, 32, 61, 32, 39, 60, 100, 105, 118, 32, 115, 116, 121, 108,
101, 61, 34, 102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49, 114,
101, 109, 34, 62, 38, 35, 120, 50, 66, 53, 53, 60, 47, 100, 105,
118, 62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 118, 97, 114,
32, 105, 99, 111, 110, 32, 61, 32, 76, 46, 100, 105, 118, 73, 99,
111, 110, 32, 40, 123, 104, 116, 109, 108, 58, 32, 104, 101, 44, 32,
99, 108, 97, 115, 115, 78, 97, 109, 101, 58, 32, 39, 104, 111, 109,
101, 45, 105, 99, 111, 110, 39, 125, 41, 59, 10, 9, 32, 32, 32,
32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 105, 99, 111, 110, 59,
10, 9, 32, 32, 32, 125, 10, 10, 9, 32, 32, 32, 102, 117, 110,
99, 116, 105, 111, 110, 32, 103, 101, 116, 73, 99, 111, 110, 70, 111,
114, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 32, 40, 107,
101, 121, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 118, 97,
114, 32, 104, 101, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116,
46, 32, 99, 114, 101, 97, 116, 101, 69, 108, 101, 109, 101, 110, 116,
32, 40, 34, 80, 34, 41, 59, 10, 47, 47, 9, 32, 32, 32, 32,
32, 32, 104, 101, 46, 105, 110, 110, 101, 114, 72, 84, 77, 76, 32,
61, 32, 39, 42, 39, 59, 10, 10, 9, 32, 32, 32, 32, 32, 32,
118, 97, 114, 32, 115, 101, 108, 104, 116, 109, 108, 32, 61, 32, 39,
39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 107,
101, 121, 32, 61, 61, 32, 73, 67, 79, 78, 95, 79, 84, 72, 69,
82, 70, 82, 65, 77, 69, 41, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 104, 101, 32, 61, 32, 39, 60, 100, 105, 118, 32, 115,
116, 121, 108, 101, 61, 34, 102, 111, 110, 116, 45, 115, 105, 122, 101,
32, 58, 49, 46, 53, 114, 101, 109, 59, 34, 62, 32, 38, 35, 120,
49, 70, 52, 67, 67, 60, 47, 100, 105, 118, 62, 39, 59, 10, 9,
32, 32, 32, 32, 32, 32, 101, 108, 115, 101, 10, 9, 32, 32, 32,
32, 32, 32, 105, 102, 32, 40, 107, 101, 121, 32, 61, 61, 32, 73,
67, 79, 78, 95, 70, 85, 82, 84, 72, 69, 83, 84, 41, 10, 47,
47, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 104, 101, 32, 61,
32, 39, 60, 100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 102,
111, 110, 116, 45, 115, 105, 122, 101, 32, 58, 49, 46, 50, 114, 101,
109, 34, 62, 32, 38, 35, 120, 240, 159, 143, 129, 60, 47, 100, 105,
118, 62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
104, 101, 32, 61, 32, 39, 60, 100, 105, 118, 32, 115, 116, 121, 108,
101, 61, 34, 102, 111, 110, 116, 45, 115, 105, 122, 101, 32, 58, 49,
46, 52, 114, 101, 109, 34, 62, 32, 38, 35, 120, 49, 70, 51, 67,
49, 60, 47, 100, 105, 118, 62, 39, 59, 10, 9, 32, 32, 32, 32,
32, 32, 101, 108, 115, 101, 10, 9, 32, 32, 32, 32, 32, 32, 105,
102, 32, 40, 107, 101, 121, 32, 61, 61, 32, 73, 67, 79, 78, 95,
84, 79, 80, 70, 82, 65, 77, 69, 41, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 104, 101, 32, 61, 32, 39, 60, 100, 105, 118,
32, 115, 116, 121, 108, 101, 61, 34, 102, 111, 110, 116, 45, 115, 105,
122, 101, 32, 58, 48, 46, 55, 114, 101, 109, 59, 34, 62, 32, 38,
35, 120, 50, 54, 65, 66, 60, 47, 100, 105, 118, 62, 39, 59, 10,
9, 32, 32, 32, 32, 32, 32, 101, 108, 115, 101, 9, 47, 47, 32,
73, 67, 79, 78, 95, 67, 85, 82, 82, 69, 78, 84, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 104, 101, 32, 61, 32, 39, 60,
100, 105, 118, 32, 115, 116, 121, 108, 101, 61, 34, 102, 111, 110, 116,
45, 115, 105, 122, 101, 32, 58, 49, 46, 52, 114, 101, 109, 59, 34,
62, 32, 38, 35, 120, 49, 70, 54, 65, 57, 60, 47, 100, 105, 118,
62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 10, 9, 32, 32,
32, 32, 32, 32, 118, 97, 114, 32, 105, 99, 111, 110, 32, 61, 32,
76, 46, 100, 105, 118, 73, 99, 111, 110, 32, 40, 123, 104, 116, 109,
108, 58, 32, 104, 101, 44, 32, 99, 108, 97, 115, 115, 78, 97, 109,
101, 58, 32, 39, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114,
45, 105, 99, 111, 110, 39, 125, 41, 59, 10, 9, 32, 32, 32, 32,
32, 32, 114, 101, 116, 117, 114, 110, 32, 105, 99, 111, 110, 59, 10,
9, 32, 32, 32, 125, 10, 10, 9, 32, 32, 32, 102, 117, 110, 99,
116, 105, 111, 110, 32, 104, 97, 110, 100, 108, 101, 95, 109, 97, 112,
95, 114, 101, 115, 101, 116, 32, 40, 41, 32, 123, 10, 9, 32, 32,
32, 32, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32,
61, 32, 48, 59, 32, 105, 32, 60, 32, 116, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 59, 32, 105, 32, 43,
43, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
77, 97, 112, 46, 32, 114, 101, 109, 111, 118, 101, 76, 97, 121, 101,
114, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115,
32, 91, 105, 93, 46, 32, 109, 97, 114, 107, 101, 114, 41, 59, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 100, 101, 108, 101, 116,
101, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32,
91, 105, 93, 59, 10, 9, 32, 32, 32, 32, 32, 32, 125, 10, 10,
9, 32, 32, 32, 32, 32, 32, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 115, 32, 61, 32, 123, 125, 59, 10, 9, 32, 32, 32,
32, 32, 32, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73,
110, 100, 101, 120, 32, 61, 32, 48, 59, 10, 9, 32, 32, 32, 32,
32, 32, 108, 101, 116, 32, 120, 120, 32, 61, 32, 100, 111, 99, 117,
109, 101, 110, 116, 46, 32, 103, 101, 116, 69, 108, 101, 109, 101, 110,
116, 66, 121, 73, 100, 32, 40, 39, 115, 101, 108, 105, 110, 102, 111,
39, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 120, 120, 32, 46,
32, 105, 110, 110, 101, 114, 72, 84, 77, 76, 32, 61, 32, 39, 32,
39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 121,
121, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 103,
101, 116, 69, 108, 101, 109, 101, 110, 116, 66, 121, 73, 100, 32, 40,
39, 115, 101, 108, 67, 111, 117, 110, 116, 39, 41, 59, 10, 9, 32,
32, 32, 32, 32, 32, 121, 121, 46, 32, 105, 110, 110, 101, 114, 72,
84, 77, 76, 32, 61, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 39, 110, 117, 109, 98, 101,
114, 32, 111, 102, 32, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101,
114, 115, 32, 39, 32, 43, 32, 116, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 73, 110, 100, 101, 120, 59, 10, 9, 32, 32, 32, 32,
32, 32, 108, 101, 116, 32, 122, 122, 32, 61, 32, 100, 111, 99, 117,
109, 101, 110, 116, 46, 32, 103, 101, 116, 69, 108, 101, 109, 101, 110,
116, 66, 121, 73, 100, 32, 40, 39, 100, 105, 115, 116, 97, 110, 99,
101, 39, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 122, 122, 46,
32, 105, 110, 110, 101, 114, 72, 84, 77, 76, 32, 61, 32, 39, 39,
59, 10, 9, 32, 32, 32, 125, 10, 47, 47, 10, 47, 47, 9, 119,
104, 101, 110, 32, 101, 110, 116, 101, 114, 105, 110, 103, 32, 97, 32,
110, 101, 119, 32, 99, 104, 97, 110, 110, 101, 108, 44, 32, 119, 104,
105, 108, 101, 32, 109, 97, 105, 110, 116, 97, 105, 110, 105, 110, 103,
32, 97, 108, 108, 10, 47, 47, 9, 101, 108, 101, 109, 101, 110, 116,
115, 32, 111, 110, 32, 116, 104, 101, 32, 109, 97, 112, 44, 32, 109,
97, 107, 101, 32, 116, 104, 101, 32, 101, 108, 101, 109, 101, 110, 116,
115, 32, 100, 105, 102, 102, 101, 114, 101, 110, 116, 10, 47, 47, 9,
97, 110, 100, 32, 114, 101, 99, 111, 114, 100, 32, 116, 104, 97, 116,
32, 116, 104, 101, 32, 101, 108, 101, 109, 101, 110, 116, 115, 32, 97,
114, 101, 32, 110, 111, 116, 32, 105, 110, 32, 116, 104, 101, 32, 99,
117, 114, 114, 101, 110, 116, 32, 102, 114, 97, 109, 101, 32, 97, 110,
121, 109, 111, 114, 101, 10, 9, 32, 32, 32, 102, 117, 110, 99, 116,
105, 111, 110, 32, 104, 97, 110, 100, 108, 101, 95, 109, 97, 112, 95,
102, 114, 97, 109, 101, 32, 40, 41, 32, 123, 10, 9, 32, 32, 32,
32, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61,
32, 48, 59, 32, 105, 32, 60, 32, 116, 114, 97, 110, 115, 109, 105,
116, 116, 101, 114, 73, 110, 100, 101, 120, 59, 32, 105, 32, 43, 43,
41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105,
102, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115,
32, 91, 105, 93, 46, 32, 115, 116, 97, 116, 117, 115, 32, 61, 61,
32, 116, 114, 117, 101, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 115, 116, 97, 116, 117,
115, 32, 61, 32, 102, 97, 108, 115, 101, 59, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 99, 117, 114,
114, 101, 110, 116, 32, 61, 32, 102, 97, 108, 115, 101, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32,
40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91,
105, 93, 46, 32, 102, 117, 114, 116, 104, 101, 115, 116, 41, 32, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 99, 111, 110, 116, 105, 110, 117, 101, 59, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 77, 97, 112, 46, 32, 114,
101, 109, 111, 118, 101, 76, 97, 121, 101, 114, 32, 40, 84, 114, 97,
110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32,
109, 97, 114, 107, 101, 114, 41, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 105, 99, 111, 110,
32, 61, 32, 103, 101, 116, 73, 99, 111, 110, 70, 111, 114, 84, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 32, 40, 73, 67, 79, 78,
95, 79, 84, 72, 69, 82, 70, 82, 65, 77, 69, 41, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116,
32, 101, 108, 101, 109, 101, 110, 116, 32, 61, 32, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116,
32, 101, 108, 101, 109, 101, 110, 116, 77, 97, 114, 107, 101, 114, 32,
61, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 46, 109,
97, 114, 107, 101, 114, 32, 40, 91, 101, 108, 101, 109, 101, 110, 116,
46, 108, 97, 116, 44, 32, 101, 108, 101, 109, 101, 110, 116, 46, 108,
111, 110, 93, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 123, 105, 99, 111, 110,
58, 32, 105, 99, 111, 110, 125, 41, 46, 97, 100, 100, 84, 111, 40,
77, 97, 112, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 101, 108, 101, 109, 101, 110, 116, 77, 97, 114, 107,
101, 114, 46, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97, 100,
100, 69, 118, 101, 110, 116, 76, 105, 115, 116, 101, 110, 101, 114, 32,
40, 39, 99, 108, 105, 99, 107, 39, 44, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 40,
41, 32, 123, 32, 115, 101, 108, 101, 99, 116, 84, 114, 97, 110, 115,
109, 105, 116, 116, 101, 114, 67, 97, 108, 108, 98, 97, 99, 107, 32,
40, 101, 108, 101, 109, 101, 110, 116, 41, 59, 125, 41, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 114, 97,
110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32,
109, 97, 114, 107, 101, 114, 32, 61, 32, 101, 108, 101, 109, 101, 110,
116, 77, 97, 114, 107, 101, 114, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 125, 10,
9, 32, 32, 32, 125, 10, 10, 9, 32, 32, 32, 102, 117, 110, 99,
116, 105, 111, 110, 32, 115, 101, 101, 110, 65, 108, 114, 101, 97, 100,
121, 32, 40, 116, 97, 114, 103, 101, 116, 41, 32, 123, 10, 9, 32,
32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 106,
32, 61, 32, 48, 59, 32, 106, 32, 60, 32, 116, 114, 97, 110, 115,
109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 59, 32, 106, 32,
43, 43, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 105, 102, 32, 40, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116,
101, 114, 115, 32, 91, 106, 93, 46, 32, 108, 97, 116, 32, 61, 61,
32, 116, 97, 114, 103, 101, 116, 46, 32, 108, 97, 116, 41, 32, 38,
38, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32,
91, 106, 93, 46, 32, 108, 111, 110, 32, 61, 61, 32, 116, 97, 114,
103, 101, 116, 46, 32, 108, 111, 110, 41, 32, 38, 38, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 84, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 106, 93, 46,
32, 99, 104, 97, 110, 110, 101, 108, 32, 61, 61, 32, 116, 97, 114,
103, 101, 116, 46, 32, 99, 104, 97, 110, 110, 101, 108, 41, 41, 32,
123, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 116, 114, 117, 101,
59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9,
32, 32, 32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32,
114, 101, 116, 117, 114, 110, 32, 102, 97, 108, 115, 101, 59, 10, 9,
32, 32, 32, 125, 10, 10, 9, 32, 32, 32, 102, 117, 110, 99, 116,
105, 111, 110, 32, 99, 108, 101, 97, 114, 80, 114, 101, 118, 105, 111,
117, 115, 70, 117, 114, 116, 104, 101, 115, 116, 32, 40, 41, 32, 123,
10, 9, 32, 32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118, 97,
114, 32, 105, 32, 61, 32, 48, 59, 32, 105, 32, 60, 32, 116, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 59,
32, 105, 32, 43, 43, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 105, 102, 32, 40, 84, 114, 97, 110, 115, 109, 105,
116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 102, 117, 114, 116,
104, 101, 115, 116, 32, 61, 61, 32, 116, 114, 117, 101, 41, 32, 123,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93,
46, 32, 102, 117, 114, 116, 104, 101, 115, 116, 32, 61, 32, 102, 97,
108, 115, 101, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 77, 97, 112, 46, 32, 114, 101, 109, 111, 118, 101, 76,
97, 121, 101, 114, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116,
101, 114, 115, 32, 91, 105, 93, 46, 32, 109, 97, 114, 107, 101, 114,
41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 108, 101, 116, 32, 116, 109, 112, 32, 61, 32, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 99,
117, 114, 114, 101, 110, 116, 32, 63, 32, 73, 67, 79, 78, 95, 84,
79, 80, 70, 82, 65, 77, 69, 32, 58, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 73, 67, 79, 78, 95, 79, 84, 72, 69, 82, 70, 82, 65, 77,
69, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 108, 101, 116, 32, 105, 99, 111, 110, 32, 61, 32, 103, 101, 116,
73, 99, 111, 110, 70, 111, 114, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 32, 40, 116, 109, 112, 41, 59, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 101, 108,
101, 109, 101, 110, 116, 32, 61, 32, 84, 114, 97, 110, 115, 109, 105,
116, 116, 101, 114, 115, 32, 91, 105, 93, 59, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 101, 108,
101, 109, 101, 110, 116, 77, 97, 114, 107, 101, 114, 32, 61, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 76, 46, 109, 97, 114, 107, 101, 114, 32, 40,
91, 101, 108, 101, 109, 101, 110, 116, 46, 108, 97, 116, 44, 32, 101,
108, 101, 109, 101, 110, 116, 46, 108, 111, 110, 93, 44, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 123,
105, 99, 111, 110, 58, 32, 105, 99, 111, 110, 125, 41, 46, 97, 100,
100, 84, 111, 40, 77, 97, 112, 41, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 101, 108, 101, 109, 101, 110, 116,
77, 97, 114, 107, 101, 114, 46, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 97,
100, 100, 69, 118, 101, 110, 116, 76, 105, 115, 116, 101, 110, 101, 114,
32, 40, 39, 99, 108, 105, 99, 107, 39, 44, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32,
40, 41, 32, 123, 32, 115, 101, 108, 101, 99, 116, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 67, 97, 108, 108, 98, 97, 99, 107,
32, 40, 101, 108, 101, 109, 101, 110, 116, 41, 59, 125, 41, 59, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46,
32, 109, 97, 114, 107, 101, 114, 32, 61, 32, 101, 108, 101, 109, 101,
110, 116, 77, 97, 114, 107, 101, 114, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 59,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32,
32, 32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 125, 10, 9, 32,
32, 32, 10, 9, 32, 32, 32, 102, 117, 110, 99, 116, 105, 111, 110,
32, 115, 104, 111, 119, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101,
114, 65, 116, 83, 105, 100, 101, 66, 97, 114, 32, 40, 116, 97, 114,
103, 101, 116, 44, 32, 102, 105, 114, 115, 116, 79, 110, 101, 41, 32,
123, 10, 9, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 110, 101,
119, 67, 104, 97, 110, 110, 101, 108, 32, 61, 32, 39, 60, 115, 112,
97, 110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111, 110, 116,
45, 119, 101, 105, 103, 104, 116, 58, 98, 111, 108, 100, 59, 102, 111,
110, 116, 45, 115, 105, 122, 101, 58, 49, 50, 48, 37, 92, 34, 62,
39, 32, 43, 32, 116, 97, 114, 103, 101, 116, 46, 32, 99, 104, 97,
110, 110, 101, 108, 32, 43, 32, 39, 60, 47, 115, 112, 97, 110, 62,
39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 99,
111, 111, 114, 100, 115, 32, 61, 32, 39, 60, 115, 112, 97, 110, 32,
115, 116, 121, 108, 101, 61, 92, 34, 102, 111, 110, 116, 45, 115, 116,
121, 108, 101, 58, 32, 105, 116, 97, 108, 105, 99, 59, 92, 34, 62,
39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 116, 97, 114, 103, 101, 116, 46, 32, 108, 97, 116, 32, 43, 32,
39, 45, 45, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 108, 111, 110,
32, 43, 32, 32, 39, 60, 47, 115, 112, 97, 110, 62, 39, 59, 10,
9, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 120, 120, 32, 61,
32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 103, 101, 116, 69,
108, 101, 109, 101, 110, 116, 66, 121, 73, 100, 32, 40, 39, 115, 101,
108, 105, 110, 102, 111, 39, 41, 59, 10, 9, 32, 32, 32, 32, 32,
32, 105, 102, 32, 40, 102, 105, 114, 115, 116, 79, 110, 101, 41, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 120, 120, 46, 32, 105,
110, 110, 101, 114, 72, 84, 77, 76, 32, 61, 32, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 39, 60, 115,
112, 97, 110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111, 110,
116, 45, 119, 101, 105, 103, 104, 116, 58, 98, 111, 108, 100, 59, 34,
62, 39, 32, 43, 32, 39, 84, 114, 97, 110, 115, 109, 105, 116, 116,
101, 114, 115, 32, 60, 98, 114, 62, 39, 32, 43, 32, 39, 60, 47,
115, 112, 97, 110, 62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32,
120, 120, 46, 32, 105, 110, 110, 101, 114, 72, 84, 77, 76, 32, 43,
61, 32, 110, 101, 119, 67, 104, 97, 110, 110, 101, 108, 32, 43, 32,
39, 61, 62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 116, 97, 114, 103, 101, 116, 46, 32, 110, 97, 109, 101, 32, 43,
32, 39, 32, 40, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 40, 116, 97, 114, 103, 101, 116, 46, 32, 112, 111, 119, 101,
114, 47, 32, 49, 48, 48, 46, 48, 41, 46, 116, 111, 70, 105, 120,
101, 100, 32, 40, 50, 41, 32, 43, 32, 39, 32, 107, 87, 41, 39,
32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 100,
97, 116, 101, 84, 105, 109, 101, 32, 43, 32, 39, 60, 98, 114, 62,
39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111,
111, 114, 100, 115, 32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 39, 68, 105, 115, 116,
97, 110, 99, 101, 32, 116, 111, 32, 104, 111, 109, 101, 32, 39, 32,
43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32,
100, 105, 115, 116, 32, 43, 32, 39, 107, 109, 32, 39, 32, 43, 32,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101,
116, 46, 32, 97, 122, 105, 109, 117, 116, 104, 32, 43, 32, 39, 38,
35, 120, 98, 48, 39, 32, 43, 32, 39, 60, 98, 114, 62, 60, 98,
114, 62, 39, 59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 108, 101,
116, 32, 121, 121, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116,
46, 32, 103, 101, 116, 69, 108, 101, 109, 101, 110, 116, 66, 121, 73,
100, 32, 40, 39, 115, 101, 108, 67, 111, 117, 110, 116, 39, 41, 59,
10, 9, 32, 32, 32, 32, 32, 32, 121, 121, 46, 32, 105, 110, 110,
101, 114, 72, 84, 77, 76, 32, 61, 32, 39, 60, 115, 112, 97, 110,
32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111, 110, 116, 45, 119,
101, 105, 103, 104, 116, 58, 98, 111, 108, 100, 59, 34, 62, 39, 32,
43, 32, 39, 78, 117, 109, 98, 101, 114, 32, 111, 102, 32, 116, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 39, 32, 43, 32, 39,
60, 47, 115, 112, 97, 110, 62, 39, 32, 43, 32, 39, 32, 39, 32,
43, 32, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110,
100, 101, 120, 32, 43, 32, 39, 60, 98, 114, 62, 39, 59, 10, 10,
9, 32, 32, 32, 32, 32, 32, 105, 102, 32, 32, 40, 116, 97, 114,
103, 101, 116, 46, 32, 116, 121, 112, 101, 32, 61, 61, 32, 77, 65,
80, 95, 77, 65, 88, 95, 84, 82, 65, 78, 83, 41, 32, 123, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 97,
97, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 103,
101, 116, 69, 108, 101, 109, 101, 110, 116, 66, 121, 73, 100, 32, 40,
39, 100, 105, 115, 116, 97, 110, 99, 101, 39, 41, 59, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 97, 97, 46, 32, 105, 110, 110,
101, 114, 72, 84, 77, 76, 32, 32, 61, 32, 39, 60, 115, 112, 97,
110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111, 110, 116, 45,
119, 101, 105, 103, 104, 116, 58, 98, 111, 108, 100, 59, 34, 62, 39,
32, 43, 32, 39, 70, 117, 114, 116, 104, 101, 115, 116, 32, 100, 105,
115, 116, 97, 110, 99, 101, 32, 98, 121, 32, 60, 98, 114, 62, 39,
32, 43, 32, 39, 60, 47, 115, 112, 97, 110, 62, 39, 32, 43, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116,
46, 32, 99, 104, 97, 110, 110, 101, 108, 32, 43, 32, 39, 61, 62,
39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97,
114, 103, 101, 116, 46, 32, 110, 97, 109, 101, 32, 32, 43, 32, 39,
32, 40, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
40, 116, 97, 114, 103, 101, 116, 46, 32, 112, 111, 119, 101, 114, 32,
47, 32, 49, 48, 48, 46, 48, 41, 46, 32, 116, 111, 70, 105, 120,
101, 100, 32, 40, 50, 41, 32, 43, 32, 39, 32, 107, 87, 41, 39,
32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 100,
97, 116, 101, 84, 105, 109, 101, 32, 43, 32, 39, 60, 98, 114, 62,
39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111,
111, 114, 100, 115, 32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 39, 68, 105, 115, 116,
97, 110, 99, 101, 32, 116, 111, 32, 104, 111, 109, 101, 32, 39, 32,
43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103,
101, 116, 46, 32, 100, 105, 115, 116, 32, 43, 32, 39, 107, 109, 32,
39, 32, 43, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116,
97, 114, 103, 101, 116, 46, 32, 97, 122, 105, 109, 117, 116, 104, 32,
43, 32, 39, 38, 35, 120, 98, 48, 39, 32, 43, 32, 39, 60, 98,
114, 62, 60, 98, 114, 62, 39, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 10, 9, 32, 32, 32, 32, 32, 32, 125,
10, 9, 32, 32, 32, 125, 10, 10, 9, 32, 32, 32, 102, 117, 110,
99, 116, 105, 111, 110, 32, 97, 100, 100, 84, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 32, 40, 116, 97, 114, 103, 101, 116, 41, 32,
123, 10, 9, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 102, 105,
114, 115, 116, 79, 110, 101, 32, 61, 32, 116, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 32, 61, 61, 32, 48,
59, 10, 9, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116,
46, 32, 102, 117, 114, 116, 104, 101, 115, 116, 32, 61, 32, 116, 97,
114, 103, 101, 116, 46, 32, 116, 121, 112, 101, 32, 61, 61, 32, 77,
65, 80, 95, 77, 65, 88, 95, 84, 82, 65, 78, 83, 59, 10, 9,
32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 105, 99, 111, 110, 32,
61, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 103, 101, 116, 73, 99, 111, 110, 70, 111, 114, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 32, 40, 116, 97, 114, 103, 101, 116,
46, 32, 102, 117, 114, 116, 104, 101, 115, 116, 32, 63, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 73, 67, 79, 78, 95,
70, 85, 82, 84, 72, 69, 83, 84, 32, 58, 32, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 73, 67, 79, 78, 95, 67,
85, 82, 82, 69, 78, 84, 41, 59, 10, 9, 32, 32, 32, 32, 32,
32, 108, 101, 116, 32, 116, 97, 114, 103, 101, 116, 77, 97, 114, 107,
101, 114, 32, 61, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76, 46, 32, 109,
97, 114, 107, 101, 114, 40, 91, 116, 97, 114, 103, 101, 116, 46, 108,
97, 116, 44, 32, 116, 97, 114, 103, 101, 116, 46, 108, 111, 110, 93,
44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 123, 105, 99, 111, 110, 58, 32, 105, 99, 111, 110, 125,
41, 32, 46, 97, 100, 100, 84, 111, 40, 77, 97, 112, 41, 59, 10,
9, 32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32,
109, 97, 114, 107, 101, 114, 32, 61, 32, 116, 97, 114, 103, 101, 116,
77, 97, 114, 107, 101, 114, 59, 10, 9, 32, 32, 32, 32, 32, 32,
116, 97, 114, 103, 101, 116, 46, 32, 115, 116, 97, 116, 117, 115, 32,
61, 32, 116, 114, 117, 101, 59, 10, 9, 32, 32, 32, 32, 32, 32,
116, 97, 114, 103, 101, 116, 46, 32, 99, 117, 114, 114, 101, 110, 116,
32, 61, 32, 116, 114, 117, 101, 59, 10, 9, 32, 32, 32, 32, 32,
32, 116, 97, 114, 103, 101, 116, 46, 32, 109, 97, 114, 107, 101, 114,
46, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 97, 100, 100, 69, 118, 101, 110, 116, 76, 105,
115, 116, 101, 110, 101, 114, 32, 40, 39, 99, 108, 105, 99, 107, 39,
44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 102, 117, 110, 99, 116, 105,
111, 110, 32, 40, 41, 32, 123, 32, 115, 101, 108, 101, 99, 116, 84,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 67, 97, 108, 108, 98,
97, 99, 107, 32, 40, 116, 97, 114, 103, 101, 116, 41, 59, 125, 41,
59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 84, 114, 97, 110, 115,
109, 105, 116, 116, 101, 114, 115, 32, 91, 116, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 93, 32, 61, 32, 116,
97, 114, 103, 101, 116, 59, 10, 9, 32, 32, 32, 32, 32, 32, 116,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120,
32, 43, 43, 59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 108, 101,
116, 32, 120, 120, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116,
46, 32, 103, 101, 116, 69, 108, 101, 109, 101, 110, 116, 66, 121, 73,
100, 32, 40, 39, 116, 101, 115, 116, 105, 110, 103, 39, 41, 59, 10,
9, 32, 32, 32, 32, 32, 32, 120, 120, 46, 32, 105, 110, 110, 101,
114, 72, 84, 77, 76, 32, 61, 32, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 39, 60, 115, 112, 97, 110,
32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111, 110, 116, 45, 119,
101, 105, 103, 104, 116, 58, 98, 111, 108, 100, 59, 34, 62, 39, 32,
43, 32, 39, 67, 117, 114, 114, 101, 110, 116, 32, 58, 32, 39, 32,
43, 32, 116, 97, 114, 103, 101, 116, 46, 32, 110, 97, 109, 101, 32,
43, 32, 39, 60, 98, 114, 62, 39, 32, 43, 32, 39, 60, 47, 115,
112, 97, 110, 62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 115,
104, 111, 119, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 65,
116, 83, 105, 100, 101, 66, 97, 114, 32, 40, 116, 97, 114, 103, 101,
116, 44, 32, 102, 105, 114, 115, 116, 79, 110, 101, 41, 59, 10, 9,
32, 32, 32, 125, 10, 10, 9, 32, 32, 32, 102, 117, 110, 99, 116,
105, 111, 110, 32, 99, 108, 101, 97, 114, 67, 117, 114, 114, 101, 110,
116, 32, 40, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 102,
111, 114, 32, 40, 118, 97, 114, 32, 105, 32, 61, 32, 48, 59, 32,
105, 32, 60, 32, 116, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114,
73, 110, 100, 101, 120, 59, 32, 105, 32, 43, 43, 41, 32, 123, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 84,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93,
46, 32, 99, 117, 114, 114, 101, 110, 116, 41, 32, 123, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 114, 97, 110,
115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 99,
117, 114, 114, 101, 110, 116, 32, 61, 32, 102, 97, 108, 115, 101, 59,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105,
102, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115,
32, 91, 105, 93, 46, 32, 102, 117, 114, 116, 104, 101, 115, 116, 41,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 98, 114, 101, 97, 107, 59, 9, 47, 47, 32, 104, 97, 100,
32, 110, 111, 32, 34, 99, 117, 114, 114, 101, 110, 116, 34, 32, 105,
99, 111, 110, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 77, 97, 112, 46, 32, 114, 101, 109, 111, 118, 101, 76, 97,
121, 101, 114, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101,
114, 115, 32, 91, 105, 93, 46, 32, 109, 97, 114, 107, 101, 114, 41,
59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 118, 97, 114, 32, 105, 99, 111, 110, 32, 61, 32, 103, 101, 116,
73, 99, 111, 110, 70, 111, 114, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 32, 40, 73, 67, 79, 78, 95, 67, 85, 82, 82, 69,
78, 84, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 105, 102, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 102, 117, 114, 116, 104,
101, 115, 116, 41, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 105, 99, 111, 110, 32, 61, 32, 103, 101,
116, 73, 99, 111, 110, 70, 111, 114, 84, 114, 97, 110, 115, 109, 105,
116, 116, 101, 114, 32, 40, 73, 67, 79, 78, 95, 70, 85, 82, 84,
72, 69, 83, 84, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 101, 108, 115, 101, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 84, 114, 97,
110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 105, 93, 46, 32,
115, 116, 97, 116, 117, 115, 41, 9, 47, 47, 32, 99, 117, 114, 114,
101, 110, 116, 32, 102, 114, 97, 109, 101, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 99, 111, 110,
32, 61, 32, 103, 101, 116, 73, 99, 111, 110, 70, 111, 114, 84, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 32, 40, 73, 67, 79, 78,
95, 84, 79, 80, 70, 82, 65, 77, 69, 41, 59, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 108, 115, 101, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 105, 99, 111, 110, 32, 61, 32, 103, 101, 116, 73, 99, 111, 110,
70, 111, 114, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 32,
40, 73, 67, 79, 78, 95, 79, 84, 72, 69, 82, 70, 82, 65, 77,
69, 41, 59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 108, 101, 116, 32, 101, 108, 101, 109, 101, 110, 116, 32,
61, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32,
91, 105, 93, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 108, 101, 116, 32, 101, 108, 101, 109, 101, 110, 116, 77,
97, 114, 107, 101, 114, 32, 61, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 76,
46, 109, 97, 114, 107, 101, 114, 32, 40, 91, 101, 108, 101, 109, 101,
110, 116, 46, 108, 97, 116, 44, 32, 101, 108, 101, 109, 101, 110, 116,
46, 108, 111, 110, 93, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 123, 105, 99, 111, 110, 58, 32,
105, 99, 111, 110, 125, 41, 46, 97, 100, 100, 84, 111, 40, 77, 97,
112, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 101, 108, 101, 109, 101, 110, 116, 77, 97, 114, 107, 101, 114,
46, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 97, 100, 100, 69, 118, 101, 110,
116, 76, 105, 115, 116, 101, 110, 101, 114, 32, 40, 39, 99, 108, 105,
99, 107, 39, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
102, 117, 110, 99, 116, 105, 111, 110, 32, 40, 41, 32, 123, 32, 115,
101, 108, 101, 99, 116, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101,
114, 67, 97, 108, 108, 98, 97, 99, 107, 32, 40, 101, 108, 101, 109,
101, 110, 116, 41, 59, 125, 41, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 115, 32, 91, 105, 93, 46, 32, 109, 97, 114, 107, 101,
114, 32, 61, 32, 101, 108, 101, 109, 101, 110, 116, 77, 97, 114, 107,
101, 114, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 98, 114, 101, 97, 107, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 125, 10,
9, 32, 32, 32, 125, 10, 47, 47, 9, 116, 104, 101, 32, 67, 85,
82, 82, 69, 78, 84, 32, 99, 104, 97, 110, 103, 101, 100, 44, 32,
115, 111, 32, 119, 101, 32, 104, 97, 118, 101, 32, 116, 111, 32, 114,
101, 115, 116, 111, 114, 101, 32, 116, 104, 101, 32, 111, 108, 100, 10,
47, 47, 9, 109, 97, 114, 107, 101, 114, 32, 102, 111, 114, 32, 116,
104, 101, 32, 112, 114, 101, 118, 105, 111, 117, 115, 32, 99, 117, 114,
114, 101, 110, 116, 32, 45, 32, 105, 102, 32, 97, 110, 121, 32, 45,
32, 116, 104, 97, 116, 32, 105, 115, 10, 47, 47, 9, 115, 108, 105,
103, 104, 116, 108, 121, 32, 99, 111, 109, 112, 108, 105, 99, 97, 116,
101, 100, 32, 115, 105, 110, 99, 101, 32, 116, 104, 101, 114, 101, 32,
97, 114, 101, 32, 115, 101, 118, 101, 114, 97, 108, 32, 111, 112, 116,
105, 111, 110, 115, 10, 9, 32, 32, 32, 102, 117, 110, 99, 116, 105,
111, 110, 32, 117, 112, 100, 97, 116, 101, 67, 117, 114, 114, 101, 110,
116, 32, 40, 116, 97, 114, 103, 101, 116, 41, 32, 123, 10, 9, 32,
32, 32, 32, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 106,
32, 61, 32, 48, 59, 32, 106, 32, 60, 32, 116, 114, 97, 110, 115,
109, 105, 116, 116, 101, 114, 73, 110, 100, 101, 120, 59, 32, 106, 32,
43, 43, 41, 32, 123, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 40, 84, 114,
97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 106, 93, 46,
32, 108, 97, 116, 32, 61, 61, 32, 116, 97, 114, 103, 101, 116, 46,
32, 108, 97, 116, 41, 32, 38, 38, 10, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91,
106, 93, 46, 32, 108, 111, 110, 32, 61, 61, 32, 116, 97, 114, 103,
101, 116, 46, 32, 108, 111, 110, 41, 32, 38, 38, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 84, 114, 97,
110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 106, 93, 46, 32,
99, 104, 97, 110, 110, 101, 108, 32, 61, 61, 32, 116, 97, 114, 103,
101, 116, 46, 32, 99, 104, 97, 110, 110, 101, 108, 41, 41, 32, 123,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 84,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 106, 93,
46, 32, 99, 117, 114, 114, 101, 110, 116, 32, 61, 32, 116, 114, 117,
101, 59, 10, 47, 47, 10, 47, 47, 9, 114, 101, 99, 97, 108, 108,
32, 116, 104, 97, 116, 32, 34, 102, 117, 114, 116, 104, 101, 115, 116,
34, 32, 112, 111, 115, 105, 116, 105, 111, 110, 115, 32, 100, 111, 32,
110, 111, 116, 32, 115, 104, 111, 119, 32, 97, 32, 34, 99, 117, 114,
114, 101, 110, 116, 34, 32, 105, 99, 111, 110, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 33, 84,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115, 32, 91, 106, 93,
46, 32, 102, 117, 114, 116, 104, 101, 115, 116, 41, 32, 123, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
77, 97, 112, 46, 32, 114, 101, 109, 111, 118, 101, 76, 97, 121, 101,
114, 32, 40, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 115,
32, 91, 106, 93, 46, 32, 109, 97, 114, 107, 101, 114, 41, 59, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 118, 97, 114, 32, 105, 99, 111, 110, 32, 61, 32, 103, 101, 116,
73, 99, 111, 110, 70, 111, 114, 84, 114, 97, 110, 115, 109, 105, 116,
116, 101, 114, 32, 40, 73, 67, 79, 78, 95, 67, 85, 82, 82, 69,
78, 84, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 101, 108, 101, 109, 101,
110, 116, 32, 61, 32, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101,
114, 115, 32, 91, 106, 93, 59, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 108, 101, 116, 32, 101, 108, 101,
109, 101, 110, 116, 77, 97, 114, 107, 101, 114, 32, 61, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 76, 46, 109, 97, 114, 107, 101, 114,
32, 40, 91, 101, 108, 101, 109, 101, 110, 116, 46, 108, 97, 116, 44,
32, 101, 108, 101, 109, 101, 110, 116, 46, 108, 111, 110, 93, 44, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 123, 105, 99, 111, 110, 58, 32, 105, 99, 111, 110, 125, 41, 46,
97, 100, 100, 84, 111, 40, 77, 97, 112, 41, 59, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 108,
101, 109, 101, 110, 116, 77, 97, 114, 107, 101, 114, 46, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 97, 100, 100, 69, 118, 101, 110, 116,
76, 105, 115, 116, 101, 110, 101, 114, 32, 40, 39, 99, 108, 105, 99,
107, 39, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 102,
117, 110, 99, 116, 105, 111, 110, 32, 40, 41, 32, 123, 32, 115, 101,
108, 101, 99, 116, 84, 114, 97, 110, 115, 109, 105, 116, 116, 101, 114,
67, 97, 108, 108, 98, 97, 99, 107, 32, 40, 101, 108, 101, 109, 101,
110, 116, 41, 59, 125, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 84, 114, 97, 110, 115, 109,
105, 116, 116, 101, 114, 115, 32, 91, 106, 93, 46, 32, 109, 97, 114,
107, 101, 114, 32, 61, 32, 101, 108, 101, 109, 101, 110, 116, 77, 97,
114, 107, 101, 114, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 108, 101, 116, 32, 120, 120, 32, 61, 32, 100, 111,
99, 117, 109, 101, 110, 116, 46, 32, 103, 101, 116, 69, 108, 101, 109,
101, 110, 116, 66, 121, 73, 100, 32, 40, 39, 116, 101, 115, 116, 105,
110, 103, 39, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 120, 120, 46, 32, 105, 110, 110, 101, 114, 72, 84,
77, 76, 32, 61, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 39, 60, 115, 112, 97, 110, 32, 115, 116,
121, 108, 101, 61, 92, 34, 102, 111, 110, 116, 45, 119, 101, 105, 103,
104, 116, 58, 98, 111, 108, 100, 59, 34, 62, 39, 32, 43, 32, 39,
67, 117, 114, 114, 101, 110, 116, 32, 58, 32, 39, 32, 43, 32, 116,
97, 114, 103, 101, 116, 46, 32, 110, 97, 109, 101, 32, 43, 32, 39,
60, 98, 114, 62, 39, 32, 43, 32, 39, 60, 47, 115, 112, 97, 110,
62, 39, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 98, 114, 101, 97, 107, 59, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32, 125, 10,
9, 32, 32, 32, 125, 10, 10, 9, 32, 32, 32, 102, 117, 110, 99,
116, 105, 111, 110, 32, 102, 101, 116, 99, 104, 68, 97, 116, 97, 32,
40, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 36, 46, 103,
101, 116, 74, 83, 79, 78, 32, 40, 39, 47, 100, 97, 116, 97, 46,
106, 115, 111, 110, 39, 44, 32, 102, 117, 110, 99, 116, 105, 111, 110,
32, 40, 100, 97, 116, 97, 41, 32, 123, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 108, 101, 116, 32, 116, 116, 116, 32, 61, 32,
100, 111, 99, 117, 109, 101, 110, 116, 46, 32, 103, 101, 116, 69, 108,
101, 109, 101, 110, 116, 66, 121, 73, 100, 32, 40, 39, 99, 117, 114,
114, 101, 110, 116, 39, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 102, 111, 114, 32, 40, 118, 97, 114, 32, 116, 32, 61,
32, 48, 59, 32, 116, 32, 60, 32, 100, 97, 116, 97, 46, 32, 108,
101, 110, 103, 116, 104, 59, 32, 116, 32, 43, 43, 41, 32, 123, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 108, 101,
116, 32, 116, 97, 114, 103, 101, 116, 32, 61, 32, 100, 97, 116, 97,
32, 91, 116, 93, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 105, 102, 32, 40, 116, 97, 114, 103, 101, 116, 46,
32, 116, 121, 112, 101, 32, 61, 61, 32, 77, 65, 80, 95, 82, 69,
83, 69, 84, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 104, 97, 110, 100, 108, 101, 95,
109, 97, 112, 95, 114, 101, 115, 101, 116, 32, 40, 41, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
99, 111, 110, 116, 105, 110, 117, 101, 59, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 101, 108, 115, 101, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40,
116, 97, 114, 103, 101, 116, 46, 32, 116, 121, 112, 101, 32, 61, 61,
32, 77, 65, 80, 95, 70, 82, 65, 77, 69, 41, 32, 123, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
104, 97, 110, 100, 108, 101, 95, 109, 97, 112, 95, 102, 114, 97, 109,
101, 32, 40, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 99, 111, 110, 116, 105, 110, 117, 101,
59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
125, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
101, 108, 115, 101, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 105, 102, 32, 40, 116, 97, 114, 103, 101, 116, 46, 32,
116, 121, 112, 101, 32, 61, 61, 32, 77, 65, 80, 95, 67, 85, 82,
82, 69, 78, 84, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 117, 112, 100, 97, 116, 101,
67, 117, 114, 114, 101, 110, 116, 32, 40, 116, 97, 114, 103, 101, 116,
41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 99, 111, 110, 116, 105, 110, 117, 101, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 108, 115,
101, 32, 123, 9, 9, 47, 47, 32, 119, 101, 32, 97, 100, 100, 32,
97, 110, 32, 101, 108, 101, 109, 101, 110, 116, 32, 10, 9, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102,
32, 40, 33, 40, 40, 116, 97, 114, 103, 101, 116, 46, 32, 116, 121,
112, 101, 32, 61, 61, 32, 77, 65, 80, 95, 77, 65, 88, 95, 84,
82, 65, 78, 83, 41, 32, 124, 124, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 116,
97, 114, 103, 101, 116, 46, 32, 116, 121, 112, 101, 32, 61, 61, 32,
77, 65, 80, 95, 78, 79, 82, 77, 95, 84, 82, 65, 78, 83, 41,
41, 41, 32, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 110, 116, 105, 110, 117,
101, 59, 10, 47, 47, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 99, 108, 101, 97, 114, 67, 117, 114,
114, 101, 110, 116, 32, 40, 41, 59, 9, 47, 47, 32, 97, 108, 119,
97, 121, 115, 32, 103, 111, 111, 100, 10, 9, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 105, 102, 32, 40, 115,
101, 101, 110, 65, 108, 114, 101, 97, 100, 121, 32, 40, 116, 97, 114,
103, 101, 116, 41, 41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 117, 112, 100,
97, 116, 101, 67, 117, 114, 114, 101, 110, 116, 32, 40, 116, 97, 114,
103, 101, 116, 41, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 110, 116, 105,
110, 117, 101, 59, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 125, 10, 9, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 101, 108, 115, 101, 32, 123,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 105, 102, 32, 40, 116, 97, 114, 103, 101, 116,
46, 32, 116, 121, 112, 101, 32, 61, 61, 32, 77, 65, 80, 95, 77,
65, 88, 95, 84, 82, 65, 78, 83, 41, 32, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 99, 108, 101, 97, 114, 80, 114, 101, 118, 105, 111, 117,
115, 70, 117, 114, 116, 104, 101, 115, 116, 32, 40, 41, 59, 10, 9,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 97, 100, 100, 84, 114, 97, 110, 115, 109, 105, 116, 116,
101, 114, 32, 40, 116, 97, 114, 103, 101, 116, 41, 59, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125,
10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 125, 10, 9, 32,
32, 32, 32, 32, 32, 125, 41, 59, 10, 9, 32, 32, 32, 125, 10,
10, 9, 32, 32, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 105,
110, 105, 116, 105, 97, 108, 105, 122, 101, 32, 40, 41, 32, 123, 10,
9, 32, 32, 32, 32, 32, 32, 77, 97, 112, 32, 61, 32, 76, 46,
109, 97, 112, 32, 40, 39, 109, 97, 112, 95, 99, 97, 110, 118, 97,
115, 39, 41, 46, 115, 101, 116, 86, 105, 101, 119, 40, 91, 104, 111,
109, 101, 76, 97, 116, 105, 116, 117, 100, 101, 44, 32, 104, 111, 109,
101, 76, 111, 110, 103, 105, 116, 117, 100, 101, 93, 44, 32, 56, 41,
59, 10, 10, 9, 32, 32, 32, 32, 32, 32, 76, 46, 116, 105, 108,
101, 76, 97, 121, 101, 114, 32, 40, 39, 104, 116, 116, 112, 115, 58,
47, 47, 123, 115, 125, 46, 116, 105, 108, 101, 46, 111, 112, 101, 110,
115, 116, 114, 101, 101, 116, 109, 97, 112, 46, 111, 114, 103, 47, 123,
122, 125, 47, 123, 120, 125, 47, 123, 121, 125, 46, 112, 110, 103, 39,
44, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 97, 116, 116, 114,
105, 98, 117, 116, 105, 111, 110, 58, 32, 39, 77, 97, 112, 32, 100,
97, 116, 97, 32, 38, 99, 111, 112, 121, 59, 32, 60, 97, 32, 104,
114, 101, 102, 61, 34, 104, 116, 116, 112, 115, 58, 47, 47, 119, 119,
119, 46, 111, 112, 101, 110, 115, 116, 114, 101, 101, 116, 109, 97, 112,
46, 111, 114, 103, 47, 34, 62, 79, 112, 101, 110, 83, 116, 114, 101,
101, 116, 77, 97, 112, 60, 47, 97, 62, 32, 99, 111, 110, 116, 114,
105, 98, 117, 116, 111, 114, 115, 44, 32, 60, 97, 32, 104, 114, 101,
102, 61, 34, 104, 116, 116, 112, 115, 58, 47, 47, 99, 114, 101, 97,
116, 105, 118, 101, 99, 111, 109, 109, 111, 110, 115, 46, 111, 114, 103,
47, 108, 105, 99, 101, 110, 115, 101, 115, 47, 98, 121, 45, 115, 97,
47, 50, 46, 48, 47, 34, 62, 67, 67, 45, 66, 89, 45, 83, 65,
60, 47, 97, 62, 44, 32, 73, 109, 97, 103, 101, 114, 121, 32, 194,
169, 32, 60, 97, 32, 104, 114, 101, 102, 61, 34, 104, 116, 116, 112,
115, 58, 47, 47, 119, 119, 119, 46, 109, 97, 112, 98, 111, 120, 46,
99, 111, 109, 47, 34, 62, 77, 97, 112, 98, 111, 120, 60, 47, 97,
62, 39, 44, 10, 9, 32, 32, 32, 32, 32, 32, 32, 109, 97, 120,
90, 111, 111, 109, 58, 32, 49, 56, 44, 10, 9, 32, 32, 32, 32,
32, 32, 32, 105, 100, 58, 32, 39, 109, 97, 112, 98, 111, 120, 47,
115, 116, 114, 101, 101, 116, 115, 45, 118, 49, 49, 39, 44, 10, 9,
32, 32, 32, 32, 32, 32, 32, 97, 99, 99, 101, 115, 115, 84, 111,
107, 101, 110, 58, 32, 39, 121, 111, 117, 114, 46, 109, 97, 112, 98,
111, 120, 46, 97, 99, 99, 101, 115, 115, 46, 116, 111, 107, 101, 110,
39, 10, 9, 32, 32, 32, 125, 41, 46, 97, 100, 100, 84, 111, 40,
77, 97, 112, 41, 59, 10, 10, 9, 32, 32, 32, 118, 97, 114, 32,
105, 99, 111, 110, 32, 61, 32, 103, 101, 116, 73, 99, 111, 110, 70,
111, 114, 72, 111, 109, 101, 32, 40, 41, 59, 10, 9, 32, 32, 32,
118, 97, 114, 32, 104, 111, 109, 101, 77, 97, 114, 107, 101, 114, 32,
61, 32, 76, 46, 109, 97, 114, 107, 101, 114, 40, 91, 104, 111, 109,
101, 76, 97, 116, 105, 116, 117, 100, 101, 44, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 104, 111, 109,
101, 76, 111, 110, 103, 105, 116, 117, 100, 101, 93, 44, 32, 123, 105,
99, 111, 110, 58, 32, 105, 99, 111, 110, 125, 41, 46, 97, 100, 100,
84, 111, 40, 77, 97, 112, 41, 59, 10, 10, 47, 42, 32, 83, 101,
116, 117, 112, 32, 111, 117, 114, 32, 116, 105, 109, 101, 114, 32, 116,
111, 32, 112, 111, 108, 108, 32, 102, 114, 111, 109, 32, 116, 104, 101,
32, 115, 101, 114, 118, 101, 114, 46, 32, 42, 47, 10, 9, 32, 32,
32, 119, 105, 110, 100, 111, 119, 46, 115, 101, 116, 73, 110, 116, 101,
114, 118, 97, 108, 40, 102, 117, 110, 99, 116, 105, 111, 110, 32, 40,
41, 32, 123, 10, 9, 32, 32, 32, 32, 32, 32, 102, 101, 116, 99,
104, 68, 97, 116, 97, 32, 40, 41, 59, 10, 9, 32, 32, 32, 125,
44, 32, 50, 48, 48, 48, 41, 59, 10, 9, 125, 10, 10, 9, 102,
117, 110, 99, 116, 105, 111, 110, 32, 115, 101, 108, 101, 99, 116, 84,
114, 97, 110, 115, 109, 105, 116, 116, 101, 114, 67, 97, 108, 108, 98,
97, 99, 107, 32, 40, 116, 97, 114, 103, 101, 116, 41, 32, 123, 10,
9, 32, 32, 32, 108, 101, 116, 32, 120, 120, 32, 61, 32, 100, 111,
99, 117, 109, 101, 110, 116, 46, 32, 103, 101, 116, 69, 108, 101, 109,
101, 110, 116, 66, 121, 73, 100, 32, 40, 39, 115, 101, 108, 101, 99,
116, 101, 100, 39, 41, 59, 10, 9, 32, 32, 32, 108, 101, 116, 32,
110, 101, 119, 67, 104, 97, 110, 110, 101, 108, 32, 61, 32, 39, 60,
115, 112, 97, 110, 32, 115, 116, 121, 108, 101, 61, 92, 34, 102, 111,
110, 116, 45, 119, 101, 105, 103, 104, 116, 58, 98, 111, 108, 100, 59,
102, 111, 110, 116, 45, 115, 105, 122, 101, 58, 49, 50, 48, 37, 92,
34, 62, 39, 32, 43, 32, 116, 97, 114, 103, 101, 116, 46, 32, 99,
104, 97, 110, 110, 101, 108, 32, 43, 32, 39, 60, 47, 115, 112, 97,
110, 62, 39, 59, 10, 9, 32, 32, 32, 108, 101, 116, 32, 99, 111,
111, 114, 100, 115, 32, 61, 32, 39, 60, 115, 112, 97, 110, 32, 115,
116, 121, 108, 101, 61, 92, 34, 102, 111, 110, 116, 45, 115, 116, 121,
108, 101, 58, 32, 105, 116, 97, 108, 105, 99, 59, 92, 34, 62, 39,
32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
116, 97, 114, 103, 101, 116, 46, 32, 108, 97, 116, 32, 43, 32, 39,
45, 45, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 108, 111, 110, 32,
43, 32, 32, 39, 60, 47, 115, 112, 97, 110, 62, 39, 59, 10, 9,
32, 32, 32, 120, 120, 46, 32, 105, 110, 110, 101, 114, 72, 84, 77,
76, 32, 61, 32, 39, 60, 112, 32, 115, 116, 121, 108, 101, 61, 92,
34, 112, 97, 100, 100, 105, 110, 103, 58, 32, 49, 48, 112, 120, 59,
32, 98, 111, 114, 100, 101, 114, 58, 50, 112, 120, 32, 115, 111, 108,
105, 100, 32, 98, 108, 97, 99, 107, 59, 92, 34, 62, 39, 32, 43,
32, 39, 83, 101, 108, 101, 99, 116, 101, 100, 58, 32, 32, 39, 32,
43, 32, 39, 60, 98, 114, 62, 39, 32, 43, 10, 9, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 110, 101, 119, 67, 104, 97, 110, 110, 101, 108, 32, 43, 32,
39, 61, 62, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 116, 97,
114, 103, 101, 116, 46, 32, 110, 97, 109, 101, 32, 43, 32, 32, 39,
32, 40, 39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 40, 116, 97, 114, 103, 101, 116, 46, 32, 112, 111, 119,
101, 114, 32, 47, 32, 49, 48, 48, 46, 48, 41, 46, 32, 116, 111,
70, 105, 120, 101, 100, 32, 40, 50, 41, 32, 43, 32, 39, 32, 107,
87, 41, 39, 32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43, 10,
9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 100,
97, 116, 101, 84, 105, 109, 101, 32, 43, 32, 39, 60, 98, 114, 62,
39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 99, 111, 111, 114, 100,
115, 32, 43, 32, 39, 60, 98, 114, 62, 39, 32, 43, 10, 9, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 39, 68, 105, 115, 116, 97, 110, 99, 101, 32, 116,
111, 32, 104, 111, 109, 101, 32, 39, 32, 43, 32, 116, 97, 114, 103,
101, 116, 46, 32, 100, 105, 115, 116, 32, 43, 32, 39, 107, 109, 32,
39, 32, 43, 10, 9, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 116, 97, 114, 103, 101, 116, 46, 32, 97, 122, 105,
109, 117, 116, 104, 32, 43, 32, 39, 38, 35, 120, 98, 48, 39, 32,
43, 32, 39, 60, 98, 114, 62, 60, 47, 112, 62, 39, 10, 9, 125,
10, 10, 60, 47, 115, 99, 114, 105, 112, 116, 62, 10, 60, 47, 104,
101, 97, 100, 62, 10, 9, 60, 98, 111, 100, 121, 32, 111, 110, 108,
111, 97, 100, 61, 34, 105, 110, 105, 116, 105, 97, 108, 105, 122, 101,
40, 41, 34, 62, 10, 9, 60, 100, 105, 118, 32, 105, 100, 61, 34,
109, 97, 112, 95, 99, 97, 110, 118, 97, 115, 34, 32, 115, 116, 121,
108, 101, 61, 34, 119, 105, 100, 116, 104, 58, 56, 48, 37, 59, 32,
104, 101, 105, 103, 104, 116, 58, 49, 48, 48, 37, 34, 62, 60, 47,
100, 105, 118, 62, 10, 9, 60, 100, 105, 118, 32, 105, 100, 61, 34,
105, 110, 102, 111, 34, 62, 10, 9, 60, 100, 105, 118, 62, 10, 9,
32, 32, 32, 60, 104, 49, 62, 81, 116, 45, 68, 65, 66, 60, 47,
104, 49, 62, 10, 9, 32, 32, 32, 60, 112, 32, 105, 100, 61, 34,
116, 101, 115, 116, 105, 110, 103, 34, 62, 60, 47, 112, 62, 10, 9,
32, 32, 32, 60, 112, 32, 105, 100, 61, 34, 115, 101, 108, 101, 99,
116, 101, 100, 34, 62, 60, 47, 112, 62, 10, 9, 32, 32, 32, 60,
112, 32, 105, 100, 61, 34, 115, 101, 108, 67, 111, 117, 110, 116, 34,
62, 60, 47, 112, 62, 10, 9, 32, 32, 32, 60, 112, 32, 105, 100,
61, 34, 100, 105, 115, 116, 97, 110, 99, 101, 34, 62, 60, 47, 112,
62, 10, 9, 32, 32, 32, 60, 112, 32, 105, 100, 61, 34, 115, 101,
108, 105, 110, 102, 111, 34, 62, 60, 47, 112, 62, 10, 9, 32, 32,
32, 60, 112, 32, 105, 100, 61, 34, 99, 117, 114, 114, 101, 110, 116,
34, 62, 60, 47, 112, 62, 10, 9, 60, 47, 100, 105, 118, 62, 10,
9, 60, 47, 100, 105, 118, 62, 10, 32, 32, 60, 47, 98, 111, 100,
121, 62, 10, 60, 47, 104, 116, 109, 108, 62, 10,
0};

View File

@@ -1,14 +0,0 @@
#pragma once
#include <QString>
#include <QSettings>
void store (QSettings *s, QString paragraph, QString key, QString v);
void store (QSettings *s, QString paragraph, QString key, int value);
int value_i (QSettings *s, QString paragraph, QString key, int def);
float value_f (QSettings *s, QString paragraph, QString key, float def);
QString value_s (QSettings *s, QString paragraph, QString key, QString def);
void remove (QSettings *s, QString paragraoh, QString key);

View File

@@ -1,2 +0,0 @@
JvanKatwijk

View File

@@ -12,7 +12,7 @@ mkdir -p ./appdir/usr/share/icons/hicolor/128x128/apps/
mkdir -p ./appdir/usr/share/icons/hicolor/256x256/apps/
cp linux-bin/qt-dab* appdir/usr/bin/qt-dab-6.9.2
cp qt-dab-6.9.desktop appdir/usr/share/applications
cp app-files/qt-dab-6.9.desktop appdir/usr/share/applications
cp ../res/radio-pcitures/qt-dab-6.9-256x256.png appdir/qt-dab-RC.png
cp ../res/radio-pictures/qt-dab-6.9-128x128.png appdir/usr/share/icons/hicolor/128x128/apps/
cp ../res/radio-pictures/qt-dab-6.9-256x256.png appdir/usr/share/icons/hicolor/256x256/apps/
@@ -25,7 +25,7 @@ unset QTDIR; unset QT_PLUGIN_PATH ; unset LD_LIBRARY_PATH
./linuxdeployqt*.AppImage ./appdir/usr/share/applications/* -bundle-non-qt-libs -no-translations
./linuxdeployqt*.AppImage --appimage-extract
find appdir/usr/plugins/ -type f -exec squashfs-root/usr/bin/patchelf --set-rpath '$ORIGIN/../../lib' {} \;
chmod a+x appimage/* ; rm appdir/AppRun ; cp appimage/* appdir/
chmod a+x app-files/appimage/* ; rm appdir/AppRun ; cp app-files/appimage/* appdir/
export PATH=squashfs-root/usr/bin/:$PATH
squashfs-root/usr/bin/appimagetool $(readlink -f ./appdir/)
find ./appdir -executable -type f -exec ldd {} \; | grep " => /usr" | cut -d " " -f 2-3 | sort | uniq

988
qt-dab-6.9.pro Normal file
View File

@@ -0,0 +1,988 @@
######################################################################
# Automatically generated by qmake (2.01a) Tue Oct 6 19:48:14 2009
# but modified by me to accomodate for the includes for qwt, hamlib and
# portaudio
######################################################################
TEMPLATE = app
QT += widgets xml multimedia
#CONFIG += console
CONFIG -= console
QMAKE_CXXFLAGS += -std=c++17
win32 {
QMAKE_CFLAGS += -O3 -ffast-math
QMAKE_CXXFLAGS += -O3 -ffast-math
}
unix {
#QMAKE_CFLAGS += -O3 -ffast-math -pg
#QMAKE_CXXFLAGS += -O3 -ffast-math -pg
#QMAKE_LFLAGS += -O3 -ffast-math -pg
QMAKE_CXXFLAGS += -ffast-math -flto
QMAKE_CFLAGS += -ffast-math -flto
QMAKE_LFLAGS += -ffast-math -flto
#QMAKE_CFLAGS += -g -fsanitize=address
#QMAKE_CXXFLAGS += -g -fsanitize=address
#QMAKE_LFLAGS += -g -fsanitize=address
}
#QMAKE_CFLAGS += -pg
#QMAKE_CXXFLAGS += -pg
#QMAKE_LFLAGS += -pg
QMAKE_CXXFLAGS += -isystem $$[QT_INSTALL_HEADERS]
RC_ICONS = qt-dab-6.9.ico
RESOURCES += resources.qrc
TRANSLATIONS = ../i18n/de_DE.ts
#
# For more parallel processing, uncomment the following
# defines
#DEFINES += __MSC_THREAD__
DEFINES += __THREADED_BACKEND__
DEFINES += __FFT_CORR__
#For showing trace output
#DEFINES += __EPG_TRACE__
DEPENDPATH += . \
..sources \
./sources/backend\
./sources/backend/reed-solomon \
./sources/backend/audio \
./sources/backend/data \
./sources/backend/data/epg \
./sources/backend/data/mot \
./sources/backend/data/journaline \
./sources/eti-handler \
./sources/main \
./sources/main/forms-v7 \
./sources/main/forms-v7/new-display \
./sources/main/forms-v7/new-display/scopes \
./sources/main/forms-v7/snr-viewer \
./sources/frontend \
./sources/output \
./sources/output/portaudio \
./sources/protection \
./sources/qt-devices \
# ./sources/scopes-qwt6 \
./sources/support \
./sources/support/gui-elements \
./sources/qt-devices \
./sources/qt-devices/filereaders/ \
./sources/qt-devices/filereaders/new-reader \
./sources/qt-devices/filereaders/rawfiles-new \
./sources/qt-devices/filereaders/xml-filereader
INCLUDEPATH += . \
..sources \
./sources/backend\
./sources/backend/reed-solomon \
./sources/backend/audio \
./sources/backend/data \
./sources/backend/data/epg \
./sources/backend/data/mot \
./sources/backend/data/journaline \
./sources/eti-handler \
./sources/main \
./sources/main/forms-v7 \
./sources/main/forms-v7/new-display \
./sources/main/forms-v7/new-display/scopes \
./sources/main/forms-v7/snr-viewer \
./sources/frontend \
./sources/output \
./sources/output/portaudio \
./sources/protection \
./sources/qt-devices \
# ./sources/scopes-qwt6 \
./sources/support \
./sources/support/gui-elements \
./sources/qt-devices \
./sources/qt-devices/filereaders/ \
./sources/qt-devices/filereaders/new-reader \
./sources/qt-devices/filereaders/rawfiles-new \
./sources/qt-devices/filereaders/xml-filereader
# Input
HEADERS += ./sources/main/radio.h \
./sources/main/forms-v7/qwt-2.h \
./sources/main/forms-v7/new-display/display-widget.h \
./sources/main/forms-v7/new-display/scopes/spectrum-scope.h \
./sources/main/forms-v7/new-display/scopes/correlation-scope.h \
./sources/main/forms-v7/new-display/scopes/null-scope.h \
./sources/main/forms-v7/new-display/scopes/channel-scope.h \
./sources/main/forms-v7/new-display/scopes/dev-scope.h \
./sources/main/forms-v7/new-display/scopes/waterfall-scope.h \
./sources/main/forms-v7/new-display/scopes/iqdisplay.h \
./sources/main/forms-v7/new-display/scopes/audio-display.h \
./sources/main/forms-v7/new-display/scopes/spectrogramdata.h \
./sources/main/forms-v7/snr-viewer/snr-viewer.h \
./sources/main/ensemble-handler.h \
./sources/main/config-handler.h \
./sources/main/techdata.h \
./sources/main/aboutdialog.h \
./sources/support/scan-handler.h \
./sources/support/scantable-handler.h \
./sources/support/dxDisplay.h \
./sources/support/audiosystem-selector.h \
./sources/eti-handler/eti-generator.h \
./sources/frontend/ofdm-handler.h \
./sources/frontend/timesyncer.h \
./sources/frontend/sample-reader.h \
./sources/frontend/ofdm-decoder.h \
./sources/frontend/correlator.h \
./sources/frontend/freqsyncer.h \
./sources/frontend/phasetable.h \
./sources/frontend/freq-interleaver.h \
./sources/frontend/tii-detector.h \
./sources/frontend/tii-detector-1.h \
./sources/frontend/tii-detector-2.h \
./sources/frontend/fic-handler.h \
./sources/frontend/ensemble.h \
./sources/frontend/fib-config.h \
./sources/frontend/fib-printer.h \
./sources/frontend/fib-decoder.h \
./sources/frontend/fib-table.h \
./sources/frontend/estimator.h \
./sources/protection/protTables.h \
./sources/protection/protection.h \
./sources/protection/eep-protection.h \
./sources/protection/uep-protection.h \
./sources/backend/msc-handler.h \
./sources/backend/reed-solomon/galois.h \
./sources/backend/reed-solomon/reed-solomon.h \
./sources/backend/charsets.h \
./sources/backend/frame-processor.h \
./sources/backend/backend.h \
./sources/backend/backend-driver.h \
./sources/backend/backend-deconvolver.h \
./sources/backend/audio/firecode-checker.h \
./sources/backend/audio/mp2processor.h \
./sources/backend/audio/mp4processor.h \
./sources/backend/audio/bitWriter.h \
./sources/backend/data/data-processor.h \
./sources/backend/data/pad-handler.h \
./sources/backend/data/virtual-datahandler.h \
./sources/backend/data/tdc-datahandler.h \
./sources/backend/data/ip-datahandler.h \
./sources/backend/data/adv-datahandler.h \
./sources/backend/data/mot/mot-handler.h \
./sources/backend/data/mot/mot-object.h \
./sources/backend/data/mot/mot-dir.h \
./sources/backend/data/journaline-datahandler.h \
./sources/backend/data/journaline-screen.h \
./sources/backend/data/journaline/dabdatagroupdecoder.h \
./sources/backend/data/journaline/crc_8_16.h \
./sources/backend/data/journaline/log.h \
./sources/backend/data/journaline/newssvcdec_impl.h \
./sources/backend/data/journaline/Splitter.h \
./sources/backend/data/journaline/dabdgdec_impl.h \
./sources/backend/data/journaline/newsobject.h \
./sources/backend/data/journaline/NML.h \
./sources/backend/data/epg/epg-compiler.h \
./sources/backend/data/epg/xml-extractor.h \
./sources/output/audio-player.h \
./sources/support/dab-constants.h \
./sources/support/bit-extractors.h \
./sources/support/crc-handlers.h \
./sources/support/mot-content-types.h \
./sources/support/distances.h \
./sources/support/time-converter.h \
./sources/support/logger.h \
./sources/support/settings-handler.h \
./sources/support/position-handler.h \
./sources/support/cacheElement.h \
./sources/support/settingNames.h \
./sources/support/fft-handler.h \
./sources/support/wavWriter.h \
./sources/support/converter_48000.h \
./sources/support/process-params.h \
./sources/support/ringbuffer.h \
./sources/support/dab-params.h \
./sources/support/dab-tables.h \
./sources/support/presetcombobox.h \
./sources/support/scanlist-handler.h \
./sources/support/scheduler.h \
./sources/support/schedule-selector.h \
./sources/support/element-selector.h \
./sources/support/time-table.h \
./sources/support/findfilenames.h \
./sources/support/dl-cache.h \
./sources/support/content-table.h \
./sources/support/ITU_Region_1.h \
./sources/support/coordinates.h \
./sources/support/skin-handler.h \
./sources/support/mapport.h \
./sources/support/bandpass-filter.h \
./sources/support/fir-filters.h \
./sources/support/tii-mapper.h \
./sources/support/tii-reader.h \
./sources/support//uploader.h \
./sources/support/gui-elements/circular-button.h \
./sources/support/gui-elements/clickable-label.h \
./sources/support/gui-elements/color-selector.h \
./sources/support/gui-elements/font-chooser.h \
./sources/support/gui-elements/icon-label.h \
./sources/support/gui-elements/newpushbutton.h \
./sources/support/gui-elements/normalpushbutton.h \
./sources/support/gui-elements/smallcombobox.h \
./sources/support/gui-elements/smallpushbutton.h \
./sources/support/gui-elements/smallqlistview.h \
./sources/support/gui-elements/smallspinbox.h \
./sources/support/gui-elements/super-frame.h \
./sources/support/gui-elements/verysmallpushbutton.h \
./sources/qt-devices/device-handler.h \
./sources/qt-devices/device-chooser.h \
./sources/qt-devices/device-exceptions.h \
./sources/qt-devices/xml-filewriter.h \
./sources/qt-devices/filereaders/new-reader/newfiles.h \
./sources/qt-devices/filereaders/new-reader/new-reader.h \
./sources/qt-devices/filereaders/new-reader/riff-reader.h \
./sources/qt-devices/filereaders/rawfiles-new/rawfiles.h \
./sources/qt-devices/filereaders/rawfiles-new/raw-reader.h \
./sources/qt-devices/filereaders/xml-filereader/element-reader.h \
./sources/qt-devices/filereaders/xml-filereader/xml-filereader.h \
./sources/qt-devices/filereaders/xml-filereader/xml-reader.h \
./sources/qt-devices/filereaders/xml-filereader/xml-descriptor.h
FORMS += ./sources/main/forms-v7/technical_data.ui
FORMS += ./sources/main/forms-v7/dabradio-6.ui
FORMS += ./sources/main/forms-v7/config-helper.ui
FORMS += ./sources/main/forms-v7/audio-description.ui
FORMS += ./sources/main/forms-v7/data-description.ui
FORMS += ./sources/main/forms-v7/new-display/scopewidget.ui
FORMS += ./sources/main/forms-v7/snr-viewer/snr-widget.ui
FORMS += ./sources/main/aboutdialog.ui
#FORMS += ./sources/qt-devices/filereaders/filereader-widget.ui
FORMS += ./sources/qt-devices/filereaders/xml-filereader/xmlfiles.ui
SOURCES += ./sources/main/main.cpp \
./sources/main/radio.cpp \
./sources/main/forms-v7/new-display/display-widget.cpp \
./sources/main/forms-v7/new-display/scopes/correlation-scope.cpp \
./sources/main/forms-v7/new-display/scopes/spectrum-scope.cpp \
./sources/main/forms-v7/new-display/scopes/null-scope.cpp \
./sources/main/forms-v7/new-display/scopes/channel-scope.cpp \
./sources/main/forms-v7/new-display/scopes/dev-scope.cpp \
./sources/main/forms-v7/new-display/scopes/waterfall-scope.cpp \
./sources/main/forms-v7/new-display/scopes/iqdisplay.cpp \
./sources/main/forms-v7/new-display/scopes/audio-display.cpp \
./sources/main/forms-v7/new-display/scopes/spectrogramdata.cpp \
./sources/main/forms-v7/snr-viewer/snr-viewer.cpp \
./sources/main/aboutdialog.cpp \
./sources/main/ensemble-handler.cpp \
./sources/main/techdata.cpp \
./sources/main/config-handler.cpp \
./sources/support/scan-handler.cpp \
./sources/support/scantable-handler.cpp \
./sources/support/audiosystem-selector.cpp \
./sources/support/dxDisplay.cpp \
./sources/eti-handler/eti-generator.cpp \
./sources/frontend/ofdm-handler.cpp \
./sources/frontend/timesyncer.cpp \
./sources/frontend/sample-reader.cpp \
./sources/frontend/ofdm-decoder.cpp \
./sources/frontend/correlator.cpp \
./sources/frontend/freqsyncer.cpp \
./sources/frontend/phasetable.cpp \
./sources/frontend/freq-interleaver.cpp \
./sources/frontend/tii-detector.cpp \
./sources/frontend/tii-detector-1.cpp \
./sources/frontend/tii-detector-2.cpp \
./sources/frontend/fic-handler.cpp \
./sources/frontend/ensemble.cpp \
./sources/frontend/fib-config.cpp \
./sources/frontend/fib-printer.cpp \
./sources/frontend/fib-decoder.cpp \
./sources/frontend/estimator.cpp \
./sources/protection/protTables.cpp \
./sources/protection/protection.cpp \
./sources/protection/eep-protection.cpp \
./sources/protection/uep-protection.cpp \
./sources/backend/msc-handler.cpp \
./sources/backend/reed-solomon/galois.cpp \
./sources/backend/reed-solomon/reed-solomon.cpp \
./sources/backend/charsets.cpp \
./sources/backend/backend.cpp \
./sources/backend/backend-driver.cpp \
./sources/backend/backend-deconvolver.cpp \
./sources/backend/audio/firecode-checker.cpp \
./sources/backend/audio/mp2processor.cpp \
./sources/backend/audio/mp4processor.cpp \
./sources/backend/audio/bitWriter.cpp \
./sources/backend/data/pad-handler.cpp \
./sources/backend/data/data-processor.cpp \
./sources/backend/data/tdc-datahandler.cpp \
./sources/backend/data/ip-datahandler.cpp \
./sources/backend/data/adv-datahandler.cpp \
./sources/backend/data/mot/mot-handler.cpp \
./sources/backend/data/mot/mot-object.cpp \
./sources/backend/data/mot/mot-dir.cpp \
./sources/backend/data/journaline-datahandler.cpp \
./sources/backend/data/journaline-screen.cpp \
./sources/backend/data/journaline/crc_8_16.c \
./sources/backend/data/journaline/log.c \
./sources/backend/data/journaline/newssvcdec_impl.cpp \
./sources/backend/data/journaline/Splitter.cpp \
./sources/backend/data/journaline/dabdgdec_impl.c \
./sources/backend/data/journaline/newsobject.cpp \
./sources/backend/data/journaline/NML.cpp \
./sources/backend/data/epg/epg-compiler.cpp \
./sources/backend/data/epg/xml-extractor.cpp \
./sources/output/audio-player.cpp \
./sources/support/distances.cpp \
./sources/support/time-converter.cpp \
./sources/support/logger.cpp \
./sources/support/settings-handler.cpp \
./sources/support/position-handler.cpp \
./sources/support/wavWriter.cpp \
./sources/support/converter_48000.cpp \
./sources/support/fft-handler.cpp \
./sources/support/dab-params.cpp \
./sources/support/dab-tables.cpp \
# ./sources/support/preset-handler.cpp \
./sources/support/presetcombobox.cpp \
./sources/support/scanlist-handler.cpp \
./sources/support/scheduler.cpp \
./sources/support/schedule-selector.cpp \
./sources/support/element-selector.cpp \
./sources/support/time-table.cpp \
./sources/support/findfilenames.cpp \
./sources/support/content-table.cpp \
./sources/support/ITU_Region_1.cpp \
./sources/support/coordinates.cpp \
./sources/support/skin-handler.cpp \
./sources/support/mapport.cpp \
./sources/support/bandpass-filter.cpp \
./sources/support/fir-filters.cpp \
./sources/support/tii-mapper.cpp \
./sources/support/tii-reader.cpp \
./sources/support/uploader.cpp \
./sources/support/gui-elements/circular-button.cpp \
./sources/support/gui-elements/clickable-label.cpp \
./sources/support/gui-elements/color-selector.cpp \
./sources/support/gui-elements/font-chooser.cpp \
./sources/support/gui-elements/icon-label.cpp \
./sources/support/gui-elements/newpushbutton.cpp \
./sources/support/gui-elements/normalpushbutton.cpp \
./sources/support/gui-elements/smallcombobox.cpp \
./sources/support/gui-elements/smallpushbutton.cpp \
./sources/support/gui-elements/smallqlistview.cpp \
./sources/support/gui-elements/smallspinbox.cpp \
./sources/support/gui-elements/super-frame.cpp \
./sources/support/gui-elements/verysmallpushbutton.cpp \
./sources/qt-devices/device-handler.cpp \
./sources/qt-devices/device-chooser.cpp \
./sources/qt-devices/xml-filewriter.cpp \
./sources/qt-devices/filereaders/rawfiles-new/rawfiles.cpp \
./sources/qt-devices/filereaders/rawfiles-new/raw-reader.cpp \
./sources/qt-devices/filereaders/new-reader/newfiles.cpp \
./sources/qt-devices/filereaders/new-reader/new-reader.cpp \
./sources/qt-devices/filereaders/new-reader/riff-reader.cpp \
# ./sources/qt-devices/filereaders/wavfiles-new/wavfiles.cpp \
# ./sources/qt-devices/filereaders/wavfiles-new/wav-reader.cpp \
./sources/qt-devices/filereaders/xml-filereader/xml-filereader.cpp \
./sources/qt-devices/filereaders/xml-filereader/xml-reader.cpp \
./sources/qt-devices/filereaders/xml-filereader/xml-descriptor.cpp
#
unix {
DESTDIR = ./linux-bin
equals (QT_MAJOR_VERSION, 5) {
TARGET = qt-dab-qt5-6.9.3
}
else {
TARGET = qt-dab-qt6-6.9.3
}
exists ("../.git") {
GITHASHSTRING = $$system(git rev-parse --short HEAD)
!isEmpty(GITHASHSTRING) {
message("Current git hash = $$GITHASHSTRING")
DEFINES += GITHASH=\\\"$$GITHASHSTRING\\\"
}
}
isEmpty(GITHASHSTRING) {
DEFINES += GITHASH=\\\"------\\\"
}
mac {
DESTDIR = ./mac-bin
PKG_CONFIG = /usr/local/bin/pkg-config
QT_CONFIG -= no-pkg-config
}
CONFIG += link_pkgconfig
#PKGCONFIG += sndfile
#PKGCONFIG += samplerate
PKGCONFIG += libusb-1.0
CONFIG += mapserver
!mac {
LIBS += -ldl
}
PKGCONFIG += portaudio-2.0
PKGCONFIG += zlib
#PKGCONFIG += sndfile
#PKGCONFIG += samplerate
INCLUDEPATH += /usr/local/include
!mac {
INCLUDEPATH += /usr/local/include
#correct this for the correct path to the qwt6 library on your system
#LIBS += -lqwt
equals (QT_MAJOR_VERSION, 6) {
LIBS += -lqwt-qt6
}else{ LIBS += -lqwt-qt5
}
}
#mac {
# Should be possible to make on non Macs as well.
# qmake -set QMAKEFEATURES /usr/local/Cellar/qwt/6.2.0/features
CONFIG += qwt
#}
#CONFIG += double
CONFIG += single
#
# comment or uncomment for the devices you want to have support for
# (you obviously have libraries installed for the selected ones)
CONFIG += sdrplay-v2
CONFIG += sdrplay-v3
CONFIG += dabstick-linux
CONFIG += rtl_tcp
CONFIG += airspy-2
CONFIG += hackrf
CONFIG += lime
#CONFIG += soapy
#CONFIG += pluto-rxtx
CONFIG += pluto
CONFIG += spyServer-16
CONFIG += spyServer-8
#CONFIG += uhd
#CONFIG += colibri
#CONFIG += elad-device
#CONFIG += faad
CONFIG += fdk-aac
#very experimental, simple server for connecting to a tdc handler
CONFIG += datastreamer
#to handle output of embedded an IP data stream, uncomment
#CONFIG += send_datagram
#if you want to listen remote, uncomment
#CONFIG += tcp-streamer # use for remote listening
#otherwise, if you want to use the default, uncomment
CONFIG += local-audio
#CONFIG += viterbi-scalar
#CONFIG += viterbi-sse
#CONFIG += viterbi-avx2
CONFIG += spiral-sse
#CONFIG += spiral-no-sse
#DEFINES += SHOW_MISSING
DEFINES += __LOGGING__
DEFINES += __DUMP_SNR__ # for experiments only
}
# an attempt to have it run under W32 through cross compilation
win32 {
exists ("../.git") {
GITHASHSTRING = $$system(git rev-parse --short HEAD)
!isEmpty(GITHASHSTRING) {
message("Current git hash = $$GITHASHSTRING")
DEFINES += GITHASH=\\\"$$GITHASHSTRING\\\"
}
}
isEmpty(GITHASHSTRING) {
DEFINES += GITHASH=\\\"------\\\"
}
##for for 64 bit
# TARGET = qt-dab64-9
# DEFINES += __BITS64__
# DESTDIR = /usr/shared/w64-programs/windows-dab64-qt
# INCLUDEPATH += /usr/x64-w64-mingw32/sys-root/mingw/include
# INCLUDEPATH += /usr/local/include /usr/include/qt4/qwt /usr/include/qt5/qwt /usr/include/qt4/qwt /usr/include/qwt /usr/local/qwt-6.1.4-svn/
# LIBS += -L/usr/x64-w64-mingw32/sys-root/mingw/lib
## LIBS += -liio
## #CONFIG += extio
# CONFIG += airspy-2
# CONFIG += rtl_tcp
# CONFIG += dabstick
# CONFIG += sdrplay-v2
# CONFIG += pluto
# CONFIG += sdrplay-v3
## CONFIG += hackrf
## CONFIG += lime
# CONFIG += viterbi-scalar
# CONFIG += spiral-sse
# CONFIG += spiral-no-sse
# DEFINES += __THREADED_BACKEND
#
#for win32, comment out the lines above
# equals (QT_MAJOR_VERSION, 5) {
# TARGET = qt-dab32-qt5-6.9V3.3
# }
# else {
# TARGET = qt-dab32-qt6-6.9V3.3
# }
# CONFIG += dabstick-win-v3
equals (QT_MAJOR_VERSION, 5) {
TARGET = qt-dab32-qt5-6.9.3
}
else {
TARGET = qt-dab32-qt6-6.9.3
}
CONFIG += dabstick-win-v4
CONFIG += airspy-2
CONFIG += spyServer-16
CONFIG += spyServer-8
DESTDIR = /usr/shared/w32-programs/windows-dab32-qt
INCLUDEPATH += /usr/i686-w64-mingw32/sys-root/mingw/include
equals (QT_MAJOR_VERSION, 6) {
INCLUDEPATH += /usr/i686-w64-mingw32/sys-root/mingw/include/qt6/qwt
} else {
INCLUDEPATH += /usr/i686-w64-mingw32/sys-root/mingw/include/qt5/qwt
}
LIBS += -L/usr/i686-w64-mingw32/sys-root/mingw/lib
CONFIG += double
#CONFIG += single
CONFIG += mapserver
CONFIG += extio
CONFIG += rtl_tcp
CONFIG += sdrplay-v2
CONFIG += sdrplay-v3
CONFIG += hackrf
CONFIG += lime
CONFIG += pluto
CONFIG += viterbi-scalar
# CONFIG += viterbi-sse
# CONFIG += viterbi-avx2
# CONFIG += spiral-sse
# CONFIG += spiral-no-sse
#
# end of 32/64 specifics
INCLUDEPATH += /usr/local/include
LIBS += -lportaudio
#LIBS += /usr/i686-w64-mingw32/sys-root/mingw/bin/libsndfile-1.dll
#LIBS += /usr/i686-w64-mingw32/sys-root/mingw/bin/libsamplerate-0.dll
LIBS += -lole32
LIBS += -lwinpthread
LIBS += -lwinmm
LIBS += -lstdc++
LIBS += -lws2_32
LIBS += -lusb-1.0
LIBS += -lz
#correct this for the correct path to the qwt6 library on your system
#mingw64 wants the first one, cross compiling mingw64-32 the second one
#LIBS += -lqwt
equals (QT_MAJOR_VERSION, 6) {
LIBS += -lqwt-qt6
}
else {
LIBS += -lqwt-qt5
}
CONFIG += faad
#
#very experimental, simple server for connecting to a tdc handler
#CONFIG += datastreamer
#if you want to listen remote, uncomment
#CONFIG += tcp-streamer # use for remote listening
#otherwise, if you want to use the default qt way of soud out
CONFIG += local-audio
#comment both out if you just want to use the "normal" way
DEFINES += __DUMP_SNR__ # for experiments only
}
### dabstick
# Note: the windows version is bound to the dll, the
# linux version loads the function from the so
dabstick-linux {
DEFINES += HAVE_RTLSDR
DEPENDPATH += ./sources/qt-devices/rtlsdr-handler-linux
INCLUDEPATH += ./sources/qt-devices/rtlsdr-handler-linux
HEADERS += ./sources/qt-devices/rtlsdr-handler-linux/rtlsdr-handler.h \
./sources/qt-devices/rtlsdr-handler-linux/dll-driver.h \
./sources/qt-devices/rtlsdr-handler-linux/rtl-dongleselect.h
SOURCES += ./sources/qt-devices/rtlsdr-handler-linux/rtlsdr-handler.cpp \
./sources/qt-devices/rtlsdr-handler-linux/dll-driver.cpp \
./sources/qt-devices/rtlsdr-handler-linux/rtl-dongleselect.cpp
FORMS += ./sources/qt-devices/rtlsdr-handler-linux/rtlsdr-widget.ui
}
dabstick-win-v4 {
DEFINES += HAVE_RTLSDR_V4
DEPENDPATH += ./sources/qt-devices/rtlsdr-handler-win
INCLUDEPATH += ./sources/qt-devices/rtlsdr-handler-win
INCLUDEPATH += ../usr/shared/drivers/rtlsdrWindowsV4
INCLUDEPATH += ../usr/shared/drivers/rtlsdrWindowsV4/x86
HEADERS += ./sources/qt-devices/rtlsdr-handler-win/rtlsdr-handler-win.h \
./sources/qt-devices/rtlsdr-handler-common/rtl-dongleselect.h
SOURCES += ./sources/qt-devices/rtlsdr-handler-win/rtlsdr-handler-win.cpp \
./sources/qt-devices/rtlsdr-handler-common/rtl-dongleselect.cpp
FORMS += ./sources/qt-devices/rtlsdr-handler-common/rtlsdr-widget.ui
LIBS += /usr/shared/drivers/rtlsdrWindowsV4/x86/rtlsdr.dll
}
dabstick-win-v3 {
DEFINES += HAVE_RTLSDR_V3
DEPENDPATH += ./sources/qt-devices/rtlsdr-handler-win
INCLUDEPATH += ./sources/qt-devices/rtlsdr-handler-win
INCLUDEPATH += ./sources/qt-devices/rtlsdr-handler-common
HEADERS += ./sources/qt-devices/rtlsdr-handler-win/rtlsdr-handler-win.h \
./sources/qt-devices/rtlsdr-handler-common/rtl-dongleselect.h
SOURCES += ./sources/qt-devices/rtlsdr-handler-win/rtlsdr-handler-win.cpp \
./sources/qt-devices/rtlsdr-handler-common/rtl-dongleselect.cpp
FORMS += ./sources/qt-devices/rtlsdr-handler-common/rtlsdr-widget.ui
# LIBS += /usr/i686-s64-mingw32/sys-root/mingw/bin/librtlsdr.dll
LIBS += /usr/i686-w64-mingw32/sys-root/mingw/bin/librtlsdr.dll
}
#
# the SDRplay
#
sdrplay-v2 {
DEFINES += HAVE_SDRPLAY_V2
DEPENDPATH += ./sources/qt-devices/sdrplay-handler-v2
INCLUDEPATH += ./sources/qt-devices/sdrplay-handler-v2
INCLUDEPATH += ./sources/qt-devices/rtlsdr-handler-common
HEADERS += ./sources/qt-devices/sdrplay-handler-v2/sdrplay-handler-v2.h \
./sources/qt-devices/sdrplay-handler-v2/sdrplayselect.h
SOURCES += ./sources/qt-devices/sdrplay-handler-v2/sdrplay-handler-v2.cpp \
./sources/qt-devices/sdrplay-handler-v2/sdrplayselect.cpp
FORMS += ./sources/qt-devices/sdrplay-handler-v2/sdrplay-widget-v2.ui
}
#
# the SDRplay
#
sdrplay-v3 {
DEFINES += HAVE_SDRPLAY_V3
DEPENDPATH += ./sources/qt-devices/sdrplay-handler-v3
INCLUDEPATH += ./sources/qt-devices/sdrplay-handler-v3 \
./sources/qt-devices/sdrplay-handler-v3/include
HEADERS += ./sources/qt-devices/sdrplay-handler-v3/sdrplay-handler-v3.h \
./sources/qt-devices/sdrplay-handler-v3/sdrplay-commands.h \
./sources/qt-devices/sdrplay-handler-v3/Rsp-device.h \
./sources/qt-devices/sdrplay-handler-v3/RspI-handler.h \
./sources/qt-devices/sdrplay-handler-v3/Rsp1A-handler.h \
./sources/qt-devices/sdrplay-handler-v3/RspII-handler.h \
./sources/qt-devices/sdrplay-handler-v3/RspDuo-handler.h \
./sources/qt-devices/sdrplay-handler-v3/RspDx-handler.h
SOURCES += ./sources/qt-devices/sdrplay-handler-v3/Rsp-device.cpp \
./sources/qt-devices/sdrplay-handler-v3/sdrplay-handler-v3.cpp \
./sources/qt-devices/sdrplay-handler-v3/RspI-handler.cpp \
./sources/qt-devices/sdrplay-handler-v3/Rsp1A-handler.cpp \
./sources/qt-devices/sdrplay-handler-v3/RspII-handler.cpp \
./sources/qt-devices/sdrplay-handler-v3/RspDuo-handler.cpp \
./sources/qt-devices/sdrplay-handler-v3/RspDx-handler.cpp
FORMS += ./sources/qt-devices/sdrplay-handler-v3/sdrplay-widget-v3.ui
# LIBS += -ldl
}
#
# limeSDR
#
lime {
DEFINES += HAVE_LIME
INCLUDEPATH += ./sources/qt-devices/lime-handler
DEPENDPATH += ./sources/qt-devices/lime-handler
HEADERS += ./sources/qt-devices/lime-handler/lime-handler.h \
./sources/qt-devices/lime-handler/lime-widget.h
SOURCES += ./sources/qt-devices/lime-handler/lime-handler.cpp
}
#
# the hackrf
#
hackrf {
DEFINES += HAVE_HACKRF
DEPENDPATH += ./sources/qt-devices/hackrf-handler
INCLUDEPATH += ./sources/qt-devices/hackrf-handler
HEADERS += ./sources/qt-devices/hackrf-handler/hackrf-handler.h
SOURCES += ./sources/qt-devices/hackrf-handler/hackrf-handler.cpp
FORMS += ./sources/qt-devices/hackrf-handler/hackrf-widget.ui
}
#
#
# airspy support
#
airspy {
DEFINES += HAVE_AIRSPY
DEPENDPATH += ./sources/qt-devices/airspy
INCLUDEPATH += ./sources/qt-devices/airspy-handler \
./sources/qt-devices/airspy-handler/libairspy
HEADERS += ./sources/qt-devices/airspy-handler/airspy-handler.h \
./sources/qt-devices/airspy-handler/airspyselect.h \
./sources/qt-devices/airspy-handler/libairspy/airspy.h
SOURCES += ./sources/qt-devices/airspy-handler/airspy-handler.cpp \
./sources/qt-devices/airspy-handler/airspyselect.cpp
FORMS += ./sources/qt-devices/airspy-handler/airspy-widget.ui
}
airspy-2 {
DEFINES += HAVE_AIRSPY_2
DEPENDPATH += ./sources/qt-devices/airspy-2
INCLUDEPATH += ./sources/qt-devices/airspy-2 \
./sources/qt-devices/airspy-2/libairspy
HEADERS += ./sources/qt-devices/airspy-2/airspy-2.h \
./sources/qt-devices/airspy-2/airspyselect.h \
./sources/qt-devices/airspy-2/libairspy/airspy.h
SOURCES += ./sources/qt-devices/airspy-2/airspy-2.cpp \
./sources/qt-devices/airspy-2/airspyselect.cpp
FORMS += ./sources/qt-devices/airspy-2/airspy-widget.ui
}
# extio dependencies, windows only
#
extio {
DEFINES += HAVE_EXTIO
INCLUDEPATH += ./sources/qt-devices/extio-handler
HEADERS += ./sources/qt-devices/extio-handler/extio-handler.h \
./sources/qt-devices/extio-handler/common-readers.h \
./sources/qt-devices/extio-handler/virtual-reader.h
SOURCES += ./sources/qt-devices/extio-handler/extio-handler.cpp \
./sources/qt-devices/extio-handler/common-readers.cpp \
./sources/qt-devices/extio-handler/virtual-reader.cpp
}
#
rtl_tcp {
DEFINES += HAVE_RTL_TCP
QT += network
INCLUDEPATH += ./sources/qt-devices/rtl_tcp
HEADERS += ./sources/qt-devices/rtl_tcp/rtl_tcp_client.h
SOURCES += ./sources/qt-devices/rtl_tcp/rtl_tcp_client.cpp
FORMS += ./sources/qt-devices/rtl_tcp/rtl_tcp-widget.ui
}
soapy {
DEFINES += HAVE_SOAPY
DEPENDPATH += ./sources/qt-devices/soapy
INCLUDEPATH += ./sources/qt-devices/soapy
HEADERS += ./sources/qt-devices/soapy/soapy-handler.h \
./sources/qt-devices/soapy/soapy-converter.h
SOURCES += ./sources/qt-devices/soapy/soapy-handler.cpp \
./sources/qt-devices/soapy/soapy-converter.cpp
FORMS += ./sources/qt-devices/soapy/soapy-widget.ui
LIBS += -lSoapySDR -lm
}
pluto-rxtx {
DEFINES += HAVE_PLUTO_RXTX
QT += network
INCLUDEPATH += ./sources/qt-devices/pluto-rxtx
INCLUDEPATH += ./sources/qt-devices/pluto-rxtx/dab-streamer
HEADERS += ./sources/qt-devices/pluto-rxtx/dabFilter.h
HEADERS += ./sources/qt-devices/pluto-rxtx/pluto-rxtx-handler.h
HEADERS += ./sources/qt-devices/pluto-rxtx/dab-streamer/dab-streamer.h
HEADERS += ./sources/qt-devices/pluto-rxtx/dab-streamer/up-filter.h
SOURCES += ./sources/qt-devices/pluto-rxtx/pluto-rxtx-handler.cpp
SOURCES += ./sources/qt-devices/pluto-rxtx/dab-streamer/dab-streamer.cpp
SOURCES += ./sources/qt-devices/pluto-rxtx/dab-streamer/up-filter.cpp
FORMS += ./sources/qt-devices/pluto-rxtx/pluto-rxtx-widget.ui
# LIBS += -liio -lad9361
}
pluto {
DEFINES += HAVE_PLUTO
QT += network
INCLUDEPATH += ./sources/qt-devices/pluto-handler
HEADERS += ./sources/qt-devices/pluto-handler/dabFilter.h
HEADERS += ./sources/qt-devices/pluto-handler/pluto-handler.h
SOURCES += ./sources/qt-devices/pluto-handler/pluto-handler.cpp
FORMS += ./sources/qt-devices/pluto-handler/pluto-widget.ui
}
elad-device {
DEFINES += HAVE_ELAD
DEPENDPATH += ./sources/qt-devices/elad-s1-handler
INCLUDEPATH += ./sources/qt-devices/elad-s1-handler
HEADERS += ./sources/qt-devices/elad-s1-handler/elad-handler.h
HEADERS += ./sources/qt-devices/elad-s1-handler/elad-loader.h
HEADERS += ./sources/qt-devices/elad-s1-handler/elad-worker.h
SOURCES += ./sources/qt-devices/elad-s1-handler/elad-handler.cpp
SOURCES += ./sources/qt-devices/elad-s1-handler/elad-loader.cpp
SOURCES += ./sources/qt-devices/elad-s1-handler/elad-worker.cpp
FORMS += ./sources/qt-devices/elad-s1-handler/elad-widget.ui
}
spyServer-8 {
DEFINES += HAVE_SPYSERVER_8
DEPENDPATH += ./sources/qt-devices/spy-server-8
INCLUDEPATH += ./sources/qt-devices/spy-server-8
HEADERS += ./sources/qt-devices/spy-server-8/spyserver-protocol.h
HEADERS += ./sources/qt-devices/spy-server-8/tcp-client-8.h
HEADERS += ./sources/qt-devices/spy-server-8/spy-handler-8.h
HEADERS += ./sources/qt-devices/spy-server-8/spyserver-client-8.h
SOURCES += ./sources/qt-devices/spy-server-8/tcp-client-8.cpp
SOURCES += ./sources/qt-devices/spy-server-8/spy-handler-8.cpp
SOURCES += ./sources/qt-devices/spy-server-8/spyserver-client-8.cpp
FORMS += ./sources/qt-devices/spy-server-8/spyserver-widget-8.ui
}
spyServer-16 {
DEFINES += HAVE_SPYSERVER_16
DEPENDPATH += ./sources/qt-devices/spy-server-16
INCLUDEPATH += ./sources/qt-devices/spy-server-16
HEADERS += ./sources/qt-devices/spy-server-16/spyserver-protocol.h
HEADERS += ./sources/qt-devices/spy-server-16/tcp-client.h
HEADERS += ./sources/qt-devices/spy-server-16/spy-handler.h
HEADERS += ./sources/qt-devices/spy-server-16/spyserver-client.h
SOURCES += ./sources/qt-devices/spy-server-16/tcp-client.cpp
SOURCES += ./sources/qt-devices/spy-server-16/spy-handler.cpp
SOURCES += ./sources/qt-devices/spy-server-16/spyserver-client.cpp
FORMS += ./sources/qt-devices/spy-server-16/spyserver-widget.ui
}
uhd {
DEFINES += HAVE_UHD
DEPENDPATH += ./sources/qt-devices/uhd
INCLUDEPATH += ./sources/qt-devices/uhd
HEADERS += ./sources/qt-devices/uhd/uhd-handler.h
SOURCES += ./sources/qt-devices/uhd/uhd-handler.cpp
FORMS += ./sources/qt-devices/uhd/uhd-widget.ui
LIBS += -luhd
}
colibri {
DEFINES += HAVE_COLIBRI
DEPENDPATH += ./sources/qt-devices/colibri-handler
INCLUDEPATH += ./sources/qt-devices/colibri-handler
HEADERS += ./sources/qt-devices/colibri-handler/common.h
HEADERS += ./sources/qt-devices/colibri-handler/LibLoader.h
HEADERS += ./sources/qt-devices/colibri-handler/colibri-handler.h
SOURCES += ./sources/qt-devices/colibri-handler/LibLoader.cpp
SOURCES += ./sources/qt-devices/colibri-handler/colibri-handler.cpp
FORMS += ./sources/qt-devices/colibri-handler/colibri-widget.ui
}
send_datagram {
DEFINES += _SEND_DATAGRAM_
QT += network
}
tcp-streamer {
DEFINES += TCP_STREAMER
QT += network
HEADERS += ./sources/output/tcp-streamer.h
SOURCES += ./sources/output/tcp-streamer.cpp
}
local-audio {
PKGCONFIG += portaudio-2.0
DEFINES += QT_AUDIO
QT += multimedia
equals (QT_MAJOR_VERSION, 5) {
INCLUDEPATH += ./sources/output/Qt5
INCLUDEPATH += ./sources/output/portaudio
HEADERS += ./sources/output/Qt5/Qt-audio.h \
./sources/output/Qt5/Qt-audiodevice.h \
./sources/output/portaudio/audiosink.h
SOURCES += ./sources/output/Qt5/Qt-audio.cpp \
./sources/output/Qt5/Qt-audiodevice.cpp \
./sources/output/portaudio/audiosink.cpp
LIBS += -lportaudio
} else {
INCLUDEPATH += ./sources/output/Qt6
INCLUDEPATH += ./sources/output/portaudio
HEADERS += ./sources/output/Qt6/Qt-audio.h \
./sources/output/Qt6/Qt-audiodevice.h \
./sources/output/portaudio/audiosink.h
SOURCES += ./sources/output/Qt6/Qt-audio.cpp \
./sources/output/Qt6/Qt-audiodevice.cpp \
./sources/output/portaudio/audiosink.cpp
LIBS += -lportaudio
}
}
datastreamer {
DEFINES += DATA_STREAMER
DEFINES += CLOCK_STREAMER
INCLUDEPATH += ./sources/server-thread
HEADERS += ./sources/server-thread/tcp-server.h
SOURCES += ./sources/server-thread/tcp-server.cpp
}
viterbi-scalar {
DEPENDPATH += ./sources/support/viterbi
INCLUDEPATH += ./sources/support/viterbi
HEADERS += ./sources/support/viterbi/viterbi.h
SOURCES += ./sources/support/viterbi/viterbi.cpp
}
viterbi-sse {
DEPENDPATH += ./sources/support/viterbi
QMAKE_CFLAGS += -msse4
QMAKE_CXXFLAGS += -msse4
QMAKE_CFLAGS += -mavx2
QMAKE_CXXFLAGS += -mavx2
QMAKE_LFLAGS += -mavx2
DEFINES += __SSE4_1__
DEFINES += __ARCH_X86__
#DEFINES += __ARCH_AARCH64__
INCLUDEPATH += ./sources/support/viterbi
HEADERS += ./sources/support/viterbi/viterbi.h
SOURCES += ./sources/support/viterbi/viterbi.cpp
}
viterbi-avx2 {
DEPENDPATH += ./sources/support/viterbi
QMAKE_CFLAGS += -mavx2
QMAKE_CXXFLAGS += -mavx2
QMAKE_LFLAGS += -mavx2
DEFINES += __AVX2__
DEFINES += __ARCH_X86__
#DEFINES += __ARCH_AARCH64__
INCLUDEPATH += ./sources/support/viterbi
HEADERS += ./sources/support/viterbi/viterbi.h
SOURCES += ./sources/support/viterbi/viterbi.cpp
}
spiral-sse {
DEPENDPATH += ./sources/support/viterbi-spiral
INCLUDEPATH += ./sources/support/viterbi-spiral
DEFINES += SSE_AVAILABLE
HEADERS += ./sources/support/viterbi-spiral/viterbi.h
SOURCES += ./sources/support/viterbi-spiral/viterbi.cpp
HEADERS += ./sources/support/viterbi-spiral/spiral-sse.h
SOURCES += ./sources/support/viterbi-spiral/spiral-sse.c
}
spiral-no-sse {
DEPENDPATH += ./sources/support/viterbi-spiral
INCLUDEPATH += ./sources/support/viterbi-spiral
DEFINES += NO_SSE_AVAILABLE
HEADERS += ./sources/support/viterbi-spiral/viterbi.h
SOURCES += ./sources/support/viterbi-spiral/viterbi.cpp
HEADERS += ./sources/support/viterbi-spiral/spiral-no-sse.h
SOURCES += ./sources/support/viterbi-spiral/spiral-no-sse.c
}
faad {
DEFINES += __WITH_FAAD__
HEADERS += ./sources/backend/audio/faad-decoder.h
SOURCES += ./sources/backend/audio/faad-decoder.cpp
LIBS += -lfaad
}
fdk-aac {
DEFINES += __WITH_FDK_AAC__
INCLUDEPATH += ./helpers/specials/fdk-aac
HEADERS += ./sources/backend/audio/fdk-aac.h
SOURCES += ./sources/backend/audio/fdk-aac.cpp
PKGCONFIG += fdk-aac
}
mapserver {
DEFINES += __HAVE_MAP_SERVER__
HEADERS += ./sources/support/http-handler.h
SOURCES += ./sources/support/http-handler.cpp
}
double {
DEFINES += __WITH_DOUBLES__
LIBS += -lfftw3
}
single {
LIBS += -lfftw3f
}

View File

@@ -1,719 +0,0 @@
cmake_minimum_required( VERSION 3.21 )
# set CMAKE_BUILD_TYPE to "Release" if not defined (like call from command line)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Set build type to Release if not specified" FORCE)
endif()
include(${CMAKE_CURRENT_LIST_DIR}/cmake/Modules/CMakeFunctions.cmake)
project(Qt-DAB VERSION 6)
set (objectName qt-dab-6.9.2)
set (objectName "Qt-DAB")
set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTORCC ON)
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set (CMAKE_INSTALL_PREFIX "/usr/local/bin" CACHE PATH "default install path" FORCE )
endif()
add_definitions(-DAPP_NAME="${objectName}")
add_definitions(-DPRJ_NAME="${PROJECT_NAME}")
add_definitions(-DPRJ_VERS="${PROJECT_VERSION}")
if(CMAKE_BUILD_TYPE STREQUAL "Release")
# regarding using QWT < 6.2.0 (6.1.4) to avoid many deprecated massages (only suppressed on release versions)
add_definitions(-DQT_NO_DEPRECATED_WARNINGS)
endif()
if(MINGW)
add_definitions ( -municode)
endif()
add_definitions (-D__HAS_CHANNEL__)
add_definitions (-D__FFTW3__)
# handle GIT hash
get_git_commit_hash() # returns GIT_COMMIT_HASH
print(GIT_COMMIT_HASH)
if (GIT_COMMIT_HASH)
add_definitions("-DGITHASH=\"${GIT_COMMIT_HASH}\"")
else ()
add_definitions("-DGITHASH=\"(unknown)\"")
endif ()
########################################################################
# select the release build type by default to get optimization flags
########################################################################
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")
### make sure our local CMake Modules path comes first
list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
######################################################################
#
# if you want the audio output sent over the internet:
set (TCP_STREAMER OFF)
#####################################################################
#
# select one or more devices (set to ON)
# Note that since there are problems with the rtlsdr interface under Windows we split the rtlsdr interface
# into two versions one for Linux and one for Window
option(RTLSDR_LINUX OFF) # use for Linux type systems
option(RTLSDR_WIN OFF) # only for windows
option(AIRSPY OFF)
option(SDRPLAY_V2 ON)
option(SDRPLAY_V3 OFF)
option(HACKRF OFF)
option(LIMESDR OFF)
option(PLUTO OFF)
option(SOAPY OFF)
option(SPY_SERVER_8 OFF)
option(SPY_SERVER_16 OFF)
option(UHD OFF) # untested
option(RTL_TCP OFF)
# additional options
option(USE_LTO "Set -flto flag" ON)
# special release version flags
if (USE_LTO)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")
endif ()
option(FDK_AAC ON)
option(DATA_STREAMER OFF)
option(VITERBI_SSE ON)
option(VITERBI_NEON OFF)
####################################################################
# Use first option on "slow" cpus, i.e. RPI 3 or so
# Most of the FFT processing will be done in functions eunning
# in its own thread
#add_definitions (-D__MSC_THREAD__) # do not uncomment this
#
# Since more than one backend may be active, activating this
# option makes that each backend runs in its own thread
add_definitions (-D__THREADED_BACKEND__) # uncomment for use for an RPI
#
########################################################################
########################################################################
find_package (PkgConfig)
find_package (LSBId)
find_package (Qt6Core REQUIRED)
find_package (Qt6Widgets REQUIRED)
find_package (Qt6Network REQUIRED)
find_package (Qt6Xml REQUIRED)
include_directories (
${Qt6Network_INCLUDE_DIRS}
${Qt6Xml_INCLUDE_DIRS}
)
search_for_library (QWT Qwt)
search_for_library (ZLIB zlib)
find_package(FFTW3f)
if (NOT FFTW3F_FOUND)
message(FATAL_ERROR "please install FFTW3")
endif ()
include_directories ( ${FFTW_INCLUDE_DIRS})
list(APPEND extraLibs ${FFTW3F_LIBRARIES})
if (NOT APPLE)
find_library (PTHREADS pthread)
if (NOT(PTHREADS))
message (FATAL_ERROR "please install libpthread")
else (NOT(PTHREADS))
set (extraLibs ${extraLibs} ${PTHREADS})
endif (NOT(PTHREADS))
endif (NOT APPLE)
#######################################################################
#
# Here we really start
include_directories (
${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
${QT6Widgets_INCLUDES}
${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR}
./support
./forms-v7
./forms-v7/new-display
./forms-v7/new-display/scopes
./forms-v7/snr-viewer
..
../includes
../includes/ofdm
../includes/protection
../includes/backend
../includes/backend/audio
../includes/backend/data
../includes/backend/data/journaline
../includes/backend/data/mot
../includes/backend/data/epg
../includes/support
../src/support/tii-library
../includes/support/buttons
../src/support/viterbi-spiral
../includes/output
../includes/output/Qt6
../qt-devices
../qt-devices/filereaders/
../qt-devices/filereaders/new-reader
../qt-devices/filereaders/rawfiles-new
../qt-devices/filereaders/xml-filereader
../eti-handler
/usr/include/
)
set (${objectName}_HDRS
./radio.h
./support/super-frame.h
./support/techdata.h
./support/clickable-label.h
./support/icon-label.h
./support/scan-handler.h
./support/scantable-handler.h
./support/aboutdialog.h
./support/ensemble-handler.h
./support/config-handler.h
./support/audiosystem-selector.h
./support/dxDisplay.h
./forms-v7/new-display/display-widget.h
./forms-v7/new-display/scopes/correlation-scope.h
./forms-67/new-display/scopes/spectrum-scope.h
./forms-v7/new-display/scopes/null-scope.h
./forms-v7/new-display/scopes/channel-scope.h
./forms-v7/new-display/dev-scope.h
./forms-v7/new-display/scopes/waterfall-scope.h
./forms-v7/new-display/scopes/iqdisplay.h
./forms-v7/new-display/scopes/audio-display.h
./forms-v7/new-displat/scopes/spectrogram-data.h
./forms-v7/snr-viewer/snr-viewer.h
../ofdm-handler.h
../eti-handler/eti-generator.h
../includes/dab-constants.h
../includes/crc-handlers.h
../includes/bit-extractors.h
../includes/mot-content-types.h
../includes/ofdm/sample-reader.h
../includes/ofdm/correlator.h
../includes/ofdm/freqsyncer.h
../includes/ofdm/ofdm-decoder.h
../includes/ofdm/phasetable.h
../includes/ofdm/freq-interleaver.h
../includes/ofdm/fic-handler.h
../includes/ofdm/ensemble.h
../includes/ofdm/fib-config.h
../includes/ofdm/fib-printer.h
../includes/ofdm/fib-decoder.h
../includes/ofdm/fib-table.h
../includes/ofdm/tii-detector.h
../includes/ofdm/tii-detector-1.h
../includes/ofdm/tii-detector-2.h
../includes/ofdm/timesyncer.h
../includes/ofdm/estimator.h
../includes/protection/protTables.h
../includes/protection/protection.h
../includes/protection/uep-protection.h
../includes/protection/eep-protection.h
../includes/backend/firecode-checker.h
../includes/backend/frame-processor.h
../includes/backend/charsets.h
../includes/backend/galois.h
../incluces/backend/reed-solomon.h
../includes/backend/msc-handler.h
../includes/backend/backend.h
../includes/backend/backend-deconvolver.h
../includes/backend/backend-driver.h
../includes/backend/audio/mp4processor.h
../includes/backend/audio/bitWriter.h
../includes/backend/audio/mp2processor.h
../includes/backend/data/ip-datahandler.h
../includes/backend/data/adv-datahandler.h
../includes/backend/data/tdc-datahandler.h
../includes/backend/data/journaline-datahandler.h
../includes/backend/data/journaline-screen.h
../includes/backend/data/journaline/dabdatagroupdecoder.h
../includes/backend/data/journaline/crc_8_16.h
../includes/backend/data/journaline/log.h
../includes/backend/data/journaline/newssvcdec_impl.h
../includes/backend/data/journaline/Splitter.h
../includes/backend/data/journaline/dabdgdec_impl.h
../includes/backend/data/journaline/newsobject.h
../includes/backend/data/journaline/NML.h
../includes/backend/data/epg/epgdec.h
../includes/backend/data/epg/epg-compiler.h
../includes/backend/data/epg/xml-extractor.h
../includes/backend/data/virtual-datahandler.h
../includes/backend/data/pad-handler.h
../includes/backend/data/mot/mot-handler.h
../includes/backend/data/mot/mot-object.h
../includes/backend/data/mot/mot-dir.h
../includes/backend/data/data-processor.h
../includes/output/audio-player.h
../includes/support/distances.h
../includes/support/time-converter.h
../includes/support/logger.h
../includes/support/position-handler.h
../includes/support/cacheElement.h
../includes/support/settingNames.h
../includes/support/settings-handler.h
../includes/support/fft-handler.h
../includes/support/wavWriter.h
../includes/support/converter_48000.h
../includes/support/ringbuffer.h
../includes/support/Xtan2.h
../includes/support/dab-params.h
../includes/support/dab-tables.h
../includes/support/viterbi-spiral/viterbi.h
../includes/support/preset-handler.h
../includes/support/presetcombobox.h
../includes/support/scanlist-handler.h
../includes/support/scheduler.h
../includes/support/schedule-selector.h
../includes/support/element-selector.h
../includes/support/time-table.h
../includes/support/findfilenames.h
../includes/support/content-table.h
../includes/support/dl-cache.h
../includes/support/ITU_Region_1.h
../includes/support/coordinates.h
../includes/support/skin-handler.h
../includes/support/mapport.h
,,.includes/support/http-handler.h
,,.includes/support/converted_map.h
../includes/support/fir-filters.h
../src/support/tii-library/tii-reader.h
../src/support/tii-library/tii-mapper.h
../src/support/tii-library/uploader.h
../includes/support/font-chooser.h
../includes/support/buttons/smallcombobox.h
../includes/support/buttons/newpushbutton.h
../includes/support/buttons/normalpushbutton.h
../includes/support/buttons/smallpushbutton.h
../includes/support/buttons/verysmallpushbutton.h
../includes/support/buttons/smallqlistview.h
../includes/support/buttons/smallspinbox.h
# ../includes/scopes-qwt6/spectrogramdata.h
../qt-devices/device-handler.h
../qt-devices/device-exceptions.h
../qt-devicces/xml-filewriter.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
./main.cpp
./radio.cpp
./support/super-frame.cpp
./support/techdata.cpp
./support/clickable-label.cpp
./support/icon-label.cpp
./support/scan-handler.cpp
./support/scantable-handler.cpp
./support/aboutdialog.cpp
./support/ensemble-handler.cpp
./support/config-handler.cpp
./support/audiosystem-selector.cpp
./support/dxDisplay.cpp
./forms-v7/new-display/display-widget.cpp
./forms-v7/new-display/scopes/spectrum-scope.cpp
./forms-v7/new-display/scopes/correlation-scope.cpp
./forms-v7/new-display/scopes/null-scope.cpp
./forms-v7/new-display/scopes/channel-scope.cpp
./forms-v7/new-display/scopes/dev-scope.cpp
./forms-v7/new-display/scopes/waterfall-scope.cpp
./forms-v7/new-display/scopes/iqdisplay.cpp
./forms-v7/new-display/scopes/audio-display.cpp
./forms-v7/new-display/scopes/spectrogramdata.cpp
./forms-v7/snr-viewer/snr-viewer.cpp
../ofdm-handler.cpp
../eti-handler/eti-generator.cpp
../src/ofdm/sample-reader.cpp
../src/ofdm/ofdm-decoder.cpp
../src/ofdm/correlator.cpp
../src/ofdm/freqsyncer.cpp
../src/ofdm/phasetable.cpp
../src/ofdm/freq-interleaver.cpp
../src/ofdm/fic-handler.cpp
../src/ofdm/ensemble.cpp
../src/ofdm/fib-config.cpp
../src/ofdm/fib-printer.cpp
../src/ofdm/fib-decoder.cpp
../src/ofdm/tii-detector.cpp
../src/ofdm/tii-detector-1.cpp
../src/ofdm/tii-detector-2.cpp
../src/ofdm/timesyncer.cpp
../src/ofdm/estimator.cpp
../src/protection/protTables.cpp
../src/protection/protection.cpp
../src/protection/eep-protection.cpp
../src/protection/uep-protection.cpp
../src/backend/firecode-checker.cpp
../src/backend/charsets.cpp
../src/backend/galois.cpp
../src/backend/reed-solomon.cpp
../src/backend/msc-handler.cpp
../src/backend/backend.cpp
../src/backend/backend-deconvolver.cpp
../src/backend/backend-driver.cpp
../src/backend/audio/mp4processor.cpp
../src/backend/audio/bitWriter.cpp
../src/backend/audio/mp2processor.cpp
../src/backend/data/ip-datahandler.cpp
../src/backend/data/adv-datahandler.cpp
../src/backend/data/journaline-datahandler.cpp
../src/backend/data/journaline-screen.cpp
../src/backend/data/journaline/crc_8_16.c
../src/backend/data/journaline/log.c
../src/backend/data/journaline/newssvcdec_impl.cpp
../src/backend/data/journaline/Splitter.cpp
../src/backend/data/journaline/dabdgdec_impl.c
../src/backend/data/journaline/newsobject.cpp
../src/backend/data/journaline/NML.cpp
../src/backend/data/epg/epg-compiler.cpp
../src/backend/data/epg/xml-extractor.cpp
../src/backend/data/tdc-datahandler.cpp
../src/backend/data/pad-handler.cpp
../src/backend/data/mot/mot-handler.cpp
../src/backend/data/mot/mot-object.cpp
../src/backend/data/mot/mot-dir.cpp
../src/backend/data/data-processor.cpp
../src/output/audio-player.cpp
../src/support/distances.cpp
../src/support/time-converter.cpp
../src/support/logger.cpp
../src/support/position-handler.cpp
../src/support/settings-handler.cpp
../src/support/fft-handler.cpp
../src/support/wavWriter.cpp
../src/support/converter_48000.cpp
../src/support/viterbi-spiral/viterbi.cpp
../src/support/dab-params.cpp
../src/support/dab-tables.cpp
../src/support/preset-handler.cpp
../src/support/presetcombobox.cpp
../src/support/scanlist-handler.cpp
../src/support/scheduler.cpp
../src/support/schedule-selector.cpp
../src/support/element-selector.cpp
../src/support/time-table.cpp
../src/support/findfilenames.cpp
../src/support/content-table.cpp
../src/support/ITU_Region_1.cpp
../src/support/coordinates.cpp
../src/support/skin-handler.cpp
../src/support/mapport.cpp
../src/support/tii-library/tii-reader.cpp
../src/support/tii-library/uploader.cpp
../src/support/tii-library/tii-mapper.cpp
../src/support/http-handler.cpp
../src/support/bandpass-filter.cpp
../src/support/fir-filters.cpp
../src/support/font-chooser.cpp
../src/support/buttons/smallcombobox.cpp
../src/support/buttons/newpushbutton.cpp
../src/support/buttons/normalpushbutton.cpp
../src/support/buttons/smallpushbutton.cpp
../src/support/buttons/verysmallpushbutton.cpp
../src/support/buttons/smallqlistview.cpp
../src/support/buttons/smallspinbox.cpp
# ../src/scopes-qwt6/spectrogramdata.cpp
# ../src/scopes-qwt6/spectrogramdata.cpp
../qt-devices/xml-filewriter.cpp
)
set (${objectName}_MOCS
./radio.h
./support/super-frame.h
./support/techdata.h
./support/clickable-label.h
./support/icon-label.h
./support/scan-handler.h
./support/scantable-handler.h
./support/aboutdialog.h
./support/ensemble-handler.h
./support/config-handler.h
./support/audiosystem-selector.h
./support/dxDisplay.h
./forms-v7/new-display/display-widget.h
./forms-v7/new-display/scopes/correlation-scope.h
./forms-v7/new-display/scopes/spectrum-scope.h
./forms-v7/new-display/scopes/null-scope.h
./forms-v7/new-display/scopes/channel-scope.h
./forms-v7/new-display/scopes/dev-scope.h
./forms-v7/new-display/scopes/waterfall-scope.h
./forms-v7/new-display/scopes/iqdisplay.h
./forms-v7/new-display/scopes/audio-display.h
./forms-v7/snr-viewer/snr-viewer.h
../ofdm-handler.h
../includes/ofdm/sample-reader.h
../includes/ofdm/ofdm-decoder.h
../includes/ofdm/correlator.h
../includes/ofdm/freqsyncer.h
../includes/ofdm/fic-handler.h
../includes/ofdm/fib-decoder.h
../includes/ofdm/tii-detector.h
../includes/ofdm/estimator.h
../includes/backend/msc-handler.h
../includes/backend/backend.h
../includes/backend/audio/mp2processor.h
../includes/backend/audio/mp4processor.h
../includes/backend/data/virtual-datahandler.h
../includes/backend/data/pad-handler.h
../includes/backend/data/mot/mot-handler.h
../includes/backend/data/mot/mot-object.h
../includes/backend/data/mot/mot-dir.h
../includes/backend/data/ip-datahandler.h
../includes/backend/data/adv-datahandler.h
../includes/backend/data/tdc-datahandler.h
../includes/backend/data/journaline-datahandler.h
../includes/backend/data/journaline-screen.h
../includes/backend/data/epg/epg-compiler.h
../includes/backend/data/epg/xml-extractor.h
../includes/backend/data/data-processor.h
../includes/output/audio-player.h
../includes/support/converter_48000.h
../includes/support/preset-handler.h
../includes/support/presetcombobox.h
../includes/support/font-chooser.h
../includes/support/buttons/smallcombobox.h
../includes/support/buttons/newpushbutton.h
../includes/support/buttons/normalpushbutton.h
../includes/support/buttons/smallpushbutton.h
../includes/support/buttons/verysmallpushbutton.h
../includes/support/buttons/smallqlistview.h
../includes/support/buttons/smallspinbox.h
../includes/support/scanlist-handler.h
../includes/support/scheduler.h
../includes/support/schedule-selector.h
../includes/support/element-selector.h
../includes/support/time-table.h
../includes/support/content-table.h
../includes/support/coordinates.h
../includes/support/skin-handler.h
../includes/support/mapport.h
../includes/support/http-handler.h
)
set (${objectName}_UIS
${${objectName}_UIS}
./support/aboutdialog.ui
./forms-v7/dabradio-6.ui
./forms-v7/technical_data.ui
./forms-v7/config-helper.ui
./forms-v7/new-display/scopewidget.ui
./forms-v7/snr-viewer/snr-widget.ui
../qt-devices/filereaders/xml-filereader/xmlfiles.ui
)
#########################################################################
if (FDK_AAC)
find_package(Fdk-AAC)
if (NOT LIBFDK_AAC_FOUND)
message(FATAL_ERROR, "Please install libfdk-aac")
endif ()
include_directories (../helpers/specials/fdk-aac)
set($(objectName)_HDRS
${${objectName}_HDRS}
../includes/backend/audio/fdk-aac.h
)
set(${objectName}_SRCS
${${objectName}_SRCS}
../src/backend/audio/fdk-aac.cpp
)
set (${objectName}_MOCS
${${objectName}_MOCS}
../includes/backend/audio/fdk-aac.h
)
list(APPEND extraLibs ${FDK_AAC_LIBRARIES})
add_definitions(-D__WITH_FDK_AAC__)
elseif (NOT FDK_AAC)
find_package (Faad)
if (NOT FAAD_FOUND)
message(FATAL_ERROR "Please install libfaad")
endif ()
set(${objectName}_HDRS
${${objectName}_HDRS}
../includes/backend/audio/faad-decoder.h
)
set(${objectName}_SRCS
${${objectName}_SRCS}
../src/backend/audio/faad-decoder.cpp
)
set (${objectName}_MOCS
${${objectName}_MOCS}
../includes/backend/audio/faad-decoder.h
)
add_definitions(-D__WITH_FAAD__)
endif (FDK_AAC)
# the viterbi decoder
#
if (VITERBI_NEON)
set(VITERBI_SSE false)
set (${objectName}_HDRS
${${objectName}_HDRS}
../src/support/viterbi-spiral/spiral-neon.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
../src/support/viterbi-spiral/spiral-neon.c
)
add_definitions (-DNEON_AVAILABLE)
elseif(VITERBI_SSE)
set ($(objectName)_HDRS
${${objectName}_HDRS}
../src/support/viterbi-spiral/spiral-sse.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
../src/support/viterbi-spiral/spiral-sse.c
)
add_definitions (-DSSE_AVAILABLE)
else (VITERBI_SSE)
set ($(objectName)_HDRS
${${objectName}_HDRS}
../src/support/viterbi-spiral/spiral-no-sse.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
../src/support/viterbi-spiral/spiral-no-sse.c
)
endif (VITERBI_NEON)
if (TCP_STREAMER)
add_definitions (-DTCP_STREAMER)
find_package (Qt6Network REQUIRED)
set (${objectName}_MOCS
${${objectName}_MOCS}
../includes/output/tcp-streamer.h
)
set (${objectName}_HDRS
${${objectName}_HDRS}
../includes/output/tcp-streamer.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
../src/output/tcp-streamer.cpp
)
endif (TCP_STREAMER)
if (DATA_STREAMER)
include_directories (
../server-thread
)
set ($(objectName)_HDRS
${${objectName}_HDRS}
../server-thread/tcp-server.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
../server-thread/tcp-server.cpp
)
add_definitions (-DDATA_STREAMER)
endif (DATA_STREAMER)
if (NOT TCP_STREAMER)
add_definitions (-DQT_AUDIO)
find_package(Portaudio)
if (NOT PORTAUDIO_FOUND)
message(FATAL_ERROR "please install portaudio V19")
endif ()
list(APPEND extraLibs ${PORTAUDIO_LIBRARIES})
find_package (Qt6Multimedia REQUIRED)
include_directories (
${Qt6Multimedia_INCLUDE_DIRS}
)
set (${objectName}_HDRS
${${objectName}_HDRS}
../includes/output/audiosink.h
../includes/output/Qt6/Qt-audio.h
../includes/output/Qt6/Qt-audiodevice.h
)
set (${objectName}_MOCS
${${objectName}_MOCS}
../includes/output/audiosink.h
../includes/output/Qt6/Qt-audio.h
../includes/output/Qt6/Qt-audiodevice.h
)
set (${objectName}_SRCS
${${objectName}_SRCS}
../src/output/audiosink.cpp
../src/output/Qt6/Qt-audio.cpp
../src/output/Qt6/Qt-audiodevice.cpp
)
endif (NOT TCP_STREAMER)
QT6_WRAP_UI (UIS ${${objectName}_UIS}
../qt-devices/filereaders/filereader-widget.ui)
include_directories (
${SDRPLAY_INCLUDES}
${QT6Widgets_INCLUDES}
${QT_QTCORE_INCLUDE_DIR}
${QT_QTGUI_INCLUDE_DIR}
${PORTAUDIO_INCLUDE_DIRS}
${FAAD_INCLUDE_DIRS}
)
QT6_WRAP_CPP (MOCS ${${objectName}_MOCS})
add_executable (${objectName}
${${objectName}_SRCS}
${UIS}
${RSCS}
${TRS}
${MOCS}
resources.qrc
)
target_link_libraries (${objectName}
PRIVATE
Qt6::Widgets
Qt6::Network
Qt6::Xml
Qt6::Multimedia
${RTLTCP_lib}
${extraLibs}
${FAAD_LIBRARIES}
${CMAKE_DL_LIBS}
)
add_subdirectory (../qt-devices /tmp)
target_link_libraries (${objectName} PRIVATE ${objectName}_devices)
INSTALL (TARGETS ${objectName} DESTINATION ${CMAKE_INSTALL_PREFIX})
# INSTALL (TARGETS ${objectName} DESTINATION ./linux-bin)
########################################################################
# Create uninstall target
########################################################################
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
IMMEDIATE @ONLY)
add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)

View File

@@ -1,996 +0,0 @@
######################################################################
# Automatically generated by qmake (2.01a) Tue Oct 6 19:48:14 2009
# but modified by me to accomodate for the includes for qwt, hamlib and
# portaudio
######################################################################
TEMPLATE = app
QT += widgets xml multimedia
#CONFIG += console
CONFIG -= console
QMAKE_CXXFLAGS += -std=c++17
win32 {
QMAKE_CFLAGS += -O3 -ffast-math
QMAKE_CXXFLAGS += -O3 -ffast-math
}
unix {
#QMAKE_CFLAGS += -O3 -ffast-math -pg
#QMAKE_CXXFLAGS += -O3 -ffast-math -pg
#QMAKE_LFLAGS += -O3 -ffast-math -pg
QMAKE_CXXFLAGS += -ffast-math -flto
QMAKE_CFLAGS += -ffast-math -flto
QMAKE_LFLAGS += -ffast-math -flto
#QMAKE_CFLAGS += -g -fsanitize=address
#QMAKE_CXXFLAGS += -g -fsanitize=address
#QMAKE_LFLAGS += -g -fsanitize=address
}
#QMAKE_CFLAGS += -pg
#QMAKE_CXXFLAGS += -pg
#QMAKE_LFLAGS += -pg
QMAKE_CXXFLAGS += -isystem $$[QT_INSTALL_HEADERS]
RC_ICONS = qt-dab-6.9.ico
RESOURCES += resources.qrc
TRANSLATIONS = ../i18n/de_DE.ts
#
# For more parallel processing, uncomment the following
# defines
#DEFINES += __MSC_THREAD__
DEFINES += __THREADED_BACKEND__
DEFINES += __FFT_CORR__
#For showing trace output
#DEFINES += __EPG_TRACE__
DEPENDPATH += . \
./support \
./forms-v7 \
./forms-v7/new-display \
./forms-v7/new-display/scopes \
./forms-v7/snr-viewer \
../eti-handler \
../src \
../includes \
../src/ofdm \
../src/protection \
../src/backend \
../src/backend/audio \
../src/backend/data \
../src/backend/data/mot \
../src/backend/data/epg \
../src/backend/data/journaline \
../src/output \
../src/support \
../src/support/tii-library \
../src/support/buttons \
../includes/ofdm \
../includes/protection \
../includes/backend \
../includes/backend/audio \
../includes/backend/data \
../includes/backend/data/mot \
../includes/backend/data/journaline \
../includes/backend/data/epg \
../includes/output \
../includes/support \
../src/support/tii-library \
../includes/support/buttons \
# ../includes/scopes-qwt6 \
../qt-devices \
../qt-devices/filereaders/ \
../qt-devices/filereaders/new-reader \
../qt-devices/filereaders/rawfiles-new \
../qt-devices/filereaders/xml-filereader
INCLUDEPATH += . \
./support \
./forms-v7 \
./forms-v7/new-display \
./forms-v7/new-display/scopes \
./forms-v7/snr-viewer \
../ \
../eti-handler \
../src \
../includes \
../includes/protection \
../includes/ofdm \
../includes/backend \
../includes/backend/audio \
../includes/backend/data \
../includes/backend/data/mot \
../includes/backend/data/journaline \
../includes/backend/data/epg \
../includes/output \
../includes/support \
../src/support/tii-library \
../includes/support/buttons \
# ../includes/scopes-qwt6 \
../qt-devices \
../qt-devices/filereaders \
../qt-devices/filereaders/rawfiles-new \
../qt-devices/filereaders/new-reader \
../qt-devices/filereaders/xml-filereader
# Input
HEADERS += ./radio.h \
./support/techdata.h \
./support/super-frame.h \
./support/clickable-label.h \
./support/icon-label.h \
./support/scan-handler.h \
./support/scantable-handler.h \
./support/aboutdialog.h \
./support/ensemble-handler.h \
./support/config-handler.h \
./support/audiosystem-selector.h \
./support/dxDisplay.h \
./forms-v7/qwt-2.h \
./forms-v7/new-display/display-widget.h \
./forms-v7/new-display/scopes/spectrum-scope.h \
./forms-v7/new-display/scopes/correlation-scope.h \
./forms-v7/new-display/scopes/null-scope.h \
./forms-v7/new-display/scopes/channel-scope.h \
./forms-v7/new-display/scopes/dev-scope.h \
./forms-v7/new-display/scopes/waterfall-scope.h \
./forms-v7/new-display/scopes/iqdisplay.h \
./forms-v7/new-display/scopes/audio-display.h \
./forms-v7/new-display/scopes/spectrogramdata.h \
./forms-v7/snr-viewer/snr-viewer.h \
../ofdm-handler.h \
../eti-handler/eti-generator.h \
../includes/dab-constants.h \
../includes/bit-extractors.h \
../includes/crc-handlers.h \
../includes/mot-content-types.h \
../includes/ofdm/timesyncer.h \
../includes/ofdm/sample-reader.h \
../includes/ofdm/ofdm-decoder.h \
../includes/ofdm/correlator.h \
../includes/ofdm/freqsyncer.h \
../includes/ofdm/phasetable.h \
../includes/ofdm/freq-interleaver.h \
../includes/ofdm/tii-detector.h \
../includes/ofdm/tii-detector-1.h \
../includes/ofdm/tii-detector-2.h \
../includes/ofdm/fic-handler.h \
../includes/ofdm/ensemble.h \
../includes/ofdm/fib-config.h \
../includes/ofdm/fib-printer.h \
../includes/ofdm/fib-decoder.h \
../includes/ofdm/fib-table.h \
../includes/ofdm/estimator.h \
../includes/protection/protTables.h \
../includes/protection/protection.h \
../includes/protection/eep-protection.h \
../includes/protection/uep-protection.h \
../includes/backend/msc-handler.h \
../includes/backend/galois.h \
../includes/backend/reed-solomon.h \
../includes/backend/charsets.h \
../includes/backend/firecode-checker.h \
../includes/backend/frame-processor.h \
../includes/backend/backend.h \
../includes/backend/backend-driver.h \
../includes/backend/backend-deconvolver.h \
../includes/backend/audio/mp2processor.h \
../includes/backend/audio/mp4processor.h \
../includes/backend/audio/bitWriter.h \
../includes/backend/data/data-processor.h \
../includes/backend/data/pad-handler.h \
../includes/backend/data/virtual-datahandler.h \
../includes/backend/data/tdc-datahandler.h \
../includes/backend/data/ip-datahandler.h \
../includes/backend/data/adv-datahandler.h \
../includes/backend/data/mot/mot-handler.h \
../includes/backend/data/mot/mot-object.h \
../includes/backend/data/mot/mot-dir.h \
../includes/backend/data/journaline-datahandler.h \
../includes/backend/data/journaline-screen.h \
../includes/backend/data/journaline/dabdatagroupdecoder.h \
../includes/backend/data/journaline/crc_8_16.h \
../includes/backend/data/journaline/log.h \
../includes/backend/data/journaline/newssvcdec_impl.h \
../includes/backend/data/journaline/Splitter.h \
../includes/backend/data/journaline/dabdgdec_impl.h \
../includes/backend/data/journaline/newsobject.h \
../includes/backend/data/journaline/NML.h \
../includes/backend/data/epg/epg-compiler.h \
../includes/backend/data/epg/xml-extractor.h \
../includes/output/audio-player.h \
../includes/support/distances.h \
../includes/support/time-converter.h \
../includes/support/logger.h \
../includes/support/settings-handler.h \
../includes/support/position-handler.h \
../includes/support/cacheElement.h \
../includes/support/settingNames.h \
../includes/support/fft-handler.h \
../includes/support/wavWriter.h \
../includes/support/converter_48000.h \
../includes/support/process-params.h \
../includes/support/ringbuffer.h \
../includes/support/dab-params.h \
../includes/support/dab-tables.h \
# ../includes/support/preset-handler.h \
../includes/support/presetcombobox.h \
../includes/support/scanlist-handler.h \
../includes/support/scheduler.h \
../includes/support/schedule-selector.h \
../includes/support/element-selector.h \
../includes/support/time-table.h \
../includes/support/findfilenames.h \
../includes/support/dl-cache.h \
../includes/support/content-table.h \
../includes/support/ITU_Region_1.h \
../includes/support/coordinates.h \
../includes/support/skin-handler.h \
../includes/support/mapport.h \
../includes/support/bandpass-filter.h \
../includes/support/fir-filters.h \
../includes/support/font-chooser.h \
../src/support/tii-library/tii-mapper.h \
../src/support/tii-library/tii-reader.h \
../src/support/tii-library/uploader.h \
../includes/support/buttons/smallcombobox.h \
../includes/support/buttons/newpushbutton.h \
../includes/support/buttons/normalpushbutton.h \
../includes/support/buttons/smallpushbutton.h \
../includes/support/buttons/verysmallpushbutton.h \
../includes/support/buttons/smallqlistview.h \
../includes/support/buttons/smallspinbox.h \
../includes/support/buttons/circular-button.h \
../qt-devices/device-handler.h \
../qt-devices/device-chooser.h \
../qt-devices/device-exceptions.h \
../qt-devices/xml-filewriter.h \
../qt-devices/filereaders/new-reader/newfiles.h \
../qt-devices/filereaders/new-reader/new-reader.h \
../qt-devices/filereaders/new-reader/riff-reader.h \
../qt-devices/filereaders/rawfiles-new/rawfiles.h \
../qt-devices/filereaders/rawfiles-new/raw-reader.h \
../qt-devices/filereaders/xml-filereader/element-reader.h \
../qt-devices/filereaders/xml-filereader/xml-filereader.h \
../qt-devices/filereaders/xml-filereader/xml-reader.h \
../qt-devices/filereaders/xml-filereader/xml-descriptor.h
FORMS += ./forms-v7/technical_data.ui
FORMS += ./forms-v7/dabradio-6.ui
FORMS += ./forms-v7/config-helper.ui
FORMS += ./forms-v7/audio-description.ui
FORMS += ./forms-v7/data-description.ui
FORMS += ./forms-v7/new-display/scopewidget.ui
FORMS += ./forms-v7/snr-viewer/snr-widget.ui
FORMS += ./support/aboutdialog.ui
#FORMS += ../qt-devices/filereaders/filereader-widget.ui
FORMS += ../qt-devices/filereaders/xml-filereader/xmlfiles.ui
SOURCES += ./main.cpp \
./radio.cpp \
./support/techdata.cpp \
./support/super-frame.cpp \
./support/clickable-label.cpp \
./support/icon-label.cpp \
./support/scan-handler.cpp \
./support/scantable-handler.cpp \
./support/aboutdialog.cpp \
./support/ensemble-handler.cpp \
./support/config-handler.cpp \
./support/audiosystem-selector.cpp \
./support/dxDisplay.cpp \
./forms-v7/new-display/display-widget.cpp \
./forms-v7/new-display/scopes/correlation-scope.cpp \
./forms-v7/new-display/scopes/spectrum-scope.cpp \
./forms-v7/new-display/scopes/null-scope.cpp \
./forms-v7/new-display/scopes/channel-scope.cpp \
./forms-v7/new-display/scopes/dev-scope.cpp \
./forms-v7/new-display/scopes/waterfall-scope.cpp \
./forms-v7/new-display/scopes/iqdisplay.cpp \
./forms-v7/new-display/scopes/audio-display.cpp \
./forms-v7/new-display/scopes/spectrogramdata.cpp \
./forms-v7/snr-viewer/snr-viewer.cpp \
../ofdm-handler.cpp \
../eti-handler/eti-generator.cpp \
../src/ofdm/timesyncer.cpp \
../src/ofdm/sample-reader.cpp \
../src/ofdm/ofdm-decoder.cpp \
../src/ofdm/correlator.cpp \
../src/ofdm/freqsyncer.cpp \
../src/ofdm/phasetable.cpp \
../src/ofdm/freq-interleaver.cpp \
../src/ofdm/tii-detector.cpp \
../src/ofdm/tii-detector-1.cpp \
../src/ofdm/tii-detector-2.cpp \
../src/ofdm/fic-handler.cpp \
../src/ofdm/ensemble.cpp \
../src/ofdm/fib-config.cpp \
../src/ofdm/fib-printer.cpp \
../src/ofdm/fib-decoder.cpp \
../src/ofdm/estimator.cpp \
../src/protection/protTables.cpp \
../src/protection/protection.cpp \
../src/protection/eep-protection.cpp \
../src/protection/uep-protection.cpp \
../src/backend/msc-handler.cpp \
../src/backend/galois.cpp \
../src/backend/reed-solomon.cpp \
../src/backend/charsets.cpp \
../src/backend/backend.cpp \
../src/backend/backend-driver.cpp \
../src/backend/backend-deconvolver.cpp \
../src/backend/firecode-checker.cpp \
../src/backend/audio/mp2processor.cpp \
../src/backend/audio/mp4processor.cpp \
../src/backend/audio/bitWriter.cpp \
../src/backend/data/pad-handler.cpp \
../src/backend/data/data-processor.cpp \
../src/backend/data/tdc-datahandler.cpp \
../src/backend/data/ip-datahandler.cpp \
../src/backend/data/adv-datahandler.cpp \
../src/backend/data/mot/mot-handler.cpp \
../src/backend/data/mot/mot-object.cpp \
../src/backend/data/mot/mot-dir.cpp \
../src/backend/data/journaline-datahandler.cpp \
../src/backend/data/journaline-screen.cpp \
../src/backend/data/journaline/crc_8_16.c \
../src/backend/data/journaline/log.c \
../src/backend/data/journaline/newssvcdec_impl.cpp \
../src/backend/data/journaline/Splitter.cpp \
../src/backend/data/journaline/dabdgdec_impl.c \
../src/backend/data/journaline/newsobject.cpp \
../src/backend/data/journaline/NML.cpp \
../src/backend/data/epg/epg-compiler.cpp \
../src/backend/data/epg/xml-extractor.cpp \
../src/output/audio-player.cpp \
../src/support/distances.cpp \
../src/support/time-converter.cpp \
../src/support/logger.cpp \
../src/support/settings-handler.cpp \
../src/support/position-handler.cpp \
../src/support/wavWriter.cpp \
../src/support/converter_48000.cpp \
../src/support/fft-handler.cpp \
../src/support/dab-params.cpp \
../src/support/dab-tables.cpp \
# ../src/support/preset-handler.cpp \
../src/support/presetcombobox.cpp \
../src/support/scanlist-handler.cpp \
../src/support/scheduler.cpp \
../src/support/schedule-selector.cpp \
../src/support/element-selector.cpp \
../src/support/time-table.cpp \
../src/support/findfilenames.cpp \
../src/support/content-table.cpp \
../src/support/ITU_Region_1.cpp \
../src/support/coordinates.cpp \
../src/support/skin-handler.cpp \
../src/support/mapport.cpp \
../src/support/bandpass-filter.cpp \
../src/support/fir-filters.cpp \
../src/support/font-chooser.cpp \
../src/support/tii-library/tii-mapper.cpp \
../src/support/tii-library/tii-reader.cpp \
../src/support/tii-library/uploader.cpp \
../src/support/buttons/smallcombobox.cpp \
../src/support/buttons/newpushbutton.cpp \
../src/support/buttons/normalpushbutton.cpp \
../src/support/buttons/smallpushbutton.cpp \
../src/support/buttons/verysmallpushbutton.cpp \
../src/support/buttons/smallqlistview.cpp \
../src/support/buttons/smallspinbox.cpp \
../src/support/buttons/circular-button.cpp \
../qt-devices/device-handler.cpp \
../qt-devices/device-chooser.cpp \
../qt-devices/xml-filewriter.cpp \
../qt-devices/filereaders/rawfiles-new/rawfiles.cpp \
../qt-devices/filereaders/rawfiles-new/raw-reader.cpp \
../qt-devices/filereaders/new-reader/newfiles.cpp \
../qt-devices/filereaders/new-reader/new-reader.cpp \
../qt-devices/filereaders/new-reader/riff-reader.cpp \
# ../qt-devices/filereaders/wavfiles-new/wavfiles.cpp \
# ../qt-devices/filereaders/wavfiles-new/wav-reader.cpp \
../qt-devices/filereaders/xml-filereader/xml-filereader.cpp \
../qt-devices/filereaders/xml-filereader/xml-reader.cpp \
../qt-devices/filereaders/xml-filereader/xml-descriptor.cpp
#
unix {
DESTDIR = ./linux-bin
equals (QT_MAJOR_VERSION, 5) {
TARGET = qt-dab-qt5-6.9.2
}
else {
TARGET = qt-dab-qt6-6.9.2
}
exists ("../.git") {
GITHASHSTRING = $$system(git rev-parse --short HEAD)
!isEmpty(GITHASHSTRING) {
message("Current git hash = $$GITHASHSTRING")
DEFINES += GITHASH=\\\"$$GITHASHSTRING\\\"
}
}
isEmpty(GITHASHSTRING) {
DEFINES += GITHASH=\\\"------\\\"
}
mac {
DESTDIR = ./mac-bin
PKG_CONFIG = /usr/local/bin/pkg-config
QT_CONFIG -= no-pkg-config
}
CONFIG += link_pkgconfig
#PKGCONFIG += sndfile
#PKGCONFIG += samplerate
PKGCONFIG += libusb-1.0
CONFIG += mapserver
!mac {
LIBS += -ldl
}
PKGCONFIG += portaudio-2.0
PKGCONFIG += zlib
#PKGCONFIG += sndfile
#PKGCONFIG += samplerate
INCLUDEPATH += /usr/local/include
!mac {
INCLUDEPATH += /usr/local/include
#correct this for the correct path to the qwt6 library on your system
#LIBS += -lqwt
equals (QT_MAJOR_VERSION, 6) {
LIBS += -lqwt-qt6
}else{ LIBS += -lqwt-qt5
}
}
#mac {
# Should be possible to make on non Macs as well.
# qmake -set QMAKEFEATURES /usr/local/Cellar/qwt/6.2.0/features
CONFIG += qwt
#}
#CONFIG += double
CONFIG += single
#
# comment or uncomment for the devices you want to have support for
# (you obviously have libraries installed for the selected ones)
CONFIG += sdrplay-v2
CONFIG += sdrplay-v3
CONFIG += dabstick-linux
CONFIG += rtl_tcp
CONFIG += airspy-2
CONFIG += hackrf
CONFIG += lime
#CONFIG += soapy
#CONFIG += pluto-rxtx
CONFIG += pluto
CONFIG += spyServer-16
CONFIG += spyServer-8
#CONFIG += uhd
#CONFIG += colibri
#CONFIG += elad-device
#CONFIG += faad
CONFIG += fdk-aac
#very experimental, simple server for connecting to a tdc handler
CONFIG += datastreamer
#to handle output of embedded an IP data stream, uncomment
#CONFIG += send_datagram
#if you want to listen remote, uncomment
#CONFIG += tcp-streamer # use for remote listening
#otherwise, if you want to use the default, uncomment
CONFIG += local-audio
#CONFIG += viterbi-scalar
#CONFIG += viterbi-sse
#CONFIG += viterbi-avx2
CONFIG += spiral-sse
#CONFIG += spiral-no-sse
#DEFINES += SHOW_MISSING
DEFINES += __LOGGING__
DEFINES += __DUMP_SNR__ # for experiments only
}
# an attempt to have it run under W32 through cross compilation
win32 {
exists ("../.git") {
GITHASHSTRING = $$system(git rev-parse --short HEAD)
!isEmpty(GITHASHSTRING) {
message("Current git hash = $$GITHASHSTRING")
DEFINES += GITHASH=\\\"$$GITHASHSTRING\\\"
}
}
isEmpty(GITHASHSTRING) {
DEFINES += GITHASH=\\\"------\\\"
}
##for for 64 bit
# TARGET = qt-dab64-9
# DEFINES += __BITS64__
# DESTDIR = /usr/shared/w64-programs/windows-dab64-qt
# INCLUDEPATH += /usr/x64-w64-mingw32/sys-root/mingw/include
# INCLUDEPATH += /usr/local/include /usr/include/qt4/qwt /usr/include/qt5/qwt /usr/include/qt4/qwt /usr/include/qwt /usr/local/qwt-6.1.4-svn/
# LIBS += -L/usr/x64-w64-mingw32/sys-root/mingw/lib
## LIBS += -liio
## #CONFIG += extio
# CONFIG += airspy-2
# CONFIG += rtl_tcp
# CONFIG += dabstick
# CONFIG += sdrplay-v2
# CONFIG += pluto
# CONFIG += sdrplay-v3
## CONFIG += hackrf
## CONFIG += lime
# CONFIG += viterbi-scalar
# CONFIG += spiral-sse
# CONFIG += spiral-no-sse
# DEFINES += __THREADED_BACKEND
#
#for win32, comment out the lines above
# equals (QT_MAJOR_VERSION, 5) {
# TARGET = qt-dab32-qt5-6.9V3.2
# }
# else {
# TARGET = qt-dab32-qt6-6.9V3.2
# }
# CONFIG += dabstick-win-v3
equals (QT_MAJOR_VERSION, 5) {
TARGET = qt-dab32-qt5-6.9.2
}
else {
TARGET = qt-dab32-qt6-6.9.2
}
CONFIG += dabstick-win-v4
CONFIG += airspy-2
CONFIG += spyServer-16
CONFIG += spyServer-8
DESTDIR = /usr/shared/w32-programs/windows-dab32-qt
INCLUDEPATH += /usr/i686-w64-mingw32/sys-root/mingw/include
equals (QT_MAJOR_VERSION, 6) {
INCLUDEPATH += /usr/i686-w64-mingw32/sys-root/mingw/include/qt6/qwt
} else {
INCLUDEPATH += /usr/i686-w64-mingw32/sys-root/mingw/include/qt5/qwt
}
LIBS += -L/usr/i686-w64-mingw32/sys-root/mingw/lib
CONFIG += double
#CONFIG += single
CONFIG += mapserver
CONFIG += extio
CONFIG += rtl_tcp
CONFIG += sdrplay-v2
CONFIG += sdrplay-v3
CONFIG += hackrf
CONFIG += lime
CONFIG += pluto
CONFIG += viterbi-scalar
# CONFIG += viterbi-sse
# CONFIG += viterbi-avx2
# CONFIG += spiral-sse
# CONFIG += spiral-no-sse
#
# end of 32/64 specifics
INCLUDEPATH += /usr/local/include
LIBS += -lportaudio
#LIBS += /usr/i686-w64-mingw32/sys-root/mingw/bin/libsndfile-1.dll
#LIBS += /usr/i686-w64-mingw32/sys-root/mingw/bin/libsamplerate-0.dll
LIBS += -lole32
LIBS += -lwinpthread
LIBS += -lwinmm
LIBS += -lstdc++
LIBS += -lws2_32
LIBS += -lusb-1.0
LIBS += -lz
#correct this for the correct path to the qwt6 library on your system
#mingw64 wants the first one, cross compiling mingw64-32 the second one
#LIBS += -lqwt
equals (QT_MAJOR_VERSION, 6) {
LIBS += -lqwt-qt6
}
else {
LIBS += -lqwt-qt5
}
CONFIG += faad
#
#very experimental, simple server for connecting to a tdc handler
#CONFIG += datastreamer
#if you want to listen remote, uncomment
#CONFIG += tcp-streamer # use for remote listening
#otherwise, if you want to use the default qt way of soud out
CONFIG += local-audio
#comment both out if you just want to use the "normal" way
DEFINES += __DUMP_SNR__ # for experiments only
}
### dabstick
# Note: the windows version is bound to the dll, the
# linux version loads the function from the so
dabstick-linux {
DEFINES += HAVE_RTLSDR
DEPENDPATH += ../qt-devices/rtlsdr-handler-linux
INCLUDEPATH += ../qt-devices/rtlsdr-handler-linux
HEADERS += ../qt-devices/rtlsdr-handler-linux/rtlsdr-handler.h \
../qt-devices/rtlsdr-handler-linux/dll-driver.h \
../qt-devices/rtlsdr-handler-linux/rtl-dongleselect.h
SOURCES += ../qt-devices/rtlsdr-handler-linux/rtlsdr-handler.cpp \
../qt-devices/rtlsdr-handler-linux/dll-driver.cpp \
../qt-devices/rtlsdr-handler-linux/rtl-dongleselect.cpp
FORMS += ../qt-devices/rtlsdr-handler-linux/rtlsdr-widget.ui
}
dabstick-win-v4 {
DEFINES += HAVE_RTLSDR_V4
DEPENDPATH += ../qt-devices/rtlsdr-handler-win
INCLUDEPATH += ../qt-devices/rtlsdr-handler-win
INCLUDEPATH += ../usr/shared/drivers/rtlsdrWindowsV4
INCLUDEPATH += ../usr/shared/drivers/rtlsdrWindowsV4/x86
HEADERS += ../qt-devices/rtlsdr-handler-win/rtlsdr-handler-win.h \
../qt-devices/rtlsdr-handler-common/rtl-dongleselect.h
SOURCES += ../qt-devices/rtlsdr-handler-win/rtlsdr-handler-win.cpp \
../qt-devices/rtlsdr-handler-common/rtl-dongleselect.cpp
FORMS += ../qt-devices/rtlsdr-handler-common/rtlsdr-widget.ui
LIBS += /usr/shared/drivers/rtlsdrWindowsV4/x86/rtlsdr.dll
}
dabstick-win-v3 {
DEFINES += HAVE_RTLSDR_V3
DEPENDPATH += ../qt-devices/rtlsdr-handler-win
INCLUDEPATH += ../qt-devices/rtlsdr-handler-win
INCLUDEPATH += ../qt-devices/rtlsdr-handler-common
HEADERS += ../qt-devices/rtlsdr-handler-win/rtlsdr-handler-win.h \
../qt-devices/rtlsdr-handler-common/rtl-dongleselect.h
SOURCES += ../qt-devices/rtlsdr-handler-win/rtlsdr-handler-win.cpp \
../qt-devices/rtlsdr-handler-common/rtl-dongleselect.cpp
FORMS += ../qt-devices/rtlsdr-handler-common/rtlsdr-widget.ui
# LIBS += /usr/i686-s64-mingw32/sys-root/mingw/bin/librtlsdr.dll
LIBS += /usr/i686-w64-mingw32/sys-root/mingw/bin/librtlsdr.dll
}
#
# the SDRplay
#
sdrplay-v2 {
DEFINES += HAVE_SDRPLAY_V2
DEPENDPATH += ../qt-devices/sdrplay-handler-v2
INCLUDEPATH += ../qt-devices/sdrplay-handler-v2
HEADERS += ../qt-devices/sdrplay-handler-v2/sdrplay-handler-v2.h \
../qt-devices/sdrplay-handler-v2/sdrplayselect.h
SOURCES += ../qt-devices/sdrplay-handler-v2/sdrplay-handler-v2.cpp \
../qt-devices/sdrplay-handler-v2/sdrplayselect.cpp
FORMS += ../qt-devices/sdrplay-handler-v2/sdrplay-widget-v2.ui
}
#
# the SDRplay
#
sdrplay-v3 {
DEFINES += HAVE_SDRPLAY_V3
DEPENDPATH += ../qt-devices/sdrplay-handler-v3
INCLUDEPATH += ../qt-devices/sdrplay-handler-v3 \
../qt-devices/sdrplay-handler-v3/include
HEADERS += ../qt-devices/sdrplay-handler-v3/sdrplay-handler-v3.h \
../qt-devices/sdrplay-handler-v3/sdrplay-commands.h \
../qt-devices/sdrplay-handler-v3/Rsp-device.h \
../qt-devices/sdrplay-handler-v3/RspI-handler.h \
../qt-devices/sdrplay-handler-v3/Rsp1A-handler.h \
../qt-devices/sdrplay-handler-v3/RspII-handler.h \
../qt-devices/sdrplay-handler-v3/RspDuo-handler.h \
../qt-devices/sdrplay-handler-v3/RspDx-handler.h
SOURCES += ../qt-devices/sdrplay-handler-v3/Rsp-device.cpp \
../qt-devices/sdrplay-handler-v3/sdrplay-handler-v3.cpp \
../qt-devices/sdrplay-handler-v3/RspI-handler.cpp \
../qt-devices/sdrplay-handler-v3/Rsp1A-handler.cpp \
../qt-devices/sdrplay-handler-v3/RspII-handler.cpp \
../qt-devices/sdrplay-handler-v3/RspDuo-handler.cpp \
../qt-devices/sdrplay-handler-v3/RspDx-handler.cpp
FORMS += ../qt-devices/sdrplay-handler-v3/sdrplay-widget-v3.ui
# LIBS += -ldl
}
#
# limeSDR
#
lime {
DEFINES += HAVE_LIME
INCLUDEPATH += ../qt-devices/lime-handler
DEPENDPATH += ../qt-devices/lime-handler
HEADERS += ../qt-devices/lime-handler/lime-handler.h \
../qt-devices/lime-handler/lime-widget.h
SOURCES += ../qt-devices/lime-handler/lime-handler.cpp
}
#
# the hackrf
#
hackrf {
DEFINES += HAVE_HACKRF
DEPENDPATH += ../qt-devices/hackrf-handler
INCLUDEPATH += ../qt-devices/hackrf-handler
HEADERS += ../qt-devices/hackrf-handler/hackrf-handler.h
SOURCES += ../qt-devices/hackrf-handler/hackrf-handler.cpp
FORMS += ../qt-devices/hackrf-handler/hackrf-widget.ui
}
#
#
# airspy support
#
airspy {
DEFINES += HAVE_AIRSPY
DEPENDPATH += ../qt-devices/airspy
INCLUDEPATH += ../qt-devices/airspy-handler \
../qt-devices/airspy-handler/libairspy
HEADERS += ../qt-devices/airspy-handler/airspy-handler.h \
../qt-devices/airspy-handler/airspyselect.h \
../qt-devices/airspy-handler/libairspy/airspy.h
SOURCES += ../qt-devices/airspy-handler/airspy-handler.cpp \
../qt-devices/airspy-handler/airspyselect.cpp
FORMS += ../qt-devices/airspy-handler/airspy-widget.ui
}
airspy-2 {
DEFINES += HAVE_AIRSPY_2
DEPENDPATH += ../qt-devices/airspy-2
INCLUDEPATH += ../qt-devices/airspy-2 \
../qt-devices/airspy-2/libairspy
HEADERS += ../qt-devices/airspy-2/airspy-2.h \
../qt-devices/airspy-2/airspyselect.h \
../qt-devices/airspy-2/libairspy/airspy.h
SOURCES += ../qt-devices/airspy-2/airspy-2.cpp \
../qt-devices/airspy-2/airspyselect.cpp
FORMS += ../qt-devices/airspy-2/airspy-widget.ui
}
# extio dependencies, windows only
#
extio {
DEFINES += HAVE_EXTIO
INCLUDEPATH += ../qt-devices/extio-handler
HEADERS += ../qt-devices/extio-handler/extio-handler.h \
../qt-devices/extio-handler/common-readers.h \
../qt-devices/extio-handler/virtual-reader.h
SOURCES += ../qt-devices/extio-handler/extio-handler.cpp \
../qt-devices/extio-handler/common-readers.cpp \
../qt-devices/extio-handler/virtual-reader.cpp
}
#
rtl_tcp {
DEFINES += HAVE_RTL_TCP
QT += network
INCLUDEPATH += ../qt-devices/rtl_tcp
HEADERS += ../qt-devices/rtl_tcp/rtl_tcp_client.h
SOURCES += ../qt-devices/rtl_tcp/rtl_tcp_client.cpp
FORMS += ../qt-devices/rtl_tcp/rtl_tcp-widget.ui
}
soapy {
DEFINES += HAVE_SOAPY
DEPENDPATH += ../qt-devices/soapy
INCLUDEPATH += ../qt-devices/soapy
HEADERS += ../qt-devices/soapy/soapy-handler.h \
../qt-devices/soapy/soapy-converter.h
SOURCES += ../qt-devices/soapy/soapy-handler.cpp \
../qt-devices/soapy/soapy-converter.cpp
FORMS += ../qt-devices/soapy/soapy-widget.ui
LIBS += -lSoapySDR -lm
}
pluto-rxtx {
DEFINES += HAVE_PLUTO_RXTX
QT += network
INCLUDEPATH += ../qt-devices/pluto-rxtx
INCLUDEPATH += ../qt-devices/pluto-rxtx/dab-streamer
HEADERS += ../qt-devices/pluto-rxtx/dabFilter.h
HEADERS += ../qt-devices/pluto-rxtx/pluto-rxtx-handler.h
HEADERS += ../qt-devices/pluto-rxtx/dab-streamer/dab-streamer.h
HEADERS += ../qt-devices/pluto-rxtx/dab-streamer/up-filter.h
SOURCES += ../qt-devices/pluto-rxtx/pluto-rxtx-handler.cpp
SOURCES += ../qt-devices/pluto-rxtx/dab-streamer/dab-streamer.cpp
SOURCES += ../qt-devices/pluto-rxtx/dab-streamer/up-filter.cpp
FORMS += ../qt-devices/pluto-rxtx/pluto-rxtx-widget.ui
# LIBS += -liio -lad9361
}
pluto {
DEFINES += HAVE_PLUTO
QT += network
INCLUDEPATH += ../qt-devices/pluto-handler
HEADERS += ../qt-devices/pluto-handler/dabFilter.h
HEADERS += ../qt-devices/pluto-handler/pluto-handler.h
SOURCES += ../qt-devices/pluto-handler/pluto-handler.cpp
FORMS += ../qt-devices/pluto-handler/pluto-widget.ui
}
elad-device {
DEFINES += HAVE_ELAD
DEPENDPATH += ../qt-devices/elad-s1-handler
INCLUDEPATH += ../qt-devices/elad-s1-handler
HEADERS += ../qt-devices/elad-s1-handler/elad-handler.h
HEADERS += ../qt-devices/elad-s1-handler/elad-loader.h
HEADERS += ../qt-devices/elad-s1-handler/elad-worker.h
SOURCES += ../qt-devices/elad-s1-handler/elad-handler.cpp
SOURCES += ../qt-devices/elad-s1-handler/elad-loader.cpp
SOURCES += ../qt-devices/elad-s1-handler/elad-worker.cpp
FORMS += ../qt-devices/elad-s1-handler/elad-widget.ui
}
spyServer-8 {
DEFINES += HAVE_SPYSERVER_8
DEPENDPATH += ../qt-devices/spy-server-8
INCLUDEPATH += ../qt-devices/spy-server-8
HEADERS += ../qt-devices/spy-server-8/spyserver-protocol.h
HEADERS += ../qt-devices/spy-server-8/tcp-client-8.h
HEADERS += ../qt-devices/spy-server-8/spy-handler-8.h
HEADERS += ../qt-devices/spy-server-8/spyserver-client-8.h
SOURCES += ../qt-devices/spy-server-8/tcp-client-8.cpp
SOURCES += ../qt-devices/spy-server-8/spy-handler-8.cpp
SOURCES += ../qt-devices/spy-server-8/spyserver-client-8.cpp
FORMS += ../qt-devices/spy-server-8/spyserver-widget-8.ui
}
spyServer-16 {
DEFINES += HAVE_SPYSERVER_16
DEPENDPATH += ../qt-devices/spy-server-16
INCLUDEPATH += ../qt-devices/spy-server-16
HEADERS += ../qt-devices/spy-server-16/spyserver-protocol.h
HEADERS += ../qt-devices/spy-server-16/tcp-client.h
HEADERS += ../qt-devices/spy-server-16/spy-handler.h
HEADERS += ../qt-devices/spy-server-16/spyserver-client.h
SOURCES += ../qt-devices/spy-server-16/tcp-client.cpp
SOURCES += ../qt-devices/spy-server-16/spy-handler.cpp
SOURCES += ../qt-devices/spy-server-16/spyserver-client.cpp
FORMS += ../qt-devices/spy-server-16/spyserver-widget.ui
}
uhd {
DEFINES += HAVE_UHD
DEPENDPATH += ../qt-devices/uhd
INCLUDEPATH += ../qt-devices/uhd
HEADERS += ../qt-devices/uhd/uhd-handler.h
SOURCES += ../qt-devices/uhd/uhd-handler.cpp
FORMS += ../qt-devices/uhd/uhd-widget.ui
LIBS += -luhd
}
colibri {
DEFINES += HAVE_COLIBRI
DEPENDPATH += ../qt-devices/colibri-handler
INCLUDEPATH += ../qt-devices/colibri-handler
HEADERS += ../qt-devices/colibri-handler/common.h
HEADERS += ../qt-devices/colibri-handler/LibLoader.h
HEADERS += ../qt-devices/colibri-handler/colibri-handler.h
SOURCES += ../qt-devices/colibri-handler/LibLoader.cpp
SOURCES += ../qt-devices/colibri-handler/colibri-handler.cpp
FORMS += ../qt-devices/colibri-handler/colibri-widget.ui
}
send_datagram {
DEFINES += _SEND_DATAGRAM_
QT += network
}
tcp-streamer {
DEFINES += TCP_STREAMER
QT += network
HEADERS += ../includes/output/tcp-streamer.h
SOURCES += ../src/output/tcp-streamer.cpp
}
local-audio {
PKGCONFIG += portaudio-2.0
DEFINES += QT_AUDIO
QT += multimedia
equals (QT_MAJOR_VERSION, 5) {
INCLUDEPATH += ../includes/output/Qt5
HEADERS += ../includes/output/Qt5/Qt-audio.h \
../includes/output/Qt5/Qt-audiodevice.h \
../includes/output/audiosink.h
SOURCES += ../src/output/Qt5/Qt-audio.cpp \
../src/output/Qt5/Qt-audiodevice.cpp \
../src/output/audiosink.cpp
LIBS += -lportaudio
} else {
INCLUDEPATH += ../includes/output/Qt6
HEADERS += ../includes/output/Qt6/Qt-audio.h \
../includes/output/Qt6/Qt-audiodevice.h \
../includes/output/audiosink.h
SOURCES += ../src/output/Qt6/Qt-audio.cpp \
../src/output/Qt6/Qt-audiodevice.cpp \
../src/output/audiosink.cpp
LIBS += -lportaudio
}
}
datastreamer {
DEFINES += DATA_STREAMER
DEFINES += CLOCK_STREAMER
INCLUDEPATH += ../server-thread
HEADERS += ../server-thread/tcp-server.h
SOURCES += ../server-thread/tcp-server.cpp
}
viterbi-scalar {
DEPENDPATH += ../src/support/viterbi
INCLUDEPATH += ../src/support/viterbi
HEADERS += ../src/support/viterbi/viterbi.h
SOURCES += ../src/support/viterbi/viterbi.cpp
}
viterbi-sse {
DEPENDPATH += ../src/support/viterbi
QMAKE_CFLAGS += -msse4
QMAKE_CXXFLAGS += -msse4
QMAKE_CFLAGS += -mavx2
QMAKE_CXXFLAGS += -mavx2
QMAKE_LFLAGS += -mavx2
DEFINES += __SSE4_1__
DEFINES += __ARCH_X86__
#DEFINES += __ARCH_AARCH64__
INCLUDEPATH += ../src/support/viterbi
HEADERS += ../src/support/viterbi/viterbi.h
SOURCES += ../src/support/viterbi/viterbi.cpp
}
viterbi-avx2 {
DEPENDPATH += ../src/support/viterbi
QMAKE_CFLAGS += -mavx2
QMAKE_CXXFLAGS += -mavx2
QMAKE_LFLAGS += -mavx2
DEFINES += __AVX2__
DEFINES += __ARCH_X86__
#DEFINES += __ARCH_AARCH64__
INCLUDEPATH += ../src/support/viterbi
HEADERS += ../src/support/viterbi/viterbi.h
SOURCES += ../src/support/viterbi/viterbi.cpp
}
spiral-sse {
DEPENDPATH += ../src/support/viterbi-spiral
INCLUDEPATH += ../src/support/viterbi-spiral
DEFINES += SSE_AVAILABLE
HEADERS += ../src/support/viterbi-spiral/viterbi.h
SOURCES += ../src/support/viterbi-spiral/viterbi.cpp
HEADERS += ../src/support/viterbi-spiral/spiral-sse.h
SOURCES += ../src/support/viterbi-spiral/spiral-sse.c
}
spiral-no-sse {
DEPENDPATH += ../src/support/viterbi-spiral
INCLUDEPATH += ../src/support/viterbi-spiral
DEFINES += NO_SSE_AVAILABLE
HEADERS += ../src/support/viterbi-spiral/viterbi.h
SOURCES += ../src/support/viterbi-spiral/viterbi.cpp
HEADERS += ../src/support/viterbi-spiral/spiral-no-sse.h
SOURCES += ../src/support/viterbi-spiral/spiral-no-sse.c
}
faad {
DEFINES += __WITH_FAAD__
HEADERS += ../includes/backend/audio/faad-decoder.h
SOURCES += ../src/backend/audio/faad-decoder.cpp
LIBS += -lfaad
}
fdk-aac {
DEFINES += __WITH_FDK_AAC__
INCLUDEPATH += ../helpers/specials/fdk-aac
HEADERS += ../includes/backend/audio/fdk-aac.h
SOURCES += ../src/backend/audio/fdk-aac.cpp
PKGCONFIG += fdk-aac
}
mapserver {
DEFINES += __HAVE_MAP_SERVER__
HEADERS += ../includes/support/http-handler.h
SOURCES += ../src/support/http-handler.cpp
}
double {
DEFINES += __WITH_DOUBLES__
LIBS += -lfftw3
}
single {
LIBS += -lfftw3f
}

View File

@@ -1,48 +0,0 @@
<RCC>
<qresource prefix="/">
<file>../i18n/de_DE.qm</file>
<file>qt-dab-6.9.ico</file>
<file>../AUTHORS</file>
<file>../COPYING</file>
<file>../res/radio-pictures/pauze-slide-0.png</file>
<file>../res/radio-pictures/pauze-slide-1.png</file>
<file>../res/radio-pictures/pauze-slide-2.png</file>
<file>../res/radio-pictures/pauze-slide-3.png</file>
<file>../res/radio-pictures/pauze-slide-4.png</file>
<file>../res/radio-pictures/pauze-slide-5.png</file>
<file>../res/radio-pictures/pauze-slide-6.png</file>
<file>../res/radio-pictures/pauze-slide-7.png</file>
<file>../res/radio-pictures/pauze-slide-8.png</file>
<file>../res/radio-pictures/pauze-slide-9.png</file>
<file>../res/radio-pictures/pauze-slide-10.png</file>
<file>../res/radio-pictures/volume_off.png</file>
<file>../res/radio-pictures/volume_on.png</file>
<file>../res/radio-pictures/signal0.png</file>
<file>../res/radio-pictures/signal1.png</file>
<file>../res/radio-pictures/signal2.png</file>
<file>../res/radio-pictures/signal3.png</file>
<file>../res/radio-pictures/details24.png</file>
<file>../res/radio-pictures/folder_button.png</file>
<file>../res/radio-pictures/announcement01.png</file>
<file>../res/radio-pictures/announcement02.png</file>
<file>../res/radio-pictures/announcement03.png</file>
<file>../res/radio-pictures/announcement04.png</file>
<file>../res/radio-pictures/announcement05.png</file>
<file>../res/radio-pictures/announcement09.png</file>
<file>../res/radio-pictures/announcement-d.png</file>
<file>../res/radio-pictures/up-arrow.png</file>
<file>../res/radio-pictures/down-arrow.png</file>
<file>../res/radio-pictures/reset.png</file>
<file>../res/radio-pictures/qt-dab-6.9-128x128.png</file>
<file>../res/radio-pictures/qt-dab-6.9-256x256.png</file>
<file>../res/qt-map-6X.html</file>
<file>../res/qt-map-69.html</file>
<file>../res/EasyCode.qss</file>
<file>../res/Darkeum.qss</file>
<file>../res/Adaptic.qss</file>
<file>../res/globstyle.qss</file>
<file>../res/Combinear.qss</file>
<file>../res/Diffnes.qss</file>
<file>../res/epgLabel.png</file>
</qresource>
</RCC>

48
resources.qrc Normal file
View File

@@ -0,0 +1,48 @@
<RCC>
<qresource prefix="/">
<file>./i18n/de_DE.qm</file>
<file>./app-files/qt-dab-6.9.ico</file>
<file>./AUTHORS</file>
<file>./COPYING</file>
<file>./res/radio-pictures/pauze-slide-0.png</file>
<file>./res/radio-pictures/pauze-slide-1.png</file>
<file>./res/radio-pictures/pauze-slide-2.png</file>
<file>./res/radio-pictures/pauze-slide-3.png</file>
<file>./res/radio-pictures/pauze-slide-4.png</file>
<file>./res/radio-pictures/pauze-slide-5.png</file>
<file>./res/radio-pictures/pauze-slide-6.png</file>
<file>./res/radio-pictures/pauze-slide-7.png</file>
<file>./res/radio-pictures/pauze-slide-8.png</file>
<file>./res/radio-pictures/pauze-slide-9.png</file>
<file>./res/radio-pictures/pauze-slide-10.png</file>
<file>./res/radio-pictures/volume_off.png</file>
<file>./res/radio-pictures/volume_on.png</file>
<file>./res/radio-pictures/signal0.png</file>
<file>./res/radio-pictures/signal1.png</file>
<file>./res/radio-pictures/signal2.png</file>
<file>./res/radio-pictures/signal3.png</file>
<file>./res/radio-pictures/details24.png</file>
<file>./res/radio-pictures/folder_button.png</file>
<file>./res/radio-pictures/announcement01.png</file>
<file>./res/radio-pictures/announcement02.png</file>
<file>./res/radio-pictures/announcement03.png</file>
<file>./res/radio-pictures/announcement04.png</file>
<file>./res/radio-pictures/announcement05.png</file>
<file>./res/radio-pictures/announcement09.png</file>
<file>./res/radio-pictures/announcement-d.png</file>
<file>./res/radio-pictures/up-arrow.png</file>
<file>./res/radio-pictures/down-arrow.png</file>
<file>./res/radio-pictures/reset.png</file>
<file>./res/radio-pictures/qt-dab-6.9-128x128.png</file>
<file>./res/radio-pictures/qt-dab-6.9-256x256.png</file>
<file>./res/qt-map-6X.html</file>
<file>./res/qt-map-69.html</file>
<file>./res/EasyCode.qss</file>
<file>./res/Darkeum.qss</file>
<file>./res/Adaptic.qss</file>
<file>./res/globstyle.qss</file>
<file>./res/Combinear.qss</file>
<file>./res/Diffnes.qss</file>
<file>./res/epgLabel.png</file>
</qresource>
</RCC>

26
sources/README.md Normal file
View File

@@ -0,0 +1,26 @@
Sources of the Qt-DAB program are organized in directories
* the directory "main" contains the C++ main program, the GUI handling "radio.cpp" program and some oter classes related to the GUI.
The GUI class handles the selection and connection of a devices,
and it instructs fromt end and backend what data is needed for selected
services.
* the directory "frontend", contains all classed for handling the input samples and converting these to sequences of soft bits (softbits encoded in the range -127 .. 127
* the output of the front end handler is passed on the "backend", the latter contains the functionality of mapping the soft bits to the audio and/pr data of the selected services. The directory itself has subdirectories for handling audio (i.e. mp2 or mp4) or data (mot, ip, journaline, epg)
* "output" is the directory with the functionality of converting the PCM samples to audible audio. It allows a choice between using portaudio, Qt5 audio
or Qt6 audio.
* "protection" contains a few classes handling the different protection schemes
* "qt-devices" contains all code - in different subdirectories - for controlling the devices that can be part of the configuration
* "support" contains - as the name suggests - the various support functions
* "server-thread" contains some code for the tcp-server (does not need to be configured)
* "eti-handler" contains a special class, one used to generate eti output.

View File

@@ -0,0 +1,8 @@
The directory "backend" contains - as the name suggests - functions to map the
"soft bits", passed onto audio and/or data.
The input here is processed by the file "msc-handler.cpp", that file
extracts the data for the selected service(s) and initiates required backends.

View File

View File

View File

View File

View File

View File

View File

View File

View File

Some files were not shown because too many files have changed in this diff Show More