diff --git a/Freeswitch.2010.sln b/Freeswitch.2010.sln index 83f9734fa1..3470f69d55 100644 --- a/Freeswitch.2010.sln +++ b/Freeswitch.2010.sln @@ -724,6 +724,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_httapi", "src\mod\appli EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_abstraction", "src\mod\applications\mod_abstraction\mod_abstraction.2010.vcxproj", "{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sms", "src\mod\applications\mod_sms\mod_sms.2010.vcxproj", "{2469B306-B027-4FF2-8815-C9C1EA2CAE79}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution All|Win32 = All|Win32 @@ -3734,6 +3736,19 @@ Global {60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Release|x64.Build.0 = Release|x64 {60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Release|x64 Setup.ActiveCfg = Release|x64 {60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Release|x86 Setup.ActiveCfg = Release|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|Win32.ActiveCfg = Release|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|x64.ActiveCfg = Release|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|x64.Build.0 = Release|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|x64 Setup.ActiveCfg = Release|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|x86 Setup.ActiveCfg = Release|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Debug|Win32.ActiveCfg = Debug|Win32 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Debug|x64.ActiveCfg = Debug|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Debug|x64 Setup.ActiveCfg = Debug|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Debug|x86 Setup.ActiveCfg = Debug|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Release|Win32.ActiveCfg = Release|Win32 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Release|x64.ActiveCfg = Release|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Release|x64 Setup.ActiveCfg = Release|x64 + {2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Release|x86 Setup.ActiveCfg = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3787,6 +3802,7 @@ Global {50AAC2CE-BFC9-4912-87CC-C6381850D735} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {4748FF56-CA85-4809-97D6-A94C0FAC1D77} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {60C542EE-6882-4EA2-8C21-5AB6DB1BA73F} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {2469B306-B027-4FF2-8815-C9C1EA2CAE79} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {07113B25-D3AF-4E04-BA77-4CD1171F022C} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} {A27CCA23-1541-4337-81A4-F0A6413078A0} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} diff --git a/build/config/libcurl.m4 b/build/config/libcurl.m4 index 5ddf77f321..d1e6f65aa5 100644 --- a/build/config/libcurl.m4 +++ b/build/config/libcurl.m4 @@ -97,7 +97,7 @@ AC_DEFUN([LIBCURL_CHECK_CONFIG], LIBCURL_CPPFLAGS=`$_libcurl_config --cflags` fi if test x"$LIBCURL" = "x" ; then - LIBCURL=`$_libcurl_config --libs` + LIBCURL=`$_libcurl_config --libs --static` # This is so silly, but Apple actually has a bug in their # curl-config script. Fixed in Tiger, but there are still diff --git a/libs/esl/src/esl.c b/libs/esl/src/esl.c index 562ee2d84c..02ab7ef271 100644 --- a/libs/esl/src/esl.c +++ b/libs/esl/src/esl.c @@ -741,9 +741,10 @@ ESL_DECLARE(int) esl_wait_sock(esl_socket_t sock, uint32_t ms, esl_poll_t flags) FD_ZERO(&wfds); FD_ZERO(&efds); +#ifndef WIN32 /* Wouldn't you rather know?? */ assert(sock <= FD_SETSIZE); - +#endif if ((flags & ESL_POLL_READ)) { diff --git a/libs/sofia-sip/.update b/libs/sofia-sip/.update index 692541efac..c35540c4f5 100644 --- a/libs/sofia-sip/.update +++ b/libs/sofia-sip/.update @@ -1 +1 @@ -Mon Jan 16 17:26:19 CST 2012 +Thu Mar 1 10:03:45 CST 2012 diff --git a/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.c b/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.c index 867ca7a79d..3718764718 100644 --- a/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.c +++ b/libs/sofia-sip/libsofia-sip-ua/sdp/sdp.c @@ -1875,10 +1875,11 @@ sdp_rtpmap_t *sdp_rtpmap_find_matching(sdp_rtpmap_t const *list, sdp_rtpmap_t const *rm) { char const *lparam, *rparam; + sdp_rtpmap_t const *cp_list = NULL; if (rm == NULL) return NULL; - + for (; list; list = list->rm_next) { if (rm->rm_rate != list->rm_rate) continue; @@ -1888,8 +1889,11 @@ sdp_rtpmap_t *sdp_rtpmap_find_matching(sdp_rtpmap_t const *list, lparam = rm->rm_params; rparam = list->rm_params; - if (lparam == rparam) - break; + if (lparam == rparam) { + cp_list = list; + if (rm->rm_pt != list->rm_pt) continue; + break; + } if (!lparam) lparam = "1"; if (!rparam) rparam = "1"; if (!su_casematch(lparam, rparam)) @@ -1898,5 +1902,5 @@ sdp_rtpmap_t *sdp_rtpmap_find_matching(sdp_rtpmap_t const *list, break; } - return (sdp_rtpmap_t *)list; + return cp_list ? (sdp_rtpmap_t *) cp_list : (sdp_rtpmap_t *)list; } diff --git a/libs/win32/curl/curllib.2010.vcxproj b/libs/win32/curl/curllib.2010.vcxproj index 979093e958..c607e0198a 100644 --- a/libs/win32/curl/curllib.2010.vcxproj +++ b/libs/win32/curl/curllib.2010.vcxproj @@ -80,8 +80,8 @@ MaxSpeed OnlyExplicitInline - ..\..\curl\lib\;..\..\curl\include;.;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;%(PreprocessorDefinitions) + ..\..\curl\lib\;..\..\curl\include;.;..\..\openssl-1.0.0a\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions) true MultiThreadedDLL true @@ -111,8 +111,8 @@ MaxSpeed OnlyExplicitInline - ..\..\curl\lib\;..\..\curl\include;.;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;%(PreprocessorDefinitions) + ..\..\curl\lib\;..\..\curl\include;.;..\..\openssl-1.0.0a\include;%(AdditionalIncludeDirectories) + WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions) true MultiThreadedDLL true @@ -141,8 +141,8 @@ Disabled - ..\..\curl\lib\;..\..\curl\include;.;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;%(PreprocessorDefinitions) + ..\..\curl\lib\;..\..\curl\include;.;..\..\openssl-1.0.0a\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL @@ -171,8 +171,8 @@ Disabled - ..\..\curl\lib\;..\..\curl\include;.;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;%(PreprocessorDefinitions) + ..\..\curl\lib\;..\..\curl\include;.;..\..\openssl-1.0.0a\include;%(AdditionalIncludeDirectories) + WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL diff --git a/scripts/gentls_cert.in b/scripts/gentls_cert.in index e102a964ef..e397e97d61 100644 --- a/scripts/gentls_cert.in +++ b/scripts/gentls_cert.in @@ -3,6 +3,7 @@ CONFDIR=@prefix@/conf/ssl DAYS=2190 KEY_SIZE=2048 +export KEY_SIZE=${KEY_SIZE} TMPFILE="/tmp/fs-ca-$$-$(date +%Y%m%d%H%M%S)" @@ -36,10 +37,14 @@ setup_ca() { mkdir -p -m 750 "${CONFDIR}/CA" || exit 1 fi - if [ ! -e "${CONFDIR}/CA/config.tpl" ]; then + if [ -e "${CONFDIR}/CA/config.tpl" ]; then + if [ $0 -nt "${CONFDIR}/CA/config.tpl" ]; then + echo "WARNING! genttls_cert has a modified time more recent than ${CONFDIR}/CA/config.tpl remove config.tpl to re-generate it" + fi + else cat > "${CONFDIR}/CA/config.tpl" <<-EOF [ req ] - default_bits = $ENV::KEY_SIZE + default_bits = \$ENV::KEY_SIZE prompt = no distinguished_name = req_dn @@ -117,7 +122,7 @@ generate_cert() { > "${TMPFILE}.cfg" || exit 1 openssl req -new -out "${TMPFILE}.req" \ - -newkey rsa: -keyout "${TMPFILE}.key" \ + -newkey rsa:${KEY_SIZE} -keyout "${TMPFILE}.key" \ -config "${TMPFILE}.cfg" -nodes -sha1 >/dev/null || exit 1 openssl x509 -req -CAkey "${CONFDIR}/CA/cakey.pem" -CA "${CONFDIR}/CA/cacert.pem" -CAcreateserial \ diff --git a/src/mod/applications/mod_curl/mod_curl.2010.vcxproj b/src/mod/applications/mod_curl/mod_curl.2010.vcxproj index dd7ea67bd0..45257322b9 100644 --- a/src/mod/applications/mod_curl/mod_curl.2010.vcxproj +++ b/src/mod/applications/mod_curl/mod_curl.2010.vcxproj @@ -136,6 +136,12 @@ {9778f1c0-09bc-4698-8ebc-bd982247209a} false + + {d331904d-a00a-4694-a5a3-fcff64ab5dbe} + + + {b4b62169-5ad4-4559-8707-3d933ac5db39} + {202d7a4e-760d-4d0e-afa1-d7459ced30ff} false diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c index 80797b0a32..7d48784486 100755 --- a/src/mod/applications/mod_dptools/mod_dptools.c +++ b/src/mod/applications/mod_dptools/mod_dptools.c @@ -3326,7 +3326,7 @@ static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session, if (var_event) { switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "dialed_user", dialed_user); switch_event_add_header_string(var_event, SWITCH_STACK_BOTTOM, "dialed_domain", domain); - if (!strstr(dest, "presence_id=")) { + if (!zstr(dest) && !strstr(dest, "presence_id=")) { switch_event_add_header(var_event, SWITCH_STACK_BOTTOM, "presence_id", "%s@%s", dialed_user, domain); } } diff --git a/src/mod/applications/mod_sms/mod_sms.2010.vcxproj b/src/mod/applications/mod_sms/mod_sms.2010.vcxproj index 4dbbf47874..7be7e86fe1 100644 --- a/src/mod/applications/mod_sms/mod_sms.2010.vcxproj +++ b/src/mod/applications/mod_sms/mod_sms.2010.vcxproj @@ -1,4 +1,4 @@ - + @@ -20,7 +20,7 @@ mod_sms - {11C9BC3D-45E9-46E3-BE84-B8CEE4685E39} + {2469B306-B027-4FF2-8815-C9C1EA2CAE79} mod_sms Win32Proj @@ -63,10 +63,6 @@ <_ProjectFileVersion>10.0.30319.1 - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ - $(Platform)\$(Configuration)\ @@ -132,4 +128,4 @@ - + \ No newline at end of file diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index ee79914236..72cbccf544 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -2801,8 +2801,29 @@ static int show_reg_callback_xml(void *pArg, int argc, char **argv, char **colum return 0; } -static const char *status_names[] = { "DOWN", "UP", NULL }; +static int sql2str_callback(void *pArg, int argc, char **argv, char **columnNames) +{ + struct cb_helper_sql2str *cbt = (struct cb_helper_sql2str *) pArg; + switch_copy_string(cbt->buf, argv[0], cbt->len); + cbt->matches++; + return 0; +} + +static uint32_t sofia_profile_reg_count(sofia_profile_t *profile) +{ + struct cb_helper_sql2str cb; + char reg_count[80] = ""; + char *sql; + cb.buf = reg_count; + cb.len = sizeof(reg_count); + sql = switch_mprintf("select count(*) from sip_registrations where profile_name = '%q'", profile->name); + sofia_glue_execute_sql_callback(profile, profile->ireg_mutex, sql, sql2str_callback, &cb); + free(sql); + return strtoul(reg_count, NULL, 10); +} + +static const char *status_names[] = { "DOWN", "UP", NULL }; static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t *stream) { @@ -2976,6 +2997,7 @@ static switch_status_t cmd_status(char **argv, int argc, switch_stream_handle_t stream->write_function(stream, "FAILED-CALLS-IN \t%u\n", profile->ib_failed_calls); stream->write_function(stream, "CALLS-OUT \t%u\n", profile->ob_calls); stream->write_function(stream, "FAILED-CALLS-OUT \t%u\n", profile->ob_failed_calls); + stream->write_function(stream, "REGISTRATIONS \t%lu\n", sofia_profile_reg_count(profile)); } cb.profile = profile; @@ -3252,9 +3274,9 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl stream->write_function(stream, " %u\n", profile->ob_calls); stream->write_function(stream, " %u\n", profile->ib_failed_calls); stream->write_function(stream, " %u\n", profile->ob_failed_calls); + stream->write_function(stream, " %lu\n", sofia_profile_reg_count(profile)); stream->write_function(stream, " \n"); } - stream->write_function(stream, " \n"); cb.profile = profile; cb.stream = stream; @@ -3273,6 +3295,13 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl "network_ip,network_port,sip_username,sip_realm,mwi_user,mwi_host" " from sip_registrations where profile_name='%q' and contact like '%%%q%%'", profile->name, argv[3]); } + if (!sql && argv[2] && !strcasecmp(argv[2], "reg")) { + + sql = switch_mprintf("select call_id,sip_user,sip_host,contact,status," + "rpid,expires,user_agent,server_user,server_host,profile_name,hostname," + "network_ip,network_port,sip_username,sip_realm,mwi_user,mwi_host" + " from sip_registrations where profile_name='%q'", profile->name); + } if (!sql && argv[2] && !strcasecmp(argv[2], "user") && argv[3]) { char *dup = strdup(argv[3]); char *host = NULL, *user = NULL; @@ -3303,17 +3332,15 @@ static switch_status_t cmd_xml_status(char **argv, int argc, switch_stream_handl switch_safe_free(sqlextra); } - if (!sql) { - sql = switch_mprintf("select call_id,sip_user,sip_host,contact,status," - "rpid,expires,user_agent,server_user,server_host,profile_name,hostname," - "network_ip,network_port,sip_username,sip_realm,mwi_user,mwi_host" - " from sip_registrations where profile_name='%q'", profile->name); + if (sql) { + stream->write_function(stream, " \n"); + + sofia_glue_execute_sql_callback(profile, profile->ireg_mutex, sql, show_reg_callback_xml, &cb); + switch_safe_free(sql); + + stream->write_function(stream, " \n"); } - sofia_glue_execute_sql_callback(profile, profile->ireg_mutex, sql, show_reg_callback_xml, &cb); - switch_safe_free(sql); - - stream->write_function(stream, " \n"); stream->write_function(stream, "\n"); sofia_glue_release_profile(profile); @@ -3682,15 +3709,6 @@ static int contact_callback(void *pArg, int argc, char **argv, char **columnName return 0; } -static int sql2str_callback(void *pArg, int argc, char **argv, char **columnNames) -{ - struct cb_helper_sql2str *cbt = (struct cb_helper_sql2str *) pArg; - - switch_copy_string(cbt->buf, argv[0], cbt->len); - cbt->matches++; - return 0; -} - SWITCH_STANDARD_API(sofia_count_reg_function) { char *data; diff --git a/src/mod/formats/mod_shout/Makefile b/src/mod/formats/mod_shout/Makefile index d35d75a630..f059677e7e 100644 --- a/src/mod/formats/mod_shout/Makefile +++ b/src/mod/formats/mod_shout/Makefile @@ -49,7 +49,7 @@ $(LAMELA): $(LAME_BUILDDIR)/Makefile $(SHOUT_DIR): $(GETLIB) $(SHOUT).tar.gz - patch -p0 -i hack_out_ogg.diff + patch -p 6 -d ../../../../libs/libshout-2.2.2 < hack_out_ogg.diff $(SHOUT_BUILDDIR)/Makefile: $(SHOUT_DIR) mkdir -p $(SHOUT_BUILDDIR) diff --git a/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.2010.vcxproj b/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.2010.vcxproj index 9bcd25813e..9dbcd29cfc 100644 --- a/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.2010.vcxproj +++ b/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.2010.vcxproj @@ -166,6 +166,12 @@ {204fa0de-305d-4414-ae2e-f195a23f390d} false + + {d331904d-a00a-4694-a5a3-fcff64ab5dbe} + + + {b4b62169-5ad4-4559-8707-3d933ac5db39} + {202d7a4e-760d-4d0e-afa1-d7459ced30ff} false diff --git a/src/mod/xml_int/mod_xml_curl/mod_xml_curl.2010.vcxproj b/src/mod/xml_int/mod_xml_curl/mod_xml_curl.2010.vcxproj index 0d30ff3489..d5d3af69f0 100644 --- a/src/mod/xml_int/mod_xml_curl/mod_xml_curl.2010.vcxproj +++ b/src/mod/xml_int/mod_xml_curl/mod_xml_curl.2010.vcxproj @@ -136,6 +136,12 @@ {87ee9da4-de1e-4448-8324-183c98dca588} false + + {d331904d-a00a-4694-a5a3-fcff64ab5dbe} + + + {b4b62169-5ad4-4559-8707-3d933ac5db39} + {202d7a4e-760d-4d0e-afa1-d7459ced30ff} false diff --git a/src/switch_nat.c b/src/switch_nat.c index 3918cdbbf1..dd73cd8be7 100644 --- a/src/switch_nat.c +++ b/src/switch_nat.c @@ -304,7 +304,7 @@ static void *SWITCH_THREAD_FUNC switch_nat_multicast_runtime(switch_thread_t * t pos++; } if (!strncmp(pos, "ssdp:alive", 10)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "got UPnP keep alive packet: \n%s\n", buf); + /* switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "got UPnP keep alive packet: \n%s\n", buf); */ /* did pub ip change */ newip[0] = '\0'; if (get_upnp_pubaddr(newip) != SWITCH_STATUS_SUCCESS) { diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 5c966cde6e..56bc0e58ee 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -3097,9 +3097,14 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BREAK) || (bytes && bytes == 4 && *((int *) &rtp_session->recv_msg) == UINT_MAX)) { switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_BREAK); - do_2833(rtp_session, session); - bytes = 0; - return_cng_frame(); + + if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_NOBLOCK) || !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_USE_TIMER) || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL) || (bytes && bytes < 5) || (!bytes && poll_loop)) { + do_2833(rtp_session, session); + bytes = 0; + return_cng_frame(); + } else { + switch_clear_flag_locked(rtp_session, SWITCH_RTP_FLAG_FLUSH); + } } if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_FLUSH)) { diff --git a/w32/Library/FreeSwitchCore.2010.vcxproj b/w32/Library/FreeSwitchCore.2010.vcxproj index aa03a0b49a..7cb47d30ba 100644 --- a/w32/Library/FreeSwitchCore.2010.vcxproj +++ b/w32/Library/FreeSwitchCore.2010.vcxproj @@ -792,6 +792,12 @@ if not exist "$(OutDir)htdocs" xcopy "$(SolutionDir)htdocs\*.*" "$(OutDir)htdocs {87ee9da4-de1e-4448-8324-183c98dca588} + + {d331904d-a00a-4694-a5a3-fcff64ab5dbe} + + + {b4b62169-5ad4-4559-8707-3d933ac5db39} + {8d04b550-d240-4a44-8a18-35da3f7038d9} false