diff options
author | robot-piglet <robot-piglet@yandex-team.com> | 2023-03-09 12:42:44 +0300 |
---|---|---|
committer | robot-piglet <robot-piglet@yandex-team.com> | 2023-03-09 12:42:44 +0300 |
commit | 6324d075a5e80b6943b5de6b465b775050fe83df (patch) | |
tree | e02ce32e988042438f64df770a528164ac572879 /library/cpp/messagebus | |
parent | 039e25e1597bec288de44e5061c1b84e195add08 (diff) | |
download | ydb-6324d075a5e80b6943b5de6b465b775050fe83df.tar.gz |
Intermediate changes
Diffstat (limited to 'library/cpp/messagebus')
16 files changed, 292 insertions, 0 deletions
diff --git a/library/cpp/messagebus/CMakeLists.txt b/library/cpp/messagebus/CMakeLists.txt index 8f8c04afe5..d90657116d 100644 --- a/library/cpp/messagebus/CMakeLists.txt +++ b/library/cpp/messagebus/CMakeLists.txt @@ -10,6 +10,8 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND UNIX AND NOT APPLE AND NOT AND include(CMakeLists.linux-aarch64.txt) elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT HAVE_CUDA) include(CMakeLists.linux-x86_64.txt) endif() diff --git a/library/cpp/messagebus/CMakeLists.windows-x86_64.txt b/library/cpp/messagebus/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..af2b7a2008 --- /dev/null +++ b/library/cpp/messagebus/CMakeLists.windows-x86_64.txt @@ -0,0 +1,71 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + +add_subdirectory(actor) +add_subdirectory(config) +add_subdirectory(monitoring) +add_subdirectory(oldmodule) +add_subdirectory(protobuf) +add_subdirectory(scheduler) +add_subdirectory(www) + +add_library(library-cpp-messagebus) +target_link_libraries(library-cpp-messagebus PUBLIC + contrib-libs-cxxsupp + yutil + contrib-libs-sparsehash + library-cpp-codecs + cpp-deprecated-enum_codegen + cpp-getopt-small + library-cpp-lwtrace + messagebus_actor + cpp-messagebus-config + cpp-messagebus-monitoring + cpp-messagebus-scheduler + cpp-string_utils-indent_text + cpp-threading-future + cpp-deprecated-atomic +) +target_sources(library-cpp-messagebus PRIVATE + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/acceptor.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/acceptor_status.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/connection.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/coreconn.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/duration_histogram.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/event_loop.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/futex_like.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/handler.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/key_value_printer.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/local_flags.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/locator.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/mb_lwtrace.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/message.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/message_counter.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/message_status.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/message_status_counter.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/messqueue.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/network.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/queue_config.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/remote_client_connection.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/remote_client_session.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/remote_client_session_semaphore.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/remote_connection.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/remote_connection_status.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/remote_server_connection.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/remote_server_session.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/remote_server_session_semaphore.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/session.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/session_impl.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/session_job_count.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/shutdown_state.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/socket_addr.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/storage.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/synchandler.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/use_after_free_checker.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/use_count_checker.cpp +) diff --git a/library/cpp/messagebus/actor/CMakeLists.txt b/library/cpp/messagebus/actor/CMakeLists.txt index 8f8c04afe5..d90657116d 100644 --- a/library/cpp/messagebus/actor/CMakeLists.txt +++ b/library/cpp/messagebus/actor/CMakeLists.txt @@ -10,6 +10,8 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND UNIX AND NOT APPLE AND NOT AND include(CMakeLists.linux-aarch64.txt) elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT HAVE_CUDA) include(CMakeLists.linux-x86_64.txt) endif() diff --git a/library/cpp/messagebus/actor/CMakeLists.windows-x86_64.txt b/library/cpp/messagebus/actor/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..da26bb12a8 --- /dev/null +++ b/library/cpp/messagebus/actor/CMakeLists.windows-x86_64.txt @@ -0,0 +1,20 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_library(messagebus_actor) +target_link_libraries(messagebus_actor PUBLIC + contrib-libs-cxxsupp + yutil + cpp-deprecated-atomic +) +target_sources(messagebus_actor PRIVATE + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/actor/executor.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/actor/thread_extra.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/actor/what_thread_does.cpp +) diff --git a/library/cpp/messagebus/config/CMakeLists.txt b/library/cpp/messagebus/config/CMakeLists.txt index 8f8c04afe5..d90657116d 100644 --- a/library/cpp/messagebus/config/CMakeLists.txt +++ b/library/cpp/messagebus/config/CMakeLists.txt @@ -10,6 +10,8 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND UNIX AND NOT APPLE AND NOT AND include(CMakeLists.linux-aarch64.txt) elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT HAVE_CUDA) include(CMakeLists.linux-x86_64.txt) endif() diff --git a/library/cpp/messagebus/config/CMakeLists.windows-x86_64.txt b/library/cpp/messagebus/config/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..2ac52c60e8 --- /dev/null +++ b/library/cpp/messagebus/config/CMakeLists.windows-x86_64.txt @@ -0,0 +1,20 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_library(cpp-messagebus-config) +target_link_libraries(cpp-messagebus-config PUBLIC + contrib-libs-cxxsupp + yutil + library-cpp-getopt + cpp-deprecated-enum_codegen +) +target_sources(cpp-messagebus-config PRIVATE + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/config/netaddr.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/config/session_config.cpp +) diff --git a/library/cpp/messagebus/monitoring/CMakeLists.txt b/library/cpp/messagebus/monitoring/CMakeLists.txt index 8f8c04afe5..d90657116d 100644 --- a/library/cpp/messagebus/monitoring/CMakeLists.txt +++ b/library/cpp/messagebus/monitoring/CMakeLists.txt @@ -10,6 +10,8 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND UNIX AND NOT APPLE AND NOT AND include(CMakeLists.linux-aarch64.txt) elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT HAVE_CUDA) include(CMakeLists.linux-x86_64.txt) endif() diff --git a/library/cpp/messagebus/monitoring/CMakeLists.windows-x86_64.txt b/library/cpp/messagebus/monitoring/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..0a5f1f8502 --- /dev/null +++ b/library/cpp/messagebus/monitoring/CMakeLists.windows-x86_64.txt @@ -0,0 +1,44 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + +get_built_tool_path( + TOOL_protoc_bin + TOOL_protoc_dependency + contrib/tools/protoc/bin + protoc +) +get_built_tool_path( + TOOL_cpp_styleguide_bin + TOOL_cpp_styleguide_dependency + contrib/tools/protoc/plugins/cpp_styleguide + cpp_styleguide +) + +add_library(cpp-messagebus-monitoring) +target_link_libraries(cpp-messagebus-monitoring PUBLIC + contrib-libs-cxxsupp + yutil + encode-legacy_protobuf-protos + contrib-libs-protobuf +) +target_proto_messages(cpp-messagebus-monitoring PRIVATE + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/monitoring/mon_proto.proto +) +target_proto_addincls(cpp-messagebus-monitoring + ./ + ${CMAKE_SOURCE_DIR}/ + ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src + ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/contrib/libs/protobuf/src +) +target_proto_outs(cpp-messagebus-monitoring + --cpp_out=${CMAKE_BINARY_DIR}/ + --cpp_styleguide_out=${CMAKE_BINARY_DIR}/ +) diff --git a/library/cpp/messagebus/oldmodule/CMakeLists.txt b/library/cpp/messagebus/oldmodule/CMakeLists.txt index 8f8c04afe5..d90657116d 100644 --- a/library/cpp/messagebus/oldmodule/CMakeLists.txt +++ b/library/cpp/messagebus/oldmodule/CMakeLists.txt @@ -10,6 +10,8 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND UNIX AND NOT APPLE AND NOT AND include(CMakeLists.linux-aarch64.txt) elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT HAVE_CUDA) include(CMakeLists.linux-x86_64.txt) endif() diff --git a/library/cpp/messagebus/oldmodule/CMakeLists.windows-x86_64.txt b/library/cpp/messagebus/oldmodule/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..11b6ead04d --- /dev/null +++ b/library/cpp/messagebus/oldmodule/CMakeLists.windows-x86_64.txt @@ -0,0 +1,20 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_library(cpp-messagebus-oldmodule) +target_link_libraries(cpp-messagebus-oldmodule PUBLIC + contrib-libs-cxxsupp + yutil + library-cpp-messagebus + messagebus_actor +) +target_sources(cpp-messagebus-oldmodule PRIVATE + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/oldmodule/module.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/oldmodule/startsession.cpp +) diff --git a/library/cpp/messagebus/protobuf/CMakeLists.txt b/library/cpp/messagebus/protobuf/CMakeLists.txt index 8f8c04afe5..d90657116d 100644 --- a/library/cpp/messagebus/protobuf/CMakeLists.txt +++ b/library/cpp/messagebus/protobuf/CMakeLists.txt @@ -10,6 +10,8 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND UNIX AND NOT APPLE AND NOT AND include(CMakeLists.linux-aarch64.txt) elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT HAVE_CUDA) include(CMakeLists.linux-x86_64.txt) endif() diff --git a/library/cpp/messagebus/protobuf/CMakeLists.windows-x86_64.txt b/library/cpp/messagebus/protobuf/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..8566a4b7ef --- /dev/null +++ b/library/cpp/messagebus/protobuf/CMakeLists.windows-x86_64.txt @@ -0,0 +1,20 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_library(messagebus_protobuf) +target_link_libraries(messagebus_protobuf PUBLIC + contrib-libs-cxxsupp + yutil + contrib-libs-protobuf + library-cpp-messagebus + messagebus_actor +) +target_sources(messagebus_protobuf PRIVATE + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/protobuf/ybusbuf.cpp +) diff --git a/library/cpp/messagebus/scheduler/CMakeLists.txt b/library/cpp/messagebus/scheduler/CMakeLists.txt index 8f8c04afe5..d90657116d 100644 --- a/library/cpp/messagebus/scheduler/CMakeLists.txt +++ b/library/cpp/messagebus/scheduler/CMakeLists.txt @@ -10,6 +10,8 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND UNIX AND NOT APPLE AND NOT AND include(CMakeLists.linux-aarch64.txt) elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT HAVE_CUDA) include(CMakeLists.linux-x86_64.txt) endif() diff --git a/library/cpp/messagebus/scheduler/CMakeLists.windows-x86_64.txt b/library/cpp/messagebus/scheduler/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..510bc01bd5 --- /dev/null +++ b/library/cpp/messagebus/scheduler/CMakeLists.windows-x86_64.txt @@ -0,0 +1,19 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + + +add_library(cpp-messagebus-scheduler) +target_link_libraries(cpp-messagebus-scheduler PUBLIC + contrib-libs-cxxsupp + yutil + cpp-threading-future + cpp-deprecated-atomic +) +target_sources(cpp-messagebus-scheduler PRIVATE + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/scheduler/scheduler.cpp +) diff --git a/library/cpp/messagebus/www/CMakeLists.txt b/library/cpp/messagebus/www/CMakeLists.txt index 8f8c04afe5..d90657116d 100644 --- a/library/cpp/messagebus/www/CMakeLists.txt +++ b/library/cpp/messagebus/www/CMakeLists.txt @@ -10,6 +10,8 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64" AND UNIX AND NOT APPLE AND NOT AND include(CMakeLists.linux-aarch64.txt) elseif (APPLE AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") include(CMakeLists.darwin-x86_64.txt) +elseif (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" AND NOT HAVE_CUDA) + include(CMakeLists.windows-x86_64.txt) elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" AND UNIX AND NOT APPLE AND NOT ANDROID AND NOT HAVE_CUDA) include(CMakeLists.linux-x86_64.txt) endif() diff --git a/library/cpp/messagebus/www/CMakeLists.windows-x86_64.txt b/library/cpp/messagebus/www/CMakeLists.windows-x86_64.txt new file mode 100644 index 0000000000..2d41aa3305 --- /dev/null +++ b/library/cpp/messagebus/www/CMakeLists.windows-x86_64.txt @@ -0,0 +1,62 @@ + +# This file was generated by the build system used internally in the Yandex monorepo. +# Only simple modifications are allowed (adding source-files to targets, adding simple properties +# like target_include_directories). These modifications will be ported to original +# ya.make files by maintainers. Any complex modifications which can't be ported back to the +# original buildsystem will not be accepted. + + +get_built_tool_path( + TOOL_rescompiler_bin + TOOL_rescompiler_dependency + tools/rescompiler/bin + rescompiler +) + +add_library(cpp-messagebus-www) +target_link_libraries(cpp-messagebus-www PUBLIC + contrib-libs-cxxsupp + yutil + library-cpp-resource + library-cpp-cgiparam + cpp-html-pcdata + cpp-http-fetch + cpp-http-server + cpp-json-writer + library-cpp-messagebus + cpp-messagebus-oldmodule + monlib-deprecated-json + library-cpp-uri +) +target_sources(cpp-messagebus-www PRIVATE + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/www/html_output.cpp + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/www/www.cpp +) + +add_global_library_for(cpp-messagebus-www.global cpp-messagebus-www) +target_link_libraries(cpp-messagebus-www.global PUBLIC + contrib-libs-cxxsupp + yutil + library-cpp-resource + library-cpp-cgiparam + cpp-html-pcdata + cpp-http-fetch + cpp-http-server + cpp-json-writer + library-cpp-messagebus + cpp-messagebus-oldmodule + monlib-deprecated-json + library-cpp-uri +) +target_sources(cpp-messagebus-www.global PRIVATE + ${CMAKE_BINARY_DIR}/library/cpp/messagebus/www/dd5bbfe173cb40020e73f3227e3ac73d.cpp +) +resources(cpp-messagebus-www.global + ${CMAKE_BINARY_DIR}/library/cpp/messagebus/www/dd5bbfe173cb40020e73f3227e3ac73d.cpp + INPUTS + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/www/messagebus.js + ${CMAKE_SOURCE_DIR}/library/cpp/messagebus/www/bus-ico.png + KEYS + /messagebus.js + /bus-ico.png +) |