From owner-freebsd-gecko@FreeBSD.ORG Sun Mar 10 21:05:22 2013 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 0211E9AE for ; Sun, 10 Mar 2013 21:05:22 +0000 (UTC) (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: from trillian.chruetertee.ch (trillian.chruetertee.ch [217.150.245.56]) by mx1.freebsd.org (Postfix) with ESMTP id 588D6FC0 for ; Sun, 10 Mar 2013 21:05:21 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian [217.150.245.56]) by trillian.chruetertee.ch (8.14.4/8.14.3) with ESMTP id r2AL5DJU057455 for ; Sun, 10 Mar 2013 21:05:13 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: (from www@localhost) by trillian.chruetertee.ch (8.14.4/8.14.3/Submit) id r2AL58q0056555 for freebsd-gecko@freebsd.org; Sun, 10 Mar 2013 21:05:08 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Date: Sun, 10 Mar 2013 21:05:08 GMT Message-Id: <201303102105.r2AL58q0056555@trillian.chruetertee.ch> X-Authentication-Warning: trillian.chruetertee.ch: www set sender to svn-freebsd-gecko@chruetertee.ch using -f From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1206 - in trunk/www: firefox-nightly/files firefox/files seamonkey/files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: freebsd-gecko@freebsd.org List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Mar 2013 21:05:22 -0000 Author: jbeich Date: Sun Mar 10 21:05:08 2013 New Revision: 1206 Log: regen and integrate openbsd fixes into webrtc patch Submitted by: Landry Breuil (via bugzilla) Modified: trunk/www/firefox-nightly/files/patch-bug807492 trunk/www/firefox/files/patch-bug807492 trunk/www/seamonkey/files/patch-bug807492 Modified: trunk/www/firefox-nightly/files/patch-bug807492 ============================================================================== --- trunk/www/firefox-nightly/files/patch-bug807492 Sat Mar 9 18:03:44 2013 (r1205) +++ trunk/www/firefox-nightly/files/patch-bug807492 Sun Mar 10 21:05:08 2013 (r1206) @@ -2,7 +2,7 @@ index 9bd1efa..1095a01 100644 --- config/system-headers +++ config/system-headers -@@ -1066,8 +1066,10 @@ gst/app/gstappsink.h +@@ -1121,8 +1121,10 @@ gst/app/gstappsink.h gst/app/gstappsrc.h gst/video/video.h sys/msg.h @@ -17,7 +17,7 @@ index c167461..8346c11 100644 --- configure.in +++ configure.in -@@ -5208,17 +5219,17 @@ dnl --enable-webrtc to override. Can di +@@ -5243,17 +5243,17 @@ dnl Turn off webrtc for OS's we don't handle yet, but allow dnl --enable-webrtc to override. Can disable for everything in dnl the master list above. if test -n "$MOZ_WEBRTC"; then @@ -40,7 +40,7 @@ index 9bd1efa..1095a01 100644 --- js/src/config/system-headers +++ js/src/config/system-headers -@@ -1066,8 +1066,10 @@ gst/app/gstappsink.h +@@ -1121,8 +1121,10 @@ gst/app/gstappsink.h gst/app/gstappsrc.h gst/video/video.h sys/msg.h @@ -87,7 +87,7 @@ index c1d5bf4..2ecf2c7 100644 --- media/mtransport/test/Makefile.in +++ media/mtransport/test/Makefile.in -@@ -67,22 +67,24 @@ DEFINES += -D__Userspace_os_FreeBSD=1 +@@ -73,22 +73,24 @@ DEFINES += -D__Userspace_os_FreeBSD=1 else #default_fallback; probably doesn't work DEFINES += -D__Userspace_os_$(OS_TARGET)=1 @@ -117,7 +117,7 @@ index 0e1f8b4..9a4b995 100644 --- media/mtransport/third_party/nICEr/nicer.gyp +++ media/mtransport/third_party/nICEr/nicer.gyp -@@ -124,26 +124,36 @@ +@@ -126,26 +126,36 @@ 'R_DEFINED_UINT2=uint16_t', 'R_DEFINED_INT4=int32_t', 'R_DEFINED_UINT4=uint32_t', @@ -160,7 +160,27 @@ index b0b66b2..04fea94 100644 --- media/mtransport/third_party/nICEr/src/stun/addrs.c +++ media/mtransport/third_party/nICEr/src/stun/addrs.c -@@ -69,17 +69,17 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex +@@ -50,17 +50,19 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex + #else + #include + /* Work around an Android NDK < r8c bug */ + #undef __unused + #include + #endif + #include + #ifndef LINUX ++#if !defined(__OpenBSD__) && !defined(__NetBSD__) + #include ++#endif + #include + #include + #include + #else + #include + #endif + #include + +@@ -75,17 +77,17 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex #include #endif /* UNIX */ @@ -179,7 +199,7 @@ * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright -@@ -675,17 +675,17 @@ nr_stun_remove_duplicate_addrs(nr_transport_addr addrs[], int remove_loopback, i +@@ -685,17 +687,17 @@ nr_stun_remove_duplicate_addrs(nr_transport_addr addrs[], int remove_loopback, i } int @@ -202,12 +222,18 @@ index a3c51f9..eb65ac8 100644 --- media/mtransport/third_party/nICEr/src/stun/stun.h +++ media/mtransport/third_party/nICEr/src/stun/stun.h -@@ -40,17 +40,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +@@ -36,21 +36,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + #ifdef WIN32 + #include + #else #include #include #include #ifndef LINUX ++#if !defined(__OpenBSD__) && !defined(__NetBSD__) #include ++#endif #include #include #endif @@ -328,7 +354,7 @@ index 3cc8e1c..74016c6 100644 --- media/mtransport/third_party/nrappkit/nrappkit.gyp +++ media/mtransport/third_party/nrappkit/nrappkit.gyp -@@ -142,26 +142,36 @@ +@@ -142,26 +142,35 @@ 'R_DEFINED_UINT2=uint16_t', 'R_DEFINED_INT4=int32_t', 'R_DEFINED_UINT4=uint32_t', @@ -347,7 +373,6 @@ + [ 'os_bsd == 1', { + 'defines' : [ + 'BSD', -+ 'USE_OWN_INET_NTOP', + ], + }], + [ 'OS == "mac" or os_bsd == 1', { @@ -367,19 +392,63 @@ 'NEW_STDIO' 'RETSIGTYPE=void', 'TIME_WITH_SYS_TIME_H=1', +diff --git media/mtransport/third_party/nrappkit/src/log/r_log.c media/mtransport/third_party/nrappkit/src/log/r_log.c +index efb7ef2..aebf578 100644 +--- media/mtransport/third_party/nrappkit/src/log/r_log.c ++++ media/mtransport/third_party/nrappkit/src/log/r_log.c +@@ -43,16 +43,17 @@ static char *RCSSTRING __UNUSED__ ="$Id: r_log.c,v 1.10 2008/11/25 22:25:18 adam + #ifdef LINUX + #define _BSD_SOURCE + #endif + + #include "r_log.h" + #include "hex.h" + + #include ++#include + #ifndef _MSC_VER + #include + #include + #endif + #include + #include + + diff --git media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h index bcb1ec0..bb73591 100644 --- media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h +++ media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h -@@ -33,5 +33,5 @@ - #define _SYS_QUEUE_H_ - +@@ -33,7 +33,7 @@ + #ifndef _SYS_QUEUE_H_ + #define _SYS_QUEUE_H_ + -#ifndef DARWIN -+#if !defined(BSD) && !defined(DARWIN) ++#if !defined(__FreeBSD__) && !defined(DARWIN) #include #define __offsetof offsetof #endif - +diff --git media/mtransport/third_party/nrappkit/src/util/util.c media/mtransport/third_party/nrappkit/src/util/util.c +index a7d4ff1..ff11a60 100644 +--- media/mtransport/third_party/nrappkit/src/util/util.c ++++ media/mtransport/third_party/nrappkit/src/util/util.c +@@ -40,16 +40,17 @@ + static char *RCSSTRING __UNUSED__ ="$Id: util.c,v 1.5 2007/11/21 00:09:13 adamcain Exp $"; + + #ifndef WIN32 + #include + #include + #include + #endif + #include ++#include + #include + #include + #ifdef OPENSSL + #include + #endif + #include "nr_common.h" + #include "r_common.h" + #include "registry.h" diff --git media/webrtc/signaling/signaling.gyp media/webrtc/signaling/signaling.gyp index 2a91e3d..31de641 100644 --- media/webrtc/signaling/signaling.gyp @@ -493,7 +562,7 @@ index a30e330..cfbd8a3 100644 --- media/webrtc/signaling/test/Makefile.in +++ media/webrtc/signaling/test/Makefile.in -@@ -65,17 +65,17 @@ endif +@@ -81,17 +81,17 @@ endif ifeq (qt,$(MOZ_WIDGET_TOOLKIT)) LIBS += \ $(XLIBS) \ @@ -603,6 +672,48 @@ +#endif // defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC) +diff --git media/webrtc/trunk/webrtc/modules/audio_device/linux/latebindingsymboltable_linux.cc media/webrtc/trunk/webrtc/modules/audio_device/linux/latebindingsymboltable_linux.cc +index 8f3c7c8..7b1cc3f 100644 +--- media/webrtc/trunk/webrtc/modules/audio_device/linux/latebindingsymboltable_linux.cc ++++ media/webrtc/trunk/webrtc/modules/audio_device/linux/latebindingsymboltable_linux.cc +@@ -33,17 +33,17 @@ + + // TODO(grunell): Either put inside webrtc namespace or use webrtc:: instead. + using namespace webrtc; + + namespace webrtc_adm_linux { + + inline static const char *GetDllError() { + #ifdef WEBRTC_LINUX +- char *err = dlerror(); ++ const char *err = dlerror(); + if (err) { + return err; + } else { + return "No error"; + } + #else + #error Not implemented + #endif +@@ -73,17 +73,17 @@ void InternalUnloadDll(DllHandle handle) { + #endif + } + + static bool LoadSymbol(DllHandle handle, + const char *symbol_name, + void **symbol) { + #ifdef WEBRTC_LINUX + *symbol = dlsym(handle, symbol_name); +- char *err = dlerror(); ++ const char *err = dlerror(); + if (err) { + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, -1, + "Error loading symbol %s : %d", symbol_name, err); + return false; + } else if (!*symbol) { + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, -1, + "Symbol %s is NULL", symbol_name); + return false; diff --git media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc index bdad224..39e1132 100644 --- media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc @@ -705,9 +816,9 @@ WebRtc_UWord32 GetCurrentRTP(RtpRtcpClock* clock, WebRtc_UWord32 freq) { const bool use_global_clock = (clock == NULL); -@@ -313,17 +313,17 @@ bool OldTimestamp(uint32_t newTimestamp, - * Misc utility routines - */ +@@ -325,17 +325,17 @@ WebRtc_UWord16 GetPayloadDataLength(const WebRtcRTPHeader* rtp_header, + return static_cast(length); + } #if defined(_WIN32) bool StringCompare(const char* str1, const char* str2, @@ -1128,7 +1239,7 @@ index 0cd85d0..45591be 100644 --- media/webrtc/trunk/webrtc/system_wrappers/interface/tick_util.h +++ media/webrtc/trunk/webrtc/system_wrappers/interface/tick_util.h -@@ -189,17 +189,17 @@ inline WebRtc_Word64 TickTime::QueryOsFo +@@ -189,17 +189,17 @@ inline WebRtc_Word64 TickTime::QueryOsForTicks() { // 0x0fffffff ~3.1 days, the code will not take that long to execute // so it must have been a wrap around. if (old > 0xf0000000 && now < 0x0fffffff) { @@ -1147,7 +1258,7 @@ clock_gettime(CLOCK_MONOTONIC, &ts); #endif result.ticks_ = 1000000000LL * static_cast(ts.tv_sec) + -@@ -236,34 +236,34 @@ inline WebRtc_Word64 TickTime::Milliseco +@@ -236,34 +236,34 @@ inline WebRtc_Word64 TickTime::MillisecondTimestamp() { #if _WIN32 #ifdef USE_QUERY_PERFORMANCE_COUNTER LARGE_INTEGER qpfreq; @@ -1184,7 +1295,7 @@ inline WebRtc_Word64 TickTime::Ticks() const { return ticks_; -@@ -273,33 +273,33 @@ inline WebRtc_Word64 TickTime::Milliseco +@@ -273,33 +273,33 @@ inline WebRtc_Word64 TickTime::MillisecondsToTicks(const WebRtc_Word64 ms) { #if _WIN32 #ifdef USE_QUERY_PERFORMANCE_COUNTER LARGE_INTEGER qpfreq; @@ -1220,7 +1331,7 @@ inline TickTime& TickTime::operator+=(const WebRtc_Word64& ticks) { ticks_ += ticks; -@@ -318,17 +318,17 @@ inline WebRtc_Word64 TickInterval::Milli +@@ -318,17 +318,17 @@ inline WebRtc_Word64 TickInterval::Milliseconds() const { #ifdef USE_QUERY_PERFORMANCE_COUNTER LARGE_INTEGER qpfreq; QueryPerformanceFrequency(&qpfreq); @@ -1239,7 +1350,7 @@ #endif } -@@ -337,17 +337,17 @@ inline WebRtc_Word64 TickInterval::Micro +@@ -337,17 +337,17 @@ inline WebRtc_Word64 TickInterval::Microseconds() const { #ifdef USE_QUERY_PERFORMANCE_COUNTER LARGE_INTEGER qpfreq; QueryPerformanceFrequency(&qpfreq); @@ -1326,7 +1437,7 @@ index 48835ab..16c6033 100644 --- media/webrtc/trunk/webrtc/system_wrappers/source/condition_variable_posix.cc +++ media/webrtc/trunk/webrtc/system_wrappers/source/condition_variable_posix.cc -@@ -74,17 +74,17 @@ void ConditionVariablePosix::SleepCS(Cri +@@ -74,17 +74,17 @@ void ConditionVariablePosix::SleepCS(CriticalSectionWrapper& crit_sect) { &crit_sect); pthread_cond_wait(&cond_, &cs->mutex_); } @@ -1413,7 +1524,7 @@ WebRtc_UWord32 CpuInfo::number_of_cores_ = 0; -@@ -36,29 +38,38 @@ WebRtc_UWord32 CpuInfo::DetectNumberOfCo +@@ -36,29 +38,38 @@ WebRtc_UWord32 CpuInfo::DetectNumberOfCores() { WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, "Available number of cores:%d", number_of_cores_); @@ -1486,7 +1597,7 @@ int ConvertToSystemPriority(ThreadPriority priority, int min_prio, int max_prio) { -@@ -136,16 +147,28 @@ ThreadPosix::ThreadPosix(ThreadRunFuncti +@@ -136,16 +147,30 @@ ThreadPosix::ThreadPosix(ThreadRunFunction func, ThreadObj obj, } } @@ -1499,6 +1610,8 @@ + return _lwp_self(); +#elif defined(__DragonFly__) + return lwp_gettid(); ++#elif defined(__OpenBSD__) ++ return reinterpret_cast (pthread_self()); +#elif defined(__FreeBSD__) +# if __FreeBSD_version > 900030 + return pthread_getthreadid_np(); @@ -1515,7 +1628,7 @@ int ThreadPosix::Construct() { int result = 0; #if !defined(WEBRTC_ANDROID) -@@ -190,17 +196,17 @@ int ThreadPosix::Construct() { +@@ -167,17 +192,17 @@ int ThreadPosix::Construct() { } ThreadPosix::~ThreadPosix() { @@ -1534,7 +1647,7 @@ } int result = pthread_attr_setdetachstate(&attr_, PTHREAD_CREATE_DETACHED); // Set the stack stack size to 1M. -@@ -232,31 +255,39 @@ bool ThreadPosix::Start(unsigned int& th +@@ -232,31 +257,39 @@ bool ThreadPosix::Start(unsigned int& thread_id) WEBRTC_TRACE(kTraceError, kTraceUtility, -1, "unable to set thread priority"); } @@ -1576,7 +1689,7 @@ #else // "Normal" Linux. const int result = sched_setaffinity(pid_, -@@ -320,16 +351,20 @@ void ThreadPosix::Run() { +@@ -320,16 +353,20 @@ void ThreadPosix::Run() { pid_ = GetThreadId(); #endif // The event the Start() is waiting for. @@ -1597,6 +1710,29 @@ "Thread without name started"); } bool alive = true; +diff --git media/webrtc/trunk/webrtc/system_wrappers/source/trace_posix.cc media/webrtc/trunk/webrtc/system_wrappers/source/trace_posix.cc +index 2c7e59a..6f23fcb 100644 +--- media/webrtc/trunk/webrtc/system_wrappers/source/trace_posix.cc ++++ media/webrtc/trunk/webrtc/system_wrappers/source/trace_posix.cc +@@ -49,17 +49,17 @@ TracePosix::~TracePosix() { + WebRtc_Word32 TracePosix::AddTime(char* trace_message, + const TraceLevel level) const { + struct timeval system_time_high_res; + if (gettimeofday(&system_time_high_res, 0) == -1) { + return -1; + } + struct tm buffer; + const struct tm* system_time = +- localtime_r(&system_time_high_res.tv_sec, &buffer); ++ localtime_r((const time_t *)(&system_time_high_res.tv_sec), &buffer); + + const WebRtc_UWord32 ms_time = system_time_high_res.tv_usec / 1000; + WebRtc_UWord32 prev_tickCount = 0; + if (level == kTraceApiCall) { + prev_tickCount = prev_tick_count_; + prev_tick_count_ = ms_time; + } else { + prev_tickCount = prev_api_tick_count_; diff --git media/webrtc/trunk/webrtc/typedefs.h media/webrtc/trunk/webrtc/typedefs.h index 6334490..852ebaa 100644 --- media/webrtc/trunk/webrtc/typedefs.h @@ -1790,7 +1926,7 @@ generator_default_variables = { } -@@ -111,30 +112,44 @@ endif +@@ -107,30 +108,44 @@ endif def ensure_directory_exists(path): dir = os.path.dirname(path) Modified: trunk/www/firefox/files/patch-bug807492 ============================================================================== --- trunk/www/firefox/files/patch-bug807492 Sat Mar 9 18:03:44 2013 (r1205) +++ trunk/www/firefox/files/patch-bug807492 Sun Mar 10 21:05:08 2013 (r1206) @@ -2,7 +2,7 @@ index 9bd1efa..1095a01 100644 --- config/system-headers +++ config/system-headers -@@ -1066,8 +1066,10 @@ gst/app/gstappsink.h +@@ -1121,8 +1121,10 @@ gst/app/gstappsink.h gst/app/gstappsrc.h gst/video/video.h sys/msg.h @@ -45,7 +45,7 @@ # -Werror=return-type - catches missing returns, zero false positives # -Wtype-limits - catches overflow bugs, few false positives # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives -@@ -5255,17 +5266,17 @@ dnl Turn off webrtc for OS's we don't ha +@@ -5259,17 +5270,17 @@ dnl Turn off webrtc for OS's we don't handle yet, but allow dnl --enable-webrtc to override. Can disable for everything in dnl the master list above. if test -n "$MOZ_WEBRTC"; then @@ -64,7 +64,7 @@ ;; esac fi -@@ -9061,16 +9072,21 @@ elif test "${OS_TARGET}" = "Android"; th +@@ -9065,16 +9076,21 @@ elif test "${OS_TARGET}" = "Android"; then EXTRA_GYP_DEFINES="-D gtest_target_type=executable -D android_toolchain=${android_toolchain} -G os=android " if test -n "$ARM_ARCH" && test "$ARM_ARCH" -lt 7; then EXTRA_GYP_DEFINES+=" -D armv7=0 " @@ -90,7 +90,7 @@ index 9bd1efa..1095a01 100644 --- js/src/config/system-headers +++ js/src/config/system-headers -@@ -1066,8 +1066,10 @@ gst/app/gstappsink.h +@@ -1121,8 +1121,10 @@ gst/app/gstappsink.h gst/app/gstappsrc.h gst/video/video.h sys/msg.h @@ -210,7 +210,27 @@ index b0b66b2..04fea94 100644 --- media/mtransport/third_party/nICEr/src/stun/addrs.c +++ media/mtransport/third_party/nICEr/src/stun/addrs.c -@@ -69,17 +69,17 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex +@@ -50,17 +50,19 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex + #else + #include + /* Work around an Android NDK < r8c bug */ + #undef __unused + #include + #endif + #include + #ifndef LINUX ++#if !defined(__OpenBSD__) && !defined(__NetBSD__) + #include ++#endif + #include + #include + #include + #else + #include + #endif + #include + +@@ -75,17 +77,17 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex #include #endif /* UNIX */ @@ -229,7 +249,7 @@ * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright -@@ -675,17 +675,17 @@ nr_stun_remove_duplicate_addrs(nr_transport_addr addrs[], int remove_loopback, i +@@ -685,17 +687,17 @@ nr_stun_remove_duplicate_addrs(nr_transport_addr addrs[], int remove_loopback, i } int @@ -252,12 +272,18 @@ index a3c51f9..eb65ac8 100644 --- media/mtransport/third_party/nICEr/src/stun/stun.h +++ media/mtransport/third_party/nICEr/src/stun/stun.h -@@ -40,17 +40,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +@@ -36,21 +36,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + #ifdef WIN32 + #include + #else #include #include #include #ifndef LINUX ++#if !defined(__OpenBSD__) && !defined(__NetBSD__) #include ++#endif #include #include #endif @@ -416,6 +442,28 @@ 'NEW_STDIO' 'RETSIGTYPE=void', 'TIME_WITH_SYS_TIME_H=1', +diff --git media/mtransport/third_party/nrappkit/src/log/r_log.c media/mtransport/third_party/nrappkit/src/log/r_log.c +index b25d5c2..b207b8c 100644 +--- media/mtransport/third_party/nrappkit/src/log/r_log.c ++++ media/mtransport/third_party/nrappkit/src/log/r_log.c +@@ -43,16 +43,17 @@ static char *RCSSTRING __UNUSED__ ="$Id: r_log.c,v 1.10 2008/11/25 22:25:18 adam + #ifdef LINUX + #define _BSD_SOURCE + #endif + + #include "r_log.h" + #include "hex.h" + + #include ++#include + #ifndef _MSC_VER + #include + #include + #endif + #include + #include + + diff --git media/mtransport/third_party/nrappkit/src/port/darwin/include/csi_platform.h media/mtransport/third_party/nrappkit/src/port/darwin/include/csi_platform.h index 15452e3..2c9651a 100644 --- media/mtransport/third_party/nrappkit/src/port/darwin/include/csi_platform.h @@ -446,20 +494,20 @@ index bcb1ec0..bb73591 100644 --- media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h +++ media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h -@@ -33,5 +33,5 @@ - #define _SYS_QUEUE_H_ - +@@ -33,7 +33,7 @@ + #ifndef _SYS_QUEUE_H_ + #define _SYS_QUEUE_H_ + -#ifndef DARWIN -+#if !defined(BSD) && !defined(DARWIN) ++#if !defined(__FreeBSD__) && !defined(DARWIN) #include #define __offsetof offsetof #endif - diff --git media/mtransport/third_party/nrappkit/src/util/util.c media/mtransport/third_party/nrappkit/src/util/util.c index 3aced8b..be020bb 100644 --- media/mtransport/third_party/nrappkit/src/util/util.c +++ media/mtransport/third_party/nrappkit/src/util/util.c -@@ -36,16 +36,19 @@ +@@ -36,20 +36,24 @@ ekr@rtfm.com Wed Dec 26 17:19:36 2001 */ @@ -475,11 +523,16 @@ #include #endif #include ++#include #include #include #ifdef OPENSSL #include -@@ -431,17 +434,17 @@ int nr_reg_uint8_fetch_and_check(NR_registry key, UINT8 min, UINT8 max, int log_ + #endif + #include "nr_common.h" + #include "r_common.h" + #include "registry.h" +@@ -431,17 +435,17 @@ int nr_reg_uint8_fetch_and_check(NR_registry key, UINT8 min, UINT8 max, int log_ abort: if(die && _status){ r_log(log_fac,LOG_CRIT,"Exiting due to invalid configuration (key '%s')",key); @@ -630,7 +683,7 @@ ifeq ($(OS_TARGET),Android) LIBS += \ -@@ -65,17 +65,17 @@ endif +@@ -76,17 +76,17 @@ endif ifeq (qt,$(MOZ_WIDGET_TOOLKIT)) LIBS += \ $(XLIBS) \ @@ -775,7 +828,7 @@ '..','../..', ], 'defines': [ -@@ -174,16 +181,28 @@ +@@ -176,16 +181,28 @@ 'defines': [ 'WEBRTC_LINUX', 'WEBRTC_THREAD_RR', @@ -840,6 +893,48 @@ +#endif // defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC) +diff --git media/webrtc/trunk/src/modules/audio_device/main/source/linux/latebindingsymboltable_linux.cc media/webrtc/trunk/src/modules/audio_device/main/source/linux/latebindingsymboltable_linux.cc +index 8f3c7c8..7b1cc3f 100644 +--- media/webrtc/trunk/src/modules/audio_device/main/source/linux/latebindingsymboltable_linux.cc ++++ media/webrtc/trunk/src/modules/audio_device/main/source/linux/latebindingsymboltable_linux.cc +@@ -33,17 +33,17 @@ + + // TODO(grunell): Either put inside webrtc namespace or use webrtc:: instead. + using namespace webrtc; + + namespace webrtc_adm_linux { + + inline static const char *GetDllError() { + #ifdef WEBRTC_LINUX +- char *err = dlerror(); ++ const char *err = dlerror(); + if (err) { + return err; + } else { + return "No error"; + } + #else + #error Not implemented + #endif +@@ -73,17 +73,17 @@ void InternalUnloadDll(DllHandle handle) { + #endif + } + + static bool LoadSymbol(DllHandle handle, + const char *symbol_name, + void **symbol) { + #ifdef WEBRTC_LINUX + *symbol = dlsym(handle, symbol_name); +- char *err = dlerror(); ++ const char *err = dlerror(); + if (err) { + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, -1, + "Error loading symbol %s : %d", symbol_name, err); + return false; + } else if (!*symbol) { + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, -1, + "Symbol %s is NULL", symbol_name); + return false; diff --git media/webrtc/trunk/src/modules/rtp_rtcp/source/forward_error_correction.cc media/webrtc/trunk/src/modules/rtp_rtcp/source/forward_error_correction.cc index bdad224..39e1132 100644 --- media/webrtc/trunk/src/modules/rtp_rtcp/source/forward_error_correction.cc @@ -1280,7 +1375,7 @@ index 0a9765e..8d4bbf4 100644 --- media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi +++ media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi -@@ -50,17 +50,17 @@ +@@ -55,17 +55,17 @@ ['include_internal_video_capture==0', { 'sources': [ 'External/device_info_external.cc', @@ -1299,7 +1394,7 @@ 'Linux/video_capture_linux.h', 'Linux/device_info_linux.cc', 'Linux/video_capture_linux.cc', -@@ -157,31 +157,35 @@ +@@ -162,31 +162,35 @@ '../interface', ], 'sources': [ @@ -1737,7 +1832,7 @@ namespace webrtc { extern "C" -@@ -116,16 +125,28 @@ ThreadPosix::ThreadPosix(ThreadRunFunction func, ThreadObj obj, +@@ -116,16 +125,30 @@ ThreadPosix::ThreadPosix(ThreadRunFunction func, ThreadObj obj, } } @@ -1750,6 +1845,8 @@ + return _lwp_self(); +#elif defined(__DragonFly__) + return lwp_gettid(); ++#elif defined(__OpenBSD__) ++ return reinterpret_cast (pthread_self()); +#elif defined(__FreeBSD__) +# if __FreeBSD_version > 900030 + return pthread_getthreadid_np(); @@ -1766,7 +1863,7 @@ int ThreadPosix::Construct() { int result = 0; -@@ -154,16 +175,17 @@ ThreadPosix::~ThreadPosix() +@@ -154,16 +177,17 @@ ThreadPosix::~ThreadPosix() { pthread_attr_destroy(&_attr); delete _event; @@ -1784,7 +1881,7 @@ #endif { if (!_runFunction) -@@ -229,31 +251,39 @@ bool ThreadPosix::Start(unsigned int& /*threadID*/) +@@ -229,31 +253,39 @@ bool ThreadPosix::Start(unsigned int& /*threadID*/) { return false; } @@ -1826,7 +1923,7 @@ #else // "Normal" Linux. const int result = sched_setaffinity(_pid, -@@ -340,16 +370,20 @@ void ThreadPosix::Run() +@@ -340,16 +372,20 @@ void ThreadPosix::Run() #endif // The event the Start() is waiting for. _event->Set(); @@ -1847,6 +1944,29 @@ WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, "Thread without name started"); } +diff --git media/webrtc/trunk/src/system_wrappers/source/trace_posix.cc media/webrtc/trunk/src/system_wrappers/source/trace_posix.cc +index f3a5306..d9c2810 100644 +--- media/webrtc/trunk/src/system_wrappers/source/trace_posix.cc ++++ media/webrtc/trunk/src/system_wrappers/source/trace_posix.cc +@@ -52,17 +52,17 @@ WebRtc_Word32 TracePosix::AddTime(char* traceMessage, + { + struct timeval systemTimeHighRes; + if (gettimeofday(&systemTimeHighRes, 0) == -1) + { + return -1; + } + struct tm buffer; + const struct tm* systemTime = +- localtime_r(&systemTimeHighRes.tv_sec, &buffer); ++ localtime_r((const time_t *)(&systemTimeHighRes.tv_sec), &buffer); + + const WebRtc_UWord32 ms_time = systemTimeHighRes.tv_usec / 1000; + WebRtc_UWord32 prevTickCount = 0; + if (level == kTraceApiCall) + { + prevTickCount = _prevTickCount; + _prevTickCount = ms_time; + } else { diff --git media/webrtc/trunk/src/video_engine/vie_defines.h media/webrtc/trunk/src/video_engine/vie_defines.h index 2cc18cc7..2c042a0 100644 --- media/webrtc/trunk/src/video_engine/vie_defines.h @@ -1935,7 +2055,7 @@ index 7d4c729..4104719 100644 --- media/webrtc/trunk/src/voice_engine/voice_engine_defines.h +++ media/webrtc/trunk/src/voice_engine/voice_engine_defines.h -@@ -434,41 +434,44 @@ namespace webrtc +@@ -437,41 +437,44 @@ namespace webrtc #else #define ANDROID_NOT_SUPPORTED(stat) @@ -1981,7 +2101,7 @@ #define TRUE 1 #define SOCKADDR_IN struct sockaddr_in #define UINT unsigned int -@@ -576,13 +579,13 @@ namespace webrtc +@@ -579,13 +582,13 @@ namespace webrtc // Defines // ---------------------------------------------------------------------------- Modified: trunk/www/seamonkey/files/patch-bug807492 ============================================================================== --- trunk/www/seamonkey/files/patch-bug807492 Sat Mar 9 18:03:44 2013 (r1205) +++ trunk/www/seamonkey/files/patch-bug807492 Sun Mar 10 21:05:08 2013 (r1206) @@ -2,7 +2,7 @@ index 9bd1efa..1095a01 100644 --- mozilla/config/system-headers +++ mozilla/config/system-headers -@@ -1066,8 +1066,10 @@ gst/app/gstappsink.h +@@ -1121,8 +1121,10 @@ gst/app/gstappsink.h gst/app/gstappsrc.h gst/video/video.h sys/msg.h @@ -45,7 +45,7 @@ # -Werror=return-type - catches missing returns, zero false positives # -Wtype-limits - catches overflow bugs, few false positives # -Wempty-body - catches bugs, e.g. "if (c); foo();", few false positives -@@ -5255,17 +5266,17 @@ dnl Turn off webrtc for OS's we don't ha +@@ -5259,17 +5270,17 @@ dnl Turn off webrtc for OS's we don't handle yet, but allow dnl --enable-webrtc to override. Can disable for everything in dnl the master list above. if test -n "$MOZ_WEBRTC"; then @@ -64,7 +64,7 @@ ;; esac fi -@@ -9061,16 +9072,21 @@ elif test "${OS_TARGET}" = "Android"; th +@@ -9065,16 +9076,21 @@ elif test "${OS_TARGET}" = "Android"; then EXTRA_GYP_DEFINES="-D gtest_target_type=executable -D android_toolchain=${android_toolchain} -G os=android " if test -n "$ARM_ARCH" && test "$ARM_ARCH" -lt 7; then EXTRA_GYP_DEFINES+=" -D armv7=0 " @@ -90,7 +90,7 @@ index 9bd1efa..1095a01 100644 --- mozilla/js/src/config/system-headers +++ mozilla/js/src/config/system-headers -@@ -1066,8 +1066,10 @@ gst/app/gstappsink.h +@@ -1121,8 +1121,10 @@ gst/app/gstappsink.h gst/app/gstappsrc.h gst/video/video.h sys/msg.h @@ -210,7 +210,27 @@ index b0b66b2..04fea94 100644 --- mozilla/media/mtransport/third_party/nICEr/src/stun/addrs.c +++ mozilla/media/mtransport/third_party/nICEr/src/stun/addrs.c -@@ -69,17 +69,17 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex +@@ -50,17 +50,19 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex + #else + #include + /* Work around an Android NDK < r8c bug */ + #undef __unused + #include + #endif + #include + #ifndef LINUX ++#if !defined(__OpenBSD__) && !defined(__NetBSD__) + #include ++#endif + #include + #include + #include + #else + #include + #endif + #include + +@@ -75,17 +77,17 @@ static char *RCSSTRING __UNUSED__="$Id: addrs.c,v 1.2 2008/04/28 18:21:30 ekr Ex #include #endif /* UNIX */ @@ -229,7 +249,7 @@ * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright -@@ -675,17 +675,17 @@ nr_stun_remove_duplicate_addrs(nr_transport_addr addrs[], int remove_loopback, i +@@ -685,17 +687,17 @@ nr_stun_remove_duplicate_addrs(nr_transport_addr addrs[], int remove_loopback, i } int @@ -252,12 +272,18 @@ index a3c51f9..eb65ac8 100644 --- mozilla/media/mtransport/third_party/nICEr/src/stun/stun.h +++ mozilla/media/mtransport/third_party/nICEr/src/stun/stun.h -@@ -40,17 +40,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +@@ -36,21 +36,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + #ifdef WIN32 + #include + #else #include #include #include #ifndef LINUX ++#if !defined(__OpenBSD__) && !defined(__NetBSD__) #include ++#endif #include #include #endif @@ -416,6 +442,28 @@ 'NEW_STDIO' 'RETSIGTYPE=void', 'TIME_WITH_SYS_TIME_H=1', +diff --git media/mtransport/third_party/nrappkit/src/log/r_log.c media/mtransport/third_party/nrappkit/src/log/r_log.c +index b25d5c2..b207b8c 100644 +--- mozilla/media/mtransport/third_party/nrappkit/src/log/r_log.c ++++ mozilla/media/mtransport/third_party/nrappkit/src/log/r_log.c +@@ -43,16 +43,17 @@ static char *RCSSTRING __UNUSED__ ="$Id: r_log.c,v 1.10 2008/11/25 22:25:18 adam + #ifdef LINUX + #define _BSD_SOURCE + #endif + + #include "r_log.h" + #include "hex.h" + + #include ++#include + #ifndef _MSC_VER + #include + #include + #endif + #include + #include + + diff --git media/mtransport/third_party/nrappkit/src/port/darwin/include/csi_platform.h media/mtransport/third_party/nrappkit/src/port/darwin/include/csi_platform.h index 15452e3..2c9651a 100644 --- mozilla/media/mtransport/third_party/nrappkit/src/port/darwin/include/csi_platform.h @@ -446,20 +494,20 @@ index bcb1ec0..bb73591 100644 --- mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h +++ mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h -@@ -33,5 +33,5 @@ - #define _SYS_QUEUE_H_ - +@@ -33,7 +33,7 @@ + #ifndef _SYS_QUEUE_H_ + #define _SYS_QUEUE_H_ + -#ifndef DARWIN -+#if !defined(BSD) && !defined(DARWIN) ++#if !defined(__FreeBSD__) && !defined(DARWIN) #include #define __offsetof offsetof #endif - diff --git media/mtransport/third_party/nrappkit/src/util/util.c media/mtransport/third_party/nrappkit/src/util/util.c index 3aced8b..be020bb 100644 --- mozilla/media/mtransport/third_party/nrappkit/src/util/util.c +++ mozilla/media/mtransport/third_party/nrappkit/src/util/util.c -@@ -36,16 +36,19 @@ +@@ -36,20 +36,24 @@ ekr@rtfm.com Wed Dec 26 17:19:36 2001 */ @@ -475,11 +523,16 @@ #include #endif #include ++#include #include #include #ifdef OPENSSL #include -@@ -431,17 +434,17 @@ int nr_reg_uint8_fetch_and_check(NR_registry key, UINT8 min, UINT8 max, int log_ + #endif + #include "nr_common.h" + #include "r_common.h" + #include "registry.h" +@@ -431,17 +435,17 @@ int nr_reg_uint8_fetch_and_check(NR_registry key, UINT8 min, UINT8 max, int log_ abort: if(die && _status){ r_log(log_fac,LOG_CRIT,"Exiting due to invalid configuration (key '%s')",key); @@ -630,7 +683,7 @@ ifeq ($(OS_TARGET),Android) LIBS += \ -@@ -65,17 +65,17 @@ endif +@@ -76,17 +76,17 @@ endif ifeq (qt,$(MOZ_WIDGET_TOOLKIT)) LIBS += \ $(XLIBS) \ @@ -775,7 +828,7 @@ '..','../..', ], 'defines': [ -@@ -174,16 +181,28 @@ +@@ -176,16 +181,28 @@ 'defines': [ 'WEBRTC_LINUX', 'WEBRTC_THREAD_RR', @@ -840,6 +893,48 @@ +#endif // defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC) +diff --git media/webrtc/trunk/src/modules/audio_device/main/source/linux/latebindingsymboltable_linux.cc media/webrtc/trunk/src/modules/audio_device/main/source/linux/latebindingsymboltable_linux.cc +index 8f3c7c8..7b1cc3f 100644 +--- mozilla/media/webrtc/trunk/src/modules/audio_device/main/source/linux/latebindingsymboltable_linux.cc ++++ mozilla/media/webrtc/trunk/src/modules/audio_device/main/source/linux/latebindingsymboltable_linux.cc +@@ -33,17 +33,17 @@ + + // TODO(grunell): Either put inside webrtc namespace or use webrtc:: instead. + using namespace webrtc; + + namespace webrtc_adm_linux { + + inline static const char *GetDllError() { + #ifdef WEBRTC_LINUX +- char *err = dlerror(); ++ const char *err = dlerror(); + if (err) { + return err; + } else { + return "No error"; + } + #else + #error Not implemented + #endif +@@ -73,17 +73,17 @@ void InternalUnloadDll(DllHandle handle) { + #endif + } + + static bool LoadSymbol(DllHandle handle, + const char *symbol_name, + void **symbol) { + #ifdef WEBRTC_LINUX + *symbol = dlsym(handle, symbol_name); +- char *err = dlerror(); ++ const char *err = dlerror(); + if (err) { + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, -1, + "Error loading symbol %s : %d", symbol_name, err); + return false; + } else if (!*symbol) { + WEBRTC_TRACE(kTraceError, kTraceAudioDevice, -1, + "Symbol %s is NULL", symbol_name); + return false; diff --git media/webrtc/trunk/src/modules/rtp_rtcp/source/forward_error_correction.cc media/webrtc/trunk/src/modules/rtp_rtcp/source/forward_error_correction.cc index bdad224..39e1132 100644 --- mozilla/media/webrtc/trunk/src/modules/rtp_rtcp/source/forward_error_correction.cc @@ -1280,7 +1375,7 @@ index 0a9765e..8d4bbf4 100644 --- mozilla/media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi +++ mozilla/media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi -@@ -50,17 +50,17 @@ +@@ -55,17 +55,17 @@ ['include_internal_video_capture==0', { 'sources': [ 'External/device_info_external.cc', @@ -1299,7 +1394,7 @@ 'Linux/video_capture_linux.h', 'Linux/device_info_linux.cc', 'Linux/video_capture_linux.cc', -@@ -157,31 +157,35 @@ +@@ -162,31 +162,35 @@ '../interface', ], 'sources': [ @@ -1737,7 +1832,7 @@ namespace webrtc { extern "C" -@@ -116,16 +125,28 @@ ThreadPosix::ThreadPosix(ThreadRunFunction func, ThreadObj obj, +@@ -116,16 +125,30 @@ ThreadPosix::ThreadPosix(ThreadRunFunction func, ThreadObj obj, } } @@ -1750,6 +1845,8 @@ + return _lwp_self(); +#elif defined(__DragonFly__) + return lwp_gettid(); ++#elif defined(__OpenBSD__) ++ return reinterpret_cast (pthread_self()); +#elif defined(__FreeBSD__) +# if __FreeBSD_version > 900030 + return pthread_getthreadid_np(); @@ -1766,7 +1863,7 @@ int ThreadPosix::Construct() { int result = 0; -@@ -154,16 +175,17 @@ ThreadPosix::~ThreadPosix() +@@ -154,16 +177,17 @@ ThreadPosix::~ThreadPosix() { pthread_attr_destroy(&_attr); delete _event; @@ -1784,7 +1881,7 @@ #endif { if (!_runFunction) -@@ -229,31 +251,39 @@ bool ThreadPosix::Start(unsigned int& /*threadID*/) +@@ -229,31 +253,39 @@ bool ThreadPosix::Start(unsigned int& /*threadID*/) { return false; } @@ -1826,7 +1923,7 @@ #else // "Normal" Linux. const int result = sched_setaffinity(_pid, -@@ -340,16 +370,20 @@ void ThreadPosix::Run() +@@ -340,16 +372,20 @@ void ThreadPosix::Run() #endif // The event the Start() is waiting for. _event->Set(); @@ -1847,6 +1944,29 @@ WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1, "Thread without name started"); } +diff --git media/webrtc/trunk/src/system_wrappers/source/trace_posix.cc media/webrtc/trunk/src/system_wrappers/source/trace_posix.cc +index f3a5306..d9c2810 100644 +--- mozilla/media/webrtc/trunk/src/system_wrappers/source/trace_posix.cc ++++ mozilla/media/webrtc/trunk/src/system_wrappers/source/trace_posix.cc +@@ -52,17 +52,17 @@ WebRtc_Word32 TracePosix::AddTime(char* traceMessage, + { + struct timeval systemTimeHighRes; + if (gettimeofday(&systemTimeHighRes, 0) == -1) + { + return -1; + } + struct tm buffer; + const struct tm* systemTime = +- localtime_r(&systemTimeHighRes.tv_sec, &buffer); ++ localtime_r((const time_t *)(&systemTimeHighRes.tv_sec), &buffer); + + const WebRtc_UWord32 ms_time = systemTimeHighRes.tv_usec / 1000; + WebRtc_UWord32 prevTickCount = 0; + if (level == kTraceApiCall) + { + prevTickCount = _prevTickCount; + _prevTickCount = ms_time; + } else { diff --git media/webrtc/trunk/src/video_engine/vie_defines.h media/webrtc/trunk/src/video_engine/vie_defines.h index 2cc18cc7..2c042a0 100644 --- mozilla/media/webrtc/trunk/src/video_engine/vie_defines.h @@ -1935,7 +2055,7 @@ index 7d4c729..4104719 100644 --- mozilla/media/webrtc/trunk/src/voice_engine/voice_engine_defines.h +++ mozilla/media/webrtc/trunk/src/voice_engine/voice_engine_defines.h -@@ -434,41 +434,44 @@ namespace webrtc +@@ -437,41 +437,44 @@ namespace webrtc #else #define ANDROID_NOT_SUPPORTED(stat) @@ -1981,7 +2101,7 @@ #define TRUE 1 #define SOCKADDR_IN struct sockaddr_in #define UINT unsigned int -@@ -576,13 +579,13 @@ namespace webrtc +@@ -579,13 +582,13 @@ namespace webrtc // Defines // ---------------------------------------------------------------------------- From owner-freebsd-gecko@FreeBSD.ORG Sun Mar 10 21:05:23 2013 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id CBFB99AF for ; Sun, 10 Mar 2013 21:05:23 +0000 (UTC) (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: from trillian.chruetertee.ch (trillian.chruetertee.ch [217.150.245.56]) by mx1.freebsd.org (Postfix) with ESMTP id 1C15AFC1 for ; Sun, 10 Mar 2013 21:05:22 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian [217.150.245.56]) by trillian.chruetertee.ch (8.14.4/8.14.3) with ESMTP id r2AL5Mxs083391 for ; Sun, 10 Mar 2013 21:05:22 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: (from www@localhost) by trillian.chruetertee.ch (8.14.4/8.14.3/Submit) id r2AL5H86081726 for freebsd-gecko@freebsd.org; Sun, 10 Mar 2013 21:05:17 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Date: Sun, 10 Mar 2013 21:05:17 GMT Message-Id: <201303102105.r2AL5H86081726@trillian.chruetertee.ch> X-Authentication-Warning: trillian.chruetertee.ch: www set sender to svn-freebsd-gecko@chruetertee.ch using -f From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1207 - in trunk/www: firefox-nightly/files firefox/files seamonkey/files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: freebsd-gecko@freebsd.org List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Mar 2013 21:05:23 -0000 Author: jbeich Date: Sun Mar 10 21:05:16 2013 New Revision: 1207 Log: update libv4l patch Modified: trunk/www/firefox-nightly/files/patch-bug826985 trunk/www/firefox/files/patch-bug826985 trunk/www/seamonkey/files/patch-bug826985 Modified: trunk/www/firefox-nightly/files/patch-bug826985 ============================================================================== --- trunk/www/firefox-nightly/files/patch-bug826985 Sun Mar 10 21:05:08 2013 (r1206) +++ trunk/www/firefox-nightly/files/patch-bug826985 Sun Mar 10 21:05:16 2013 (r1207) @@ -1,107 +1,83 @@ -commit d18000b +commit 8024d93 Author: Henrik Gulbrandsen Date: Fri Jan 4 13:49:22 2013 +0100 Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. --- - configure.in | 13 ++++++ - .../linux/device_info_linux.cc | 30 ++++++++------ - .../linux/video_capture_linux.cc | 47 ++++++++++++---------- - .../video_capture/video_capture.gypi | 1 + - toolkit/library/Makefile.in | 3 ++ - 5 files changed, 60 insertions(+), 34 deletions(-) + configure.in | 7 +++++++ + media/webrtc/signaling/test/Makefile.in | 1 + + .../modules/video_capture/linux/device_info_linux.cc | 17 +++++++++++++++++ + .../modules/video_capture/linux/video_capture_linux.cc | 16 +++++++++++++++- + .../webrtc/modules/video_capture/video_capture.gypi | 11 +++++++++++ + toolkit/library/Makefile.in | 1 + + 6 files changed, 52 insertions(+), 1 deletion(-) diff --git configure.in configure.in -index 6d05f9c..297615f 100644 +index 55e4cd1..76567b3 100644 --- configure.in +++ configure.in -@@ -5267,6 +5267,18 @@ if test -n "$MOZ_WEBRTC"; then - ;; - esac - -+ dnl use libv4l on Linux to support more cameras -+ case "$target" in -+ *-android*|*-linuxandroid*) -+ ;; -+ *-linux*|*-dragonfly*|*-freebsd*|*-netbsd*|*-openbsd*) -+ MOZ_WEBRTC_LIBV4L=1 -+ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2, , -+ [echo "$MOZ_LIBV4L2_PKG_ERRORS" -+ AC_MSG_ERROR([WebRTC on Linux needs libv4l2 for video format conversion.])]) -+ ;; -+ esac +@@ -5238,6 +5238,9 @@ if test -n "$MOZ_WEBRTC"; then + MOZ_VP8_ENCODER=1 + MOZ_VP8_ERROR_CONCEALMENT=1 + ++ dnl with libv4l2 we can support more cameras ++ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) ++ + dnl OpenSLES is only available in Android 2.3 and later; we'll change this + dnl hard dependency to a dynamic load with graceful runtime failure before + dnl we make --enable-webrtc on by default in Android (bug 815905) +@@ -8981,6 +8984,10 @@ elif test "${OS_TARGET}" = "Android"; then + fi + fi + ++if test -n "$MOZ_LIBV4L2_LIBS"; then ++ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1" ++fi + - dnl enable once Signaling lands - MOZ_WEBRTC_SIGNALING=1 - AC_DEFINE(MOZ_WEBRTC_SIGNALING) -@@ -5311,6 +5323,7 @@ AC_SUBST(MOZ_WEBRTC) - AC_SUBST(MOZ_WEBRTC_LEAKING_TESTS) - AC_SUBST(MOZ_WEBRTC_SIGNALING) - AC_SUBST(MOZ_PEERCONNECTION) -+AC_SUBST(MOZ_WEBRTC_LIBV4L) - AC_SUBST(MOZ_WEBRTC_IN_LIBXUL) - AC_SUBST(MOZ_SCTP) - AC_SUBST(MOZ_SRTP) + if test -n "$MOZ_WEBRTC"; then + AC_MSG_RESULT("generating WebRTC Makefiles...") + +diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in +index b483cd1..f1dd1f0 100644 +--- media/webrtc/signaling/test/Makefile.in ++++ media/webrtc/signaling/test/Makefile.in +@@ -17,6 +17,7 @@ LIBS = \ + $(NSPR_LIBS) \ + $(NSS_LIBS) \ + $(REALTIME_LIBS) \ ++ $(MOZ_LIBV4L2_LIBS) \ + $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ + $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \ + $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \ diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc -index 653ee16..270f064 100644 +index 239a292..bab496c 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc -@@ -26,6 +26,7 @@ +@@ -26,11 +26,23 @@ #else #include #endif ++#ifdef HAVE_LIBV4L2 +#include ++#endif #include "ref_count.h" #include "trace.h" -@@ -68,9 +69,9 @@ WebRtc_UWord32 DeviceInfoLinux::NumberOfDevices() - for (int n = 0; n < 64; n++) - { - sprintf(device, "/dev/video%d", n); -- if ((fd = open(device, O_RDONLY)) != -1) -+ if ((fd = v4l2_open(device, O_RDONLY)) != -1) - { -- close(fd); -+ v4l2_close(fd); - count++; - } - } -@@ -97,14 +98,14 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( - for (int n = 0; n < 64; n++) - { - sprintf(device, "/dev/video%d", n); -- if ((fd = open(device, O_RDONLY)) != -1) -+ if ((fd = v4l2_open(device, O_RDONLY)) != -1) - { - if (count == deviceNumber) { - // Found the device - found = true; - break; - } else { -- close(fd); -+ v4l2_close(fd); - count++; - } - } -@@ -115,21 +116,26 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( - - // query device capabilities - struct v4l2_capability cap; -- if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) -+ if (v4l2_ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in querying the device capability for device %s. errno = %d", - device, errno); -- close(fd); -+ v4l2_close(fd); - return -1; - } -- close(fd); -+ v4l2_close(fd); - char cameraName[64]; ++#ifdef HAVE_LIBV4L2 ++#define open v4l2_open ++#define close v4l2_close ++#define dup v4l2_dup ++#define ioctl v4l2_ioctl ++#define mmap v4l2_mmap ++#define munmap v4l2_munmap ++#endif ++ + namespace webrtc + { + namespace videocapturemodule +@@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( memset(deviceNameUTF8, 0, deviceNameLength); memcpy(cameraName, cap.card, sizeof(cap.card)); @@ -113,259 +89,76 @@ if (deviceNameLength >= strlen(cameraName)) { memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); -@@ -181,13 +187,13 @@ WebRtc_Word32 DeviceInfoLinux::CreateCapabilityMap( - for (int n = 0; n < 64; ++n) - { - sprintf(device, "/dev/video%d", n); -- fd = open(device, O_RDONLY); -+ fd = v4l2_open(device, O_RDONLY); - if (fd == -1) - continue; - - // query device capabilities - struct v4l2_capability cap; -- if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) -+ if (v4l2_ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) - { - if (cap.bus_info[0] != 0) - { -@@ -209,7 +215,7 @@ WebRtc_Word32 DeviceInfoLinux::CreateCapabilityMap( - } - } - } -- close(fd); // close since this is not the matching device -+ v4l2_close(fd); // close since this is not the matching device - } - - if (!found) -@@ -228,7 +234,7 @@ WebRtc_Word32 DeviceInfoLinux::CreateCapabilityMap( - } - - int size = FillCapabilityMap(fd); -- close(fd); -+ v4l2_close(fd); - - // Store the new used device name - _lastUsedDeviceNameLength = deviceUniqueIdUTF8Length; -@@ -282,7 +288,7 @@ WebRtc_Word32 DeviceInfoLinux::FillCapabilityMap(int fd) - video_fmt.fmt.pix.width = size[i][0]; - video_fmt.fmt.pix.height = size[i][1]; - -- if (ioctl(fd, VIDIOC_TRY_FMT, &video_fmt) >= 0) -+ if (v4l2_ioctl(fd, VIDIOC_TRY_FMT, &video_fmt) >= 0) - { - if ((video_fmt.fmt.pix.width == size[i][0]) - && (video_fmt.fmt.pix.height == size[i][1])) diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc -index 12df1b3..4ddc9d4 100644 +index 12df1b3..e9863ba 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc -@@ -25,6 +25,7 @@ +@@ -25,6 +25,9 @@ #else #include #endif ++#ifdef HAVE_LIBV4L2 +#include ++#endif #include -@@ -79,11 +82,11 @@ WebRtc_Word32 VideoCaptureModuleV4L2::Init(const char* deviceUniqueIdUTF8) - for (n = 0; n < 64; n++) - { - sprintf(device, "/dev/video%d", n); -- if ((fd = open(device, O_RDONLY)) != -1) -+ if ((fd = v4l2_open(device, O_RDONLY)) != -1) - { - // query device capabilities - struct v4l2_capability cap; -- if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) -+ if (v4l2_ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) - { - if (cap.bus_info[0] != 0) - { -@@ -91,13 +94,13 @@ WebRtc_Word32 VideoCaptureModuleV4L2::Init(const char* deviceUniqueIdUTF8) - (const char*) deviceUniqueIdUTF8, - strlen((const char*) deviceUniqueIdUTF8)) == 0) //match with device id - { -- close(fd); -+ v4l2_close(fd); - found = true; - break; // fd matches with device unique id supplied - } - } - } -- close(fd); // close since this is not the matching device -+ v4l2_close(fd); // close since this is not the matching device - } - } - if (!found) -@@ -117,7 +120,7 @@ VideoCaptureModuleV4L2::~VideoCaptureModuleV4L2() - delete _captureCritSect; - } - if (_deviceFd != -1) -- close(_deviceFd); -+ v4l2_close(_deviceFd); - } - - WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( -@@ -142,7 +145,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - char device[20]; - sprintf(device, "/dev/video%d", (int) _deviceId); - -- if ((_deviceFd = open(device, O_RDWR | O_NONBLOCK, 0)) < 0) -+ if ((_deviceFd = v4l2_open(device, O_RDWR | O_NONBLOCK, 0)) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in opening %s errono = %d", device, errno); -@@ -175,7 +178,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - for (int i = 0; i < nFormats; i++) - { - video_fmt.fmt.pix.pixelformat = fmts[i]; -- if (ioctl(_deviceFd, VIDIOC_TRY_FMT, &video_fmt) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_TRY_FMT, &video_fmt) < 0) - { - continue; - } -@@ -200,7 +203,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - _captureVideoType = kVideoMJPEG; - - //set format and frame size now -- if (ioctl(_deviceFd, VIDIOC_S_FMT, &video_fmt) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_S_FMT, &video_fmt) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in VIDIOC_S_FMT, errno = %d", errno); -@@ -217,7 +220,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - struct v4l2_streamparm streamparms; - memset(&streamparms, 0, sizeof(streamparms)); - streamparms.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -- if (ioctl(_deviceFd, VIDIOC_G_PARM, &streamparms) < 0) { -+ if (v4l2_ioctl(_deviceFd, VIDIOC_G_PARM, &streamparms) < 0) { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in VIDIOC_G_PARM errno = %d", errno); - driver_framerate_support = false; -@@ -230,7 +233,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - streamparms.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - streamparms.parm.capture.timeperframe.numerator = 1; - streamparms.parm.capture.timeperframe.denominator = capability.maxFPS; -- if (ioctl(_deviceFd, VIDIOC_S_PARM, &streamparms) < 0) { -+ if (v4l2_ioctl(_deviceFd, VIDIOC_S_PARM, &streamparms) < 0) { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "Failed to set the framerate. errno=%d", errno); - driver_framerate_support = false; -@@ -268,7 +271,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - // Needed to start UVC camera - from the uvcview application - enum v4l2_buf_type type; - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -- if (ioctl(_deviceFd, VIDIOC_STREAMON, &type) == -1) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_STREAMON, &type) == -1) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "Failed to turn on stream"); -@@ -303,7 +306,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StopCapture() - _captureThread = NULL; - - DeAllocateVideoBuffers(); -- close(_deviceFd); -+ v4l2_close(_deviceFd); - _deviceFd = -1; - } - -@@ -321,7 +324,7 @@ bool VideoCaptureModuleV4L2::AllocateVideoBuffers() - rbuffer.memory = V4L2_MEMORY_MMAP; - rbuffer.count = kNoOfV4L2Bufffers; - -- if (ioctl(_deviceFd, VIDIOC_REQBUFS, &rbuffer) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_REQBUFS, &rbuffer) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "Could not get buffers from device. errno = %d", errno); -@@ -344,24 +347,24 @@ bool VideoCaptureModuleV4L2::AllocateVideoBuffers() - buffer.memory = V4L2_MEMORY_MMAP; - buffer.index = i; - -- if (ioctl(_deviceFd, VIDIOC_QUERYBUF, &buffer) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_QUERYBUF, &buffer) < 0) - { - return false; - } - -- _pool[i].start = mmap(NULL, buffer.length, PROT_READ | PROT_WRITE, MAP_SHARED, -+ _pool[i].start = v4l2_mmap(NULL, buffer.length, PROT_READ | PROT_WRITE, MAP_SHARED, - _deviceFd, buffer.m.offset); - - if (MAP_FAILED == _pool[i].start) - { - for (unsigned int j = 0; j < i; j++) -- munmap(_pool[j].start, _pool[j].length); -+ v4l2_munmap(_pool[j].start, _pool[j].length); - return false; - } - - _pool[i].length = buffer.length; - -- if (ioctl(_deviceFd, VIDIOC_QBUF, &buffer) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_QBUF, &buffer) < 0) - { - return false; - } -@@ -373,14 +376,14 @@ bool VideoCaptureModuleV4L2::DeAllocateVideoBuffers() +@@ -26,6 +31,15 @@ + #include "critical_section_wrapper.h" + #include "video_capture_linux.h" + ++#ifdef HAVE_LIBV4L2 ++#define open v4l2_open ++#define close v4l2_close ++#define dup v4l2_dup ++#define ioctl v4l2_ioctl ++#define mmap v4l2_mmap ++#define munmap v4l2_munmap ++#endif ++ + namespace webrtc { - // unmap buffers - for (int i = 0; i < _buffersAllocatedByDevice; i++) -- munmap(_pool[i].start, _pool[i].length); -+ v4l2_munmap(_pool[i].start, _pool[i].length); - - delete[] _pool; - - // turn off stream - enum v4l2_buf_type type; - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -- if (ioctl(_deviceFd, VIDIOC_STREAMOFF, &type) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_STREAMOFF, &type) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "VIDIOC_STREAMOFF error. errno: %d", errno); -@@ -438,7 +441,7 @@ bool VideoCaptureModuleV4L2::CaptureProcess() - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - // dequeue a buffer - repeat until dequeued properly! -- while (ioctl(_deviceFd, VIDIOC_DQBUF, &buf) < 0) -+ while (v4l2_ioctl(_deviceFd, VIDIOC_DQBUF, &buf) < 0) - { - if (errno != EINTR) - { -@@ -457,7 +460,7 @@ bool VideoCaptureModuleV4L2::CaptureProcess() - IncomingFrame((unsigned char*) _pool[buf.index].start, - buf.bytesused, frameInfo); - // enqueue the buffer again -- if (ioctl(_deviceFd, VIDIOC_QBUF, &buf) == -1) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_QBUF, &buf) == -1) - { - WEBRTC_TRACE(webrtc::kTraceWarning, webrtc::kTraceVideoCapture, _id, - "Failed to enqueue capture buffer"); + namespace videocapturemodule diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi -index 8d38102..3e8f76b 100644 +index d46b5aa..e452223 100644 --- media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi +++ media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi -@@ -179,6 +179,7 @@ - 'libraries': [ - '-lXext', - '-lX11', -+ '-lv4l2', +@@ -7,6 +7,9 @@ + # be found in the AUTHORS file in the root of the source tree. + + { ++ 'variables': { ++ 'use_libv4l2%': 0, ++ }, + 'targets': [ + { + 'target_name': 'video_capture_module', +@@ -49,6 +52,16 @@ + }, { # include_internal_video_capture == 1 + 'conditions': [ + ['include_v4l2_video_capture==1', { ++ 'conditions': [ ++ ['use_libv4l2==1', { ++ 'defines': [ ++ 'HAVE_LIBV4L2', ++ ], ++ 'libraries': [ ++ '-lv4l2', ++ ], ++ }], ++ ], + 'include_dirs': [ + 'linux', ], - }], - ['OS=="linux"', { diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in -index 0440c26..8f6c735 100644 +index 9c16ffa..1db3794 100644 --- toolkit/library/Makefile.in +++ toolkit/library/Makefile.in -@@ -411,6 +411,9 @@ EXTRA_DSO_LDOPTS += \ - $(DEPTH)/media/webrtc/signaling/signaling_sipcc/$(LIB_PREFIX)sipcc.$(LIB_SUFFIX) \ - $(NULL) - endif -+ifdef MOZ_WEBRTC_LIBV4L +@@ -405,6 +405,7 @@ endif + EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib) + + ifdef MOZ_WEBRTC +EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS) -+endif - ifdef MOZ_WEBRTC_IN_LIBXUL - include $(topsrcdir)/media/webrtc/shared_libs.mk - EXTRA_DSO_LDOPTS += $(WEBRTC_LIBS) + ifdef MOZ_PEERCONNECTION + COMPONENT_LIBS += peerconnection + endif Modified: trunk/www/firefox/files/patch-bug826985 ============================================================================== --- trunk/www/firefox/files/patch-bug826985 Sun Mar 10 21:05:08 2013 (r1206) +++ trunk/www/firefox/files/patch-bug826985 Sun Mar 10 21:05:16 2013 (r1207) @@ -1,107 +1,83 @@ -commit d18000b +commit 8024d93 Author: Henrik Gulbrandsen Date: Fri Jan 4 13:49:22 2013 +0100 Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. --- - configure.in | 13 ++++++ - .../main/source/Linux/device_info_linux.cc | 30 ++++++++------ - .../main/source/Linux/video_capture_linux.cc | 47 ++++++++++++---------- - .../video_capture/main/source/video_capture.gypi | 1 + - toolkit/library/Makefile.in | 3 ++ - 5 files changed, 60 insertions(+), 34 deletions(-) + configure.in | 7 +++++++ + media/webrtc/signaling/test/Makefile.in | 1 + + .../modules/video_capture/main/source/Linux/device_info_linux.cc | 17 +++++++++++++++++ + .../modules/video_capture/main/source/Linux/video_capture_linux.cc | 16 +++++++++++++++- + .../webrtc/modules/video_capture/main/source/video_capture.gypi | 11 +++++++++++ + toolkit/library/Makefile.in | 1 + + 6 files changed, 52 insertions(+), 1 deletion(-) diff --git configure.in configure.in -index 6d05f9c..297615f 100644 +index 55e4cd1..76567b3 100644 --- configure.in +++ configure.in -@@ -5267,6 +5267,18 @@ if test -n "$MOZ_WEBRTC"; then - ;; - esac - -+ dnl use libv4l on Linux to support more cameras -+ case "$target" in -+ *-android*|*-linuxandroid*) -+ ;; -+ *-linux*|*-dragonfly*|*-freebsd*|*-netbsd*|*-openbsd*) -+ MOZ_WEBRTC_LIBV4L=1 -+ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2, , -+ [echo "$MOZ_LIBV4L2_PKG_ERRORS" -+ AC_MSG_ERROR([WebRTC on Linux needs libv4l2 for video format conversion.])]) -+ ;; -+ esac +@@ -5238,6 +5238,9 @@ if test -n "$MOZ_WEBRTC"; then + MOZ_VP8_ENCODER=1 + MOZ_VP8_ERROR_CONCEALMENT=1 + ++ dnl with libv4l2 we can support more cameras ++ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) ++ + dnl OpenSLES is only available in Android 2.3 and later; we'll change this + dnl hard dependency to a dynamic load with graceful runtime failure before + dnl we make --enable-webrtc on by default in Android (bug 815905) +@@ -8981,6 +8984,10 @@ elif test "${OS_TARGET}" = "Android"; then + fi + fi + ++if test -n "$MOZ_LIBV4L2_LIBS"; then ++ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1" ++fi + - dnl enable once Signaling lands - MOZ_WEBRTC_SIGNALING=1 - AC_DEFINE(MOZ_WEBRTC_SIGNALING) -@@ -5311,6 +5323,7 @@ AC_SUBST(MOZ_WEBRTC) - AC_SUBST(MOZ_WEBRTC_LEAKING_TESTS) - AC_SUBST(MOZ_WEBRTC_SIGNALING) - AC_SUBST(MOZ_PEERCONNECTION) -+AC_SUBST(MOZ_WEBRTC_LIBV4L) - AC_SUBST(MOZ_WEBRTC_IN_LIBXUL) - AC_SUBST(MOZ_SCTP) - AC_SUBST(MOZ_SRTP) + if test -n "$MOZ_WEBRTC"; then + AC_MSG_RESULT("generating WebRTC Makefiles...") + +diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in +index b483cd1..f1dd1f0 100644 +--- media/webrtc/signaling/test/Makefile.in ++++ media/webrtc/signaling/test/Makefile.in +@@ -17,6 +17,7 @@ LIBS = \ + $(NSPR_LIBS) \ + $(NSS_LIBS) \ + $(REALTIME_LIBS) \ ++ $(MOZ_LIBV4L2_LIBS) \ + $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ + $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \ + $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \ diff --git media/webrtc/trunk/src/modules/video_capture/main/source/Linux/device_info_linux.cc media/webrtc/trunk/src/modules/video_capture/main/source/Linux/device_info_linux.cc -index 653ee16..270f064 100644 +index 239a292..bab496c 100644 --- media/webrtc/trunk/src/modules/video_capture/main/source/Linux/device_info_linux.cc +++ media/webrtc/trunk/src/modules/video_capture/main/source/Linux/device_info_linux.cc -@@ -26,6 +26,7 @@ +@@ -26,11 +26,23 @@ #else #include #endif ++#ifdef HAVE_LIBV4L2 +#include ++#endif #include "ref_count.h" #include "trace.h" -@@ -68,9 +69,9 @@ WebRtc_UWord32 DeviceInfoLinux::NumberOfDevices() - for (int n = 0; n < 64; n++) - { - sprintf(device, "/dev/video%d", n); -- if ((fd = open(device, O_RDONLY)) != -1) -+ if ((fd = v4l2_open(device, O_RDONLY)) != -1) - { -- close(fd); -+ v4l2_close(fd); - count++; - } - } -@@ -97,14 +98,14 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( - for (int n = 0; n < 64; n++) - { - sprintf(device, "/dev/video%d", n); -- if ((fd = open(device, O_RDONLY)) != -1) -+ if ((fd = v4l2_open(device, O_RDONLY)) != -1) - { - if (count == deviceNumber) { - // Found the device - found = true; - break; - } else { -- close(fd); -+ v4l2_close(fd); - count++; - } - } -@@ -115,21 +116,26 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( - - // query device capabilities - struct v4l2_capability cap; -- if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) -+ if (v4l2_ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in querying the device capability for device %s. errno = %d", - device, errno); -- close(fd); -+ v4l2_close(fd); - return -1; - } -- close(fd); -+ v4l2_close(fd); - char cameraName[64]; ++#ifdef HAVE_LIBV4L2 ++#define open v4l2_open ++#define close v4l2_close ++#define dup v4l2_dup ++#define ioctl v4l2_ioctl ++#define mmap v4l2_mmap ++#define munmap v4l2_munmap ++#endif ++ + namespace webrtc + { + namespace videocapturemodule +@@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( memset(deviceNameUTF8, 0, deviceNameLength); memcpy(cameraName, cap.card, sizeof(cap.card)); @@ -113,259 +89,76 @@ if (deviceNameLength >= strlen(cameraName)) { memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); -@@ -181,13 +187,13 @@ WebRtc_Word32 DeviceInfoLinux::CreateCapabilityMap( - for (int n = 0; n < 64; ++n) - { - sprintf(device, "/dev/video%d", n); -- fd = open(device, O_RDONLY); -+ fd = v4l2_open(device, O_RDONLY); - if (fd == -1) - continue; - - // query device capabilities - struct v4l2_capability cap; -- if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) -+ if (v4l2_ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) - { - if (cap.bus_info[0] != 0) - { -@@ -209,7 +215,7 @@ WebRtc_Word32 DeviceInfoLinux::CreateCapabilityMap( - } - } - } -- close(fd); // close since this is not the matching device -+ v4l2_close(fd); // close since this is not the matching device - } - - if (!found) -@@ -228,7 +234,7 @@ WebRtc_Word32 DeviceInfoLinux::CreateCapabilityMap( - } - - int size = FillCapabilityMap(fd); -- close(fd); -+ v4l2_close(fd); - - // Store the new used device name - _lastUsedDeviceNameLength = deviceUniqueIdUTF8Length; -@@ -282,7 +288,7 @@ WebRtc_Word32 DeviceInfoLinux::FillCapabilityMap(int fd) - video_fmt.fmt.pix.width = size[i][0]; - video_fmt.fmt.pix.height = size[i][1]; - -- if (ioctl(fd, VIDIOC_TRY_FMT, &video_fmt) >= 0) -+ if (v4l2_ioctl(fd, VIDIOC_TRY_FMT, &video_fmt) >= 0) - { - if ((video_fmt.fmt.pix.width == size[i][0]) - && (video_fmt.fmt.pix.height == size[i][1])) diff --git media/webrtc/trunk/src/modules/video_capture/main/source/Linux/video_capture_linux.cc media/webrtc/trunk/src/modules/video_capture/main/source/Linux/video_capture_linux.cc -index 12df1b3..4ddc9d4 100644 +index 12df1b3..e9863ba 100644 --- media/webrtc/trunk/src/modules/video_capture/main/source/Linux/video_capture_linux.cc +++ media/webrtc/trunk/src/modules/video_capture/main/source/Linux/video_capture_linux.cc -@@ -25,6 +25,7 @@ +@@ -25,6 +25,9 @@ #else #include #endif ++#ifdef HAVE_LIBV4L2 +#include ++#endif #include -@@ -79,11 +82,11 @@ WebRtc_Word32 VideoCaptureModuleV4L2::Init(const char* deviceUniqueIdUTF8) - for (n = 0; n < 64; n++) - { - sprintf(device, "/dev/video%d", n); -- if ((fd = open(device, O_RDONLY)) != -1) -+ if ((fd = v4l2_open(device, O_RDONLY)) != -1) - { - // query device capabilities - struct v4l2_capability cap; -- if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) -+ if (v4l2_ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) - { - if (cap.bus_info[0] != 0) - { -@@ -91,13 +94,13 @@ WebRtc_Word32 VideoCaptureModuleV4L2::Init(const char* deviceUniqueIdUTF8) - (const char*) deviceUniqueIdUTF8, - strlen((const char*) deviceUniqueIdUTF8)) == 0) //match with device id - { -- close(fd); -+ v4l2_close(fd); - found = true; - break; // fd matches with device unique id supplied - } - } - } -- close(fd); // close since this is not the matching device -+ v4l2_close(fd); // close since this is not the matching device - } - } - if (!found) -@@ -117,7 +120,7 @@ VideoCaptureModuleV4L2::~VideoCaptureModuleV4L2() - delete _captureCritSect; - } - if (_deviceFd != -1) -- close(_deviceFd); -+ v4l2_close(_deviceFd); - } - - WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( -@@ -142,7 +145,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - char device[20]; - sprintf(device, "/dev/video%d", (int) _deviceId); - -- if ((_deviceFd = open(device, O_RDWR | O_NONBLOCK, 0)) < 0) -+ if ((_deviceFd = v4l2_open(device, O_RDWR | O_NONBLOCK, 0)) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in opening %s errono = %d", device, errno); -@@ -175,7 +178,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - for (int i = 0; i < nFormats; i++) - { - video_fmt.fmt.pix.pixelformat = fmts[i]; -- if (ioctl(_deviceFd, VIDIOC_TRY_FMT, &video_fmt) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_TRY_FMT, &video_fmt) < 0) - { - continue; - } -@@ -200,7 +203,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - _captureVideoType = kVideoMJPEG; - - //set format and frame size now -- if (ioctl(_deviceFd, VIDIOC_S_FMT, &video_fmt) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_S_FMT, &video_fmt) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in VIDIOC_S_FMT, errno = %d", errno); -@@ -217,7 +220,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - struct v4l2_streamparm streamparms; - memset(&streamparms, 0, sizeof(streamparms)); - streamparms.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -- if (ioctl(_deviceFd, VIDIOC_G_PARM, &streamparms) < 0) { -+ if (v4l2_ioctl(_deviceFd, VIDIOC_G_PARM, &streamparms) < 0) { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in VIDIOC_G_PARM errno = %d", errno); - driver_framerate_support = false; -@@ -230,7 +233,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - streamparms.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - streamparms.parm.capture.timeperframe.numerator = 1; - streamparms.parm.capture.timeperframe.denominator = capability.maxFPS; -- if (ioctl(_deviceFd, VIDIOC_S_PARM, &streamparms) < 0) { -+ if (v4l2_ioctl(_deviceFd, VIDIOC_S_PARM, &streamparms) < 0) { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "Failed to set the framerate. errno=%d", errno); - driver_framerate_support = false; -@@ -268,7 +271,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - // Needed to start UVC camera - from the uvcview application - enum v4l2_buf_type type; - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -- if (ioctl(_deviceFd, VIDIOC_STREAMON, &type) == -1) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_STREAMON, &type) == -1) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "Failed to turn on stream"); -@@ -303,7 +306,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StopCapture() - _captureThread = NULL; - - DeAllocateVideoBuffers(); -- close(_deviceFd); -+ v4l2_close(_deviceFd); - _deviceFd = -1; - } - -@@ -321,7 +324,7 @@ bool VideoCaptureModuleV4L2::AllocateVideoBuffers() - rbuffer.memory = V4L2_MEMORY_MMAP; - rbuffer.count = kNoOfV4L2Bufffers; - -- if (ioctl(_deviceFd, VIDIOC_REQBUFS, &rbuffer) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_REQBUFS, &rbuffer) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "Could not get buffers from device. errno = %d", errno); -@@ -344,24 +347,24 @@ bool VideoCaptureModuleV4L2::AllocateVideoBuffers() - buffer.memory = V4L2_MEMORY_MMAP; - buffer.index = i; - -- if (ioctl(_deviceFd, VIDIOC_QUERYBUF, &buffer) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_QUERYBUF, &buffer) < 0) - { - return false; - } - -- _pool[i].start = mmap(NULL, buffer.length, PROT_READ | PROT_WRITE, MAP_SHARED, -+ _pool[i].start = v4l2_mmap(NULL, buffer.length, PROT_READ | PROT_WRITE, MAP_SHARED, - _deviceFd, buffer.m.offset); - - if (MAP_FAILED == _pool[i].start) - { - for (unsigned int j = 0; j < i; j++) -- munmap(_pool[j].start, _pool[j].length); -+ v4l2_munmap(_pool[j].start, _pool[j].length); - return false; - } - - _pool[i].length = buffer.length; - -- if (ioctl(_deviceFd, VIDIOC_QBUF, &buffer) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_QBUF, &buffer) < 0) - { - return false; - } -@@ -373,14 +376,14 @@ bool VideoCaptureModuleV4L2::DeAllocateVideoBuffers() +@@ -26,6 +31,15 @@ + #include "critical_section_wrapper.h" + #include "video_capture_linux.h" + ++#ifdef HAVE_LIBV4L2 ++#define open v4l2_open ++#define close v4l2_close ++#define dup v4l2_dup ++#define ioctl v4l2_ioctl ++#define mmap v4l2_mmap ++#define munmap v4l2_munmap ++#endif ++ + namespace webrtc { - // unmap buffers - for (int i = 0; i < _buffersAllocatedByDevice; i++) -- munmap(_pool[i].start, _pool[i].length); -+ v4l2_munmap(_pool[i].start, _pool[i].length); - - delete[] _pool; - - // turn off stream - enum v4l2_buf_type type; - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -- if (ioctl(_deviceFd, VIDIOC_STREAMOFF, &type) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_STREAMOFF, &type) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "VIDIOC_STREAMOFF error. errno: %d", errno); -@@ -438,7 +441,7 @@ bool VideoCaptureModuleV4L2::CaptureProcess() - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - // dequeue a buffer - repeat until dequeued properly! -- while (ioctl(_deviceFd, VIDIOC_DQBUF, &buf) < 0) -+ while (v4l2_ioctl(_deviceFd, VIDIOC_DQBUF, &buf) < 0) - { - if (errno != EINTR) - { -@@ -457,7 +460,7 @@ bool VideoCaptureModuleV4L2::CaptureProcess() - IncomingFrame((unsigned char*) _pool[buf.index].start, - buf.bytesused, frameInfo); - // enqueue the buffer again -- if (ioctl(_deviceFd, VIDIOC_QBUF, &buf) == -1) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_QBUF, &buf) == -1) - { - WEBRTC_TRACE(webrtc::kTraceWarning, webrtc::kTraceVideoCapture, _id, - "Failed to enqueue capture buffer"); + namespace videocapturemodule diff --git media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi -index 8d38102..3e8f76b 100644 +index d46b5aa..e452223 100644 --- media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi +++ media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi -@@ -179,6 +179,7 @@ - 'libraries': [ - '-lXext', - '-lX11', -+ '-lv4l2', +@@ -7,6 +7,9 @@ + # be found in the AUTHORS file in the root of the source tree. + + { ++ 'variables': { ++ 'use_libv4l2%': 0, ++ }, + 'targets': [ + { + 'target_name': 'video_capture_module', +@@ -49,6 +52,16 @@ + }, { # include_internal_video_capture == 1 + 'conditions': [ + ['include_v4l2_video_capture==1', { ++ 'conditions': [ ++ ['use_libv4l2==1', { ++ 'defines': [ ++ 'HAVE_LIBV4L2', ++ ], ++ 'libraries': [ ++ '-lv4l2', ++ ], ++ }], ++ ], + 'include_dirs': [ + 'linux', ], - }], - ['OS=="linux"', { diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in -index 0440c26..8f6c735 100644 +index 9c16ffa..1db3794 100644 --- toolkit/library/Makefile.in +++ toolkit/library/Makefile.in -@@ -411,6 +411,9 @@ EXTRA_DSO_LDOPTS += \ - $(DEPTH)/media/webrtc/signaling/signaling_sipcc/$(LIB_PREFIX)sipcc.$(LIB_SUFFIX) \ - $(NULL) - endif -+ifdef MOZ_WEBRTC_LIBV4L +@@ -405,6 +405,7 @@ endif + EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib) + + ifdef MOZ_WEBRTC +EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS) -+endif - ifdef MOZ_WEBRTC_IN_LIBXUL - include $(topsrcdir)/media/webrtc/shared_libs.mk - EXTRA_DSO_LDOPTS += $(WEBRTC_LIBS) + ifdef MOZ_PEERCONNECTION + COMPONENT_LIBS += peerconnection + endif Modified: trunk/www/seamonkey/files/patch-bug826985 ============================================================================== --- trunk/www/seamonkey/files/patch-bug826985 Sun Mar 10 21:05:08 2013 (r1206) +++ trunk/www/seamonkey/files/patch-bug826985 Sun Mar 10 21:05:16 2013 (r1207) @@ -1,107 +1,83 @@ -commit d18000b +commit 8024d93 Author: Henrik Gulbrandsen Date: Fri Jan 4 13:49:22 2013 +0100 Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. --- - configure.in | 13 ++++++ - .../main/source/Linux/device_info_linux.cc | 30 ++++++++------ - .../main/source/Linux/video_capture_linux.cc | 47 ++++++++++++---------- - .../video_capture/main/source/video_capture.gypi | 1 + - toolkit/library/Makefile.in | 3 ++ - 5 files changed, 60 insertions(+), 34 deletions(-) + configure.in | 7 +++++++ + media/webrtc/signaling/test/Makefile.in | 1 + + .../modules/video_capture/main/source/Linux/device_info_linux.cc | 17 +++++++++++++++++ + .../modules/video_capture/main/source/Linux/video_capture_linux.cc | 16 +++++++++++++++- + .../webrtc/modules/video_capture/main/source/video_capture.gypi | 11 +++++++++++ + toolkit/library/Makefile.in | 1 + + 6 files changed, 52 insertions(+), 1 deletion(-) diff --git configure.in configure.in -index 6d05f9c..297615f 100644 +index 55e4cd1..76567b3 100644 --- mozilla/configure.in +++ mozilla/configure.in -@@ -5267,6 +5267,18 @@ if test -n "$MOZ_WEBRTC"; then - ;; - esac - -+ dnl use libv4l on Linux to support more cameras -+ case "$target" in -+ *-android*|*-linuxandroid*) -+ ;; -+ *-linux*|*-dragonfly*|*-freebsd*|*-netbsd*|*-openbsd*) -+ MOZ_WEBRTC_LIBV4L=1 -+ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2, , -+ [echo "$MOZ_LIBV4L2_PKG_ERRORS" -+ AC_MSG_ERROR([WebRTC on Linux needs libv4l2 for video format conversion.])]) -+ ;; -+ esac +@@ -5238,6 +5238,9 @@ if test -n "$MOZ_WEBRTC"; then + MOZ_VP8_ENCODER=1 + MOZ_VP8_ERROR_CONCEALMENT=1 + ++ dnl with libv4l2 we can support more cameras ++ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) ++ + dnl OpenSLES is only available in Android 2.3 and later; we'll change this + dnl hard dependency to a dynamic load with graceful runtime failure before + dnl we make --enable-webrtc on by default in Android (bug 815905) +@@ -8981,6 +8984,10 @@ elif test "${OS_TARGET}" = "Android"; then + fi + fi + ++if test -n "$MOZ_LIBV4L2_LIBS"; then ++ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1" ++fi + - dnl enable once Signaling lands - MOZ_WEBRTC_SIGNALING=1 - AC_DEFINE(MOZ_WEBRTC_SIGNALING) -@@ -5311,6 +5323,7 @@ AC_SUBST(MOZ_WEBRTC) - AC_SUBST(MOZ_WEBRTC_LEAKING_TESTS) - AC_SUBST(MOZ_WEBRTC_SIGNALING) - AC_SUBST(MOZ_PEERCONNECTION) -+AC_SUBST(MOZ_WEBRTC_LIBV4L) - AC_SUBST(MOZ_WEBRTC_IN_LIBXUL) - AC_SUBST(MOZ_SCTP) - AC_SUBST(MOZ_SRTP) + if test -n "$MOZ_WEBRTC"; then + AC_MSG_RESULT("generating WebRTC Makefiles...") + +diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in +index b483cd1..f1dd1f0 100644 +--- mozilla/media/webrtc/signaling/test/Makefile.in ++++ mozilla/media/webrtc/signaling/test/Makefile.in +@@ -17,6 +17,7 @@ LIBS = \ + $(NSPR_LIBS) \ + $(NSS_LIBS) \ + $(REALTIME_LIBS) \ ++ $(MOZ_LIBV4L2_LIBS) \ + $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ + $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \ + $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \ diff --git media/webrtc/trunk/src/modules/video_capture/main/source/Linux/device_info_linux.cc media/webrtc/trunk/src/modules/video_capture/main/source/Linux/device_info_linux.cc -index 653ee16..270f064 100644 +index 239a292..bab496c 100644 --- mozilla/media/webrtc/trunk/src/modules/video_capture/main/source/Linux/device_info_linux.cc +++ mozilla/media/webrtc/trunk/src/modules/video_capture/main/source/Linux/device_info_linux.cc -@@ -26,6 +26,7 @@ +@@ -26,11 +26,23 @@ #else #include #endif ++#ifdef HAVE_LIBV4L2 +#include ++#endif #include "ref_count.h" #include "trace.h" -@@ -68,9 +69,9 @@ WebRtc_UWord32 DeviceInfoLinux::NumberOfDevices() - for (int n = 0; n < 64; n++) - { - sprintf(device, "/dev/video%d", n); -- if ((fd = open(device, O_RDONLY)) != -1) -+ if ((fd = v4l2_open(device, O_RDONLY)) != -1) - { -- close(fd); -+ v4l2_close(fd); - count++; - } - } -@@ -97,14 +98,14 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( - for (int n = 0; n < 64; n++) - { - sprintf(device, "/dev/video%d", n); -- if ((fd = open(device, O_RDONLY)) != -1) -+ if ((fd = v4l2_open(device, O_RDONLY)) != -1) - { - if (count == deviceNumber) { - // Found the device - found = true; - break; - } else { -- close(fd); -+ v4l2_close(fd); - count++; - } - } -@@ -115,21 +116,26 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( - - // query device capabilities - struct v4l2_capability cap; -- if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) -+ if (v4l2_ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in querying the device capability for device %s. errno = %d", - device, errno); -- close(fd); -+ v4l2_close(fd); - return -1; - } -- close(fd); -+ v4l2_close(fd); - char cameraName[64]; ++#ifdef HAVE_LIBV4L2 ++#define open v4l2_open ++#define close v4l2_close ++#define dup v4l2_dup ++#define ioctl v4l2_ioctl ++#define mmap v4l2_mmap ++#define munmap v4l2_munmap ++#endif ++ + namespace webrtc + { + namespace videocapturemodule +@@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName( memset(deviceNameUTF8, 0, deviceNameLength); memcpy(cameraName, cap.card, sizeof(cap.card)); @@ -113,259 +89,76 @@ if (deviceNameLength >= strlen(cameraName)) { memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); -@@ -181,13 +187,13 @@ WebRtc_Word32 DeviceInfoLinux::CreateCapabilityMap( - for (int n = 0; n < 64; ++n) - { - sprintf(device, "/dev/video%d", n); -- fd = open(device, O_RDONLY); -+ fd = v4l2_open(device, O_RDONLY); - if (fd == -1) - continue; - - // query device capabilities - struct v4l2_capability cap; -- if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) -+ if (v4l2_ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) - { - if (cap.bus_info[0] != 0) - { -@@ -209,7 +215,7 @@ WebRtc_Word32 DeviceInfoLinux::CreateCapabilityMap( - } - } - } -- close(fd); // close since this is not the matching device -+ v4l2_close(fd); // close since this is not the matching device - } - - if (!found) -@@ -228,7 +234,7 @@ WebRtc_Word32 DeviceInfoLinux::CreateCapabilityMap( - } - - int size = FillCapabilityMap(fd); -- close(fd); -+ v4l2_close(fd); - - // Store the new used device name - _lastUsedDeviceNameLength = deviceUniqueIdUTF8Length; -@@ -282,7 +288,7 @@ WebRtc_Word32 DeviceInfoLinux::FillCapabilityMap(int fd) - video_fmt.fmt.pix.width = size[i][0]; - video_fmt.fmt.pix.height = size[i][1]; - -- if (ioctl(fd, VIDIOC_TRY_FMT, &video_fmt) >= 0) -+ if (v4l2_ioctl(fd, VIDIOC_TRY_FMT, &video_fmt) >= 0) - { - if ((video_fmt.fmt.pix.width == size[i][0]) - && (video_fmt.fmt.pix.height == size[i][1])) diff --git media/webrtc/trunk/src/modules/video_capture/main/source/Linux/video_capture_linux.cc media/webrtc/trunk/src/modules/video_capture/main/source/Linux/video_capture_linux.cc -index 12df1b3..4ddc9d4 100644 +index 12df1b3..e9863ba 100644 --- mozilla/media/webrtc/trunk/src/modules/video_capture/main/source/Linux/video_capture_linux.cc +++ mozilla/media/webrtc/trunk/src/modules/video_capture/main/source/Linux/video_capture_linux.cc -@@ -25,6 +25,7 @@ +@@ -25,6 +25,9 @@ #else #include #endif ++#ifdef HAVE_LIBV4L2 +#include ++#endif #include -@@ -79,11 +82,11 @@ WebRtc_Word32 VideoCaptureModuleV4L2::Init(const char* deviceUniqueIdUTF8) - for (n = 0; n < 64; n++) - { - sprintf(device, "/dev/video%d", n); -- if ((fd = open(device, O_RDONLY)) != -1) -+ if ((fd = v4l2_open(device, O_RDONLY)) != -1) - { - // query device capabilities - struct v4l2_capability cap; -- if (ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) -+ if (v4l2_ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) - { - if (cap.bus_info[0] != 0) - { -@@ -91,13 +94,13 @@ WebRtc_Word32 VideoCaptureModuleV4L2::Init(const char* deviceUniqueIdUTF8) - (const char*) deviceUniqueIdUTF8, - strlen((const char*) deviceUniqueIdUTF8)) == 0) //match with device id - { -- close(fd); -+ v4l2_close(fd); - found = true; - break; // fd matches with device unique id supplied - } - } - } -- close(fd); // close since this is not the matching device -+ v4l2_close(fd); // close since this is not the matching device - } - } - if (!found) -@@ -117,7 +120,7 @@ VideoCaptureModuleV4L2::~VideoCaptureModuleV4L2() - delete _captureCritSect; - } - if (_deviceFd != -1) -- close(_deviceFd); -+ v4l2_close(_deviceFd); - } - - WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( -@@ -142,7 +145,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - char device[20]; - sprintf(device, "/dev/video%d", (int) _deviceId); - -- if ((_deviceFd = open(device, O_RDWR | O_NONBLOCK, 0)) < 0) -+ if ((_deviceFd = v4l2_open(device, O_RDWR | O_NONBLOCK, 0)) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in opening %s errono = %d", device, errno); -@@ -175,7 +178,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - for (int i = 0; i < nFormats; i++) - { - video_fmt.fmt.pix.pixelformat = fmts[i]; -- if (ioctl(_deviceFd, VIDIOC_TRY_FMT, &video_fmt) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_TRY_FMT, &video_fmt) < 0) - { - continue; - } -@@ -200,7 +203,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - _captureVideoType = kVideoMJPEG; - - //set format and frame size now -- if (ioctl(_deviceFd, VIDIOC_S_FMT, &video_fmt) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_S_FMT, &video_fmt) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in VIDIOC_S_FMT, errno = %d", errno); -@@ -217,7 +220,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - struct v4l2_streamparm streamparms; - memset(&streamparms, 0, sizeof(streamparms)); - streamparms.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -- if (ioctl(_deviceFd, VIDIOC_G_PARM, &streamparms) < 0) { -+ if (v4l2_ioctl(_deviceFd, VIDIOC_G_PARM, &streamparms) < 0) { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "error in VIDIOC_G_PARM errno = %d", errno); - driver_framerate_support = false; -@@ -230,7 +233,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - streamparms.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - streamparms.parm.capture.timeperframe.numerator = 1; - streamparms.parm.capture.timeperframe.denominator = capability.maxFPS; -- if (ioctl(_deviceFd, VIDIOC_S_PARM, &streamparms) < 0) { -+ if (v4l2_ioctl(_deviceFd, VIDIOC_S_PARM, &streamparms) < 0) { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "Failed to set the framerate. errno=%d", errno); - driver_framerate_support = false; -@@ -268,7 +271,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StartCapture( - // Needed to start UVC camera - from the uvcview application - enum v4l2_buf_type type; - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -- if (ioctl(_deviceFd, VIDIOC_STREAMON, &type) == -1) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_STREAMON, &type) == -1) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "Failed to turn on stream"); -@@ -303,7 +306,7 @@ WebRtc_Word32 VideoCaptureModuleV4L2::StopCapture() - _captureThread = NULL; - - DeAllocateVideoBuffers(); -- close(_deviceFd); -+ v4l2_close(_deviceFd); - _deviceFd = -1; - } - -@@ -321,7 +324,7 @@ bool VideoCaptureModuleV4L2::AllocateVideoBuffers() - rbuffer.memory = V4L2_MEMORY_MMAP; - rbuffer.count = kNoOfV4L2Bufffers; - -- if (ioctl(_deviceFd, VIDIOC_REQBUFS, &rbuffer) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_REQBUFS, &rbuffer) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "Could not get buffers from device. errno = %d", errno); -@@ -344,24 +347,24 @@ bool VideoCaptureModuleV4L2::AllocateVideoBuffers() - buffer.memory = V4L2_MEMORY_MMAP; - buffer.index = i; - -- if (ioctl(_deviceFd, VIDIOC_QUERYBUF, &buffer) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_QUERYBUF, &buffer) < 0) - { - return false; - } - -- _pool[i].start = mmap(NULL, buffer.length, PROT_READ | PROT_WRITE, MAP_SHARED, -+ _pool[i].start = v4l2_mmap(NULL, buffer.length, PROT_READ | PROT_WRITE, MAP_SHARED, - _deviceFd, buffer.m.offset); - - if (MAP_FAILED == _pool[i].start) - { - for (unsigned int j = 0; j < i; j++) -- munmap(_pool[j].start, _pool[j].length); -+ v4l2_munmap(_pool[j].start, _pool[j].length); - return false; - } - - _pool[i].length = buffer.length; - -- if (ioctl(_deviceFd, VIDIOC_QBUF, &buffer) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_QBUF, &buffer) < 0) - { - return false; - } -@@ -373,14 +376,14 @@ bool VideoCaptureModuleV4L2::DeAllocateVideoBuffers() +@@ -26,6 +31,15 @@ + #include "critical_section_wrapper.h" + #include "video_capture_linux.h" + ++#ifdef HAVE_LIBV4L2 ++#define open v4l2_open ++#define close v4l2_close ++#define dup v4l2_dup ++#define ioctl v4l2_ioctl ++#define mmap v4l2_mmap ++#define munmap v4l2_munmap ++#endif ++ + namespace webrtc { - // unmap buffers - for (int i = 0; i < _buffersAllocatedByDevice; i++) -- munmap(_pool[i].start, _pool[i].length); -+ v4l2_munmap(_pool[i].start, _pool[i].length); - - delete[] _pool; - - // turn off stream - enum v4l2_buf_type type; - type = V4L2_BUF_TYPE_VIDEO_CAPTURE; -- if (ioctl(_deviceFd, VIDIOC_STREAMOFF, &type) < 0) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_STREAMOFF, &type) < 0) - { - WEBRTC_TRACE(webrtc::kTraceError, webrtc::kTraceVideoCapture, _id, - "VIDIOC_STREAMOFF error. errno: %d", errno); -@@ -438,7 +441,7 @@ bool VideoCaptureModuleV4L2::CaptureProcess() - buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; - buf.memory = V4L2_MEMORY_MMAP; - // dequeue a buffer - repeat until dequeued properly! -- while (ioctl(_deviceFd, VIDIOC_DQBUF, &buf) < 0) -+ while (v4l2_ioctl(_deviceFd, VIDIOC_DQBUF, &buf) < 0) - { - if (errno != EINTR) - { -@@ -457,7 +460,7 @@ bool VideoCaptureModuleV4L2::CaptureProcess() - IncomingFrame((unsigned char*) _pool[buf.index].start, - buf.bytesused, frameInfo); - // enqueue the buffer again -- if (ioctl(_deviceFd, VIDIOC_QBUF, &buf) == -1) -+ if (v4l2_ioctl(_deviceFd, VIDIOC_QBUF, &buf) == -1) - { - WEBRTC_TRACE(webrtc::kTraceWarning, webrtc::kTraceVideoCapture, _id, - "Failed to enqueue capture buffer"); + namespace videocapturemodule diff --git media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi -index 8d38102..3e8f76b 100644 +index d46b5aa..e452223 100644 --- mozilla/media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi +++ mozilla/media/webrtc/trunk/src/modules/video_capture/main/source/video_capture.gypi -@@ -179,6 +179,7 @@ - 'libraries': [ - '-lXext', - '-lX11', -+ '-lv4l2', +@@ -7,6 +7,9 @@ + # be found in the AUTHORS file in the root of the source tree. + + { ++ 'variables': { ++ 'use_libv4l2%': 0, ++ }, + 'targets': [ + { + 'target_name': 'video_capture_module', +@@ -49,6 +52,16 @@ + }, { # include_internal_video_capture == 1 + 'conditions': [ + ['include_v4l2_video_capture==1', { ++ 'conditions': [ ++ ['use_libv4l2==1', { ++ 'defines': [ ++ 'HAVE_LIBV4L2', ++ ], ++ 'libraries': [ ++ '-lv4l2', ++ ], ++ }], ++ ], + 'include_dirs': [ + 'linux', ], - }], - ['OS=="linux"', { diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in -index 0440c26..8f6c735 100644 +index 9c16ffa..1db3794 100644 --- mozilla/toolkit/library/Makefile.in +++ mozilla/toolkit/library/Makefile.in -@@ -411,6 +411,9 @@ EXTRA_DSO_LDOPTS += \ - $(DEPTH)/media/webrtc/signaling/signaling_sipcc/$(LIB_PREFIX)sipcc.$(LIB_SUFFIX) \ - $(NULL) - endif -+ifdef MOZ_WEBRTC_LIBV4L +@@ -405,6 +405,7 @@ endif + EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib) + + ifdef MOZ_WEBRTC +EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS) -+endif - ifdef MOZ_WEBRTC_IN_LIBXUL - include $(topsrcdir)/media/webrtc/shared_libs.mk - EXTRA_DSO_LDOPTS += $(WEBRTC_LIBS) + ifdef MOZ_PEERCONNECTION + COMPONENT_LIBS += peerconnection + endif From owner-freebsd-gecko@FreeBSD.ORG Sun Mar 10 21:05:31 2013 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 6405D9BC for ; Sun, 10 Mar 2013 21:05:31 +0000 (UTC) (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: from trillian.chruetertee.ch (trillian.chruetertee.ch [217.150.245.56]) by mx1.freebsd.org (Postfix) with ESMTP id E5C02FC7 for ; Sun, 10 Mar 2013 21:05:30 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian [217.150.245.56]) by trillian.chruetertee.ch (8.14.4/8.14.3) with ESMTP id r2AL5U2p006626 for ; Sun, 10 Mar 2013 21:05:30 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: (from www@localhost) by trillian.chruetertee.ch (8.14.4/8.14.3/Submit) id r2AL5OUk004537 for freebsd-gecko@freebsd.org; Sun, 10 Mar 2013 21:05:24 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Date: Sun, 10 Mar 2013 21:05:24 GMT Message-Id: <201303102105.r2AL5OUk004537@trillian.chruetertee.ch> X-Authentication-Warning: trillian.chruetertee.ch: www set sender to svn-freebsd-gecko@chruetertee.ch using -f From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1208 - in trunk/www/firefox-nightly: . files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: freebsd-gecko@freebsd.org List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 10 Mar 2013 21:05:31 -0000 Author: jbeich Date: Sun Mar 10 21:05:24 2013 New Revision: 1208 Log: update Nightly Deleted: trunk/www/firefox-nightly/files/patch-bug829653 trunk/www/firefox-nightly/files/patch-bug836824 trunk/www/firefox-nightly/files/patch-webvtt-issue227 Modified: trunk/www/firefox-nightly/Makefile.hgrev trunk/www/firefox-nightly/distinfo Modified: trunk/www/firefox-nightly/Makefile.hgrev ============================================================================== --- trunk/www/firefox-nightly/Makefile.hgrev Sun Mar 10 21:05:16 2013 (r1207) +++ trunk/www/firefox-nightly/Makefile.hgrev Sun Mar 10 21:05:24 2013 (r1208) @@ -1 +1 @@ -HGREV= 124110:0e7639e3bdfb +HGREV= 124318:b1a08130fae6 Modified: trunk/www/firefox-nightly/distinfo ============================================================================== --- trunk/www/firefox-nightly/distinfo Sun Mar 10 21:05:16 2013 (r1207) +++ trunk/www/firefox-nightly/distinfo Sun Mar 10 21:05:24 2013 (r1208) @@ -1,2 +1,2 @@ -SHA256 (firefox-nightly/0e7639e3bdfb.tar.bz2) = d9222d211aaa9c4af638b9c366e1664cd1c00b6615b3df2ad4e6db340f8a413c -SIZE (firefox-nightly/0e7639e3bdfb.tar.bz2) = 110668706 +SHA256 (firefox-nightly/b1a08130fae6.tar.bz2) = 7ea8667851f1b455a3cdb256ab1606f12dbf421cb6a37971497b2f5582b9fa85 +SIZE (firefox-nightly/b1a08130fae6.tar.bz2) = 109313974 Deleted: trunk/www/firefox-nightly/files/patch-bug829653 ============================================================================== --- trunk/www/firefox-nightly/files/patch-bug829653 Sun Mar 10 21:05:24 2013 (r1207) +++ /dev/null 00:00:00 1970 (deleted) @@ -1,78 +0,0 @@ -dro.d@gmail.com> -Bug 829653 - fix content/media build with --enable-gstreamer - - -diff --git a/content/media/DecoderTraits.cpp b/content/media/DecoderTraits.cpp -index d4f1e42..ab1d0d5 100644 ---- content/media/DecoderTraits.cpp -+++ content/media/DecoderTraits.cpp -@@ -178,16 +178,22 @@ IsWebMType(const nsACString& aType) - static const char* const gH264Types[4] = { - "video/mp4", - "video/3gpp", - "video/quicktime", - nullptr - }; - - static bool -+IsH264Type(const nsACString& aType) -+{ -+ return CodecListContains(gH264Types, aType); -+} -+ -+static bool - IsGStreamerSupportedType(const nsACString& aMimeType) - { - if (!MediaDecoder::IsGStreamerEnabled()) - return false; - if (IsH264Type(aMimeType)) - return true; - if (!Preferences::GetBool("media.prefer-gstreamer", false)) - return false; -@@ -196,22 +202,16 @@ IsGStreamerSupportedType(const nsACString& aMimeType) - return true; - #endif - #ifdef MOZ_OGG - if (IsOggType(aMimeType)) - return true; - #endif - return false; - } -- --static bool --IsH264Type(const nsACString& aType) --{ -- return CodecListContains(gH264Types, aType); --} - #endif - - #ifdef MOZ_WIDGET_GONK - static const char* const gOmxTypes[6] = { - "audio/mpeg", - "audio/mp4", - "video/mp4", - "video/3gpp", -diff --git a/content/media/Makefile.in b/content/media/Makefile.in -index 4b24c94..df28c17 100644 ---- content/media/Makefile.in -+++ content/media/Makefile.in -@@ -72,15 +72,19 @@ ifdef MOZ_SYDNEYAUDIO - EXPORTS += \ - AudioStream.h \ - $(NULL) - CPPSRCS += \ - AudioStream.cpp \ - $(NULL) - endif - -+ifdef MOZ_GSTREAMER -+OS_CXXFLAGS += $(GSTREAMER_CFLAGS) -+endif -+ - FORCE_STATIC_LIB = 1 - - include $(topsrcdir)/config/config.mk - include $(topsrcdir)/ipc/chromium/chromium-config.mk - include $(topsrcdir)/config/rules.mk - - DEFINES += -D_IMPL_NS_LAYOUT Deleted: trunk/www/firefox-nightly/files/patch-bug836824 ============================================================================== --- trunk/www/firefox-nightly/files/patch-bug836824 Sun Mar 10 21:05:24 2013 (r1207) +++ /dev/null 00:00:00 1970 (deleted) @@ -1,33 +0,0 @@ -commit 35107a0 (HEAD) -Author: Paul Adenot -Date: Mon Feb 4 20:21:19 2013 +0100 - - Bug 836824 - libsoundtouch fails to build due to __get_cpuid() invocation, if you don't have xcode command line tools. r= ---- - media/libsoundtouch/moz-libsoundtouch.patch | 24 ++++++++++++++++++++++++ - media/libsoundtouch/src/cpu_detect_x86.cpp | 5 ++++- - 2 files changed, 28 insertions(+), 1 deletion(-) - -diff --git media/libsoundtouch/src/cpu_detect_x86.cpp media/libsoundtouch/src/cpu_detect_x86.cpp -index a42008e..7a31aa9 100644 ---- media/libsoundtouch/src/cpu_detect_x86.cpp -+++ media/libsoundtouch/src/cpu_detect_x86.cpp -@@ -101,7 +101,7 @@ uint detectCPUextensions(void) - - uint res = 0; - --#if defined(__GNUC__) -+#if defined(__GNUC__) && defined(HAVE_CPUID_H) - // GCC version of cpuid. Requires GCC 4.3.0 or later for __cpuid intrinsic support. - uint eax, ebx, ecx, edx; // unsigned int is the standard type. uint is defined by the compiler and not guaranteed to be portable. - -@@ -112,6 +112,9 @@ uint detectCPUextensions(void) - if (edx & bit_SSE) res = res | SUPPORT_SSE; - if (edx & bit_SSE2) res = res | SUPPORT_SSE2; - -+#elif defined(__GNUC__) -+ // No cpuid.h --> no cpuid support -+ return 0; - #else - // Window / VS version of cpuid. Notice that Visual Studio 2005 or later required - // for __cpuid intrinsic support. Deleted: trunk/www/firefox-nightly/files/patch-webvtt-issue227 ============================================================================== --- trunk/www/firefox-nightly/files/patch-webvtt-issue227 Sun Mar 10 21:05:24 2013 (r1207) +++ /dev/null 00:00:00 1970 (deleted) @@ -1,14 +0,0 @@ ---- media/webvtt/alloc.c~ -+++ media/webvtt/alloc.c -@@ -26,11 +26,7 @@ - */ - - #include --#if ( defined(__APPLE__) && defined(__MACH__) ) - #include --#else --#include --#endif - #include - - static void *default_alloc( void *unused, webvtt_uint nb ); From owner-freebsd-gecko@FreeBSD.ORG Mon Mar 11 07:14:38 2013 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 0920F995 for ; Mon, 11 Mar 2013 07:14:38 +0000 (UTC) (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: from trillian.chruetertee.ch (trillian.chruetertee.ch [217.150.245.56]) by mx1.freebsd.org (Postfix) with ESMTP id 8B15F9C9 for ; Mon, 11 Mar 2013 07:14:36 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian [217.150.245.56]) by trillian.chruetertee.ch (8.14.4/8.14.3) with ESMTP id r2B7EZg5074542 for ; Mon, 11 Mar 2013 07:14:35 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: (from www@localhost) by trillian.chruetertee.ch (8.14.4/8.14.3/Submit) id r2B7EUZc074396 for freebsd-gecko@freebsd.org; Mon, 11 Mar 2013 07:14:30 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Date: Mon, 11 Mar 2013 07:14:30 GMT Message-Id: <201303110714.r2B7EUZc074396@trillian.chruetertee.ch> X-Authentication-Warning: trillian.chruetertee.ch: www set sender to svn-freebsd-gecko@chruetertee.ch using -f From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1209 - trunk/Mk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: freebsd-gecko@freebsd.org List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Mar 2013 07:14:38 -0000 Author: jbeich Date: Mon Mar 11 07:14:30 2013 New Revision: 1209 Log: abort build early after r1195 Modified: trunk/Mk/bsd.gecko.mk Modified: trunk/Mk/bsd.gecko.mk ============================================================================== --- trunk/Mk/bsd.gecko.mk Sun Mar 10 21:05:24 2013 (r1208) +++ trunk/Mk/bsd.gecko.mk Mon Mar 11 07:14:30 2013 (r1209) @@ -543,6 +543,10 @@ CPPFLAGS+= -isystem${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib -Wl,-z,origin -Wl,-rpath,\\\$$\$$ORIGIN +.if ${OSVERSION} < 802501 +IGNORE= is not supported on EoL releases +.endif + .if ${MOZILLA_VER:R:R} >= 19 || ${MOZILLA:Mseamonkey*} # prefer clang . if ${CC} == "cc" && (exists(/usr/bin/clang) || \ From owner-freebsd-gecko@FreeBSD.ORG Mon Mar 11 07:25:20 2013 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 7AB0BA5A for ; Mon, 11 Mar 2013 07:25:20 +0000 (UTC) (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: from trillian.chruetertee.ch (trillian.chruetertee.ch [217.150.245.56]) by mx1.freebsd.org (Postfix) with ESMTP id EEB6AA22 for ; Mon, 11 Mar 2013 07:25:19 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian [217.150.245.56]) by trillian.chruetertee.ch (8.14.4/8.14.3) with ESMTP id r2B7PI7L015238 for ; Mon, 11 Mar 2013 07:25:18 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: (from www@localhost) by trillian.chruetertee.ch (8.14.4/8.14.3/Submit) id r2B7PDTt015157 for freebsd-gecko@freebsd.org; Mon, 11 Mar 2013 07:25:13 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Date: Mon, 11 Mar 2013 07:25:13 GMT Message-Id: <201303110725.r2B7PDTt015157@trillian.chruetertee.ch> X-Authentication-Warning: trillian.chruetertee.ch: www set sender to svn-freebsd-gecko@chruetertee.ch using -f From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1210 - trunk/Mk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: freebsd-gecko@freebsd.org List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Mar 2013 07:25:20 -0000 Author: jbeich Date: Mon Mar 11 07:25:13 2013 New Revision: 1210 Log: backout last commit, the error itself increases maintenance Modified: trunk/Mk/bsd.gecko.mk Modified: trunk/Mk/bsd.gecko.mk ============================================================================== --- trunk/Mk/bsd.gecko.mk Mon Mar 11 07:14:30 2013 (r1209) +++ trunk/Mk/bsd.gecko.mk Mon Mar 11 07:25:13 2013 (r1210) @@ -543,10 +543,6 @@ CPPFLAGS+= -isystem${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib -Wl,-z,origin -Wl,-rpath,\\\$$\$$ORIGIN -.if ${OSVERSION} < 802501 -IGNORE= is not supported on EoL releases -.endif - .if ${MOZILLA_VER:R:R} >= 19 || ${MOZILLA:Mseamonkey*} # prefer clang . if ${CC} == "cc" && (exists(/usr/bin/clang) || \ From owner-freebsd-gecko@FreeBSD.ORG Mon Mar 11 07:29:29 2013 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 1BCAAB59 for ; Mon, 11 Mar 2013 07:29:29 +0000 (UTC) (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: from trillian.chruetertee.ch (trillian.chruetertee.ch [217.150.245.56]) by mx1.freebsd.org (Postfix) with ESMTP id 8FEECA34 for ; Mon, 11 Mar 2013 07:29:28 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian [217.150.245.56]) by trillian.chruetertee.ch (8.14.4/8.14.3) with ESMTP id r2B7TRIU035415 for ; Mon, 11 Mar 2013 07:29:27 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: (from www@localhost) by trillian.chruetertee.ch (8.14.4/8.14.3/Submit) id r2B7TMPC034878 for freebsd-gecko@freebsd.org; Mon, 11 Mar 2013 07:29:22 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Date: Mon, 11 Mar 2013 07:29:22 GMT Message-Id: <201303110729.r2B7TMPC034878@trillian.chruetertee.ch> X-Authentication-Warning: trillian.chruetertee.ch: www set sender to svn-freebsd-gecko@chruetertee.ch using -f From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1211 - trunk/Mk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: freebsd-gecko@freebsd.org List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Mar 2013 07:29:29 -0000 Author: jbeich Date: Mon Mar 11 07:29:22 2013 New Revision: 1211 Log: relax a few version checks Modified: trunk/Mk/bsd.gecko.mk Modified: trunk/Mk/bsd.gecko.mk ============================================================================== --- trunk/Mk/bsd.gecko.mk Mon Mar 11 07:25:13 2013 (r1210) +++ trunk/Mk/bsd.gecko.mk Mon Mar 11 07:29:22 2013 (r1211) @@ -570,14 +570,13 @@ .if ${OSVERSION} > 1000011 # use jemalloc 3.0.0 API in libc MOZ_EXPORT+= MOZ_JEMALLOC=1 MOZ_JEMALLOC3=1 -.elif ${OSVERSION} > 701106 +.else MOZ_OPTIONS+= --enable-jemalloc MOZ_EXPORT+= MOZ_JEMALLOC=1 MOZ_JEMALLOC3=1 .endif .endif -.if (${OSVERSION} >= 900000 && ${OSVERSION} < 900045) \ - || ${OSVERSION} < 802513 +.if ${OSVERSION} >= 900000 && ${OSVERSION} < 900045 MOZ_EXPORT+= ac_cv_thread_keyword=no \ je_cv_tls_model=no .endif From owner-freebsd-gecko@FreeBSD.ORG Mon Mar 11 11:06:56 2013 Return-Path: Delivered-To: gecko@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id B2B7BBA2 for ; Mon, 11 Mar 2013 11:06:56 +0000 (UTC) (envelope-from owner-bugmaster@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 9EB6A7F2 for ; Mon, 11 Mar 2013 11:06:56 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.6/8.14.6) with ESMTP id r2BB6uDZ089294 for ; Mon, 11 Mar 2013 11:06:56 GMT (envelope-from owner-bugmaster@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.6/8.14.6/Submit) id r2BB6u3L089292 for gecko@FreeBSD.org; Mon, 11 Mar 2013 11:06:56 GMT (envelope-from owner-bugmaster@FreeBSD.org) Date: Mon, 11 Mar 2013 11:06:56 GMT Message-Id: <201303111106.r2BB6u3L089292@freefall.freebsd.org> X-Authentication-Warning: freefall.freebsd.org: gnats set sender to owner-bugmaster@FreeBSD.org using -f From: FreeBSD bugmaster To: gecko@FreeBSD.org Subject: Current problem reports assigned to gecko@FreeBSD.org X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Mar 2013 11:06:56 -0000 Note: to view an individual PR, use: http://www.freebsd.org/cgi/query-pr.cgi?pr=(number). The following is a listing of current problems submitted by FreeBSD users. These represent problem reports covering all versions including experimental development code and obsolete releases. S Tracker Resp. Description -------------------------------------------------------------------------------- o ports/176719 gecko patches for www/firefox to compile on powerpc. o ports/175421 gecko workaround: www/firefox is MAKE_JOBS_SAFE but never us o ports/170402 gecko www/linux-firefox: crash with flashplugin o ports/170310 gecko mail/thunderbird: coredump/crash when used with OpenLD o ports/169729 gecko www/firefox-esr "make package" produces package with z o ports/169366 gecko www/xpi-* ports need re-install after each Firefox upd o ports/168091 gecko Mk/bsd.gecko.mk error: USE_FIREFOX doesn't work correc f ports/165263 gecko mail/thunderbird: core dumping most time when users ar o ports/164239 gecko [PATCH] mail/thunderbird: crash with nss_ldap o ports/160387 gecko security/ca_root_nss: Allow user to trust extra local f ports/155949 gecko www/firefox: firefox 4, WITH_PGO, better Text against o ports/144044 gecko [PATCH] www/firefox: Makefile.webplugins target order 12 problems total. From owner-freebsd-gecko@FreeBSD.ORG Mon Mar 11 14:44:27 2013 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id D345565F for ; Mon, 11 Mar 2013 14:44:27 +0000 (UTC) (envelope-from c.kworr@gmail.com) Received: from mail-bk0-x22d.google.com (mail-bk0-x22d.google.com [IPv6:2a00:1450:4008:c01::22d]) by mx1.freebsd.org (Postfix) with ESMTP id 6DEDB862 for ; Mon, 11 Mar 2013 14:44:27 +0000 (UTC) Received: by mail-bk0-f45.google.com with SMTP id i18so1726376bkv.32 for ; Mon, 11 Mar 2013 07:44:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:subject :content-type:content-transfer-encoding; bh=KPbi2/aFhlP9rz04yQLXcSirHCNK5yNceP4eTXBUf6s=; b=xgOVc/eGgPw9OGmeu5FCzABMCDJNjai4KmAvnzGOL7qpyeV3U3C6RYVSkBoNjRm6uI T1rLiMTSo7kDSRBMOvBn9RaFVNHNAavkxkuuIhUDj7uOGmCp64U6oOQk4/NIWr7GqADd utUsZDIVszYYBS8XO2tVC6GsVk2XxijbuwhfQr3L2B9j550aG2lHBqUnbzlTI8DeVRJ3 lQyERE0/TkPmRCtMNqSHyM5tFAFhOie7wXkXQBygiezXNYb4EifoXhprwHLnxoC78+/3 f7xq3jw0XsruE8eA2ztPWuK3ladsMsyWGN2Rz8IexalYUtqY1lQieTDSHkHgJ8y6S0+u gI8Q== X-Received: by 10.204.184.193 with SMTP id cl1mr4764649bkb.17.1363013066606; Mon, 11 Mar 2013 07:44:26 -0700 (PDT) Received: from [192.168.1.129] ([91.196.229.122]) by mx.google.com with ESMTPS id s10sm4169709bkt.10.2013.03.11.07.44.25 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 11 Mar 2013 07:44:25 -0700 (PDT) Message-ID: <513DEDC8.4040601@gmail.com> Date: Mon, 11 Mar 2013 16:44:24 +0200 From: Volodymyr Kostyrko User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:19.0) Gecko/20100101 Firefox/19.0 SeaMonkey/2.16.1 MIME-Version: 1.0 To: freebsd-gecko@freebsd.org Subject: seamonkey ukrainian localization breaks Mail Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Mar 2013 14:44:27 -0000 Hi all. Just after the recent update to 2.16.1 Seamonkey renders Mail window as empty - there are borders for window parts but there are no icons and windows doesn't respond for keystrokes like Ctrl-W or Ctrl-Q. Everything works with russian locale however when I switch to ukrainian everything breaks. -- Sphinx of black quartz, judge my vow. From owner-freebsd-gecko@FreeBSD.ORG Tue Mar 12 14:14:41 2013 Return-Path: Delivered-To: gecko@FreeBSD.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 66882B93; Tue, 12 Mar 2013 14:14:41 +0000 (UTC) (envelope-from awarecons@gmail.com) Received: from mail-ie0-x22f.google.com (mail-ie0-x22f.google.com [IPv6:2607:f8b0:4001:c03::22f]) by mx1.freebsd.org (Postfix) with ESMTP id F0899BDE; Tue, 12 Mar 2013 14:14:40 +0000 (UTC) Received: by mail-ie0-f175.google.com with SMTP id c12so6302158ieb.6 for ; Tue, 12 Mar 2013 07:14:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:date:message-id:subject:from:to :content-type; bh=Z/7GRdXjRe6UTqgg6GW9ZEZkfeklfOEBUqEIyUXVcpo=; b=vm+FPL5QW/8LQLHpCMsqV+GozhUIUcmkhcTTXc2wnx0tg7wvNx+e1nXnIOoDeX7PbX hYvw/s2yN/QtLxTba3KMS1wUPuXvbiUdZ0plYgu9l+9pFZl274uegqN1JXgz5pwKo2ox S4FkiBMcqy6JxbYux2kM17FDvib9Ssw0/MNVNw0f+J/x5qrRGD6A3NToIWpDI0Kt0lZO Qe43Feio6z/oM0GbGz70yzNBXNtiVic7ipiO1I5axRzrgS9rQ1flo58EDY3jW3OFFlq/ jCSSmKUmOJDstTx29R6+1+VmVMXhRJhZYFCT/vhqrTE5zysCYFFVTZ2FSEi/bfvlc9MO s/Pg== MIME-Version: 1.0 X-Received: by 10.42.68.66 with SMTP id w2mr9688924ici.6.1363097680228; Tue, 12 Mar 2013 07:14:40 -0700 (PDT) Received: by 10.64.16.131 with HTTP; Tue, 12 Mar 2013 07:14:39 -0700 (PDT) Date: Tue, 12 Mar 2013 18:14:39 +0400 Message-ID: Subject: www/firefox & seamonkey ISSUES config errors From: awarecons To: ports-bugs@freebsd.org, gecko@FreeBSD.org Content-Type: multipart/mixed; boundary=20cf30334f4b063c6704d7bae9c9 X-Mailman-Approved-At: Tue, 12 Mar 2013 15:26:28 +0000 X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Mar 2013 14:14:41 -0000 --20cf30334f4b063c6704d7bae9c9 Content-Type: text/plain; charset=ISO-8859-1 FreeBSD xxx 9.0-RELEASE-p5 FreeBSD 9.0-RELEASE-p5 #3: Sat Dec 29 20:04:22 MSK 2012 root@xxx:/sys/i386/compile/GENERIC i386 Upgrade firefox-19.0,1 to firefox-19.0.2,1: checking for conic... checking for valid optimization flags... yes checking size of int *... 0 configure: error: Unexpected pointer size ===> Script "../configure" failed unexpectedly. Please report the problem to gecko@FreeBSD.org [maintainer] and attach the "/usr/ports/www/firefox/work/mozilla-release/obj-i386-portbld-freebsd9.0/config.log" including the output of the failure of your make command. Also, it might be a good idea to provide an overview of all packages installed on your system (e.g. a /usr/sbin/pkg_info -Ea). *** Error code 1 Stop in /usr/ports/www/firefox. *** Error code 1 Upgrade seamonkey-2.16 to seamonkey-2.16.1: checking CAIRO_XRENDER_LIBS... -lcairo -pthread -lXrender -L/usr/local/lib -lX11 configure: error: Could not compile basic X program. ===> Script "../configure" failed unexpectedly. Please report the problem to gecko@FreeBSD.org [maintainer] and attach the "/usr/ports/www/seamonkey/work/comm-release/obj-i386-portbld-freebsd9.0/config.log" including the output of the failure of your make command. Also, it might be a good idea to provide an overview of all packages installed on your system (e.g. a /usr/sbin/pkg_info -Ea). *** Error code 1 Stop in /usr/ports/www/seamonkey. *** Error code 1 --- Silently fails, when without USE_GCC/clang directive set, either in Makefile or make.conf, or via ENV. It would be wise to warn via make message and/or ../ports/UPDATING, that both are capable with gcc 4.6+ and clang 3.2+ (as it appears from logs attached world's clang 3.0 fails). Thank you. --20cf30334f4b063c6704d7bae9c9 Content-Type: application/octet-stream; name="config.log" Content-Disposition: attachment; filename="config.log" Content-Transfer-Encoding: base64 X-Attachment-Id: f_he5zxszb0 VGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hp bGUKcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2Vz IGEgbWlzdGFrZS4KCmNvbmZpZ3VyZToxMTEzOiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlCmNv bmZpZ3VyZToxMTM0OiBjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUKY29uZmlndXJlOjExNTI6 IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlCmNvbmZpZ3VyZToxMjI5OiBjaGVja2luZyBmb3Ig bWF3awpjb25maWd1cmU6MTIyOTogY2hlY2tpbmcgZm9yIGdhd2sKY29uZmlndXJlOjEzMDA6IGNo ZWNraW5nIGZvciAvdXNyL2xvY2FsL2Jpbi9weXRob24yLjcKY29uZmlndXJlOjE1NTE6IGNoZWNr aW5nIGZvciAvdXNyL2xvY2FsL2Jpbi9wZXJsCmNvbmZpZ3VyZToyODU2OiBjaGVja2luZyBmb3Ig Z2NjCmNvbmZpZ3VyZToyOTY5OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIChjbGFu ZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1h bGlhc2luZyAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4g LVdsLC1ycGF0aCxcJCRPUklHSU4pIHdvcmtzCmNvbmZpZ3VyZToyOTg1OiBjbGFuZyAtbyBjb25m dGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmlj dC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25v LWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1M L3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVz dC5jICAxPiY1CmNvbmZpZ3VyZTozMDExOiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVy IChjbGFuZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixv cmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4pIGlzIGEgY3Jvc3MtY29tcGlsZXIKY29uZmlndXJl OjMwMTY6IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDCmNvbmZpZ3VyZTozMDI1 OiBjbGFuZyAtRSBjb25mdGVzdC5jCmNvbmZpZ3VyZTozMDQ0OiBjaGVja2luZyB3aGV0aGVyIGNs YW5nIGFjY2VwdHMgLWcKY29uZmlndXJlOjMwODU6IGNoZWNraW5nIGZvciBjKysKY29uZmlndXJl OjMxMTc6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyBjb21waWxlciAoY2xhbmcrKyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13ICAt TC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRo LFwkJE9SSUdJTikgd29ya3MKY29uZmlndXJlOjMxMzM6IGNsYW5nKysgLW8gY29uZnRlc3QgLU8y IC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNp bmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAt dyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13 IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2Nh bC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5DICAxPiY1 CmNvbmZpZ3VyZTozMTU5OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgKGNsYW5n KysgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3Qt YWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4g LVdsLC1ycGF0aCxcJCRPUklHSU4pIGlzIGEgY3Jvc3MtY29tcGlsZXIKY29uZmlndXJlOjMxNjQ6 IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIEdOVSBDKysKY29uZmlndXJlOjMxNzM6IGNs YW5nKysgLUUgY29uZnRlc3QuQwpjb25maWd1cmU6MzE5MjogY2hlY2tpbmcgd2hldGhlciBjbGFu ZysrIGFjY2VwdHMgLWcKY29uZmlndXJlOjMyMjY6IGNoZWNraW5nIGZvciByYW5saWIKY29uZmln dXJlOjMyNTg6IGNoZWNraW5nIGZvciBhcwpjb25maWd1cmU6MzMxMjogY2hlY2tpbmcgZm9yIGFy CmNvbmZpZ3VyZTozMzQ3OiBjaGVja2luZyBmb3IgbGQKY29uZmlndXJlOjMzODI6IGNoZWNraW5n IGZvciBzdHJpcApjb25maWd1cmU6MzQxNzogY2hlY2tpbmcgZm9yIHdpbmRyZXMKY29uZmlndXJl OjQyODI6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yCmNvbmZpZ3VyZTo0 MzYyOiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yCmNvbmZpZ3VyZTo0 MzgwOiBjbGFuZysrIC1FIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyA+L2Rl di9udWxsIDI+Y29uZnRlc3Qub3V0CmNvbmZpZ3VyZTo0NDY0OiBjaGVja2luZyBmb3IgYSBCU0Qg Y29tcGF0aWJsZSBpbnN0YWxsCmNvbmZpZ3VyZTo0NTE3OiBjaGVja2luZyB3aGV0aGVyIGxuIC1z IHdvcmtzCmNvbmZpZ3VyZTo0NTQwOiBjaGVja2luZyBmb3IgbWluaW11bSByZXF1aXJlZCBwZXJs IHZlcnNpb24gPj0gNS4wMDYKY29uZmlndXJlOjQ1NTE6IGNoZWNraW5nIGZvciBmdWxsIHBlcmwg aW5zdGFsbGF0aW9uCmNvbmZpZ3VyZTo0NTg4OiBjaGVja2luZyBmb3IgZG94eWdlbgpjb25maWd1 cmU6NDYzNzogY2hlY2tpbmcgZm9yIGF1dG9jb25mCmNvbmZpZ3VyZTo0Njg4OiBjaGVja2luZyBm b3IgdW56aXAKY29uZmlndXJlOjQ3NDQ6IGNoZWNraW5nIGZvciB6aXAKY29uZmlndXJlOjQ3OTg6 IGNoZWNraW5nIGZvciB4YXJncwpjb25maWd1cmU6NDg1MDogY2hlY2tpbmcgZm9yIHJwbWJ1aWxk CmNvbmZpZ3VyZTo1MTI5OiBjaGVja2luZyBjb21waWxlciB2ZXJzaW9uCmNvbmZpZ3VyZTo1MjAz OiBjaGVja2luZyBmb3IgZ21ha2UKY29uZmlndXJlOjUyNzA6IGNoZWNraW5nIGZvciBYCmNvbmZp Z3VyZTo1NTg3OiBjaGVja2luZyBmb3IgZG5ldF9udG9hIGluIC1sZG5ldApjb25maWd1cmU6NTYw NjogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUwv dXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxc JCRPUklHSU4gY29uZnRlc3QuYyAtbGRuZXQgICAxPiY1Ci91c3IvYmluL2xkOiBjYW5ub3QgZmlu ZCAtbGRuZXQKY2xhbmc6IGVycm9yOiBsaW5rZXIgY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNv ZGUgMSAodXNlIC12IHRvIHNlZSBpbnZvY2F0aW9uKQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFt IHdhczoKI2xpbmUgNTU5NSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKLyogT3Zl cnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8K LyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9m IGEgZ2NjMgogICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxk IHN0aWxsIGFwcGx5LiAgKi8KY2hhciBkbmV0X250b2EoKTsKCmludCBtYWluKCkgewpkbmV0X250 b2EoKQo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZTo1NjI4OiBjaGVja2luZyBmb3IgZG5ldF9udG9h IGluIC1sZG5ldF9zdHViCmNvbmZpZ3VyZTo1NjQ3OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1p c3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9s aWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5jIC1sZG5ldF9z dHViICAgMT4mNQovdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxkbmV0X3N0dWIKY2xhbmc6IGVy cm9yOiBsaW5rZXIgY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSAodXNlIC12IHRvIHNl ZSBpbnZvY2F0aW9uKQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgNTYzNiAi Y29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50 ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLyogV2UgdXNlIGNoYXIgYmVj YXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgogICAgYnVpbHRp biBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8K Y2hhciBkbmV0X250b2EoKTsKCmludCBtYWluKCkgewpkbmV0X250b2EoKQo7IHJldHVybiAwOyB9 CmNvbmZpZ3VyZTo1Njc2OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZQpjb25maWd1cmU6NTcw NDogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUwv dXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxc JCRPUklHSU4gY29uZnRlc3QuYyAgMT4mNQpjb25maWd1cmU6NTc3NDogY2hlY2tpbmcgZm9yIGNv bm5lY3QKY29uZmlndXJlOjU4MDI6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9 cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNy L2xvY2FsL2luY2x1ZGUgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXos b3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjU4 NjY6IGNoZWNraW5nIGZvciByZW1vdmUKY29uZmlndXJlOjU4OTQ6IGNsYW5nIC1vIGNvbmZ0ZXN0 IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJy b3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNy L2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMg IDE+JjUKY29uZmlndXJlOjU5NTg6IGNoZWNraW5nIGZvciBzaG1hdApjb25maWd1cmU6NTk4Njog Y2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1 bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4gY29uZnRlc3QuYyAgMT4mNQpjb25maWd1cmU6NjA1OTogY2hlY2tpbmcgZm9yIEljZUNv bm5lY3Rpb25OdW1iZXIgaW4gLWxJQ0UKY29uZmlndXJlOjYwNzg6IGNsYW5nIC1vIGNvbmZ0ZXN0 IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJy b3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNy L2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1ML3Vzci9sb2Nh bC9saWIgY29uZnRlc3QuYyAtbElDRSAgIDE+JjUKY29uZmlndXJlOjY0ODY6IGNsYW5nIC1jICAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1p c3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6NjQ4Mjox NTogZXJyb3I6IHVzZSBvZiB1bmRlY2xhcmVkIGlkZW50aWZpZXIgJ19fdGh1bWIyX18nCnJldHVy biBzaXplb2YoX190aHVtYjJfXyk7CiAgICAgICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4K Y29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDY0NzkgImNvbmZpZ3VyZSIKI2lu Y2x1ZGUgImNvbmZkZWZzLmgiCgppbnQgbWFpbigpIHsKcmV0dXJuIHNpemVvZihfX3RodW1iMl9f KTsKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6NjY4MDogY2hlY2tpbmcgdGhhdCBzdGF0aWMgYXNz ZXJ0aW9uIG1hY3JvcyB1c2VkIGluIGF1dG9jb25mIHRlc3RzIHdvcmsKY29uZmlndXJlOjY3MDE6 IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1 CmNvbmZpZ3VyZTo2NzE4OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVu ZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRl IGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6NjcxODoxOiBlcnJvcjogJ3N0YXRpY19hc3NlcnRf bGluZV82NzE4JyBkZWNsYXJlZCBhcyBhbiBhcnJheSB3aXRoIGEgbmVnYXRpdmUgc2l6ZQpDT05G SUdVUkVfU1RBVElDX0FTU0VSVCgwKQpefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpjb25maWd1 cmU6NjcxMzo0NDogbm90ZTogZXhwYW5kZWQgZnJvbToKI2RlZmluZSBDT05GSUdVUkVfU1RBVElD X0FTU0VSVChjb25kaXRpb24pIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0aW9u LCBfX0xJTkVfXykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K Y29uZmlndXJlOjY3MTQ6NTU6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNkZWZpbmUgQ09ORklHVVJF X1NUQVRJQ19BU1NFUlRfSU1QTChjb25kaXRpb24sIGxpbmUpIENPTkZJR1VSRV9TVEFUSUNfQVNT RVJUX0lNUEwyKGNvbmRpdGlvbiwgbGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXgpjb25maWd1cmU6NjcxNTo5NDogbm90ZTogZXhwYW5k ZWQgZnJvbToKI2RlZmluZSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24s IGxpbmUpIHR5cGVkZWYgaW50IHN0YXRpY19hc3NlcnRfbGluZV8jI2xpbmVbKGNvbmRpdGlvbikg PyAxIDogLTFdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+ fn5+fn5+fn5+CjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdh czoKI2xpbmUgNjcxMSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKCiNkZWZpbmUg Q09ORklHVVJFX1NUQVRJQ19BU1NFUlQoY29uZGl0aW9uKSBDT05GSUdVUkVfU1RBVElDX0FTU0VS VF9JTVBMKGNvbmRpdGlvbiwgX19MSU5FX18pCiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NF UlRfSU1QTChjb25kaXRpb24sIGxpbmUpIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwyKGNv bmRpdGlvbiwgbGluZSkKI2RlZmluZSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25k aXRpb24sIGxpbmUpIHR5cGVkZWYgaW50IHN0YXRpY19hc3NlcnRfbGluZV8jI2xpbmVbKGNvbmRp dGlvbikgPyAxIDogLTFdCgppbnQgbWFpbigpIHsKQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoMCkK OyByZXR1cm4gMDsgfQpjb25maWd1cmU6Njc0MTogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNo PXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNy L2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZTo2NzU4OiBjbGFuZysrIC1j IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJy b3IgLXcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJl OjY3NTg6MTogZXJyb3I6ICdzdGF0aWNfYXNzZXJ0X2xpbmVfNjc1OCcgZGVjbGFyZWQgYXMgYW4g YXJyYXkgd2l0aCBhIG5lZ2F0aXZlIHNpemUKQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoMCkKXn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KY29uZmlndXJlOjY3NTM6NDQ6IG5vdGU6IGV4cGFuZGVk IGZyb206CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoY29uZGl0aW9uKSBDT05GSUdV UkVfU1RBVElDX0FTU0VSVF9JTVBMKGNvbmRpdGlvbiwgX19MSU5FX18pCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmNvbmZpZ3VyZTo2NzU0OjU1OiBub3RlOiBl eHBhbmRlZCBmcm9tOgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0 aW9uLCBsaW5lKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K Y29uZmlndXJlOjY3NTU6OTQ6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNkZWZpbmUgQ09ORklHVVJF X1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKSB0eXBlZGVmIGludCBzdGF0aWNf YXNzZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24pID8gMSA6IC0xXQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fgoxIGVycm9yIGdlbmVyYXRl ZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDY3NTEgImNvbmZpZ3VyZSIK I2luY2x1ZGUgImNvbmZkZWZzLmgiCgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUKGNv bmRpdGlvbikgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTChjb25kaXRpb24sIF9fTElORV9f KQojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0aW9uLCBsaW5lKSBD T05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUpCiNkZWZpbmUgQ09O RklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKSB0eXBlZGVmIGludCBz dGF0aWNfYXNzZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24pID8gMSA6IC0xXQoKaW50IG1haW4o KSB7CkNPTkZJR1VSRV9TVEFUSUNfQVNTRVJUKDApCjsgcmV0dXJuIDA7IH0KY29uZmlndXJlOjY5 MTc6IGNoZWNraW5nIGZvciAtLW5vZXhlY3N0YWNrIG9wdGlvbiB0byBhcwpjb25maWd1cmU6Njky ODogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLVdhLC0tbm9leGVjc3RhY2sg LVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAx PiY1CmNvbmZpZ3VyZTo2OTQxOiBjaGVja2luZyBmb3IgLXogbm9leGVjc3RhY2sgb3B0aW9uIHRv IGxkCmNvbmZpZ3VyZTo2OTUyOiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1h bGlhc2luZyAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUwv dXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxc JCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjY5 NjY6IGNoZWNraW5nIGlmIHRvb2xjaGFpbiBzdXBwb3J0cyAtbW1teCAtbXNzc2UzIG9wdGlvbgpj b25maWd1cmU6Njk3ODogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLW1tbXgg LW1zc3NlMyAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25m dGVzdC5jIDE+JjUKY29uZmlndXJlOjY5OTQ6IGNoZWNraW5nIGlmIHRvb2xjaGFpbiBzdXBwb3J0 cyAtbW1teCAtbXNzZTQuMSBvcHRpb24KY29uZmlndXJlOjcwMDY6IGNsYW5nIC1jIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1m bm8tc3RyaWN0LWFsaWFzaW5nIC1tbW14IC1tc3NlNC4xIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lz dGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6NzAzMjogY2hl Y2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBzdXBwb3J0cyAtV2Vycm9yPXJldHVybi10eXBl CmNvbmZpZ3VyZTo3MDU1OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVu ZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2Vy cm9yIC1XZXJyb3I9cmV0dXJuLXR5cGUgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xv Y2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZTo3MDgzOiBjaGVja2luZyB3aGV0 aGVyIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIC1XdHlwZS1saW1pdHMKY29uZmlndXJlOjcxMDY6 IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XZXJyb3IgLVd0eXBlLWxpbWl0 cyAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5j IDE+JjUKY29uZmlndXJlOjcxMzQ6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgc3Vw cG9ydHMgLVdlbXB0eS1ib2R5CmNvbmZpZ3VyZTo3MTU3OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0 cmljdC1hbGlhc2luZyAtV2Vycm9yIC1XZW1wdHktYm9keSAtUXVudXNlZC1hcmd1bWVudHMgLU8y IC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5 c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjcxOTE6IGNo ZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgLVduby1vdmVybGVuZ3RoLXN0 cmluZ3MKY29uZmlndXJlOjcyMTQ6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1XZXJyb3IgLVdvdmVybGVuZ3RoLXN0cmluZ3MgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0v dXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZTo3Mjk4OiBjaGVja2lu ZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgc3VwcG9ydHMgLVdlcnJvcj1yZXR1cm4tdHlwZQpj b25maWd1cmU6NzMyMTogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVu ZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmlj dC1hbGlhc2luZyAtV2Vycm9yIC1XZXJyb3I9cmV0dXJuLXR5cGUgLVF1bnVzZWQtYXJndW1lbnRz IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcg LWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZTo3MzQ5 OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgc3VwcG9ydHMgLVd0eXBlLWxpbWl0 cwpjb25maWd1cmU6NzM3MjogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0 cmljdC1hbGlhc2luZyAtV2Vycm9yIC1XdHlwZS1saW1pdHMgLVF1bnVzZWQtYXJndW1lbnRzIC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlz eXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZTo3NDAwOiBj aGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgc3VwcG9ydHMgLVdlbXB0eS1ib2R5CmNv bmZpZ3VyZTo3NDIzOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0 LWFsaWFzaW5nIC1XZXJyb3IgLVdlbXB0eS1ib2R5IC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVt L3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6NzQ1OTogY2hlY2tp bmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyIHN1cHBvcnRzIC1Xbm8tb3Zlcmxlbmd0aC1zdHJp bmdzCmNvbmZpZ3VyZTo3NDgyOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1XZXJyb3IgLVdvdmVybGVuZ3RoLXN0cmluZ3MgLVF1bnVzZWQtYXJn dW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJy b3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3Vy ZTo3NTEwOiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgc3VwcG9ydHMgLVduby1p bnZhbGlkLW9mZnNldG9mCmNvbmZpZ3VyZTo3NTMzOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNl cHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XZXJyb3IgLVdpbnZhbGlkLW9mZnNldG9mIC1R dW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVt NCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4m NQpjb25maWd1cmU6NzU2MTogY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyIHN1cHBv cnRzIC1Xbm8tdmFyaWFkaWMtbWFjcm9zCmNvbmZpZ3VyZTo3NTg0OiBjbGFuZysrIC1jIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcg LWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XZXJyb3IgLVd2YXJpYWRpYy1t YWNyb3MgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRl c3QuQyAxPiY1CmNvbmZpZ3VyZTo3NjM2OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGls ZXIgc3VwcG9ydHMgLVduby1leHRlbmRlZC1vZmZzZXRvZgpjb25maWd1cmU6NzY1OTogY2xhbmcr KyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmlj dC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25v LWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2Vycm9yIC1X ZXh0ZW5kZWQtb2Zmc2V0b2YgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2lu Y2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZTo3Njk3OiBjaGVja2luZyB3aGV0aGVyIGxk IGhhcyBhcmNoaXZlIGV4dHJhY3Rpb24gZmxhZ3MKY29uZmlndXJlOjc3MjE6IGNsYW5nIC1vIGNv bmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lz dGVtL3Vzci9sb2NhbC9pbmNsdWRlIC1XbCwtLXdob2xlLWFyY2hpdmUgY29uZnRlc3QuYyAtV2ws LS1uby13aG9sZS1hcmNoaXZlIDE+JjUKY29uZmlndXJlOjc3NTY6IGNoZWNraW5nIGZvciA2NC1i aXQgT1MKY29uZmlndXJlOjc3NjU6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMg MT4mNQpjb25maWd1cmU6Nzc2NToxOiBlcnJvcjogJ3N0YXRpY19hc3NlcnRfbGluZV83NzY1JyBk ZWNsYXJlZCBhcyBhbiBhcnJheSB3aXRoIGEgbmVnYXRpdmUgc2l6ZQpDT05GSUdVUkVfU1RBVElD X0FTU0VSVChzaXplb2Yodm9pZCopID09IDgpCl5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn4KY29uZmlndXJlOjc3NjA6NDQ6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNk ZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoY29uZGl0aW9uKSBDT05GSUdVUkVfU1RBVElD X0FTU0VSVF9JTVBMKGNvbmRpdGlvbiwgX19MSU5FX18pCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCmNvbmZpZ3VyZTo3NzYxOjU1OiBub3RlOiBleHBhbmRlZCBm cm9tOgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0aW9uLCBsaW5l KSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KY29uZmlndXJl Ojc3NjI6OTQ6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19B U1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKSB0eXBlZGVmIGludCBzdGF0aWNfYXNzZXJ0X2xp bmVfIyNsaW5lWyhjb25kaXRpb24pID8gMSA6IC0xXQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmln dXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDc3NTggImNvbmZpZ3VyZSIKI2luY2x1ZGUg ImNvbmZkZWZzLmgiCgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUKGNvbmRpdGlvbikg Q09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTChjb25kaXRpb24sIF9fTElORV9fKQojZGVmaW5l IENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0aW9uLCBsaW5lKSBDT05GSUdVUkVf U1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUpCiNkZWZpbmUgQ09ORklHVVJFX1NU QVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKSB0eXBlZGVmIGludCBzdGF0aWNfYXNz ZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24pID8gMSA6IC0xXQoKaW50IG1haW4oKSB7CkNPTkZJ R1VSRV9TVEFUSUNfQVNTRVJUKHNpemVvZih2b2lkKikgPT0gOCkKOyByZXR1cm4gMDsgfQpjb25m aWd1cmU6ODIzMTogY2hlY2tpbmcgZm9yIGN1c3RvbSA8c3RkaW50Lmg+IGltcGxlbWVudGF0aW9u CmNvbmZpZ3VyZTo5NTQzOiBjaGVja2luZyB3aGV0aGVyIHRoZSBsaW5rZXIgc3VwcG9ydHMgSWRl bnRpY2FsIENvZGUgRm9sZGluZwpjb25maWd1cmU6OTU1MjogY2xhbmcgLW8gY29uZnRlc3QgIC1M L3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgs XCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayAtV2wsLS1pY2Y9c2FmZSAtZmZ1bmN0aW9uLXNl Y3Rpb25zIGNvbmZ0ZXN0LmMgIDE+JjIKL3Vzci9iaW4vbGQ6IHVucmVjb2duaXplZCBvcHRpb24g Jy0taWNmPXNhZmUnCi91c3IvYmluL2xkOiB1c2UgdGhlIC0taGVscCBvcHRpb24gZm9yIHVzYWdl IGluZm9ybWF0aW9uCmNsYW5nOiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhp dCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOjk2MjM6IGNoZWNr aW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzCmNvbmZpZ3VyZTo5NjM2OiBjbGFuZy1jcHAgLVF1 bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyA+L2Rl di9udWxsIDI+Y29uZnRlc3Qub3V0CmNvbmZpZ3VyZTo5NzAzOiBjbGFuZyAtbyBjb25mdGVzdCAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlh c2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0 aW9ucyAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjk3MzA6 IGNoZWNraW5nIGZvciB3b3JraW5nIGNvbnN0CmNvbmZpZ3VyZTo5Nzg0OiBjbGFuZyAtYyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9u cyAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5j IDE+JjUKY29uZmlndXJlOjk4MDg6IGNoZWNraW5nIGZvciBtb2RlX3QKY29uZmlndXJlOjk4NDQ6 IGNoZWNraW5nIGZvciBvZmZfdApjb25maWd1cmU6OTg4MDogY2hlY2tpbmcgZm9yIHBpZF90CmNv bmZpZ3VyZTo5OTE2OiBjaGVja2luZyBmb3Igc2l6ZV90CmNvbmZpZ3VyZTo5OTU5OiBjaGVja2lu ZyBmb3IgX19zdGRjYWxsCmNvbmZpZ3VyZTo5OTczOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNl cHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25z IC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0 ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZToxMDAwNTogY2hl Y2tpbmcgZm9yIHNzaXplX3QKY29uZmlndXJlOjEwMDE4OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtUXVudXNl ZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVdu by1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29u ZmlndXJlOjEwMDQzOiBjaGVja2luZyBmb3Igc3RfYmxrc2l6ZSBpbiBzdHJ1Y3Qgc3RhdApjb25m aWd1cmU6MTAwNTY6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rp b24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vz ci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTAwODA6IGNoZWNraW5n IGZvciBzaWdpbmZvX3QKY29uZmlndXJlOjEwMDkzOiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNo PXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmlj dC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtUXVudXNlZC1h cmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKU3RhY2sg ZHVtcDoKMC4JUHJvZ3JhbSBhcmd1bWVudHM6IC91c3IvYmluL2NsYW5nIC1jYzEgLXRyaXBsZSBp Mzg2LXVua25vd24tZnJlZWJzZDkuMCAtZW1pdC1vYmogLWRpc2FibGUtZnJlZSAtbWFpbi1maWxl LW5hbWUgY29uZnRlc3QuYyAtbXJlbG9jYXRpb24tbW9kZWwgc3RhdGljIC1tZGlzYWJsZS1mcC1l bGltIC1yZWxheGVkLWFsaWFzaW5nIC1tYXNtLXZlcmJvc2UgLW1jb25zdHJ1Y3Rvci1hbGlhc2Vz IC10YXJnZXQtY3B1IHBlbnRpdW00IC1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIgLWZmdW5jdGlv bi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWNvdmVyYWdlLWZpbGUgY29uZnRlc3QubyAtcmVz b3VyY2UtZGlyIC91c3IvYmluLy4uL2xpYi9jbGFuZy8zLjAgLWlzeXN0ZW0gL3Vzci9sb2NhbC9p bmNsdWRlIC1mbW9kdWxlLWNhY2hlLXBhdGggL3RtcC9jbGFuZy1tb2R1bGUtY2FjaGUgLU8yIC1X bm8tZXJyb3IgLXcgLWZlcnJvci1saW1pdCAxOSAtZm1lc3NhZ2UtbGVuZ3RoIDAgLWZnbnUtcnVu dGltZSAtZm9iamMtcnVudGltZS1oYXMtYXJjIC1mb2JqYy1ydW50aW1lLWhhcy13ZWFrIC1mb2Jq Yy1mcmFnaWxlLWFiaSAtZmRpYWdub3N0aWNzLXNob3ctb3B0aW9uIC1vIGNvbmZ0ZXN0Lm8gLXgg YyBjb25mdGVzdC5jIAoxLgk8ZW9mPiBwYXJzZXIgYXQgZW5kIG9mIGZpbGUKMi4JY29uZmlndXJl OjEwMDg4OjU6IExMVk0gSVIgZ2VuZXJhdGlvbiBvZiBkZWNsYXJhdGlvbiAnbWFpbicKMy4JY29u ZmlndXJlOjEwMDg4OjU6IEdlbmVyYXRpbmcgY29kZSBmb3IgZGVjbGFyYXRpb24gJ21haW4nCjQu CWNvbmZpZ3VyZToxMDA4ODoxMjogTExWTSBJUiBnZW5lcmF0aW9uIG9mIGNvbXBvdW5kIHN0YXRl bWVudCAoJ3t9JykKY2xhbmc6IGVycm9yOiB1bmFibGUgdG8gZXhlY3V0ZSBjb21tYW5kOiBJbGxl Z2FsIGluc3RydWN0aW9uOiA0IChjb3JlIGR1bXBlZCkKY2xhbmc6IGVycm9yOiBjbGFuZyBmcm9u dGVuZCBjb21tYW5kIGZhaWxlZCBkdWUgdG8gc2lnbmFsIDIgKHVzZSAtdiB0byBzZWUgaW52b2Nh dGlvbikKY2xhbmc6IG5vdGU6IGRpYWdub3N0aWMgbXNnOiBQbGVhc2Ugc3VibWl0IGEgYnVnIHJl cG9ydCB0byBodHRwOi8vbGx2bS5vcmcvYnVncy8gYW5kIGluY2x1ZGUgY29tbWFuZCBsaW5lIGFy Z3VtZW50cyBhbmQgYWxsIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uCmNsYW5nOiBub3RlOiBkaWFn bm9zdGljIG1zZzogUHJlcHJvY2Vzc2VkIHNvdXJjZShzKSBhcmUgbG9jYXRlZCBhdDoKY2xhbmc6 IG5vdGU6IGRpYWdub3N0aWMgbXNnOiAvdG1wL2NvbmZ0ZXN0LTlsN1JHei5pCmNvbmZpZ3VyZTog ZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAxMDA4NSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29u ZmRlZnMuaCIKI2RlZmluZSBfUE9TSVhfQ19TT1VSQ0UgMTk5NTA2TAogICAgICAgICAgICAgICAg ICAjaW5jbHVkZSA8c2lnbmFsLmg+CmludCBtYWluKCkgewpzaWdpbmZvX3QqIGluZm87CjsgcmV0 dXJuIDA7IH0KY29uZmlndXJlOjEwMTE5OiBjaGVja2luZyBmb3IgaW50NjQKY29uZmlndXJlOjEw MTMyOiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwv aW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjEwMTI4OjE6IGVycm9yOiB1c2Ugb2Yg dW5kZWNsYXJlZCBpZGVudGlmaWVyICdpbnQ2NCcKaW50NjQgZm9vID0gMDsKXgoxIGVycm9yIGdl bmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDEwMTI0ICJjb25m aWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgojaW5jbHVkZSA8c3RkaW8uaD4KICAgICAgICAg ICAgICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgppbnQgbWFpbigpIHsKaW50NjQgZm9vID0g MDsKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTAxNTc6IGNoZWNraW5nIGZvciB1aW50CmNvbmZp Z3VyZToxMDE3MDogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlv bi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNy L2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMDE5NTogY2hlY2tpbmcg Zm9yIHVpbnRfdApjb25maWd1cmU6MTAyMDg6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1RdW51c2VkLWFyZ3Vt ZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9y IC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6 MTAyMDQ6MTogZXJyb3I6IHVua25vd24gdHlwZSBuYW1lICd1aW50X3QnOyBkaWQgeW91IG1lYW4g J3VpbnQ4X3QnPwp1aW50X3QgZm9vID0gMDsKXn5+fn5+CnVpbnQ4X3QKL3Vzci9pbmNsdWRlL3N5 cy9fc3RkaW50Lmg6NTQ6MjA6IG5vdGU6ICd1aW50OF90JyBkZWNsYXJlZCBoZXJlCnR5cGVkZWYg X191aW50OF90ICAgICAgICAgICAgICAgdWludDhfdDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBeCjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdh czoKI2xpbmUgMTAyMDAgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCiNpbmNsdWRl IDxzdGRpby5oPgogICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CmludCBt YWluKCkgewp1aW50X3QgZm9vID0gMDsKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTAyNDI6IGNo ZWNraW5nIGZvciB1bmFtZS5kb21haW5uYW1lCmNvbmZpZ3VyZToxMDI1NTogY2xhbmcrKyAtYyAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlh c2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9y IC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1RdW51c2VkLWFy Z3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVy cm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1 cmU6MTAyNTE6NjI6IGVycm9yOiBubyBtZW1iZXIgbmFtZWQgJ2RvbWFpbm5hbWUnIGluICd1dHNu YW1lJwogICAgICAgICAgICAodm9pZCl1bmFtZShyZXMpOyAgaWYgKHJlcyAhPSAwKSB7IGRvbWFp biA9IHJlcy0+ZG9tYWlubmFtZTsgfSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB+fn4gIF4KMSBlcnJvciBnZW5lcmF0ZWQuCmNvbmZpZ3Vy ZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAxMDI0NyAiY29uZmlndXJlIgojaW5jbHVkZSAi Y29uZmRlZnMuaCIKI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CmludCBtYWluKCkgewogc3RydWN0 IHV0c25hbWUgKnJlczsgY2hhciAqZG9tYWluOwogICAgICAgICAgICAodm9pZCl1bmFtZShyZXMp OyAgaWYgKHJlcyAhPSAwKSB7IGRvbWFpbiA9IHJlcy0+ZG9tYWlubmFtZTsgfSAKOyByZXR1cm4g MDsgfQpjb25maWd1cmU6MTAyODI6IGNoZWNraW5nIGZvciB1bmFtZS5fX2RvbWFpbm5hbWUKY29u ZmlndXJlOjEwMjk1OiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0 LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAt Zm5vLWV4Y2VwdGlvbnMgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1 ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZToxMDI5MTo2MjogZXJyb3I6IG5vIG1lbWJlciBu YW1lZCAnX19kb21haW5uYW1lJyBpbiAndXRzbmFtZScKICAgICAgICAgICAgKHZvaWQpdW5hbWUo cmVzKTsgIGlmIChyZXMgIT0gMCkgeyBkb21haW4gPSByZXMtPl9fZG9tYWlubmFtZTsgfSAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+fn4g IF4KMSBlcnJvciBnZW5lcmF0ZWQuCmNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGlu ZSAxMDI4NyAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKI2luY2x1ZGUgPHN5cy91 dHNuYW1lLmg+CmludCBtYWluKCkgewogc3RydWN0IHV0c25hbWUgKnJlczsgY2hhciAqZG9tYWlu OwogICAgICAgICAgICAodm9pZCl1bmFtZShyZXMpOyAgaWYgKHJlcyAhPSAwKSB7IGRvbWFpbiA9 IHJlcy0+X19kb21haW5uYW1lOyB9IAo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMDMzNDogY2hl Y2tpbmcgZm9yIGdjYyBjKysweCBoZWFkZXJzIGJ1ZyB3aXRob3V0IHJ0dGkKY29uZmlndXJlOjEw MzQ2OiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2Vw dGlvbnMgLXN0ZD1nbnUrKzB4IC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6MTAzNjY6IGNoZWNraW5nIGZvciB1c2Fi bGUgY2hhcjE2X3QgKDIgYnl0ZXMsIHVuc2lnbmVkKQpjb25maWd1cmU6MTAzODI6IGNsYW5nKysg LWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3Qt YWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1m ZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdu dSsrMHggLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRl c3QuQyAxPiY1CmNvbmZpZ3VyZToxMDQxMDogY2hlY2tpbmcgZm9yIHVzYWJsZSB3Y2hhcl90ICgy IGJ5dGVzLCB1bnNpZ25lZCkKY29uZmlndXJlOjEwNDI0OiBjbGFuZysrIC1jIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1l eGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1RdW51c2Vk LWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25v LWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25m aWd1cmU6MTA0MjM6MTogZXJyb3I6ICdzdGF0aWNfYXNzZXJ0X2xpbmVfMTA0MjMnIGRlY2xhcmVk IGFzIGFuIGFycmF5IHdpdGggYSBuZWdhdGl2ZSBzaXplCkNPTkZJR1VSRV9TVEFUSUNfQVNTRVJU KHNpemVvZih3Y2hhcl90KSA9PSAyKTsKXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+CmNvbmZpZ3VyZToxMDQxODo0NDogbm90ZTogZXhwYW5kZWQgZnJvbToKI2Rl ZmluZSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVChjb25kaXRpb24pIENPTkZJR1VSRV9TVEFUSUNf QVNTRVJUX0lNUEwoY29uZGl0aW9uLCBfX0xJTkVfXykKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KY29uZmlndXJlOjEwNDE5OjU1OiBub3RlOiBleHBhbmRlZCBm cm9tOgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0aW9uLCBsaW5l KSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KY29uZmlndXJl OjEwNDIwOjk0OiBub3RlOiBleHBhbmRlZCBmcm9tOgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNf QVNTRVJUX0lNUEwyKGNvbmRpdGlvbiwgbGluZSkgdHlwZWRlZiBpbnQgc3RhdGljX2Fzc2VydF9s aW5lXyMjbGluZVsoY29uZGl0aW9uKSA/IDEgOiAtMV0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXn5+fn5+fn5+fn5+fn5+fn5+fn4KY29uZmlndXJlOjEwNDI0OjIyOiBlcnJv cjogJ3N0YXRpY19hc3NlcnRfbGluZV8xMDQyNCcgZGVjbGFyZWQgYXMgYW4gYXJyYXkgd2l0aCBh IG5lZ2F0aXZlIHNpemUKICAgICAgICAgICAgICAgICAgICAgQ09ORklHVVJFX1NUQVRJQ19BU1NF UlQoKHdjaGFyX3QpLTEgPiAod2NoYXJfdCkgMCkKICAgICAgICAgICAgICAgICAgICAgXn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KY29uZmlndXJlOjEw NDE4OjQ0OiBub3RlOiBleHBhbmRlZCBmcm9tOgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNT RVJUKGNvbmRpdGlvbikgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTChjb25kaXRpb24sIF9f TElORV9fKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgpjb25m aWd1cmU6MTA0MTk6NTU6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNkZWZpbmUgQ09ORklHVVJFX1NU QVRJQ19BU1NFUlRfSU1QTChjb25kaXRpb24sIGxpbmUpIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJU X0lNUEwyKGNvbmRpdGlvbiwgbGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXgpjb25maWd1cmU6MTA0MjA6OTQ6IG5vdGU6IGV4cGFuZGVk IGZyb206CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBs aW5lKSB0eXBlZGVmIGludCBzdGF0aWNfYXNzZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24pID8g MSA6IC0xXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn5+ fn5+fn5+fgoyIGVycm9ycyBnZW5lcmF0ZWQuCmNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2Fz OgojbGluZSAxMDQxNSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKI2luY2x1ZGUg PHN0ZGRlZi5oPgogICAgICAgICAgICAgICAgICAgICAKI2RlZmluZSBDT05GSUdVUkVfU1RBVElD X0FTU0VSVChjb25kaXRpb24pIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0aW9u LCBfX0xJTkVfXykKI2RlZmluZSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMKGNvbmRpdGlv biwgbGluZSkgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKQoj ZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwyKGNvbmRpdGlvbiwgbGluZSkgdHlw ZWRlZiBpbnQgc3RhdGljX2Fzc2VydF9saW5lXyMjbGluZVsoY29uZGl0aW9uKSA/IDEgOiAtMV0K CmludCBtYWluKCkgewpDT05GSUdVUkVfU1RBVElDX0FTU0VSVChzaXplb2Yod2NoYXJfdCkgPT0g Mik7CiAgICAgICAgICAgICAgICAgICAgIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUKCh3Y2hhcl90 KS0xID4gKHdjaGFyX3QpIDApCjsgcmV0dXJuIDA7IH0KY29uZmlndXJlOjEwNTEyOiBjaGVja2lu ZyBmb3IgdmlzaWJpbGl0eShoaWRkZW4pIGF0dHJpYnV0ZQpjb25maWd1cmU6MTA1NDA6IGNoZWNr aW5nIGZvciB2aXNpYmlsaXR5KGRlZmF1bHQpIGF0dHJpYnV0ZQpjb25maWd1cmU6MTA1Njg6IGNo ZWNraW5nIGZvciB2aXNpYmlsaXR5IHByYWdtYSBzdXBwb3J0CmNvbmZpZ3VyZToxMDU5MzogY2hl Y2tpbmcgRm9yIGdjYyB2aXNpYmlsaXR5IGJ1ZyB3aXRoIGNsYXNzLWxldmVsIGF0dHJpYnV0ZXMg KEdDQyBidWcgMjY5MDUpCmNvbmZpZ3VyZToxMDYyMTogY2hlY2tpbmcgRm9yIHg4Nl82NCBnY2Mg dmlzaWJpbGl0eSBidWcgd2l0aCBidWlsdGlucyAoR0NDIGJ1ZyAyMDI5NykKY29uZmlndXJlOjEw Njc2OiBjaGVja2luZyBmb3IgZ2NjIFBSNDk5MTEKY29uZmlndXJlOjEwNzM3OiBjbGFuZysrIC1v IGNvbmZ0ZXN0IC1PMiAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVk ZSAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1y cGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LkMgIDE+JjUKU3RhY2sg ZHVtcDoKMC4JUHJvZ3JhbSBhcmd1bWVudHM6IC91c3IvYmluL2NsYW5nKysgLWNjMSAtdHJpcGxl IGkzODYtdW5rbm93bi1mcmVlYnNkOS4wIC1lbWl0LW9iaiAtZGlzYWJsZS1mcmVlIC1tYWluLWZp bGUtbmFtZSBjb25mdGVzdC5DIC1tcmVsb2NhdGlvbi1tb2RlbCBzdGF0aWMgLW1kaXNhYmxlLWZw LWVsaW0gLW1hc20tdmVyYm9zZSAtbWNvbnN0cnVjdG9yLWFsaWFzZXMgLXRhcmdldC1jcHUgcGVu dGl1bTQgLW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciAtcmVzb3VyY2UtZGlyIC91c3IvYmluLy4u L2xpYi9jbGFuZy8zLjAgLWlzeXN0ZW0gL3Vzci9sb2NhbC9pbmNsdWRlIC1mbW9kdWxlLWNhY2hl LXBhdGggL3RtcC9jbGFuZy1tb2R1bGUtY2FjaGUgLU8yIC1Xbm8tZXJyb3IgLXcgLWZkZXByZWNh dGVkLW1hY3JvIC1mZXJyb3ItbGltaXQgMTkgLWZtZXNzYWdlLWxlbmd0aCAwIC1mZ251LXJ1bnRp bWUgLWZvYmpjLXJ1bnRpbWUtaGFzLWFyYyAtZm9iamMtcnVudGltZS1oYXMtd2VhayAtZm9iamMt ZnJhZ2lsZS1hYmkgLWZjeHgtZXhjZXB0aW9ucyAtZmV4Y2VwdGlvbnMgLWZkaWFnbm9zdGljcy1z aG93LW9wdGlvbiAtbyAvdG1wL2NvbmZ0ZXN0LTIzZkVxci5vIC14IGMrKyBjb25mdGVzdC5DIAox Lgljb25maWd1cmU6MTA3Mjg6MTogY3VycmVudCBwYXJzZXIgdG9rZW4gJ19fYXR0cmlidXRlX18n CjIuCWNvbmZpZ3VyZToxMDcyNzoxMjogTExWTSBJUiBnZW5lcmF0aW9uIG9mIGRlY2xhcmF0aW9u ICd4JwozLgljb25maWd1cmU6MTA3Mjc6MTI6IEdlbmVyYXRpbmcgY29kZSBmb3IgZGVjbGFyYXRp b24gJ3gnCmNsYW5nKys6IGVycm9yOiB1bmFibGUgdG8gZXhlY3V0ZSBjb21tYW5kOiBJbGxlZ2Fs IGluc3RydWN0aW9uOiA0IChjb3JlIGR1bXBlZCkKY2xhbmcrKzogZXJyb3I6IGNsYW5nIGZyb250 ZW5kIGNvbW1hbmQgZmFpbGVkIGR1ZSB0byBzaWduYWwgMiAodXNlIC12IHRvIHNlZSBpbnZvY2F0 aW9uKQpjbGFuZysrOiBub3RlOiBkaWFnbm9zdGljIG1zZzogUGxlYXNlIHN1Ym1pdCBhIGJ1ZyBy ZXBvcnQgdG8gaHR0cDovL2xsdm0ub3JnL2J1Z3MvIGFuZCBpbmNsdWRlIGNvbW1hbmQgbGluZSBh cmd1bWVudHMgYW5kIGFsbCBkaWFnbm9zdGljIGluZm9ybWF0aW9uLgpjbGFuZysrOiBub3RlOiBk aWFnbm9zdGljIG1zZzogUHJlcHJvY2Vzc2VkIHNvdXJjZShzKSBhcmUgbG9jYXRlZCBhdDoKY2xh bmcrKzogbm90ZTogZGlhZ25vc3RpYyBtc2c6IC90bXAvY29uZnRlc3QteHc4dG9iLmlpCmNvbmZp Z3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAxMDY5MyAiY29uZmlndXJlIgojaW5jbHVk ZSAiY29uZmRlZnMuaCIKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgdm9pZCBleGl0KGlu dCk7CiNlbmRpZgoKZXh0ZXJuICJDIiB2b2lkIGFib3J0KHZvaWQpOwp0eXBlZGVmIGVudW0gewpl YXgsICAgICAgICAgZWN4LCAgICAgICAgIGVkeCwgICAgICAgICBlYngsICAgICAgICAgZXNwLCAg ICAgICAgIGVicCwKZXNpLCAgICAgICAgIGVkaSAgICAgfQpSZWdpc3RlcklEOwp1bmlvbiBTdGF0 ZVJlbWF0IHsKICBSZWdpc3RlcklEIHJlZ187CiAgaW50IG9mZnNldF87Cn07CnN0YXRpYyBTdGF0 ZVJlbWF0IEZyb21SZWdpc3RlcihSZWdpc3RlcklEIHJlZykgewogIFN0YXRlUmVtYXQgc3I7CiAg c3IucmVnXyA9IHJlZzsKICByZXR1cm4gc3I7Cn0Kc3RhdGljIFN0YXRlUmVtYXQgRnJvbUFkZHJl c3MzKGludCBhZGRyZXNzKSB7CiAgU3RhdGVSZW1hdCBzcjsKICBzci5vZmZzZXRfID0gYWRkcmVz czsKICBpZiAoYWRkcmVzcyA8IDQ2ICYmICAgIGFkZHJlc3MgPj0gMCkgewogICAgYWJvcnQoKTsK ICB9CiAgcmV0dXJuIHNyOwp9CnN0cnVjdCBGcmFtZVN0YXRlIHsKICBTdGF0ZVJlbWF0IGRhdGFS ZW1hdEluZm8yKGJvb2wgeSwgaW50IHopIHsKICAgIGlmICh5KSAgICAgICAgIHJldHVybiBGcm9t UmVnaXN0ZXIoUmVnaXN0ZXJJRCgxKSk7CiAgICByZXR1cm4gRnJvbUFkZHJlc3MzKHopOwogIH0K fTsKRnJhbWVTdGF0ZSBmcmFtZTsKU3RhdGVSZW1hdCB4OwpfX2F0dHJpYnV0ZV9fKChub2lubGlu ZSkpIHZvaWQganNvcF9zZXRlbGVtKGJvb2wgeSwgaW50IHopIHsKICB4ID0gZnJhbWUuZGF0YVJl bWF0SW5mbzIoeSwgeik7Cn0KaW50IG1haW4odm9pZCkgewogIGpzb3Bfc2V0ZWxlbSgwLCA0Nyk7 Cn0KCmNvbmZpZ3VyZToxMDc3MDogY2hlY2tpbmcgZm9yIGdjYyBwcjM5NjA4CmNvbmZpZ3VyZTox MDgwMDogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVt NCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNl cHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lz dGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6MTA4Mjc6IGNo ZWNraW5nIGZvciBsbHZtIHByODkyNwpjb25maWd1cmU6MTA4Njc6IGNsYW5nIC1vIGNvbmZ0ZXN0 IC1PMiAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjEwOTA0 OiBjaGVja2luZyBmb3IgX19mb3JjZV9hbGlnbl9hcmdfcG9pbnRlcl9fIGF0dHJpYnV0ZQpjb25m aWd1cmU6MTA5MTY6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rp b24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVdlcnJvciAtUXVudXNl ZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVdu by1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29u ZmlndXJlOjEwOTQzOiBjaGVja2luZyBmb3IgZGlyZW50LmggdGhhdCBkZWZpbmVzIERJUgpjb25m aWd1cmU6MTA5NTY6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rp b24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1l bnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3Ig LXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZTox MDk4NDogY2hlY2tpbmcgZm9yIG9wZW5kaXIgaW4gLWxkaXIKY29uZmlndXJlOjExMDAzOiBjbGFu ZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lz dGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIg LVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29u ZnRlc3QuYyAtbGRpciAgIDE+JjUKL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sZGlyCmNsYW5n OiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEgKHVzZSAtdiB0 byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDEw OTkyICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgovKiBPdmVycmlkZSBhbnkgZ2Nj MiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwovKiBXZSB1c2UgY2hh ciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCiAgICBi dWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHku ICAqLwpjaGFyIG9wZW5kaXIoKTsKCmludCBtYWluKCkgewpvcGVuZGlyKCkKOyByZXR1cm4gMDsg fQpjb25maWd1cmU6MTEwNzg6IGNoZWNraW5nIGZvciBzeXMvYnl0ZW9yZGVyLmgKY29uZmlndXJl OjExMDkxOiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVt NCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNl Y3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1p c3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5j IDE+JjUKY29uZmlndXJlOjExMDg1OjEwOiBmYXRhbCBlcnJvcjogJ3N5cy9ieXRlb3JkZXIuaCcg ZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPHN5cy9ieXRlb3JkZXIuaD4KICAgICAgICAgXgoxIGVy cm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDExMDgz ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgoKI2luY2x1ZGUgPHN5cy9ieXRlb3Jk ZXIuaD4KaW50IG1haW4oKSB7Cgo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMTA3ODogY2hlY2tp bmcgZm9yIGNvbXBhdC5oCmNvbmZpZ3VyZToxMTA5MTogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVl LXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNy L2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMTA4NToxMDogZmF0YWwg ZXJyb3I6ICdjb21wYXQuaCcgZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPGNvbXBhdC5oPgogICAg ICAgICBeCjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoK I2xpbmUgMTEwODMgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCgojaW5jbHVkZSA8 Y29tcGF0Lmg+CmludCBtYWluKCkgewoKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTEwNzg6IGNo ZWNraW5nIGZvciBnZXRvcHQuaApjb25maWd1cmU6MTEwOTE6IGNsYW5nIC1jIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8t dHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10 dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1J L3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTEwNzg6IGNoZWNr aW5nIGZvciBzeXMvYml0eXBlcy5oCmNvbmZpZ3VyZToxMTA5MTogY2xhbmcgLWMgLU8yIC1waXBl IC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZu by10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAg LUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMTA4NToxMDog ZmF0YWwgZXJyb3I6ICdzeXMvYml0eXBlcy5oJyBmaWxlIG5vdCBmb3VuZAojaW5jbHVkZSA8c3lz L2JpdHlwZXMuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWls ZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDExMDgzICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVm cy5oIgoKI2luY2x1ZGUgPHN5cy9iaXR5cGVzLmg+CmludCBtYWluKCkgewoKOyByZXR1cm4gMDsg fQpjb25maWd1cmU6MTEwNzg6IGNoZWNraW5nIGZvciBtZW1vcnkuaApjb25maWd1cmU6MTEwOTE6 IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMg LWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0v dXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpj b25maWd1cmU6MTEwNzg6IGNoZWNraW5nIGZvciB1bmlzdGQuaApjb25maWd1cmU6MTEwOTE6IGNs YW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZk YXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNy L2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25m aWd1cmU6MTEwNzg6IGNoZWNraW5nIGZvciBnbnUvbGliYy12ZXJzaW9uLmgKY29uZmlndXJlOjEx MDkxOiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lz dGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+ JjUKY29uZmlndXJlOjExMDg1OjEwOiBmYXRhbCBlcnJvcjogJ2dudS9saWJjLXZlcnNpb24uaCcg ZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPGdudS9saWJjLXZlcnNpb24uaD4KICAgICAgICAgXgox IGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDEx MDgzICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgoKI2luY2x1ZGUgPGdudS9saWJj LXZlcnNpb24uaD4KaW50IG1haW4oKSB7Cgo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMTA3ODog Y2hlY2tpbmcgZm9yIG5sX3R5cGVzLmgKY29uZmlndXJlOjExMDkxOiBjbGFuZyAtYyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAt Zm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAt Zm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRl ICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjExMDc4OiBj aGVja2luZyBmb3IgbWFsbG9jLmgKY29uZmlndXJlOjExMDkxOiBjbGFuZyAtYyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5v LXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5v LXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAt SS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKSW4gZmlsZSBpbmNsdWRlZCBmcm9t IGNvbmZpZ3VyZToxMTA4NToKL3Vzci9pbmNsdWRlL21hbGxvYy5oOjM6MjogZXJyb3I6ICNlcnJv ciAiPG1hbGxvYy5oPiBoYXMgYmVlbiByZXBsYWNlZCBieSA8c3RkbGliLmg+IgojZXJyb3IgIjxt YWxsb2MuaD4gaGFzIGJlZW4gcmVwbGFjZWQgYnkgPHN0ZGxpYi5oPiIKIF4KMSBlcnJvciBnZW5l cmF0ZWQuCmNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAxMTA4MyAiY29uZmln dXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKCiNpbmNsdWRlIDxtYWxsb2MuaD4KaW50IG1haW4o KSB7Cgo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMTA3ODogY2hlY2tpbmcgZm9yIFgxMS9YS0Js aWIuaApjb25maWd1cmU6MTEwOTE6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVz ZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1X bm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNs dWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTEwNzg6IGNoZWNraW5nIGZvciBpby5oCmNv bmZpZ3VyZToxMTA5MTogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1 bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29u ZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMTA4NToxMDogZmF0YWwgZXJyb3I6ICdpby5oJyBmaWxl IG5vdCBmb3VuZAojaW5jbHVkZSA8aW8uaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4K Y29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDExMDgzICJjb25maWd1cmUiCiNp bmNsdWRlICJjb25mZGVmcy5oIgoKI2luY2x1ZGUgPGlvLmg+CmludCBtYWluKCkgewoKOyByZXR1 cm4gMDsgfQpjb25maWd1cmU6MTEwNzg6IGNoZWNraW5nIGZvciBjcHVpZC5oCmNvbmZpZ3VyZTox MTA5MTogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0 aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8y IC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5 c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAx PiY1CmNvbmZpZ3VyZToxMTA4NToxMDogZmF0YWwgZXJyb3I6ICdjcHVpZC5oJyBmaWxlIG5vdCBm b3VuZAojaW5jbHVkZSA8Y3B1aWQuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29u ZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDExMDgzICJjb25maWd1cmUiCiNpbmNs dWRlICJjb25mZGVmcy5oIgoKI2luY2x1ZGUgPGNwdWlkLmg+CmludCBtYWluKCkgewoKOyByZXR1 cm4gMDsgfQpjb25maWd1cmU6MTExMjY6IGNoZWNraW5nIGZvciBzeXMvc3RhdHZmcy5oCmNvbmZp Z3VyZToxMTEzOTogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlv bi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVu dHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAt dyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRl c3QuYyAxPiY1CmNvbmZpZ3VyZToxMTEyNjogY2hlY2tpbmcgZm9yIHN5cy9zdGF0ZnMuaApjb25m aWd1cmU6MTExMzk6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rp b24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1l bnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3Ig LXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0 ZXN0LmMgMT4mNQpjb25maWd1cmU6MTExMzM6MTA6IGZhdGFsIGVycm9yOiAnc3lzL3N0YXRmcy5o JyBmaWxlIG5vdCBmb3VuZAojaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgogICAgICAgICBeCjEgZXJy b3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgMTExMzEg ImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCgojaW5jbHVkZSA8c3lzL3N0YXRmcy5o PgppbnQgbWFpbigpIHsKCjsgcmV0dXJuIDA7IH0KY29uZmlndXJlOjExMTI2OiBjaGVja2luZyBm b3Igc3lzL3Zmcy5oCmNvbmZpZ3VyZToxMTEzOTogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3Qt YWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZy cCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xv Y2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMTEzMzoxMDogZmF0YWwgZXJy b3I6ICdzeXMvdmZzLmgnIGZpbGUgbm90IGZvdW5kCiNpbmNsdWRlIDxzeXMvdmZzLmg+CiAgICAg ICAgIF4KMSBlcnJvciBnZW5lcmF0ZWQuCmNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgoj bGluZSAxMTEzMSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKCiNpbmNsdWRlIDxz eXMvdmZzLmg+CmludCBtYWluKCkgewoKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTExMjY6IGNo ZWNraW5nIGZvciBzeXMvbW91bnQuaApjb25maWd1cmU6MTExMzk6IGNsYW5nIC1jIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1m bm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1m bm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUg IC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTExNzM6IGNo ZWNraW5nIGZvciBzeXMvcXVvdGEuaApjb25maWd1cmU6MTExODY6IGNsYW5nIC1jIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1m bm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1m bm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUg IC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTExODA6MTA6 IGZhdGFsIGVycm9yOiAnc3lzL3F1b3RhLmgnIGZpbGUgbm90IGZvdW5kCiNpbmNsdWRlIDxzeXMv cXVvdGEuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQg cHJvZ3JhbSB3YXM6CiNsaW5lIDExMTc4ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5o IgoKI2luY2x1ZGUgPHN5cy9xdW90YS5oPgppbnQgbWFpbigpIHsKCjsgcmV0dXJuIDA7IH0KY29u ZmlndXJlOjExMTczOiBjaGVja2luZyBmb3Igc3lzL3N5c21hY3Jvcy5oCmNvbmZpZ3VyZToxMTE4 NjogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9u cyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1w aXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3Rl bS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1 CmNvbmZpZ3VyZToxMTE4MDoxMDogZmF0YWwgZXJyb3I6ICdzeXMvc3lzbWFjcm9zLmgnIGZpbGUg bm90IGZvdW5kCiNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CiAgICAgICAgIF4KMSBlcnJvciBn ZW5lcmF0ZWQuCmNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAxMTE3OCAiY29u ZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKCiNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+ CmludCBtYWluKCkgewoKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTEyMTk6IGNoZWNraW5nIGZv ciBsaW51eC9xdW90YS5oCmNvbmZpZ3VyZToxMTIzMjogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVl LXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNy L2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMTIyNjoxMDogZmF0YWwg ZXJyb3I6ICdsaW51eC9xdW90YS5oJyBmaWxlIG5vdCBmb3VuZAojaW5jbHVkZSA8bGludXgvcXVv dGEuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJv Z3JhbSB3YXM6CiNsaW5lIDExMjI0ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgoj aW5jbHVkZSA8c3lzL3NvY2tldC5oPgojaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KaW50IG1haW4o KSB7Cgo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMTI2NjogY2hlY2tpbmcgZm9yIGxpbnV4L2lm X2FkZHIuaApjb25maWd1cmU6MTEyNzk6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1 bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTEyNzM6MTA6IGZhdGFsIGVycm9yOiAn bGludXgvaWZfYWRkci5oJyBmaWxlIG5vdCBmb3VuZAojaW5jbHVkZSA8bGludXgvaWZfYWRkci5o PgogICAgICAgICBeCjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFt IHdhczoKI2xpbmUgMTEyNzEgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCiNpbmNs dWRlIDxzeXMvc29ja2V0Lmg+CiNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CmludCBtYWluKCkg ewoKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTEyNjY6IGNoZWNraW5nIGZvciBsaW51eC9ydG5l dGxpbmsuaApjb25maWd1cmU6MTEyNzk6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1 bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTEyNzM6MTA6IGZhdGFsIGVycm9yOiAn bGludXgvcnRuZXRsaW5rLmgnIGZpbGUgbm90IGZvdW5kCiNpbmNsdWRlIDxsaW51eC9ydG5ldGxp bmsuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJv Z3JhbSB3YXM6CiNsaW5lIDExMjcxICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgoj aW5jbHVkZSA8c3lzL3NvY2tldC5oPgojaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CmludCBt YWluKCkgewoKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTEzMTM6IGNoZWNraW5nIGZvciBzeXMv dHlwZXMuaApjb25maWd1cmU6MTEzMjY6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1 bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTEzMTM6IGNoZWNraW5nIGZvciBuZXRp bmV0L2luLmgKY29uZmlndXJlOjExMzI2OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlh c2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1R dW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVt NCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwv aW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjExMzEzOiBjaGVja2luZyBmb3IgYnl0 ZXN3YXAuaApjb25maWd1cmU6MTEzMjY6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1 bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTEzMjA6MTA6IGZhdGFsIGVycm9yOiAn Ynl0ZXN3YXAuaCcgZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPGJ5dGVzd2FwLmg+CiAgICAgICAg IF4KMSBlcnJvciBnZW5lcmF0ZWQuCmNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGlu ZSAxMTMxOCAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKCiNpbmNsdWRlIDxieXRl c3dhcC5oPgppbnQgbWFpbigpIHsKCjsgcmV0dXJuIDA7IH0KY29uZmlndXJlOjExMzU3OiBjaGVj a2luZyBmb3Igc29ja2FkZHJfaW4uc2luX2xlbgpjb25maWd1cmU6MTEzNzQ6IGNsYW5nIC1jIC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rp b25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2lu Y2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTE0 MDU6IGNoZWNraW5nIGZvciBzb2NrYWRkcl9pbjYuc2luNl9sZW4KY29uZmlndXJlOjExNDIyOiBj bGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1m ZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vz ci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKU3Rh Y2sgZHVtcDoKMC4JUHJvZ3JhbSBhcmd1bWVudHM6IC91c3IvYmluL2NsYW5nIC1jYzEgLXRyaXBs ZSBpMzg2LXVua25vd24tZnJlZWJzZDkuMCAtZW1pdC1vYmogLWRpc2FibGUtZnJlZSAtbWFpbi1m aWxlLW5hbWUgY29uZnRlc3QuYyAtbXJlbG9jYXRpb24tbW9kZWwgc3RhdGljIC1tZGlzYWJsZS1m cC1lbGltIC1yZWxheGVkLWFsaWFzaW5nIC1tYXNtLXZlcmJvc2UgLW1jb25zdHJ1Y3Rvci1hbGlh c2VzIC10YXJnZXQtY3B1IHBlbnRpdW00IC1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWNvdmVyYWdlLWZpbGUgY29uZnRlc3QubyAt cmVzb3VyY2UtZGlyIC91c3IvYmluLy4uL2xpYi9jbGFuZy8zLjAgLWlzeXN0ZW0gL3Vzci9sb2Nh bC9pbmNsdWRlIC1JIC91c3IvbG9jYWwvaW5jbHVkZSAtZm1vZHVsZS1jYWNoZS1wYXRoIC90bXAv Y2xhbmctbW9kdWxlLWNhY2hlIC1PMiAtV25vLWVycm9yIC13IC1mZXJyb3ItbGltaXQgMTkgLWZt ZXNzYWdlLWxlbmd0aCAwIC1mZ251LXJ1bnRpbWUgLWZvYmpjLXJ1bnRpbWUtaGFzLWFyYyAtZm9i amMtcnVudGltZS1oYXMtd2VhayAtZm9iamMtZnJhZ2lsZS1hYmkgLWZkaWFnbm9zdGljcy1zaG93 LW9wdGlvbiAtbyBjb25mdGVzdC5vIC14IGMgY29uZnRlc3QuYyAKMS4JY29uZmlndXJlOjExNDE3 OjE6IGN1cnJlbnQgcGFyc2VyIHRva2VuICdpbnQnCjIuCWNvbmZpZ3VyZToxMTQxNjozOTogTExW TSBJUiBnZW5lcmF0aW9uIG9mIGRlY2xhcmF0aW9uICdmb28nCjMuCWNvbmZpZ3VyZToxMTQxNjoz OTogR2VuZXJhdGluZyBjb2RlIGZvciBkZWNsYXJhdGlvbiAnZm9vJwpjbGFuZzogZXJyb3I6IHVu YWJsZSB0byBleGVjdXRlIGNvbW1hbmQ6IElsbGVnYWwgaW5zdHJ1Y3Rpb246IDQgKGNvcmUgZHVt cGVkKQpjbGFuZzogZXJyb3I6IGNsYW5nIGZyb250ZW5kIGNvbW1hbmQgZmFpbGVkIGR1ZSB0byBz aWduYWwgMiAodXNlIC12IHRvIHNlZSBpbnZvY2F0aW9uKQpjbGFuZzogbm90ZTogZGlhZ25vc3Rp YyBtc2c6IFBsZWFzZSBzdWJtaXQgYSBidWcgcmVwb3J0IHRvIGh0dHA6Ly9sbHZtLm9yZy9idWdz LyBhbmQgaW5jbHVkZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBhbGwgZGlhZ25vc3RpYyBp bmZvcm1hdGlvbi4KY2xhbmc6IG5vdGU6IGRpYWdub3N0aWMgbXNnOiBQcmVwcm9jZXNzZWQgc291 cmNlKHMpIGFyZSBsb2NhdGVkIGF0OgpjbGFuZzogbm90ZTogZGlhZ25vc3RpYyBtc2c6IC90bXAv Y29uZnRlc3QtazZnVVB0LmkKY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDEx NDEwICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgojaWZkZWYgSEFWRV9TWVNfVFlQ RVNfSAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZW5kaWYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgeDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICpmb28gPSAodm9pZCopICZ4LnNpbjZfbGVuOwppbnQgbWFpbigp IHsKCjsgcmV0dXJuIDA7IH0KY29uZmlndXJlOjExNDQ2OiBjaGVja2luZyBmb3Igc29ja2FkZHIu c2FfbGVuCmNvbmZpZ3VyZToxMTQ2MzogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNp bmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVu dXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2lu Y2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMTQ5NjogY2hlY2tpbmcgZm9yIG5ldwpj b25maWd1cmU6MTE1MDk6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25z IC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1 bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29u ZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZToxMTYwODogY2hlY2tpbmcgZm9yIHN5cy9jZGVmcy5oCmNv bmZpZ3VyZToxMTYyMTogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1 bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29u ZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMTY3MzogY2hlY2tpbmcgZm9yIGxpbnV4L3BlcmZfZXZl bnQuaApjb25maWd1cmU6MTE2ODY6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgIC1RdW51 c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt V25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5j bHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjExNjgwOjEwOiBmYXRhbCBlcnJvcjogJ2xp bnV4L3BlcmZfZXZlbnQuaCcgZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZl bnQuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJv Z3JhbSB3YXM6CiNsaW5lIDExNjc4ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgoK I2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KaW50IG1haW4oKSB7Cgo7IHJldHVybiAwOyB9 CmNvbmZpZ3VyZToxMTc0OTogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWVfciBpbiAtbGNfcgpj b25maWd1cmU6MTE3Njg6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1 bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAt V2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAtbGNfciAg IDE+JjUKL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sY19yCmNsYW5nOiBlcnJvcjogbGlua2Vy IGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlv bikKY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDExNzU3ICJjb25maWd1cmUi CiNpbmNsdWRlICJjb25mZGVmcy5oIgovKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90 b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwovKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBt aWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCiAgICBidWlsdGluIGFuZCB0aGVu IGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwpjaGFyIGdldGhv c3RieW5hbWVfcigpOwoKaW50IG1haW4oKSB7CmdldGhvc3RieW5hbWVfcigpCjsgcmV0dXJuIDA7 IH0KY29uZmlndXJlOjExODA5OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGRsb3Bl bgpjb25maWd1cmU6MTE4Mjc6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAg LVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2Nh bC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdp biAtV2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAgMT4m NQpjb25maWd1cmU6MTE4Njc6IGNoZWNraW5nIGZvciBkbGZjbi5oCmNvbmZpZ3VyZToxMTg4MDog Y2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1z dHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAt ZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBl IC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91 c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNv bmZpZ3VyZToxMTkxNzogY2hlY2tpbmcgZm9yIGRsYWRkcgpjb25maWd1cmU6MTE5NDU6IGNsYW5n IC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1m bm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlv bnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLURfR05VX1NPVVJDRSAtUXVudXNlZC1h cmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUg IC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBh dGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5jICAxPiY1CmNvbmZpZ3Vy ZToxMTkxNzogY2hlY2tpbmcgZm9yIG1lbW1lbQpjb25maWd1cmU6MTE5NDU6IGNsYW5nIC1vIGNv bmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZk YXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLURfR05VX1NPVVJDRSAtUXVudXNlZC1hcmd1bWVu dHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAt dyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgIC1ML3Vz ci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQk T1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5jICAxPiY1CmNvbmZpZ3VyZToxMjA4 OTogY2hlY2tpbmcgZm9yIHNvY2tldCBpbiAtbHNvY2tldApjb25maWd1cmU6MTIxMDg6IGNsYW5n IC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1m bm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlv bnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0 ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwv bGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiAt V2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAtbHNvY2tldCAgIDE+JjUKL3Vzci9iaW4vbGQ6 IGNhbm5vdCBmaW5kIC1sc29ja2V0CmNsYW5nOiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVk IHdpdGggZXhpdCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOiBm YWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDEyMDk3ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25m ZGVmcy5oIgovKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQg YW4gZXJyb3IuICAqLwovKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUg cmV0dXJuIHR5cGUgb2YgYSBnY2MyCiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBw cm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwpjaGFyIHNvY2tldCgpOwoKaW50IG1haW4o KSB7CnNvY2tldCgpCjsgcmV0dXJuIDA7IH0KY29uZmlndXJlOjEyMTYzOiBjaGVja2luZyBmb3Ig WERyYXdMaW5lcyBpbiAtbFgxMQpjb25maWd1cmU6MTIxODI6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rp b25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2lu Y2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliICAtTC91c3IvbG9j YWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJ TiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAtbFgxMSAtbFgxMSAgIDE+JjUKY29uZmln dXJlOjEyMjA0OiBjaGVja2luZyBmb3IgWGV4dEFkZERpc3BsYXkgaW4gLWxYZXh0CmNvbmZpZ3Vy ZToxMjIyMzogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZm dW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1h cmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUg IC1ML3Vzci9sb2NhbC9saWIgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2ws LXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVz dC5jIC1sWGV4dCAtbFgxMSAgIDE+JjUKY29uZmlndXJlOjEyMjQ2OiBjaGVja2luZyBmb3IgWHRG cmVlIGluIC1sWHQKY29uZmlndXJlOjEyMjY1OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5v LXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5v LXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAt SS91c3IvbG9jYWwvaW5jbHVkZSAgLUwvdXNyL2xvY2FsL2xpYiAgLUwvdXNyL2xvY2FsL2xpYiAt TC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16 LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgLWxYdCAgIDE+JjUKY29uZmlndXJlOjEyNDE5OiBjaGVj a2luZyBmb3IgWFNobUNyZWF0ZUltYWdlIGluIC1sWGV4dApjb25maWd1cmU6MTI0Mzg6IGNsYW5n IC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1m bm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlv bnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0 ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwv bGliICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2ws LXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAtbFhleHQgLWxY MTEgIC1sWGV4dCAgMT4mNQpjb25maWd1cmU6MTI0NjE6IGNoZWNraW5nIGZvciBYMTEvZXh0ZW5z aW9ucy9zY3Juc2F2ZXIuaApjb25maWd1cmU6MTI0NzQ6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJl ZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vz ci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTI0ODk6IGNoZWNraW5n IGZvciBYU2NyZWVuU2F2ZXJRdWVyeUluZm8gaW4gLWxYc3MKY29uZmlndXJlOjEyNTA4OiBjbGFu ZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lz dGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAgLUwvdXNyL2xvY2Fs L2xpYiAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVds LC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgLWxYc3MgLWxY ZXh0IC1sWDExICAgMT4mNQpjb25maWd1cmU6MTI1NTg6IGNoZWNraW5nIGZvciBwdGhyZWFkX2Ny ZWF0ZSBpbiAtbHB0aHJlYWRzCmNsYW5nIC1vIGR1bW15IGR1bW15LmMgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVl LXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNy L2xvY2FsL2luY2x1ZGUgLWxwdGhyZWFkcyAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwv bGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNr IAovdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxwdGhyZWFkcwpjbGFuZzogZXJyb3I6IGxpbmtl ciBjb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29kZSAxICh1c2UgLXYgdG8gc2VlIGludm9jYXRp b24pCmNvbmZpZ3VyZToxMjU4MTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1scHRo cmVhZApjbGFuZyAtbyBkdW1teSBkdW1teS5jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10 dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1m ZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQt YXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8t ZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRl IC1scHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmln aW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIApjb25maWd1cmU6MTI2 ODY6IGNoZWNraW5nIHdoZXRoZXIgY2xhbmcgYWNjZXB0cyAtcHRocmVhZApjb25maWd1cmU6MTI4 MTQ6IGNoZWNraW5nIHdoZXRoZXIgY2xhbmcgbmVlZHMgLXRyYWRpdGlvbmFsCmNvbmZpZ3VyZTox MjgyMToxMDogZmF0YWwgZXJyb3I6ICdzZ3R0eS5oJyBmaWxlIG5vdCBmb3VuZAojaW5jbHVkZSA8 c2d0dHkuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOjEyODM5OjEw OiBmYXRhbCBlcnJvcjogJ3Rlcm1pby5oJyBmaWxlIG5vdCBmb3VuZAojaW5jbHVkZSA8dGVybWlv Lmg+CiAgICAgICAgIF4KMSBlcnJvciBnZW5lcmF0ZWQuCmNvbmZpZ3VyZToxMjg2MDogY2hlY2tp bmcgZm9yIDgtYml0IGNsZWFuIG1lbWNtcApjb25maWd1cmU6MTI4Nzg6IGNsYW5nIC1vIGNvbmZ0 ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0 LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRh LXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xv Y2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9jYWwv bGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiAt V2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAgMT4mNQpjb25maWd1cmU6MTI4OTg6IGNoZWNr aW5nIGZvciByYW5kb20KY29uZmlndXJlOjEyOTI2OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAt Zm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAt Zm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRl ICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3Iv bG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhl Y3N0YWNrIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjEyODk4OiBjaGVja2luZyBmb3Igc3Ry ZXJyb3IKY29uZmlndXJlOjEyOTI2OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNo PXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmlj dC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUt dnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3Iv bG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGli IC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNv bmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjEyODk4OiBjaGVja2luZyBmb3IgbGNob3duCmNvbmZp Z3VyZToxMjkyNjogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcg LWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNl ZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVdu by1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1 ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3Jp Z2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5jICAx PiY1CmNvbmZpZ3VyZToxMjg5ODogY2hlY2tpbmcgZm9yIGZjaG1vZApjb25maWd1cmU6MTI5MjY6 IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24t c2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRz IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcg LWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFk ICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJw YXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAgMT4mNQpjb25maWd1 cmU6MTI4OTg6IGNoZWNraW5nIGZvciBzbnByaW50Zgpjb25maWd1cmU6MTI5MjY6IGNsYW5nIC1v IGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMg LWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0v dXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3Iv bG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9S SUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAgMT4mNQpjb25maWd1cmU6MTI4OTg6 IGNoZWNraW5nIGZvciBtZW1tb3ZlCmNvbmZpZ3VyZToxMjkyNjogY2xhbmcgLW8gY29uZnRlc3Qg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwv aW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIg LUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwt eixub2V4ZWNzdGFjayBjb25mdGVzdC5jICAxPiY1CmNvbmZpZ3VyZToxMjg5ODogY2hlY2tpbmcg Zm9yIHJpbnQKY29uZmlndXJlOjEyOTI2OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRy ZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVu ZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91 c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwv bGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNr IGNvbmZ0ZXN0LmMgIDE+JjUKL3RtcC9jb25mdGVzdC15bWQxN0oubzogSW4gZnVuY3Rpb24gYG1h aW4nOgpjb25mdGVzdC5jOigudGV4dC5tYWluKzB4Nyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8g YHJpbnQnCmNsYW5nOiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2Rl IDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3 YXM6CiNsaW5lIDEyOTAzICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgovKiBTeXN0 ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3Rv dHlwZXMsCiAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHJpbnQoKTsgYmVsb3cuICAq LwojaW5jbHVkZSA8YXNzZXJ0Lmg+Ci8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3Rv dHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1p Z2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKICAgIGJ1aWx0aW4gYW5kIHRoZW4g aXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCmNoYXIgcmludCgp OwoKaW50IG1haW4oKSB7CgovKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1 bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCiAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZ Uy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAogICAgc29tZXRoaW5nIHN0YXJ0 aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCiNpZiBkZWZp bmVkIChfX3N0dWJfcmludCkgfHwgZGVmaW5lZCAoX19zdHViX19fcmludCkKY2hva2UgbWUKI2Vs c2UKcmludCgpOwojZW5kaWYKCjsgcmV0dXJuIDA7IH0KY29uZmlndXJlOjEyODk4OiBjaGVja2lu ZyBmb3Igc3RhdDY0CmNvbmZpZ3VyZToxMjkyNjogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBl IC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZu by10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAg LUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xv Y2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNz dGFjayBjb25mdGVzdC5jICAxPiY1Ci90bXAvY29uZnRlc3QtbnZQVnJGLm86IEluIGZ1bmN0aW9u IGBtYWluJzoKY29uZnRlc3QuYzooLnRleHQubWFpbisweDcpOiB1bmRlZmluZWQgcmVmZXJlbmNl IHRvIGBzdGF0NjQnCmNsYW5nOiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhp dCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOiBmYWlsZWQgcHJv Z3JhbSB3YXM6CiNsaW5lIDEyOTAzICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgov KiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3 IHByb3RvdHlwZXMsCiAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHN0YXQ2NCgpOyBi ZWxvdy4gICovCiNpbmNsdWRlIDxhc3NlcnQuaD4KLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJu YWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLyogV2UgdXNlIGNoYXIgYmVjYXVz ZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgogICAgYnVpbHRpbiBh bmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KY2hh ciBzdGF0NjQoKTsKCmludCBtYWluKCkgewoKLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0 aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwogICAgdG8gYWx3YXlzIGZhaWwg d2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKICAgIHNvbWV0 aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAq LwojaWYgZGVmaW5lZCAoX19zdHViX3N0YXQ2NCkgfHwgZGVmaW5lZCAoX19zdHViX19fc3RhdDY0 KQpjaG9rZSBtZQojZWxzZQpzdGF0NjQoKTsKI2VuZGlmCgo7IHJldHVybiAwOyB9CmNvbmZpZ3Vy ZToxMjg5ODogY2hlY2tpbmcgZm9yIGxzdGF0NjQKY29uZmlndXJlOjEyOTI2OiBjbGFuZyAtbyBj b25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1m ZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vz ci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xv Y2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklH SU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgIDE+JjUKL3RtcC9jb25mdGVzdC1WRHNL YUkubzogSW4gZnVuY3Rpb24gYG1haW4nOgpjb25mdGVzdC5jOigudGV4dC5tYWluKzB4Nyk6IHVu ZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxzdGF0NjQnCmNsYW5nOiBlcnJvcjogbGlua2VyIGNvbW1h bmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29u ZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDEyOTAzICJjb25maWd1cmUiCiNpbmNs dWRlICJjb25mZGVmcy5oIgovKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9z IGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCiAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0 aCBjaGFyIGxzdGF0NjQoKTsgYmVsb3cuICAqLwojaW5jbHVkZSA8YXNzZXJ0Lmg+Ci8qIE92ZXJy aWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi8q IFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBh IGdjYzIKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBz dGlsbCBhcHBseS4gICovCmNoYXIgbHN0YXQ2NCgpOwoKaW50IG1haW4oKSB7CgovKiBUaGUgR05V IEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRz CiAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1 YWxseSBuYW1lZAogICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwg bmFtZSBpcyBhbiBhbGlhcy4gICovCiNpZiBkZWZpbmVkIChfX3N0dWJfbHN0YXQ2NCkgfHwgZGVm aW5lZCAoX19zdHViX19fbHN0YXQ2NCkKY2hva2UgbWUKI2Vsc2UKbHN0YXQ2NCgpOwojZW5kaWYK CjsgcmV0dXJuIDA7IH0KY29uZmlndXJlOjEyODk4OiBjaGVja2luZyBmb3IgdHJ1bmNhdGU2NApj b25maWd1cmU6MTI5MjY6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1 bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16 LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3Qu YyAgMT4mNQovdG1wL2NvbmZ0ZXN0LTd4M3hnNi5vOiBJbiBmdW5jdGlvbiBgbWFpbic6CmNvbmZ0 ZXN0LmM6KC50ZXh0Lm1haW4rMHg3KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgdHJ1bmNhdGU2 NCcKY2xhbmc6IGVycm9yOiBsaW5rZXIgY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSAo dXNlIC12IHRvIHNlZSBpbnZvY2F0aW9uKQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoK I2xpbmUgMTI5MDMgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCi8qIFN5c3RlbSBo ZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBl cywKICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgdHJ1bmNhdGU2NCgpOyBiZWxvdy4g ICovCiNpbmNsdWRlIDxhc3NlcnQuaD4KLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJv dG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQg bWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgogICAgYnVpbHRpbiBhbmQgdGhl biBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KY2hhciB0cnVu Y2F0ZTY0KCk7CgppbnQgbWFpbigpIHsKCi8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhp cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKICAgIHRvIGFsd2F5cyBmYWlsIHdp dGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCiAgICBzb21ldGhp bmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8K I2lmIGRlZmluZWQgKF9fc3R1Yl90cnVuY2F0ZTY0KSB8fCBkZWZpbmVkIChfX3N0dWJfX190cnVu Y2F0ZTY0KQpjaG9rZSBtZQojZWxzZQp0cnVuY2F0ZTY0KCk7CiNlbmRpZgoKOyByZXR1cm4gMDsg fQpjb25maWd1cmU6MTI4OTg6IGNoZWNraW5nIGZvciBzZXRidWYKY29uZmlndXJlOjEyOTI2OiBj bGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVt NCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNl Y3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1p c3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAg LUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0 aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJl OjEyODk4OiBjaGVja2luZyBmb3IgaXNhdHR5CmNvbmZpZ3VyZToxMjkyNjogY2xhbmcgLW8gY29u ZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRh dGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3Iv bG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2Nh bC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lO IC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5jICAxPiY1CmNvbmZpZ3VyZToxMjk1NjogY2hl Y2tpbmcgZm9yIHN0YXR2ZnM2NApjb25maWd1cmU6MTI5ODQ6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rp b25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2lu Y2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1M L3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXos bm9leGVjc3RhY2sgY29uZnRlc3QuYyAgMT4mNQovdG1wL2NvbmZ0ZXN0LU5vQjUwMy5vOiBJbiBm dW5jdGlvbiBgbWFpbic6CmNvbmZ0ZXN0LmM6KC50ZXh0Lm1haW4rMHg3KTogdW5kZWZpbmVkIHJl ZmVyZW5jZSB0byBgc3RhdHZmczY0JwpjbGFuZzogZXJyb3I6IGxpbmtlciBjb21tYW5kIGZhaWxl ZCB3aXRoIGV4aXQgY29kZSAxICh1c2UgLXYgdG8gc2VlIGludm9jYXRpb24pCmNvbmZpZ3VyZTog ZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAxMjk2MSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29u ZmRlZnMuaCIKLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9w ZWZ1bGx5IGZldyBwcm90b3R5cGVzLAogICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBz dGF0dmZzNjQoKTsgYmVsb3cuICAqLwojaW5jbHVkZSA8YXNzZXJ0Lmg+Ci8qIE92ZXJyaWRlIGFu eSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi8qIFdlIHVz ZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIK ICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBh cHBseS4gICovCmNoYXIgc3RhdHZmczY0KCk7CgppbnQgbWFpbigpIHsKCi8qIFRoZSBHTlUgQyBs aWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKICAg IHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5 IG5hbWVkCiAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1l IGlzIGFuIGFsaWFzLiAgKi8KI2lmIGRlZmluZWQgKF9fc3R1Yl9zdGF0dmZzNjQpIHx8IGRlZmlu ZWQgKF9fc3R1Yl9fX3N0YXR2ZnM2NCkKY2hva2UgbWUKI2Vsc2UKc3RhdHZmczY0KCk7CiNlbmRp ZgoKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTI5NTY6IGNoZWNraW5nIGZvciBzdGF0dmZzCmNv bmZpZ3VyZToxMjk4NDogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNp bmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVu dXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2lu Y2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXos b3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5j ICAxPiY1CmNvbmZpZ3VyZToxMjk1NjogY2hlY2tpbmcgZm9yIHN0YXRmczY0CmNvbmZpZ3VyZTox Mjk4NDogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1 bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0 aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1X bCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5jICAxPiY1Ci90 bXAvY29uZnRlc3QtRlQzbFo3Lm86IEluIGZ1bmN0aW9uIGBtYWluJzoKY29uZnRlc3QuYzooLnRl eHQubWFpbisweDcpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzdGF0ZnM2NCcKY2xhbmc6IGVy cm9yOiBsaW5rZXIgY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSAodXNlIC12IHRvIHNl ZSBpbnZvY2F0aW9uKQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgMTI5NjEg ImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCi8qIFN5c3RlbSBoZWFkZXIgdG8gZGVm aW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKICAgIHdoaWNo IGNhbiBjb25mbGljdCB3aXRoIGNoYXIgc3RhdGZzNjQoKTsgYmVsb3cuICAqLwojaW5jbHVkZSA8 YXNzZXJ0Lmg+Ci8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9p ZCBhbiBlcnJvci4gICovCi8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRo ZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50 IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCmNoYXIgc3RhdGZzNjQoKTsKCmludCBt YWluKCkgewoKLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMg d2hpY2ggaXQgaW1wbGVtZW50cwogICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21l IGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRo IF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwojaWYgZGVmaW5lZCAoX19z dHViX3N0YXRmczY0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19zdGF0ZnM2NCkKY2hva2UgbWUKI2Vs c2UKc3RhdGZzNjQoKTsKI2VuZGlmCgo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMjk1NjogY2hl Y2tpbmcgZm9yIHN0YXRmcwpjb25maWd1cmU6MTI5ODQ6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25z IC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1 ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vz ci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9l eGVjc3RhY2sgY29uZnRlc3QuYyAgMT4mNQpjb25maWd1cmU6MTMwMTQ6IGNoZWNraW5nIGZvciBm bG9ja2ZpbGUKY29uZmlndXJlOjEzMDQyOiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRy ZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVu ZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91 c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwv bGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNr IGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjEzMDE0OiBjaGVja2luZyBmb3IgZ2V0cGFnZXNp emUKY29uZmlndXJlOjEzMDQyOiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1h bGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJw IC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9j YWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1X bCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0 ZXN0LmMgIDE+JjUKY29uZmlndXJlOjEzMDcyOiBjaGVja2luZyBmb3IgbG9jYWx0aW1lX3IKY29u ZmlndXJlOjEzMTAwOiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51 c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt V25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5j bHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixv cmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMg IDE+JjUKY29uZmlndXJlOjEzMDcyOiBjaGVja2luZyBmb3Igc3RydG9rX3IKY29uZmlndXJlOjEz MTAwOiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0 aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3Vt ZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9y IC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRo cmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVds LC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgIDE+JjUKY29u ZmlndXJlOjEzMTI5OiBjaGVja2luZyBmb3IgY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMp CmNvbmZpZ3VyZToxMzE0NTogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAt UXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1 bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2Fs L2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2ws LXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVz dC5jICAgMT4mNQpjb25maWd1cmU6MTMxODY6IGNoZWNraW5nIGZvciB3Y3J0b21iCmNvbmZpZ3Vy ZToxMzE5ODogY2xhbmcrKyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlv bnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFy Z3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVy cm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAt cHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4g LVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LkMgIDE+JjUK U3RhY2sgZHVtcDoKMC4JUHJvZ3JhbSBhcmd1bWVudHM6IC91c3IvYmluL2NsYW5nKysgLWNjMSAt dHJpcGxlIGkzODYtdW5rbm93bi1mcmVlYnNkOS4wIC1lbWl0LW9iaiAtZGlzYWJsZS1mcmVlIC1t YWluLWZpbGUtbmFtZSBjb25mdGVzdC5DIC1tcmVsb2NhdGlvbi1tb2RlbCBzdGF0aWMgLW1kaXNh YmxlLWZwLWVsaW0gLXJlbGF4ZWQtYWxpYXNpbmcgLW1hc20tdmVyYm9zZSAtbWNvbnN0cnVjdG9y LWFsaWFzZXMgLXRhcmdldC1jcHUgcGVudGl1bTQgLW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciAt ZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtcmVzb3VyY2UtZGlyIC91c3IvYmlu Ly4uL2xpYi9jbGFuZy8zLjAgLWlzeXN0ZW0gL3Vzci9sb2NhbC9pbmNsdWRlIC1JIC91c3IvbG9j YWwvaW5jbHVkZSAtZm1vZHVsZS1jYWNoZS1wYXRoIC90bXAvY2xhbmctbW9kdWxlLWNhY2hlIC1P MiAtV25vLWVycm9yIC1Xbm8tZXJyb3IgLXcgLXN0ZD1nbnUrKzB4IC1mZGVwcmVjYXRlZC1tYWNy byAtZmVycm9yLWxpbWl0IDE5IC1mbWVzc2FnZS1sZW5ndGggMCAtcHRocmVhZCAtZm5vLXJ0dGkg LWZnbnUtcnVudGltZSAtZm9iamMtcnVudGltZS1oYXMtYXJjIC1mb2JqYy1ydW50aW1lLWhhcy13 ZWFrIC1mb2JqYy1mcmFnaWxlLWFiaSAtZmRpYWdub3N0aWNzLXNob3ctb3B0aW9uIC1vIC90bXAv Y29uZnRlc3QtWFlNaDFOLm8gLXggYysrIGNvbmZ0ZXN0LkMgCjEuCTxlb2Y+IHBhcnNlciBhdCBl bmQgb2YgZmlsZQoyLgljb25maWd1cmU6MTMxOTM6NTogTExWTSBJUiBnZW5lcmF0aW9uIG9mIGRl Y2xhcmF0aW9uICdtYWluJwozLgljb25maWd1cmU6MTMxOTM6NTogR2VuZXJhdGluZyBjb2RlIGZv ciBkZWNsYXJhdGlvbiAnbWFpbicKNC4JY29uZmlndXJlOjEzMTkzOjEyOiBMTFZNIElSIGdlbmVy YXRpb24gb2YgY29tcG91bmQgc3RhdGVtZW50ICgne30nKQpjbGFuZysrOiBlcnJvcjogdW5hYmxl IHRvIGV4ZWN1dGUgY29tbWFuZDogSWxsZWdhbCBpbnN0cnVjdGlvbjogNCAoY29yZSBkdW1wZWQp CmNsYW5nKys6IGVycm9yOiBjbGFuZyBmcm9udGVuZCBjb21tYW5kIGZhaWxlZCBkdWUgdG8gc2ln bmFsIDIgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY2xhbmcrKzogbm90ZTogZGlhZ25vc3Rp YyBtc2c6IFBsZWFzZSBzdWJtaXQgYSBidWcgcmVwb3J0IHRvIGh0dHA6Ly9sbHZtLm9yZy9idWdz LyBhbmQgaW5jbHVkZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGFuZCBhbGwgZGlhZ25vc3RpYyBp bmZvcm1hdGlvbi4KY2xhbmcrKzogbm90ZTogZGlhZ25vc3RpYyBtc2c6IFByZXByb2Nlc3NlZCBz b3VyY2UocykgYXJlIGxvY2F0ZWQgYXQ6CmNsYW5nKys6IG5vdGU6IGRpYWdub3N0aWMgbXNnOiAv dG1wL2NvbmZ0ZXN0LVA2VVdKdS5paQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xp bmUgMTMxOTEgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCiNpbmNsdWRlIDx3Y2hh ci5oPgppbnQgbWFpbigpIHsKbWJzdGF0ZV90IHBzPXswfTt3Y3J0b21iKDAsJ2YnLCZwcyk7Cjsg cmV0dXJuIDA7IH0KY29uZmlndXJlOjEzMjIxOiBjaGVja2luZyBmb3IgbWJydG93Ywpjb25maWd1 cmU6MTMyMzM6IGNsYW5nKysgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1z dHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rp b25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby10cmVlLXZycCAtUXVudXNlZC1h cmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUg LXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2lu IC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5DICAxPiY1 ClN0YWNrIGR1bXA6CjAuCVByb2dyYW0gYXJndW1lbnRzOiAvdXNyL2Jpbi9jbGFuZysrIC1jYzEg LXRyaXBsZSBpMzg2LXVua25vd24tZnJlZWJzZDkuMCAtZW1pdC1vYmogLWRpc2FibGUtZnJlZSAt bWFpbi1maWxlLW5hbWUgY29uZnRlc3QuQyAtbXJlbG9jYXRpb24tbW9kZWwgc3RhdGljIC1tZGlz YWJsZS1mcC1lbGltIC1yZWxheGVkLWFsaWFzaW5nIC1tYXNtLXZlcmJvc2UgLW1jb25zdHJ1Y3Rv ci1hbGlhc2VzIC10YXJnZXQtY3B1IHBlbnRpdW00IC1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIg LWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLXJlc291cmNlLWRpciAvdXNyL2Jp bi8uLi9saWIvY2xhbmcvMy4wIC1pc3lzdGVtIC91c3IvbG9jYWwvaW5jbHVkZSAtSSAvdXNyL2xv Y2FsL2luY2x1ZGUgLWZtb2R1bGUtY2FjaGUtcGF0aCAvdG1wL2NsYW5nLW1vZHVsZS1jYWNoZSAt TzIgLVduby1lcnJvciAtV25vLWVycm9yIC13IC1zdGQ9Z251KysweCAtZmRlcHJlY2F0ZWQtbWFj cm8gLWZlcnJvci1saW1pdCAxOSAtZm1lc3NhZ2UtbGVuZ3RoIDAgLXB0aHJlYWQgLWZuby1ydHRp IC1mZ251LXJ1bnRpbWUgLWZvYmpjLXJ1bnRpbWUtaGFzLWFyYyAtZm9iamMtcnVudGltZS1oYXMt d2VhayAtZm9iamMtZnJhZ2lsZS1hYmkgLWZkaWFnbm9zdGljcy1zaG93LW9wdGlvbiAtbyAvdG1w L2NvbmZ0ZXN0LUNaUjViaC5vIC14IGMrKyBjb25mdGVzdC5DIAoxLgk8ZW9mPiBwYXJzZXIgYXQg ZW5kIG9mIGZpbGUKMi4JY29uZmlndXJlOjEzMjI4OjU6IExMVk0gSVIgZ2VuZXJhdGlvbiBvZiBk ZWNsYXJhdGlvbiAnbWFpbicKMy4JY29uZmlndXJlOjEzMjI4OjU6IEdlbmVyYXRpbmcgY29kZSBm b3IgZGVjbGFyYXRpb24gJ21haW4nCjQuCWNvbmZpZ3VyZToxMzIyODoxMjogTExWTSBJUiBnZW5l cmF0aW9uIG9mIGNvbXBvdW5kIHN0YXRlbWVudCAoJ3t9JykKY2xhbmcrKzogZXJyb3I6IHVuYWJs ZSB0byBleGVjdXRlIGNvbW1hbmQ6IElsbGVnYWwgaW5zdHJ1Y3Rpb246IDQgKGNvcmUgZHVtcGVk KQpjbGFuZysrOiBlcnJvcjogY2xhbmcgZnJvbnRlbmQgY29tbWFuZCBmYWlsZWQgZHVlIHRvIHNp Z25hbCAyICh1c2UgLXYgdG8gc2VlIGludm9jYXRpb24pCmNsYW5nKys6IG5vdGU6IGRpYWdub3N0 aWMgbXNnOiBQbGVhc2Ugc3VibWl0IGEgYnVnIHJlcG9ydCB0byBodHRwOi8vbGx2bS5vcmcvYnVn cy8gYW5kIGluY2x1ZGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgYWxsIGRpYWdub3N0aWMg aW5mb3JtYXRpb24uCmNsYW5nKys6IG5vdGU6IGRpYWdub3N0aWMgbXNnOiBQcmVwcm9jZXNzZWQg c291cmNlKHMpIGFyZSBsb2NhdGVkIGF0OgpjbGFuZysrOiBub3RlOiBkaWFnbm9zdGljIG1zZzog L3RtcC9jb25mdGVzdC02MjZqQlguaWkKY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNs aW5lIDEzMjI2ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgojaW5jbHVkZSA8d2No YXIuaD4KaW50IG1haW4oKSB7Cm1ic3RhdGVfdCBwcz17MH07bWJydG93YygwLDAsMCwmcHMpOwo7 IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMzI2NTogY2hlY2tpbmcgZm9yIHJlc19uaW5pdCgpCmNv bmZpZ3VyZToxMzI4MjogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNp bmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVu dXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2lu Y2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXos b3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5j ICAxPiY1CkluIGZpbGUgaW5jbHVkZWQgZnJvbSBjb25maWd1cmU6MTMyNzU6Ci91c3IvaW5jbHVk ZS9yZXNvbHYuaDoxNTc6MTQ6IGVycm9yOiBhcnJheSBoYXMgaW5jb21wbGV0ZSBlbGVtZW50IHR5 cGUgJ3N0cnVjdCBzb2NrYWRkcl9pbicKICAgICAgICAgICAgICAgIG5zYWRkcl9saXN0W01BWE5T XTsgICAgIC8qJTwgYWRkcmVzcyBvZiBuYW1lIHNlcnZlciAqLwogICAgICAgICAgICAgICAgICAg ICAgICAgICBeCi91c3IvaW5jbHVkZS9yZXNvbHYuaDoxNTY6OTogbm90ZTogZm9yd2FyZCBkZWNs YXJhdGlvbiBvZiAnc3RydWN0IHNvY2thZGRyX2luJwogICAgICAgIHN0cnVjdCBzb2NrYWRkcl9p bgogICAgICAgICAgICAgICBeCi91c3IvaW5jbHVkZS9yZXNvbHYuaDoxNzE6MTg6IGVycm9yOiBm aWVsZCBoYXMgaW5jb21wbGV0ZSB0eXBlICdzdHJ1Y3QgaW5fYWRkcicKICAgICAgICAgICAgICAg IHN0cnVjdCBpbl9hZGRyICBhZGRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K L3Vzci9pbmNsdWRlL3Jlc29sdi5oOjE3MToxMDogbm90ZTogZm9yd2FyZCBkZWNsYXJhdGlvbiBv ZiAnc3RydWN0IGluX2FkZHInCiAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciAgYWRkcjsK ICAgICAgICAgICAgICAgICAgICAgICBeCi91c3IvaW5jbHVkZS9yZXNvbHYuaDoxOTU6MjE6IGVy cm9yOiBmaWVsZCBoYXMgaW5jb21wbGV0ZSB0eXBlICdzdHJ1Y3Qgc29ja2FkZHJfaW4nCiAgICAg ICAgc3RydWN0IHNvY2thZGRyX2luICAgICAgc2luOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF4KL3Vzci9pbmNsdWRlL3Jlc29sdi5oOjE1Njo5OiBub3RlOiBmb3J3YXJkIGRlY2xh cmF0aW9uIG9mICdzdHJ1Y3Qgc29ja2FkZHJfaW4nCiAgICAgICAgc3RydWN0IHNvY2thZGRyX2lu CiAgICAgICAgICAgICAgIF4KMyBlcnJvcnMgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBw cm9ncmFtIHdhczoKI2xpbmUgMTMyNzAgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgi CgogICAgICAgICNpZmRlZiBsaW51eAogICAgICAgICNkZWZpbmUgX0JTRF9TT1VSQ0UgMQogICAg ICAgICNlbmRpZgogICAgICAgICNpbmNsdWRlIDxyZXNvbHYuaD4KICAgICAgICAKaW50IG1haW4o KSB7CmludCBmb28gPSByZXNfbmluaXQoJl9yZXMpOwo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZTox MzMxNTogY2hlY2tpbmcgZm9yIGdudV9nZXRfbGliY192ZXJzaW9uKCkKY29uZmlndXJlOjEzMzMx OiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10 dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5v LWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRz IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcg LWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFk ICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJw YXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuQyAgMT4mNQpjb25maWd1 cmU6MTMzMjc6Mjk6IGVycm9yOiB1c2Ugb2YgdW5kZWNsYXJlZCBpZGVudGlmaWVyICdnbnVfZ2V0 X2xpYmNfdmVyc2lvbicKY29uc3QgY2hhciAqZ2xpYmNfdmVyc2lvbiA9IGdudV9nZXRfbGliY192 ZXJzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCjEgZXJyb3IgZ2VuZXJhdGVk Lgpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgMTMzMjAgImNvbmZpZ3VyZSIK I2luY2x1ZGUgImNvbmZkZWZzLmgiCgogICAgICAgICNpZmRlZiBIQVZFX0dOVV9MSUJDX1ZFUlNJ T05fSAogICAgICAgICNpbmNsdWRlIDxnbnUvbGliYy12ZXJzaW9uLmg+CiAgICAgICAgI2VuZGlm CiAgICAgICAgCmludCBtYWluKCkgewpjb25zdCBjaGFyICpnbGliY192ZXJzaW9uID0gZ251X2dl dF9saWJjX3ZlcnNpb24oKTsKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTMzNjM6IGNoZWNraW5n IGZvciBpY29udiBpbiAtbGMKY29uZmlndXJlOjEzMzg1OiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3Ig LXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0 aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4 IC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1 ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vz ci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9l eGVjc3RhY2sgY29uZnRlc3QuQyAtbGMgICAxPiY1Ci90bXAvY29uZnRlc3Qtd0pjMWkzLm86IElu IGZ1bmN0aW9uIGBtYWluJzoKY29uZnRlc3QuQzooLnRleHQubWFpbisweDcpOiB1bmRlZmluZWQg cmVmZXJlbmNlIHRvIGBpY29udicKY2xhbmcrKzogZXJyb3I6IGxpbmtlciBjb21tYW5kIGZhaWxl ZCB3aXRoIGV4aXQgY29kZSAxICh1c2UgLXYgdG8gc2VlIGludm9jYXRpb24pCmNvbmZpZ3VyZTog ZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAxMzM3MSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29u ZmRlZnMuaCIKLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lk IGFuIGVycm9yLiAgKi8KI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIKI2VuZGlmCi8qIFdl IHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdj YzIKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGls bCBhcHBseS4gICovCmNoYXIgaWNvbnYoKTsKCmludCBtYWluKCkgewppY29udigpCjsgcmV0dXJu IDA7IH0KY29uZmlndXJlOjEzNDA0OiBjaGVja2luZyBmb3IgaWNvbnYgaW4gLWxpY29udgpjb25m aWd1cmU6MTM0MjY6IGNsYW5nKysgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby10cmVlLXZycCAtUXVudXNl ZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVdu by1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1 ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3Jp Z2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5DIC1s aWNvbnYgICAxPiY1CmNvbmZpZ3VyZToxMzQ5NDogY2hlY2tpbmcgZm9yIGljb252KCkKY29uZmln dXJlOjEzNTEzOiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0 aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tdHJlZS12cnAgLVF1bnVzZWQt YXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8t ZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRl IC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdp biAtV2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuQyAgIC1s aWNvbnYgMT4mNQpjb25maWd1cmU6MTM1NDA6IGNoZWNraW5nIGZvciBpY29udigpIHdpdGggY29u c3QgaW5wdXQKY29uZmlndXJlOjEzNTYwOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25z IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0 YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tdHJlZS12cnAgLVF1 bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6MTM1OTI6IGNoZWNraW5nIGZvciBubF9s YW5naW5mbyBhbmQgQ09ERVNFVApjb25maWd1cmU6MTM2MDQ6IGNsYW5nKysgLW8gY29uZnRlc3Qg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxp YXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVu Y3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsr MHggLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5j bHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwv dXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixu b2V4ZWNzdGFjayBjb25mdGVzdC5DICAxPiY1CmNvbmZpZ3VyZToxMzYzOTogY2hlY2tpbmcgZm9y IGFuIGltcGxlbWVudGF0aW9uIG9mIHZhX2NvcHkoKQpjb25maWd1cmU6MTM2NjM6IGNsYW5nIC1v IGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMg LWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0v dXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3Iv bG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9S SUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAgMT4mNQpjb25maWd1cmU6MTM2ODA6 IGNoZWNraW5nIGZvciBhbiBpbXBsZW1lbnRhdGlvbiBvZiBfX3ZhX2NvcHkoKQpjb25maWd1cmU6 MTM3MDQ6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVu Y3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJn dW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJy b3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1w dGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAt V2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAgMT4mNQov dG1wL2NvbmZ0ZXN0LVREd2NrSi5vOiBJbiBmdW5jdGlvbiBgZic6CmNvbmZ0ZXN0LmM6KC50ZXh0 LmYrMHgxNyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9fdmFfY29weScKY2xhbmc6IGVycm9y OiBsaW5rZXIgY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSAodXNlIC12IHRvIHNlZSBp bnZvY2F0aW9uKQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgMTM2OTAgImNv bmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCgogICAgICAgICNpbmNsdWRlIDxzdGRhcmcu aD4KICAgICAgICB2b2lkIGYgKGludCBpLCAuLi4pIHsKICAgICAgICAgICAgdmFfbGlzdCBhcmdz MSwgYXJnczI7CiAgICAgICAgICAgIHZhX3N0YXJ0IChhcmdzMSwgaSk7CiAgICAgICAgICAgIF9f dmFfY29weSAoYXJnczIsIGFyZ3MxKTsKICAgICAgICAgICAgaWYgKHZhX2FyZyAoYXJnczIsIGlu dCkgIT0gNDIgfHwgdmFfYXJnIChhcmdzMSwgaW50KSAhPSA0MikKICAgICAgICAgICAgICAgIGV4 aXQgKDEpOwogICAgICAgICAgICB2YV9lbmQgKGFyZ3MxKTsgdmFfZW5kIChhcmdzMik7CiAgICAg ICAgfQogICAgICAgIGludCBtYWluKCkgeyBmICgwLCA0Mik7IHJldHVybiAwOyB9CmNvbmZpZ3Vy ZToxMzcyMTogY2hlY2tpbmcgd2hldGhlciB2YV9saXN0cyBjYW4gYmUgY29waWVkIGJ5IHZhbHVl CmNvbmZpZ3VyZToxMzc0NTogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAt UXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1 bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2Fs L2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2ws LXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVz dC5jICAxPiY1CmNvbmZpZ3VyZToxMzg1ODogY2hlY2tpbmcgZm9yIG1vZGVybiBDKysgdGVtcGxh dGUgc3BlY2lhbGl6YXRpb24gc3ludGF4IHN1cHBvcnQKY29uZmlndXJlOjEzODczOiBjbGFuZysr IC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0 LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8t ZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAt ZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1n bnUrKzB4IC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9 cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2Fs L2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6 MTM4OTE6IGNoZWNraW5nIHdoZXRoZXIgcGFydGlhbCB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiB3 b3Jrcwpjb25maWd1cmU6MTM5MDQ6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby10cmVlLXZycCAtUXVudXNl ZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVdu by1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1 ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZToxMzkyODogY2hlY2tpbmcgd2hldGhlciB0aGUg QysrICJ1c2luZyIga2V5d29yZCByZXNvbHZlcyBhbWJpZ3VpdHkKY29uZmlndXJlOjEzOTQ5OiBj bGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8t cnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMg LXN0ZD1nbnUrKzB4IC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNy L2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25m aWd1cmU6MTM5NzM6IGNoZWNraW5nIGZvciBDKysgZHluYW1pY19jYXN0IHRvIHZvaWQqCmNvbmZp Z3VyZToxNDAwMDogY2xhbmcrKyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5v LXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXRyZWUtdnJwIC1RdW51c2Vk LWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25v LWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVk ZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmln aW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LkMgIDE+ JjUKY29uZmlndXJlOjE0MDI3OiBjaGVja2luZyB3aGV0aGVyIEMrKyByZXF1aXJlcyBpbXBsZW1l bnRhdGlvbiBvZiB1bnVzZWQgdmlydHVhbCBtZXRob2RzCmNvbmZpZ3VyZToxNDAzOTogY2xhbmcr KyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAt Zm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRp b25zIC1zdGQ9Z251KysweCAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVt L3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LkMgIDE+JjUKY29uZmlndXJlOjE0MDY1 OiBjaGVja2luZyBmb3IgdHJvdWJsZSBjb21wYXJpbmcgdG8gemVybyBuZWFyIHN0ZDo6b3BlcmF0 b3IhPSgpCmNvbmZpZ3VyZToxNDA4MTogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNo PXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAt Zm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEt c2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXRyZWUtdnJwIC1RdW51 c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt V25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5j bHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJlOjE0MTExOiBjaGVja2luZyBmb3IgX190aHJl YWQga2V5d29yZCBmb3IgVExTIHZhcmlhYmxlcwpjb25maWd1cmU6MTQyMTA6IGNoZWNraW5nIGZv ciBtYWxsb2MuaApjb25maWd1cmU6MTQyMTA6IGNoZWNraW5nIGZvciBtYWxsb2NfbnAuaApjb25m aWd1cmU6MTQyMjM6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3Qt YWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1m bm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVu dHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAt dyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRl c3QuQyAxPiY1CmNvbmZpZ3VyZToxNDI1OTogY2hlY2tpbmcgZm9yIHN0cm5kdXAKY29uZmlndXJl OjE0MjkwOiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10 dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9u cyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJn dW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJy b3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1w dGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAt V2wsLXJwYXRoLFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuQyAgMT4mNQpj b25maWd1cmU6MTQyNTk6IGNoZWNraW5nIGZvciBwb3NpeF9tZW1hbGlnbgpjb25maWd1cmU6MTQy OTA6IGNsYW5nKysgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3Qt YWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1m bm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVu dHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAt dyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJl YWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwt cnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5DICAxPiY1CmNvbmZp Z3VyZToxNDI1OTogY2hlY2tpbmcgZm9yIG1lbWFsaWduCmNvbmZpZ3VyZToxNDI5MDogY2xhbmcr KyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAt Zm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRp b25zIC1zdGQ9Z251KysweCAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVt L3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LkMgIDE+JjUKL3RtcC9jb25mdGVzdC11 RFJpZXQubzogSW4gZnVuY3Rpb24gYG1haW4nOgpjb25mdGVzdC5DOigudGV4dC5tYWluKzB4Nyk6 IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG1lbWFsaWduJwpjbGFuZysrOiBlcnJvcjogbGlua2Vy IGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlv bikKY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDE0MjY0ICJjb25maWd1cmUi CiNpbmNsdWRlICJjb25mZGVmcy5oIgovKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIg bWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCiAgICB3aGljaCBjYW4gY29uZmxp Y3Qgd2l0aCBjaGFyIG1lbWFsaWduKCk7IGJlbG93LiAgKi8KI2luY2x1ZGUgPGFzc2VydC5oPgov KiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3Iu ICAqLwojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIgojZW5kaWYKLyogV2UgdXNlIGNoYXIg YmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgogICAgYnVp bHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAg Ki8KY2hhciBtZW1hbGlnbigpOwoKaW50IG1haW4oKSB7CgovKiBUaGUgR05VIEMgbGlicmFyeSBk ZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCiAgICB0byBhbHdh eXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAog ICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBh bGlhcy4gICovCiNpZiBkZWZpbmVkIChfX3N0dWJfbWVtYWxpZ24pIHx8IGRlZmluZWQgKF9fc3R1 Yl9fX21lbWFsaWduKQpjaG9rZSBtZQojZWxzZQptZW1hbGlnbigpOwojZW5kaWYKCjsgcmV0dXJu IDA7IH0KY29uZmlndXJlOjE0MjU5OiBjaGVja2luZyBmb3IgdmFsbG9jCmNvbmZpZ3VyZToxNDI5 MDogY2xhbmcrKyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1h bGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZu by1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50 cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13 IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVh ZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1y cGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LkMgIDE+JjUKY29uZmln dXJlOjE0MzIxOiBjaGVja2luZyBmb3IgbWFsbG9jX3VzYWJsZV9zaXplCmNvbmZpZ3VyZToxNDM1 MjogY2xhbmcrKyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1h bGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZu by1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50 cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13 IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVh ZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1y cGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LkMgIDE+JjUKY29uZmln dXJlOjE0MzgyOiBjaGVja2luZyBmb3IgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCmNv bmZpZ3VyZToxNDM5NDogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVu ZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmlj dC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMg LWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3Vt ZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9y IC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25m dGVzdC5DIDE+JjUKY29uZmlndXJlOjE0NDA5OiBjaGVja2luZyBmb3IgX19hdHRyaWJ1dGVfXygo bWFsbG9jKSkKY29uZmlndXJlOjE0NDIxOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25z IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0 YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tdHJlZS12cnAgLVF1 bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6MTQ0MzY6IGNoZWNraW5nIGZvciBfX2F0 dHJpYnV0ZV9fKCh3YXJuX3VudXNlZF9yZXN1bHQpKQpjb25maWd1cmU6MTQ0NDg6IGNsYW5nKysg LWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3Qt YWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1m ZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdu dSsrMHggLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwv aW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZTox NDQ3MjogY2hlY2tpbmcgZm9yIExDX01FU1NBR0VTCmNvbmZpZ3VyZToxNDQ4NDogY2xhbmcgLWMg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwv aW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZTox NDUxMDogY2hlY2tpbmcgZm9yIGxvY2FsZWNvbnYKY29uZmlndXJlOjE0NTM4OiBjbGFuZyAtbyBj b25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1m ZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vz ci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xv Y2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklH SU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjE0NzI3OiBj aGVja2luZyBmb3IgbnNwci1jb25maWcKY29uZmlndXJlOjE0NzYyOiBjaGVja2luZyBmb3IgTlNQ UiAtIHZlcnNpb24gPj0gNC45LjQKY29uZmlndXJlOjE0ODMwOiBjbGFuZyAtYyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5v LXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5v LXRyZWUtdnJwIC1JL3Vzci9sb2NhbC9pbmNsdWRlL25zcHIgLVF1bnVzZWQtYXJndW1lbnRzIC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlz eXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMg MT4mNQpjb25maWd1cmU6MTQ4NTA6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLUkvdXNy L2xvY2FsL2luY2x1ZGUvbnNwciAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwv aW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZTox NDg5OTogY2hlY2tpbmcgZm9yIHBrZy1jb25maWcKY29uZmlndXJlOjE0OTQzOiBjaGVja2luZyBm b3IgbGliZXZlbnQKY29uZmlndXJlOjE0OTUwOiBjaGVja2luZyBNT1pfTElCRVZFTlRfQ0ZMQUdT CmNvbmZpZ3VyZToxNDk1NTogY2hlY2tpbmcgTU9aX0xJQkVWRU5UX0xJQlMKY29uZmlndXJlOjE1 MTMwOiBjaGVja2luZyBmb3IgbnNzLWNvbmZpZwpjb25maWd1cmU6MTUxNjU6IGNoZWNraW5nIGZv ciBOU1MgLSB2ZXJzaW9uID49IDMuMTQuMQpjb25maWd1cmU6MTUyMzg6IGNoZWNraW5nIGZvciBZ QVNNIGFzc2VtYmxlcgpjb25maWd1cmU6MTUyNDQ6IGNoZWNraW5nIGZvciB5YXNtCmNvbmZpZ3Vy ZToxNTMwMjogY2hlY2tpbmcgZm9yIGpwZWdfZGVzdHJveV9jb21wcmVzcyBpbiAtbGpwZWcKY29u ZmlndXJlOjE1MzIxOiBjbGFuZyAtbyBjb25mdGVzdCAtSS91c3IvbG9jYWwvaW5jbHVkZSAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9u cyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNs dWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtTC91c3IvbG9jYWwvbGliIC1wdGhyZWFkICAtTC91 c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwk JE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAtbGpwZWcgICAxPiY1CmNvbmZp Z3VyZToxNTM1NzogY2xhbmcgLWMgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVl LXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNy L2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxNTQwNDogY2hlY2tpbmcg Zm9yIGd6cmVhZCBpbiAtbHoKY29uZmlndXJlOjE1NDIzOiBjbGFuZyAtbyBjb25mdGVzdCAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9u cyAtZm5vLXRyZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNs dWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91 c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5v ZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgLWx6ICAgMT4mNQpjb25maWd1cmU6MTU0NTg6IGNsYW5nIC1j IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9 cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2Fs L2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6 MTU1MDk6IGNoZWNraW5nIGZvciBCWjJfYnpyZWFkIGluIC1sYnoyCmNvbmZpZ3VyZToxNTUyODog Y2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1 bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1z ZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAt aXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQg IC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBh dGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5jIC1sYnoyICAgMT4mNQpj b25maWd1cmU6MTU1Nzc6IGNoZWNraW5nIGZvciBwbmdfZ2V0X3ZhbGlkIGluIC1scG5nCmNvbmZp Z3VyZToxNTU5NjogY2xhbmcgLW8gY29uZnRlc3QgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLU8yIC1w aXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcg LWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMg LWZuby10cmVlLXZycCAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVk ZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYiAtcHRocmVhZCAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgLWxwbmcgICAxPiY1CmNvbmZpZ3Vy ZToxNTYxODogY2hlY2tpbmcgZm9yIHBuZ19nZXRfYWNUTCBpbiAtbHBuZwpjb25maWd1cmU6MTU2 Mzc6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJl ZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vz ci9sb2NhbC9pbmNsdWRlIC1ML3Vzci9sb2NhbC9saWIgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9s aWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1X bCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5jIC1scG5nICAgMT4mNQpjb25maWd1cmU6MTU2ODU6 IGNsYW5nIC1jIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVz ZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1X bm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNs dWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTU3NzE6IGNoZWNraW5nIGZvciBodW5zcGVs bApjb25maWd1cmU6MTU3Nzg6IGNoZWNraW5nIE1PWl9IVU5TUEVMTF9DRkxBR1MKY29uZmlndXJl OjE1NzgzOiBjaGVja2luZyBNT1pfSFVOU1BFTExfTElCUwpjb25maWd1cmU6MTU5NzU6IGNoZWNr aW5nIGZvciBsaWJmZmkgPj0gMy4wLjkKY29uZmlndXJlOjE1OTgyOiBjaGVja2luZyBNT1pfRkZJ X0NGTEFHUwpjb25maWd1cmU6MTU5ODc6IGNoZWNraW5nIE1PWl9GRklfTElCUwpjb25maWd1cmU6 MTYxNzU6IGNoZWNraW5nIGZvciBhcHBsaWNhdGlvbiB0byBidWlsZApjb25maWd1cmU6MTYyMTg6 IGNoZWNraW5nIGlmIGFwcC1zcGVjaWZpYyBjb25mdmFycy5zaCBleGlzdHMKY29uZmlndXJlOjE2 Njc2OiBjaGVja2luZyBmb3IgZ3RrKy0yLjAgPj0gMi4xMC4wIGd0aystdW5peC1wcmludC0yLjAg Z2xpYi0yLjAgZ29iamVjdC0yLjAgZ2RrLXgxMS0yLjAKY29uZmlndXJlOjE2NjgzOiBjaGVja2lu ZyBNT1pfR1RLMl9DRkxBR1MKY29uZmlndXJlOjE2Njg4OiBjaGVja2luZyBNT1pfR1RLMl9MSUJT CmNvbmZpZ3VyZToxNjgxNDogY2hlY2tpbmcgZm9yIGxpYnN0YXJ0dXAtbm90aWZpY2F0aW9uLTEu MCA+PSAwLjgKY29uZmlndXJlOjE2ODIxOiBjaGVja2luZyBNT1pfU1RBUlRVUF9OT1RJRklDQVRJ T05fQ0ZMQUdTCmNvbmZpZ3VyZToxNjgyNjogY2hlY2tpbmcgTU9aX1NUQVJUVVBfTk9USUZJQ0FU SU9OX0xJQlMKY29uZmlndXJlOjE3NzEzOiBjaGVja2luZyBmb3IgcGFuZ28gPj0gMS4xNC4wCmNv bmZpZ3VyZToxNzcyMDogY2hlY2tpbmcgX1BBTkdPQ0hLX0NGTEFHUwpjb25maWd1cmU6MTc3MjU6 IGNoZWNraW5nIF9QQU5HT0NIS19MSUJTCmNvbmZpZ3VyZToxNzgwNTogY2hlY2tpbmcgZm9yIHBh bmdvID49IDEuMTQuMCBwYW5nb2Z0MiA+PSAxLjE0LjAgcGFuZ29jYWlybyA+PSAxLjE0LjAKY29u ZmlndXJlOjE3ODEyOiBjaGVja2luZyBNT1pfUEFOR09fQ0ZMQUdTCmNvbmZpZ3VyZToxNzgxNzog Y2hlY2tpbmcgTU9aX1BBTkdPX0xJQlMKY29uZmlndXJlOjE4MzczOiBjaGVja2luZyBmb3IgZ2Nv bmYtMi4wID49IDEuMi4xIGdvYmplY3QtMi4wIApjb25maWd1cmU6MTgzODA6IGNoZWNraW5nIE1P Wl9HQ09ORl9DRkxBR1MKY29uZmlndXJlOjE4Mzg1OiBjaGVja2luZyBNT1pfR0NPTkZfTElCUwpj b25maWd1cmU6MTg3NzQ6IGNoZWNraW5nIGZvciBkYnVzLTEgPj0gMC42MApjb25maWd1cmU6MTg3 ODE6IGNoZWNraW5nIE1PWl9EQlVTX0NGTEFHUwpjb25maWd1cmU6MTg3ODY6IGNoZWNraW5nIE1P Wl9EQlVTX0xJQlMKY29uZmlndXJlOjE4ODY1OiBjaGVja2luZyBmb3IgZGJ1cy1nbGliLTEgPj0g MC42MApjb25maWd1cmU6MTg4NzI6IGNoZWNraW5nIE1PWl9EQlVTX0dMSUJfQ0ZMQUdTCmNvbmZp Z3VyZToxODg3NzogY2hlY2tpbmcgTU9aX0RCVVNfR0xJQl9MSUJTCmNvbmZpZ3VyZToxOTM4Mzog Y2hlY2tpbmcgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKCkpKSBzdXBwb3J0CmNvbmZpZ3VyZTox OTQwMDogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0 aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtV2Vycm9yIC1RdW51c2VkLWFyZ3Vt ZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9y IC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25m dGVzdC5jIDE+JjUKY29uZmlndXJlOjE5NjY3OiBjaGVja2luZyBmb3IgdnB4ID49IDEuMC4wCmNv bmZpZ3VyZToxOTY3NDogY2hlY2tpbmcgTU9aX0xJQlZQWF9DRkxBR1MKY29uZmlndXJlOjE5Njc5 OiBjaGVja2luZyBNT1pfTElCVlBYX0xJQlMKY29uZmlndXJlOjE5NzExOiBjaGVja2luZyBmb3Ig dnB4L3ZweF9kZWNvZGVyLmgKY29uZmlndXJlOjE5NzI0OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRy ZWUtdnJwIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVu ZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91 c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjE5NzQ3OiBjaGVja2lu ZyBmb3IgdnB4X2NvZGVjX2RlY19pbml0X3ZlciBpbiAtbHZweApjb25maWd1cmU6MTk3NjY6IGNs YW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2Vj dGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlz eXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAt TC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRo LFwkJE9SSUdJTiAtV2wsLXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAtbHZweCAgIDE+JjUKY29u ZmlndXJlOjIwMzYwOiBjaGVja2luZyBmb3IgZ3N0cmVhbWVyLTAuMTAgPj0gMC4xMC4zMwogICAg ICAgICAgICAgICAgICAgICAgZ3N0cmVhbWVyLWFwcC0wLjEwCiAgICAgICAgICAgICAgICAgICAg ICBnc3RyZWFtZXItcGx1Z2lucy1iYXNlLTAuMTAKY29uZmlndXJlOjIwMzcxOiBjaGVja2luZyBH U1RSRUFNRVJfQ0ZMQUdTCmNvbmZpZ3VyZToyMDM3ODogY2hlY2tpbmcgR1NUUkVBTUVSX0xJQlMK Y29uZmlndXJlOjIwNDI0OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlh c2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLXRyZWUtdnJwIC1R dW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVt NCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwv aW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwt eixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIC1sZ3N0YXBw LTAuMTAgLWxnc3RiYXNlLTAuMTAgLWxnc3RyZWFtZXItMC4xMCAtbGdvYmplY3QtMi4wIC1sZ21v ZHVsZS0yLjAgLWxndGhyZWFkLTIuMCAtcHRocmVhZCAtbGdsaWItMi4wIC1ML3Vzci9sb2NhbC9s aWIgLWx4bWwyICAgLWxnc3R2aWRlby0wLjEwIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjIw NTQ0OiBjaGVja2luZyBmb3IgamF2YQpjb25maWd1cmU6MjA1OTM6IGNoZWNraW5nIGZvciBqYXZh Ywpjb25maWd1cmU6MjA2NDI6IGNoZWNraW5nIGZvciBqYXIKY29uZmlndXJlOjIxNDA1OiBjaGVj a2luZyBmb3IgdGFyIGFyY2hpdmVyCmNvbmZpZ3VyZToyMTQxMTogY2hlY2tpbmcgZm9yIGdudXRh cgpjb25maWd1cmU6MjE0MTE6IGNoZWNraW5nIGZvciBndGFyCmNvbmZpZ3VyZToyMTQ0ODogY2hl Y2tpbmcgZm9yIHdnZXQKY29uZmlndXJlOjIxNDU0OiBjaGVja2luZyBmb3Igd2dldApjb25maWd1 cmU6MjE3NjI6IGNoZWNraW5nIGZvciBzcWxpdGUzID49IDMuNy4xNC4xCmNvbmZpZ3VyZToyMTc2 OTogY2hlY2tpbmcgU1FMSVRFX0NGTEFHUwpjb25maWd1cmU6MjE3NzQ6IGNoZWNraW5nIFNRTElU RV9MSUJTCmNvbmZpZ3VyZToyMTgwNTogY2hlY2tpbmcgZm9yIFNRTElURV9TRUNVUkVfREVMRVRF IHN1cHBvcnQgaW4gc3lzdGVtIFNRTGl0ZQpjb25maWd1cmU6MjE4Mjg6IGNsYW5nIC1vIGNvbmZ0 ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0 LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRh LXNlY3Rpb25zIC1mbm8tdHJlZS12cnAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgICAtUXVudXNlZC1h cmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUg LXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2lu IC1XbCwtcnBhdGgsXCQkT1JJR0lOIC1XbCwteixub2V4ZWNzdGFjayBjb25mdGVzdC5jICAtTC91 c3IvbG9jYWwvbGliIC1sc3FsaXRlMyAgIDE+JjUKY29uZmlndXJlOjIxODUxOiBjaGVja2luZyBm b3IgU1FMSVRFX1RIUkVBRFNBRkUgc3VwcG9ydCBpbiBzeXN0ZW0gU1FMaXRlCmNvbmZpZ3VyZToy MTg3NDogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtSS91c3IvbG9jYWwv aW5jbHVkZSAgIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAt SS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9j YWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0 YWNrIGNvbmZ0ZXN0LmMgIC1ML3Vzci9sb2NhbC9saWIgLWxzcWxpdGUzICAgMT4mNQpjb25maWd1 cmU6MjE4OTc6IGNoZWNraW5nIGZvciBTUUxJVEVfRU5BQkxFX0ZUUzMgc3VwcG9ydCBpbiBzeXN0 ZW0gU1FMaXRlCmNvbmZpZ3VyZToyMTkyMDogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1z dHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10 cmVlLXZycCAtSS91c3IvbG9jYWwvaW5jbHVkZSAgIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVt L3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNvbmZ0ZXN0LmMgIC1ML3Vzci9sb2NhbC9saWIgLWxz cWxpdGUzICAgMT4mNQpjb25maWd1cmU6MjE5NDM6IGNoZWNraW5nIGZvciBTUUxJVEVfRU5BQkxF X1VOTE9DS19OT1RJRlkgc3VwcG9ydCBpbiBzeXN0ZW0gU1FMaXRlCmNvbmZpZ3VyZToyMTk2Njog Y2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1 bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1z ZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby10cmVlLXZycCAtSS91c3IvbG9jYWwvaW5jbHVk ZSAgIC1RdW51c2VkLWFyZ3VtZW50cyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3Iv bG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGli IC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC16LG5vZXhlY3N0YWNrIGNv bmZ0ZXN0LmMgIC1ML3Vzci9sb2NhbC9saWIgLWxzcWxpdGUzICAgMT4mNQpjb25maWd1cmU6MjIx NDU6IGNoZWNraW5nIGZvciBjb25pYwpjb25maWd1cmU6MjMzNzU6IGNoZWNraW5nIGZvciB2YWxp ZCBvcHRpbWl6YXRpb24gZmxhZ3MKY29uZmlndXJlOjIzMzg2OiBjbGFuZyAtYyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5v LXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5v LXRyZWUtdnJwIC1PMiAtUXVudXNlZC1hcmd1bWVudHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVk ZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToyMzg0NDog Y2hlY2tpbmcgc2l6ZSBvZiBpbnQgKgpjb25maWd1cmU6MjM4NjM6IGNsYW5nIC1vIGNvbmZ0ZXN0 IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1mbm8tdHJlZS12cnAgLVF1bnVzZWQtYXJndW1lbnRzIC1PMiAtcGlwZSAtbWFyY2g9 cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2Fs L2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGli IC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiAtV2ws LXosbm9leGVjc3RhY2sgY29uZnRlc3QuYyAgMT4mNQpTdGFjayBkdW1wOgowLglQcm9ncmFtIGFy Z3VtZW50czogL3Vzci9iaW4vY2xhbmcgLWNjMSAtdHJpcGxlIGkzODYtdW5rbm93bi1mcmVlYnNk OS4wIC1lbWl0LW9iaiAtZGlzYWJsZS1mcmVlIC1tYWluLWZpbGUtbmFtZSBjb25mdGVzdC5jIC1t cmVsb2NhdGlvbi1tb2RlbCBzdGF0aWMgLW1kaXNhYmxlLWZwLWVsaW0gLXJlbGF4ZWQtYWxpYXNp bmcgLW1hc20tdmVyYm9zZSAtbWNvbnN0cnVjdG9yLWFsaWFzZXMgLXRhcmdldC1jcHUgcGVudGl1 bTQgLW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1z ZWN0aW9ucyAtcmVzb3VyY2UtZGlyIC91c3IvYmluLy4uL2xpYi9jbGFuZy8zLjAgLWlzeXN0ZW0g L3Vzci9sb2NhbC9pbmNsdWRlIC1JIC91c3IvbG9jYWwvaW5jbHVkZSAtZm1vZHVsZS1jYWNoZS1w YXRoIC90bXAvY2xhbmctbW9kdWxlLWNhY2hlIC1PMiAtV25vLWVycm9yIC13IC1mZXJyb3ItbGlt aXQgMTkgLWZtZXNzYWdlLWxlbmd0aCAwIC1wdGhyZWFkIC1mZ251LXJ1bnRpbWUgLWZvYmpjLXJ1 bnRpbWUtaGFzLWFyYyAtZm9iamMtcnVudGltZS1oYXMtd2VhayAtZm9iamMtZnJhZ2lsZS1hYmkg LWZkaWFnbm9zdGljcy1zaG93LW9wdGlvbiAtbyAvdG1wL2NvbmZ0ZXN0LTc3cWFKaS5vIC14IGMg Y29uZnRlc3QuYyAKMS4JPGVvZj4gcGFyc2VyIGF0IGVuZCBvZiBmaWxlCjIuCWNvbmZpZ3VyZToy Mzg1NDoxOiBMTFZNIElSIGdlbmVyYXRpb24gb2YgZGVjbGFyYXRpb24gJ21haW4nCjMuCWNvbmZp Z3VyZToyMzg1NDoxOiBHZW5lcmF0aW5nIGNvZGUgZm9yIGRlY2xhcmF0aW9uICdtYWluJwo0Lglj b25maWd1cmU6MjM4NTU6MTogTExWTSBJUiBnZW5lcmF0aW9uIG9mIGNvbXBvdW5kIHN0YXRlbWVu dCAoJ3t9JykKY2xhbmc6IGVycm9yOiB1bmFibGUgdG8gZXhlY3V0ZSBjb21tYW5kOiBJbGxlZ2Fs IGluc3RydWN0aW9uOiA0IChjb3JlIGR1bXBlZCkKY2xhbmc6IGVycm9yOiBjbGFuZyBmcm9udGVu ZCBjb21tYW5kIGZhaWxlZCBkdWUgdG8gc2lnbmFsIDIgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlv bikKY2xhbmc6IG5vdGU6IGRpYWdub3N0aWMgbXNnOiBQbGVhc2Ugc3VibWl0IGEgYnVnIHJlcG9y dCB0byBodHRwOi8vbGx2bS5vcmcvYnVncy8gYW5kIGluY2x1ZGUgY29tbWFuZCBsaW5lIGFyZ3Vt ZW50cyBhbmQgYWxsIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uCmNsYW5nOiBub3RlOiBkaWFnbm9z dGljIG1zZzogUHJlcHJvY2Vzc2VkIHNvdXJjZShzKSBhcmUgbG9jYXRlZCBhdDoKY2xhbmc6IG5v dGU6IGRpYWdub3N0aWMgbXNnOiAvdG1wL2NvbmZ0ZXN0LVBEaVR3Zy5pCmNvbmZpZ3VyZTogZmFp bGVkIHByb2dyYW0gd2FzOgojbGluZSAyMzg1MiAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRl ZnMuaCIKI2luY2x1ZGUgPHN0ZGlvLmg+Cm1haW4oKQp7CiAgRklMRSAqZj1mb3BlbigiY29uZnRl c3R2YWwiLCAidyIpOwogIGlmICghZikgZXhpdCgxKTsKICBmcHJpbnRmKGYsICIlZFxuIiwgc2l6 ZW9mKGludCAqKSk7CiAgZXhpdCgwKTsKfQo= --20cf30334f4b063c6704d7bae9c9 Content-Type: application/octet-stream; name="config.log" Content-Disposition: attachment; filename="config.log" Content-Transfer-Encoding: base64 X-Attachment-Id: f_he5zyq0g1 VGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hp bGUKcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2Vz IGEgbWlzdGFrZS4KCmNvbmZpZ3VyZTo4NzI6IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUKY29u ZmlndXJlOjg5MzogY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlCmNvbmZpZ3VyZTo5MTE6IGNo ZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlCmNvbmZpZ3VyZTo5OTE6IGNoZWNraW5nIGZvciBtYXdr CmNvbmZpZ3VyZTo5OTE6IGNoZWNraW5nIGZvciBnYXdrCmNvbmZpZ3VyZToxMDYyOiBjaGVja2lu ZyBmb3IgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMi43CmNvbmZpZ3VyZToxMzEzOiBjaGVja2luZyBm b3IgL3Vzci9sb2NhbC9iaW4vcGVybApjb25maWd1cmU6MjI3ODogY2hlY2tpbmcgZm9yIGdjYwpj b25maWd1cmU6MjM5MTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoY2xhbmcgLU8y IC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNp bmcgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwt cnBhdGgsXCQkT1JJR0lOKSB3b3Jrcwpjb25maWd1cmU6MjQwNzogY2xhbmcgLW8gY29uZnRlc3Qg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxp YXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3Iv bG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRlc3QuYyAg MT4mNQpjb25maWd1cmU6MjQzMzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciAoY2xh bmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3Qt YWxpYXNpbmcgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2lu IC1XbCwtcnBhdGgsXCQkT1JJR0lOKSBpcyBhIGNyb3NzLWNvbXBpbGVyCmNvbmZpZ3VyZToyNDM4 OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQwpjb25maWd1cmU6MjQ0NzogY2xh bmcgLUUgY29uZnRlc3QuYwpjb25maWd1cmU6MjQ2NjogY2hlY2tpbmcgd2hldGhlciBjbGFuZyBh Y2NlcHRzIC1nCmNvbmZpZ3VyZToyNTA3OiBjaGVja2luZyBmb3IgYysrCmNvbmZpZ3VyZToyNTM5 OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGlsZXIgKGNsYW5nKysgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1w aXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4pIHdvcmtzCmNvbmZpZ3VyZToyNTU1OiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLU8y IC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5 c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGli IC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRlc3QuQyAgMT4mNQpjb25m aWd1cmU6MjU4MTogY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyIChjbGFuZysrIC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3Ig LXcgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwt cnBhdGgsXCQkT1JJR0lOKSBpcyBhIGNyb3NzLWNvbXBpbGVyCmNvbmZpZ3VyZToyNTg2OiBjaGVj a2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyBHTlUgQysrCmNvbmZpZ3VyZToyNTk1OiBjbGFuZysr IC1FIGNvbmZ0ZXN0LkMKY29uZmlndXJlOjI2MTQ6IGNoZWNraW5nIHdoZXRoZXIgY2xhbmcrKyBh Y2NlcHRzIC1nCmNvbmZpZ3VyZToyNjQ4OiBjaGVja2luZyBmb3IgcmFubGliCmNvbmZpZ3VyZToy NjgwOiBjaGVja2luZyBmb3IgYXMKY29uZmlndXJlOjI3MzQ6IGNoZWNraW5nIGZvciBhcgpjb25m aWd1cmU6Mjc2OTogY2hlY2tpbmcgZm9yIGxkCmNvbmZpZ3VyZToyODA0OiBjaGVja2luZyBmb3Ig c3RyaXAKY29uZmlndXJlOjI4Mzk6IGNoZWNraW5nIGZvciB3aW5kcmVzCmNvbmZpZ3VyZTozNjcw OiBjaGVja2luZyB3aGV0aGVyIGNsYW5nIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dl dGhlcgpjb25maWd1cmU6MzY4NTogY2xhbmcgLWMgY29uZnRlc3QuYyAtbyBjb25mdGVzdC5vIDE+ JjUKY29uZnRlc3QuYzoxOjE6IHdhcm5pbmc6IHR5cGUgc3BlY2lmaWVyIG1pc3NpbmcsIGRlZmF1 bHRzIHRvICdpbnQnIFstV2ltcGxpY2l0LWludF0KZm9vKCl7fQpefn4KY29uZnRlc3QuYzoxOjc6 IHdhcm5pbmc6IGNvbnRyb2wgcmVhY2hlcyBlbmQgb2Ygbm9uLXZvaWQgZnVuY3Rpb24gWy1XcmV0 dXJuLXR5cGVdCmZvbygpe30KICAgICAgXgoyIHdhcm5pbmdzIGdlbmVyYXRlZC4KY29uZmlndXJl OjM2ODY6IGNsYW5nIC1jIGNvbmZ0ZXN0LmMgLW8gY29uZnRlc3QubyAxPiY1CmNvbmZ0ZXN0LmM6 MToxOiB3YXJuaW5nOiB0eXBlIHNwZWNpZmllciBtaXNzaW5nLCBkZWZhdWx0cyB0byAnaW50JyBb LVdpbXBsaWNpdC1pbnRdCmZvbygpe30KXn5+CmNvbmZ0ZXN0LmM6MTo3OiB3YXJuaW5nOiBjb250 cm9sIHJlYWNoZXMgZW5kIG9mIG5vbi12b2lkIGZ1bmN0aW9uIFstV3JldHVybi10eXBlXQpmb28o KXt9CiAgICAgIF4KMiB3YXJuaW5ncyBnZW5lcmF0ZWQuCmNvbmZpZ3VyZTozNjkxOiBjYyAtYyBj b25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjM2OTM6IGNjIC1jIGNvbmZ0ZXN0LmMgLW8gY29uZnRl c3QubyAxPiY1CmNvbmZpZ3VyZTozNjk0OiBjYyAtYyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0Lm8g MT4mNQpjb25maWd1cmU6MzczMzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNz b3IKY29uZmlndXJlOjM4MTM6IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNz b3IKY29uZmlndXJlOjM4MzE6IGNsYW5nKysgLUUgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBj b25mdGVzdC5DID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQKY29uZmlndXJlOjM5MDI6IGNoZWNr aW5nIGZvciBhIEJTRCBjb21wYXRpYmxlIGluc3RhbGwKY29uZmlndXJlOjM5NTU6IGNoZWNraW5n IHdoZXRoZXIgbG4gLXMgd29ya3MKY29uZmlndXJlOjM5Nzg6IGNoZWNraW5nIGZvciBtaW5pbXVt IHJlcXVpcmVkIHBlcmwgdmVyc2lvbiA+PSA1LjAwNgpjb25maWd1cmU6Mzk4OTogY2hlY2tpbmcg Zm9yIGZ1bGwgcGVybCBpbnN0YWxsYXRpb24KY29uZmlndXJlOjQwMjY6IGNoZWNraW5nIGZvciBk b3h5Z2VuCmNvbmZpZ3VyZTo0MDc1OiBjaGVja2luZyBmb3IgYXV0b2NvbmYKY29uZmlndXJlOjQx MjQ6IGNoZWNraW5nIGZvciB1bnppcApjb25maWd1cmU6NDE3NTogY2hlY2tpbmcgZm9yIHppcApj b25maWd1cmU6NDIyOTogY2hlY2tpbmcgZm9yIHhhcmdzCmNvbmZpZ3VyZTo0NTE0OiBjaGVja2lu ZyBmb3IgWApjb25maWd1cmU6NDgzMTogY2hlY2tpbmcgZm9yIGRuZXRfbnRvYSBpbiAtbGRuZXQK Y29uZmlndXJlOjQ4NTA6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9 cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2Fs L2luY2x1ZGUgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2lu IC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgLWxkbmV0ICAgMT4mNQovdXNyL2Jpbi9s ZDogY2Fubm90IGZpbmQgLWxkbmV0CmNsYW5nOiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVk IHdpdGggZXhpdCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOiBm YWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDQ4MzkgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZk ZWZzLmgiCi8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBh biBlcnJvci4gICovCi8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSBy ZXR1cm4gdHlwZSBvZiBhIGdjYzIKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHBy b3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCmNoYXIgZG5ldF9udG9hKCk7CgppbnQgbWFp bigpIHsKZG5ldF9udG9hKCkKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6NDg3MjogY2hlY2tpbmcg Zm9yIGRuZXRfbnRvYSBpbiAtbGRuZXRfc3R1Ygpjb25maWd1cmU6NDg5MTogY2xhbmcgLW8gY29u ZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVdu by1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUwvdXNyL2xvY2FsL2xpYiAt TC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRl c3QuYyAtbGRuZXRfc3R1YiAgIDE+JjUKL3Vzci9iaW4vbGQ6IGNhbm5vdCBmaW5kIC1sZG5ldF9z dHViCmNsYW5nOiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEg KHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6 CiNsaW5lIDQ4ODAgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCi8qIE92ZXJyaWRl IGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi8qIFdl IHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdj YzIKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGls bCBhcHBseS4gICovCmNoYXIgZG5ldF9udG9hKCk7CgppbnQgbWFpbigpIHsKZG5ldF9udG9hKCkK OyByZXR1cm4gMDsgfQpjb25maWd1cmU6NDkyMDogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUK Y29uZmlndXJlOjQ5NDg6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9 cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2Fs L2luY2x1ZGUgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2lu IC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjUwMTg6IGNo ZWNraW5nIGZvciBjb25uZWN0CmNvbmZpZ3VyZTo1MDQ2OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13 IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2Nh bC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5jICAxPiY1 CmNvbmZpZ3VyZTo1MTEwOiBjaGVja2luZyBmb3IgcmVtb3ZlCmNvbmZpZ3VyZTo1MTM4OiBjbGFu ZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9j YWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJ TiBjb25mdGVzdC5jICAxPiY1CmNvbmZpZ3VyZTo1MjAyOiBjaGVja2luZyBmb3Igc2htYXQKY29u ZmlndXJlOjUyMzA6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2lu Y2x1ZGUgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1X bCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgIDE+JjUKY29uZmlndXJlOjUzMDM6IGNoZWNr aW5nIGZvciBJY2VDb25uZWN0aW9uTnVtYmVyIGluIC1sSUNFCmNvbmZpZ3VyZTo1MzIyOiBjbGFu ZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9j YWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJ TiAtTC91c3IvbG9jYWwvbGliIGNvbmZ0ZXN0LmMgLWxJQ0UgICAxPiY1CmNvbmZpZ3VyZTo1NjIz OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIC1XZXJyb3I9cmV0dXJu LXR5cGUKY29uZmlndXJlOjU2NDY6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1XZXJyb3IgLVdlcnJvcj1yZXR1cm4tdHlwZSAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNv bmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6NTY3NDogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21w aWxlciBzdXBwb3J0cyAtV3R5cGUtbGltaXRzCmNvbmZpZ3VyZTo1Njk3OiBjbGFuZyAtYyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2Vycm9yIC1XdHlwZS1saW1pdHMgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3Iv bG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjU3MjU6IGNoZWNraW5nIHdo ZXRoZXIgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgLVdlbXB0eS1ib2R5CmNvbmZpZ3VyZTo1NzQ4 OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5v LXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2Vycm9yIC1XZW1wdHktYm9k eSAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13 IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6NTc4 MjogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBzdXBwb3J0cyAtV25vLW92ZXJsZW5n dGgtc3RyaW5ncwpjb25maWd1cmU6NTgwNTogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxp YXNpbmcgLVdlcnJvciAtV292ZXJsZW5ndGgtc3RyaW5ncyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNs dWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6NTg5MDogY2hlY2tpbmcgd2hldGhlciB0aGUg QysrIGNvbXBpbGVyIHN1cHBvcnRzIC1XZXJyb3I9cmV0dXJuLXR5cGUKY29uZmlndXJlOjU5MTM6 IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZu by1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1 bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLVdl cnJvciAtV2Vycm9yPXJldHVybi10eXBlIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRl c3QuQyAxPiY1CmNvbmZpZ3VyZTo1OTQxOiBjaGVja2luZyB3aGV0aGVyIHRoZSBDKysgY29tcGls ZXIgc3VwcG9ydHMgLVd0eXBlLWxpbWl0cwpjb25maWd1cmU6NTk2NDogY2xhbmcrKyAtYyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13 IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2Vycm9yIC1XdHlwZS1saW1p dHMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAt dyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJlOjU5 OTI6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyBjb21waWxlciBzdXBwb3J0cyAtV2VtcHR5LWJv ZHkKY29uZmlndXJlOjYwMTU6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1z dHJpY3QtYWxpYXNpbmcgLVdlcnJvciAtV2VtcHR5LWJvZHkgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5j bHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJlOjYwNDM6IGNoZWNraW5nIHdoZXRoZXIgdGhl IEMrKyBjb21waWxlciBzdXBwb3J0cyAtV2Vycm9yPWNvbnZlcnNpb24tbnVsbApjb25maWd1cmU6 NjA2NjogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVt NCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtV2Vycm9yIC1XZXJyb3I9Y29udmVyc2lvbi1udWxsIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1 ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZTo2MTAyOiBjaGVja2luZyB3aGV0aGVyIHRoZSBD KysgY29tcGlsZXIgc3VwcG9ydHMgLVduby1vdmVybGVuZ3RoLXN0cmluZ3MKY29uZmlndXJlOjYx MjU6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcg LVdlcnJvciAtV292ZXJsZW5ndGgtc3RyaW5ncyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNv bmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6NjE1MzogY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNv bXBpbGVyIHN1cHBvcnRzIC1Xbm8taW52YWxpZC1vZmZzZXRvZgpjb25maWd1cmU6NjE3NjogY2xh bmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt V25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtV2Vycm9y IC1XaW52YWxpZC1vZmZzZXRvZiAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMg MT4mNQpjb25maWd1cmU6NjIwNDogY2hlY2tpbmcgd2hldGhlciB0aGUgQysrIGNvbXBpbGVyIHN1 cHBvcnRzIC1Xbm8tdmFyaWFkaWMtbWFjcm9zCmNvbmZpZ3VyZTo2MjI3OiBjbGFuZysrIC1jIC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3Ig LXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XZXJyb3IgLVd2YXJpYWRp Yy1tYWNyb3MgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmln dXJlOjYyNzk6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyBjb21waWxlciBzdXBwb3J0cyAtV25v LWV4dGVuZGVkLW9mZnNldG9mCmNvbmZpZ3VyZTo2MzAyOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1l eGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1XZXJyb3IgLVdleHRlbmRlZC1vZmZzZXRv ZiAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13 IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6NjM0 MDogY2hlY2tpbmcgd2hldGhlciBsZCBoYXMgYXJjaGl2ZSBleHRyYWN0aW9uIGZsYWdzCmNvbmZp Z3VyZTo2MzY0OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1p c3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIC1XbCwtLXdob2xlLWFyY2hpdmUgY29uZnRlc3QuYyAt V2wsLS1uby13aG9sZS1hcmNoaXZlIDE+JjUKY29uZmlndXJlOjYzOTc6IGNoZWNraW5nIHRoYXQg c3RhdGljIGFzc2VydGlvbiBtYWNyb3MgdXNlZCBpbiBhdXRvY29uZiB0ZXN0cyB3b3JrCmNvbmZp Z3VyZTo2NDE4OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vz ci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6NjQzNTogY2xhbmcgLWMg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25m dGVzdC5jIDE+JjUKY29uZmlndXJlOjY0MzU6MTogZXJyb3I6ICdzdGF0aWNfYXNzZXJ0X2xpbmVf NjQzNScgZGVjbGFyZWQgYXMgYW4gYXJyYXkgd2l0aCBhIG5lZ2F0aXZlIHNpemUKQ09ORklHVVJF X1NUQVRJQ19BU1NFUlQoMCkKXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KY29uZmlndXJlOjY0 MzA6NDQ6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NF UlQoY29uZGl0aW9uKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMKGNvbmRpdGlvbiwgX19M SU5FX18pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmNvbmZp Z3VyZTo2NDMxOjU1OiBub3RlOiBleHBhbmRlZCBmcm9tOgojZGVmaW5lIENPTkZJR1VSRV9TVEFU SUNfQVNTRVJUX0lNUEwoY29uZGl0aW9uLCBsaW5lKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9J TVBMMihjb25kaXRpb24sIGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KY29uZmlndXJlOjY0MzI6OTQ6IG5vdGU6IGV4cGFuZGVkIGZy b206CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5l KSB0eXBlZGVmIGludCBzdGF0aWNfYXNzZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24pID8gMSA6 IC0xXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+ fn5+fgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNs aW5lIDY0MjggImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCgojZGVmaW5lIENPTkZJ R1VSRV9TVEFUSUNfQVNTRVJUKGNvbmRpdGlvbikgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1Q TChjb25kaXRpb24sIF9fTElORV9fKQojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lN UEwoY29uZGl0aW9uLCBsaW5lKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRp b24sIGxpbmUpCiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9u LCBsaW5lKSB0eXBlZGVmIGludCBzdGF0aWNfYXNzZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24p ID8gMSA6IC0xXQoKaW50IG1haW4oKSB7CkNPTkZJR1VSRV9TVEFUSUNfQVNTRVJUKDApCjsgcmV0 dXJuIDA7IH0KY29uZmlndXJlOjY0NTg6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMg LWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5D IDE+JjUKY29uZmlndXJlOjY0NzU6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZu by1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1 bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+ JjUKY29uZmlndXJlOjY0NzU6MTogZXJyb3I6ICdzdGF0aWNfYXNzZXJ0X2xpbmVfNjQ3NScgZGVj bGFyZWQgYXMgYW4gYXJyYXkgd2l0aCBhIG5lZ2F0aXZlIHNpemUKQ09ORklHVVJFX1NUQVRJQ19B U1NFUlQoMCkKXn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KY29uZmlndXJlOjY0NzA6NDQ6IG5v dGU6IGV4cGFuZGVkIGZyb206CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoY29uZGl0 aW9uKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMKGNvbmRpdGlvbiwgX19MSU5FX18pCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmNvbmZpZ3VyZTo2NDcx OjU1OiBub3RlOiBleHBhbmRlZCBmcm9tOgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJU X0lNUEwoY29uZGl0aW9uLCBsaW5lKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25k aXRpb24sIGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF4KY29uZmlndXJlOjY0NzI6OTQ6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNkZWZp bmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKSB0eXBlZGVm IGludCBzdGF0aWNfYXNzZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24pID8gMSA6IC0xXQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fgoxIGVy cm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDY0Njgg ImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCgojZGVmaW5lIENPTkZJR1VSRV9TVEFU SUNfQVNTRVJUKGNvbmRpdGlvbikgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTChjb25kaXRp b24sIF9fTElORV9fKQojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0 aW9uLCBsaW5lKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUp CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKSB0 eXBlZGVmIGludCBzdGF0aWNfYXNzZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24pID8gMSA6IC0x XQoKaW50IG1haW4oKSB7CkNPTkZJR1VSRV9TVEFUSUNfQVNTRVJUKDApCjsgcmV0dXJuIDA7IH0K Y29uZmlndXJlOjY1MDk6IGNoZWNraW5nIGZvciA2NC1iaXQgT1MKY29uZmlndXJlOjY1MTg6IGNs YW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1 ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZTo2NTE4OjE6IGVycm9yOiAnc3RhdGljX2Fzc2Vy dF9saW5lXzY1MTgnIGRlY2xhcmVkIGFzIGFuIGFycmF5IHdpdGggYSBuZWdhdGl2ZSBzaXplCkNP TkZJR1VSRV9TVEFUSUNfQVNTRVJUKHNpemVvZih2b2lkKikgPT0gOCkKXn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpjb25maWd1cmU6NjUxMzo0NDogbm90ZTogZXhw YW5kZWQgZnJvbToKI2RlZmluZSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVChjb25kaXRpb24pIENP TkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0aW9uLCBfX0xJTkVfXykKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KY29uZmlndXJlOjY1MTQ6NTU6IG5v dGU6IGV4cGFuZGVkIGZyb206CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTChj b25kaXRpb24sIGxpbmUpIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwyKGNvbmRpdGlvbiwg bGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgpjb25maWd1cmU6NjUxNTo5NDogbm90ZTogZXhwYW5kZWQgZnJvbToKI2RlZmluZSBDT05G SUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUpIHR5cGVkZWYgaW50IHN0 YXRpY19hc3NlcnRfbGluZV8jI2xpbmVbKGNvbmRpdGlvbikgPyAxIDogLTFdCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+fn5+fn5+fn5+CjEgZXJyb3IgZ2Vu ZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgNjUxMSAiY29uZmln dXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKCiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NF UlQoY29uZGl0aW9uKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMKGNvbmRpdGlvbiwgX19M SU5FX18pCiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTChjb25kaXRpb24sIGxp bmUpIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwyKGNvbmRpdGlvbiwgbGluZSkKI2RlZmlu ZSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUpIHR5cGVkZWYg aW50IHN0YXRpY19hc3NlcnRfbGluZV8jI2xpbmVbKGNvbmRpdGlvbikgPyAxIDogLTFdCgppbnQg bWFpbigpIHsKQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoc2l6ZW9mKHZvaWQqKSA9PSA4KQo7IHJl dHVybiAwOyB9CmNvbmZpZ3VyZTo2NjM5OiBjaGVja2luZyBmb3IgY3VzdG9tIDxzdGRpbnQuaD4g aW1wbGVtZW50YXRpb24KY29uZmlndXJlOjc4NDc6IGNoZWNraW5nIHdoZXRoZXIgdGhlIGxpbmtl ciBzdXBwb3J0cyBJZGVudGljYWwgQ29kZSBGb2xkaW5nCmNvbmZpZ3VyZTo3ODU2OiBjbGFuZyAt byBjb25mdGVzdCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmln aW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLVdsLC0taWNmPXNhZmUgLWZmdW5jdGlvbi1zZWN0aW9u cyBjb25mdGVzdC5jICAxPiYyCi91c3IvYmluL2xkOiB1bnJlY29nbml6ZWQgb3B0aW9uICctLWlj Zj1zYWZlJwovdXNyL2Jpbi9sZDogdXNlIHRoZSAtLWhlbHAgb3B0aW9uIGZvciB1c2FnZSBpbmZv cm1hdGlvbgpjbGFuZzogZXJyb3I6IGxpbmtlciBjb21tYW5kIGZhaWxlZCB3aXRoIGV4aXQgY29k ZSAxICh1c2UgLXYgdG8gc2VlIGludm9jYXRpb24pCmNvbmZpZ3VyZTo3OTI3OiBjaGVja2luZyBm b3IgQU5TSSBDIGhlYWRlciBmaWxlcwpjb25maWd1cmU6Nzk0MDogY2xhbmctY3BwIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0v dXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0CmNv bmZpZ3VyZTo4MDA3OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9p bmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAt V2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5jICAxPiY1CmNvbmZpZ3VyZTo4MDM0OiBjaGVj a2luZyBmb3Igd29ya2luZyBjb25zdApjb25maWd1cmU6ODA4ODogY2xhbmcgLWMgLU8yIC1waXBl IC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8y IC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5 c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjgxMTI6IGNo ZWNraW5nIGZvciBtb2RlX3QKY29uZmlndXJlOjgxNDg6IGNoZWNraW5nIGZvciBvZmZfdApjb25m aWd1cmU6ODE4NDogY2hlY2tpbmcgZm9yIHBpZF90CmNvbmZpZ3VyZTo4MjIwOiBjaGVja2luZyBm b3Igc2l6ZV90CmNvbmZpZ3VyZTo4MjYzOiBjaGVja2luZyBmb3IgX19zdGRjYWxsCmNvbmZpZ3Vy ZTo4Mjc3OiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4 Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmln dXJlOjgzMDk6IGNoZWNraW5nIGZvciBzc2l6ZV90CmNvbmZpZ3VyZTo4MzIyOiBjbGFuZyAtYyAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlh c2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0 aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9y IC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6 ODM0NzogY2hlY2tpbmcgZm9yIHN0X2Jsa3NpemUgaW4gc3RydWN0IHN0YXQKY29uZmlndXJlOjgz NjA6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1m bm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlv bnMgLWZkYXRhLXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAx PiY1CmNvbmZpZ3VyZTo4Mzg0OiBjaGVja2luZyBmb3Igc2lnaW5mb190CmNvbmZpZ3VyZTo4Mzk3 OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5v LXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25z IC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVt NCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4m NQpTdGFjayBkdW1wOgowLglQcm9ncmFtIGFyZ3VtZW50czogL3Vzci9iaW4vY2xhbmcgLWNjMSAt dHJpcGxlIGkzODYtdW5rbm93bi1mcmVlYnNkOS4wIC1lbWl0LW9iaiAtZGlzYWJsZS1mcmVlIC1t YWluLWZpbGUtbmFtZSBjb25mdGVzdC5jIC1tcmVsb2NhdGlvbi1tb2RlbCBzdGF0aWMgLW1kaXNh YmxlLWZwLWVsaW0gLXJlbGF4ZWQtYWxpYXNpbmcgLW1hc20tdmVyYm9zZSAtbWNvbnN0cnVjdG9y LWFsaWFzZXMgLXRhcmdldC1jcHUgcGVudGl1bTQgLW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciAt ZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtY292ZXJhZ2UtZmlsZSBjb25mdGVz dC5vIC1yZXNvdXJjZS1kaXIgL3Vzci9iaW4vLi4vbGliL2NsYW5nLzMuMCAtaXN5c3RlbSAvdXNy L2xvY2FsL2luY2x1ZGUgLWZtb2R1bGUtY2FjaGUtcGF0aCAvdG1wL2NsYW5nLW1vZHVsZS1jYWNo ZSAtTzIgLVduby1lcnJvciAtdyAtZmVycm9yLWxpbWl0IDE5IC1mbWVzc2FnZS1sZW5ndGggMCAt ZmdudS1ydW50aW1lIC1mb2JqYy1ydW50aW1lLWhhcy1hcmMgLWZvYmpjLXJ1bnRpbWUtaGFzLXdl YWsgLWZvYmpjLWZyYWdpbGUtYWJpIC1mZGlhZ25vc3RpY3Mtc2hvdy1vcHRpb24gLW8gY29uZnRl c3QubyAteCBjIGNvbmZ0ZXN0LmMgCjEuCTxlb2Y+IHBhcnNlciBhdCBlbmQgb2YgZmlsZQoyLglj b25maWd1cmU6ODM5Mjo1OiBMTFZNIElSIGdlbmVyYXRpb24gb2YgZGVjbGFyYXRpb24gJ21haW4n CjMuCWNvbmZpZ3VyZTo4MzkyOjU6IEdlbmVyYXRpbmcgY29kZSBmb3IgZGVjbGFyYXRpb24gJ21h aW4nCjQuCWNvbmZpZ3VyZTo4MzkyOjEyOiBMTFZNIElSIGdlbmVyYXRpb24gb2YgY29tcG91bmQg c3RhdGVtZW50ICgne30nKQpjbGFuZzogZXJyb3I6IHVuYWJsZSB0byBleGVjdXRlIGNvbW1hbmQ6 IElsbGVnYWwgaW5zdHJ1Y3Rpb246IDQgKGNvcmUgZHVtcGVkKQpjbGFuZzogZXJyb3I6IGNsYW5n IGZyb250ZW5kIGNvbW1hbmQgZmFpbGVkIGR1ZSB0byBzaWduYWwgMiAodXNlIC12IHRvIHNlZSBp bnZvY2F0aW9uKQpjbGFuZzogbm90ZTogZGlhZ25vc3RpYyBtc2c6IFBsZWFzZSBzdWJtaXQgYSBi dWcgcmVwb3J0IHRvIGh0dHA6Ly9sbHZtLm9yZy9idWdzLyBhbmQgaW5jbHVkZSBjb21tYW5kIGxp bmUgYXJndW1lbnRzIGFuZCBhbGwgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbi4KY2xhbmc6IG5vdGU6 IGRpYWdub3N0aWMgbXNnOiBQcmVwcm9jZXNzZWQgc291cmNlKHMpIGFyZSBsb2NhdGVkIGF0Ogpj bGFuZzogbm90ZTogZGlhZ25vc3RpYyBtc2c6IC90bXAvY29uZnRlc3QtWFRkTGx3LmkKY29uZmln dXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDgzODkgImNvbmZpZ3VyZSIKI2luY2x1ZGUg ImNvbmZkZWZzLmgiCiNkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDE5OTUwNkwKICAgICAgICAgICAg ICAgICAgI2luY2x1ZGUgPHNpZ25hbC5oPgppbnQgbWFpbigpIHsKc2lnaW5mb190KiBpbmZvOwo7 IHJldHVybiAwOyB9CmNvbmZpZ3VyZTo4NDIzOiBjaGVja2luZyBmb3IgaW50NjQKY29uZmlndXJl Ojg0MzY6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2Vj dGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3Qu YyAxPiY1CmNvbmZpZ3VyZTo4NDMyOjE6IGVycm9yOiB1c2Ugb2YgdW5kZWNsYXJlZCBpZGVudGlm aWVyICdpbnQ2NCcKaW50NjQgZm9vID0gMDsKXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJl OiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDg0MjggImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNv bmZkZWZzLmgiCiNpbmNsdWRlIDxzdGRpby5oPgogICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8 c3lzL3R5cGVzLmg+CmludCBtYWluKCkgewppbnQ2NCBmb28gPSAwOwo7IHJldHVybiAwOyB9CmNv bmZpZ3VyZTo4NDYxOiBjaGVja2luZyBmb3IgdWludApjb25maWd1cmU6ODQ3NDogY2xhbmcgLWMg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJl Ojg0OTk6IGNoZWNraW5nIGZvciB1aW50X3QKY29uZmlndXJlOjg1MTI6IGNsYW5nIC1jIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25z IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcg LWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZTo4NTA4 OjE6IGVycm9yOiB1bmtub3duIHR5cGUgbmFtZSAndWludF90JzsgZGlkIHlvdSBtZWFuICd1aW50 OF90Jz8KdWludF90IGZvbyA9IDA7Cl5+fn5+fgp1aW50OF90Ci91c3IvaW5jbHVkZS9zeXMvX3N0 ZGludC5oOjU0OjIwOiBub3RlOiAndWludDhfdCcgZGVjbGFyZWQgaGVyZQp0eXBlZGVmIF9fdWlu dDhfdCAgICAgICAgICAgICAgIHVpbnQ4X3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNs aW5lIDg1MDQgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCiNpbmNsdWRlIDxzdGRp by5oPgogICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CmludCBtYWluKCkg ewp1aW50X3QgZm9vID0gMDsKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6ODU0NjogY2hlY2tpbmcg Zm9yIHVuYW1lLmRvbWFpbm5hbWUKY29uZmlndXJlOjg1NTk6IGNsYW5nKysgLWMgLU8yIC1waXBl IC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8y IC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5v LWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2Vj dGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6ODU1NTo2MjogZXJyb3I6IG5vIG1lbWJl ciBuYW1lZCAnZG9tYWlubmFtZScgaW4gJ3V0c25hbWUnCiAgICAgICAgICAgICh2b2lkKXVuYW1l KHJlcyk7ICBpZiAocmVzICE9IDApIHsgZG9tYWluID0gcmVzLT5kb21haW5uYW1lOyB9IAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5+fiAg XgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5l IDg1NTEgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCiNpbmNsdWRlIDxzeXMvdXRz bmFtZS5oPgppbnQgbWFpbigpIHsKIHN0cnVjdCB1dHNuYW1lICpyZXM7IGNoYXIgKmRvbWFpbjsg CiAgICAgICAgICAgICh2b2lkKXVuYW1lKHJlcyk7ICBpZiAocmVzICE9IDApIHsgZG9tYWluID0g cmVzLT5kb21haW5uYW1lOyB9IAo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZTo4NTg2OiBjaGVja2lu ZyBmb3IgdW5hbWUuX19kb21haW5uYW1lCmNvbmZpZ3VyZTo4NTk5OiBjbGFuZysrIC1jIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcg LWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9u LXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9j YWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJlOjg1OTU6NjI6IGVycm9yOiBubyBt ZW1iZXIgbmFtZWQgJ19fZG9tYWlubmFtZScgaW4gJ3V0c25hbWUnCiAgICAgICAgICAgICh2b2lk KXVuYW1lKHJlcyk7ICBpZiAocmVzICE9IDApIHsgZG9tYWluID0gcmVzLT5fX2RvbWFpbm5hbWU7 IH0gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfn5+ICBeCjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdh czoKI2xpbmUgODU5MSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKI2luY2x1ZGUg PHN5cy91dHNuYW1lLmg+CmludCBtYWluKCkgewogc3RydWN0IHV0c25hbWUgKnJlczsgY2hhciAq ZG9tYWluOyAKICAgICAgICAgICAgKHZvaWQpdW5hbWUocmVzKTsgIGlmIChyZXMgIT0gMCkgeyBk b21haW4gPSByZXMtPl9fZG9tYWlubmFtZTsgfSAKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6ODYz OTogY2hlY2tpbmcgZm9yIGdjYyBjKysweCBoZWFkZXJzIGJ1ZyB3aXRob3V0IHJ0dGkKY29uZmln dXJlOjg2NTE6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8t ZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9 cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVz dC5DIDE+JjUKY29uZmlndXJlOjg2NzE6IGNoZWNraW5nIGZvciB1c2FibGUgY2hhcjE2X3QgKDIg Ynl0ZXMsIHVuc2lnbmVkKQpjb25maWd1cmU6ODY4NzogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhj ZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9u cyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vz ci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6ODcxNzogY2hlY2tpbmcg Zm9yIHVzYWJsZSB3Y2hhcl90ICgyIGJ5dGVzLCB1bnNpZ25lZCkKY29uZmlndXJlOjg3MzE6IGNs YW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1z dHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1y dHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAt c3RkPWdudSsrMHggLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVdu by1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29u ZmlndXJlOjg3MzA6MTogZXJyb3I6ICdzdGF0aWNfYXNzZXJ0X2xpbmVfODczMCcgZGVjbGFyZWQg YXMgYW4gYXJyYXkgd2l0aCBhIG5lZ2F0aXZlIHNpemUKQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQo c2l6ZW9mKHdjaGFyX3QpID09IDIpOwpefn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn4KY29uZmlndXJlOjg3MjU6NDQ6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNkZWZp bmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoY29uZGl0aW9uKSBDT05GSUdVUkVfU1RBVElDX0FT U0VSVF9JTVBMKGNvbmRpdGlvbiwgX19MSU5FX18pCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBeCmNvbmZpZ3VyZTo4NzI2OjU1OiBub3RlOiBleHBhbmRlZCBmcm9t OgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0aW9uLCBsaW5lKSBD T05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KY29uZmlndXJlOjg3 Mjc6OTQ6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NF UlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKSB0eXBlZGVmIGludCBzdGF0aWNfYXNzZXJ0X2xpbmVf IyNsaW5lWyhjb25kaXRpb24pID8gMSA6IC0xXQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fgpjb25maWd1cmU6ODczMToyMjogZXJyb3I6ICdz dGF0aWNfYXNzZXJ0X2xpbmVfODczMScgZGVjbGFyZWQgYXMgYW4gYXJyYXkgd2l0aCBhIG5lZ2F0 aXZlIHNpemUKICAgICAgICAgICAgICAgICAgICAgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoKHdj aGFyX3QpLTEgPiAod2NoYXJfdCkgMCkKICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn5+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KY29uZmlndXJlOjg3MjU6NDQ6 IG5vdGU6IGV4cGFuZGVkIGZyb206CiNkZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoY29u ZGl0aW9uKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMKGNvbmRpdGlvbiwgX19MSU5FX18p CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCmNvbmZpZ3VyZTo4 NzI2OjU1OiBub3RlOiBleHBhbmRlZCBmcm9tOgojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNT RVJUX0lNUEwoY29uZGl0aW9uLCBsaW5lKSBDT05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihj b25kaXRpb24sIGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4KY29uZmlndXJlOjg3Mjc6OTQ6IG5vdGU6IGV4cGFuZGVkIGZyb206CiNk ZWZpbmUgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKSB0eXBl ZGVmIGludCBzdGF0aWNfYXNzZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24pID8gMSA6IC0xXQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBefn5+fn5+fn5+fn5+fn5+fn5+fgoy IGVycm9ycyBnZW5lcmF0ZWQuCmNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSA4 NzIyICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgojaW5jbHVkZSA8c3RkZGVmLmg+ CiAgICAgICAgICAgICAgICAgICAgIAojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUKGNv bmRpdGlvbikgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTChjb25kaXRpb24sIF9fTElORV9f KQojZGVmaW5lIENPTkZJR1VSRV9TVEFUSUNfQVNTRVJUX0lNUEwoY29uZGl0aW9uLCBsaW5lKSBD T05GSUdVUkVfU1RBVElDX0FTU0VSVF9JTVBMMihjb25kaXRpb24sIGxpbmUpCiNkZWZpbmUgQ09O RklHVVJFX1NUQVRJQ19BU1NFUlRfSU1QTDIoY29uZGl0aW9uLCBsaW5lKSB0eXBlZGVmIGludCBz dGF0aWNfYXNzZXJ0X2xpbmVfIyNsaW5lWyhjb25kaXRpb24pID8gMSA6IC0xXQoKaW50IG1haW4o KSB7CkNPTkZJR1VSRV9TVEFUSUNfQVNTRVJUKHNpemVvZih3Y2hhcl90KSA9PSAyKTsKICAgICAg ICAgICAgICAgICAgICAgQ09ORklHVVJFX1NUQVRJQ19BU1NFUlQoKHdjaGFyX3QpLTEgPiAod2No YXJfdCkgMCkKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6ODgxMTogY2hlY2tpbmcgZm9yIHZpc2li aWxpdHkoaGlkZGVuKSBhdHRyaWJ1dGUKY29uZmlndXJlOjg4Mzk6IGNoZWNraW5nIGZvciB2aXNp YmlsaXR5KGRlZmF1bHQpIGF0dHJpYnV0ZQpjb25maWd1cmU6ODg2NzogY2hlY2tpbmcgZm9yIHZp c2liaWxpdHkgcHJhZ21hIHN1cHBvcnQKY29uZmlndXJlOjg4OTI6IGNoZWNraW5nIEZvciBnY2Mg dmlzaWJpbGl0eSBidWcgd2l0aCBjbGFzcy1sZXZlbCBhdHRyaWJ1dGVzIChHQ0MgYnVnIDI2OTA1 KQpjb25maWd1cmU6ODkyMDogY2hlY2tpbmcgRm9yIHg4Nl82NCBnY2MgdmlzaWJpbGl0eSBidWcg d2l0aCBidWlsdGlucyAoR0NDIGJ1ZyAyMDI5NykKY29uZmlndXJlOjkwMjc6IGNoZWNraW5nIHdo ZXRoZXIgdGhlIGxpbmtlciBzdXBwb3J0cyBJZGVudGljYWwgQ29kZSBGb2xkaW5nCmNvbmZpZ3Vy ZTo5MTExOiBjaGVja2luZyBmb3IgZGlyZW50LmggdGhhdCBkZWZpbmVzIERJUgpjb25maWd1cmU6 OTEyNDogY2xhbmcgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0 aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAt aXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jIDE+JjUKY29uZmlndXJlOjkxNTI6 IGNoZWNraW5nIGZvciBvcGVuZGlyIGluIC1sZGlyCmNvbmZpZ3VyZTo5MTcxOiBjbGFuZyAtbyBj b25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1m ZGF0YS1zZWN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVt L3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVds LC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5jIC1sZGlyICAgMT4mNQov dXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxkaXIKY2xhbmc6IGVycm9yOiBsaW5rZXIgY29tbWFu ZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSAodXNlIC12IHRvIHNlZSBpbnZvY2F0aW9uKQpjb25m aWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgOTE2MCAiY29uZmlndXJlIgojaW5jbHVk ZSAiY29uZmRlZnMuaCIKLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRv IGF2b2lkIGFuIGVycm9yLiAgKi8KLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0 Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgogICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJn dW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KY2hhciBvcGVuZGlyKCk7Cgpp bnQgbWFpbigpIHsKb3BlbmRpcigpCjsgcmV0dXJuIDA7IH0KY29uZmlndXJlOjkyNDQ6IGNoZWNr aW5nIGZvciBzeXMvYnl0ZW9yZGVyLmgKY29uZmlndXJlOjkyNTQ6IGNsYW5nLWNwcCAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVt L3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jID4vZGV2 L251bGwgMj5jb25mdGVzdC5vdXQKY29uZmlndXJlOjkyNTA6MTA6IGZhdGFsIGVycm9yOiAnc3lz L2J5dGVvcmRlci5oJyBmaWxlIG5vdCBmb3VuZAojaW5jbHVkZSA8c3lzL2J5dGVvcmRlci5oPgog ICAgICAgICBeCjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdh czoKI2xpbmUgOTI0OSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKI2luY2x1ZGUg PHN5cy9ieXRlb3JkZXIuaD4KY29uZmlndXJlOjkyNDQ6IGNoZWNraW5nIGZvciBjb21wYXQuaApj b25maWd1cmU6OTI1NDogY2xhbmctY3BwIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vz ci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dApjb25m aWd1cmU6OTI1MDoxMDogZmF0YWwgZXJyb3I6ICdjb21wYXQuaCcgZmlsZSBub3QgZm91bmQKI2lu Y2x1ZGUgPGNvbXBhdC5oPgogICAgICAgICBeCjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6 IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgOTI0OSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29u ZmRlZnMuaCIKI2luY2x1ZGUgPGNvbXBhdC5oPgpjb25maWd1cmU6OTI0NDogY2hlY2tpbmcgZm9y IGdldG9wdC5oCmNvbmZpZ3VyZTo5MjU0OiBjbGFuZy1jcHAgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5j bHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyA+L2Rldi9udWxsIDI+Y29uZnRl c3Qub3V0CmNvbmZpZ3VyZTo5Mjg3OiBjaGVja2luZyBmb3Igc3lzL2JpdHlwZXMuaApjb25maWd1 cmU6OTI5NzogY2xhbmctY3BwIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2Nh bC9pbmNsdWRlIGNvbmZ0ZXN0LmMgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dApjb25maWd1cmU6 OTI5MzoxMDogZmF0YWwgZXJyb3I6ICdzeXMvYml0eXBlcy5oJyBmaWxlIG5vdCBmb3VuZAojaW5j bHVkZSA8c3lzL2JpdHlwZXMuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmln dXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDkyOTIgImNvbmZpZ3VyZSIKI2luY2x1ZGUg ImNvbmZkZWZzLmgiCiNpbmNsdWRlIDxzeXMvYml0eXBlcy5oPgpjb25maWd1cmU6OTI4NzogY2hl Y2tpbmcgZm9yIG1lbW9yeS5oCmNvbmZpZ3VyZTo5Mjk3OiBjbGFuZy1jcHAgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3Iv bG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyA+L2Rldi9udWxs IDI+Y29uZnRlc3Qub3V0CmNvbmZpZ3VyZTo5Mjg3OiBjaGVja2luZyBmb3IgdW5pc3RkLmgKY29u ZmlndXJlOjkyOTc6IGNsYW5nLWNwcCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3Iv bG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQKY29uZmln dXJlOjkzMzA6IGNoZWNraW5nIGZvciBnbnUvbGliYy12ZXJzaW9uLmgKY29uZmlndXJlOjkzNDA6 IGNsYW5nLWNwcCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25v LWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVk ZSBjb25mdGVzdC5jID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQKY29uZmlndXJlOjkzMzY6MTA6 IGZhdGFsIGVycm9yOiAnZ251L2xpYmMtdmVyc2lvbi5oJyBmaWxlIG5vdCBmb3VuZAojaW5jbHVk ZSA8Z251L2xpYmMtdmVyc2lvbi5oPgogICAgICAgICBeCjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25m aWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgOTMzNSAiY29uZmlndXJlIgojaW5jbHVk ZSAiY29uZmRlZnMuaCIKI2luY2x1ZGUgPGdudS9saWJjLXZlcnNpb24uaD4KY29uZmlndXJlOjkz MzA6IGNoZWNraW5nIGZvciBubF90eXBlcy5oCmNvbmZpZ3VyZTo5MzQwOiBjbGFuZy1jcHAgLU8y IC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5 c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyA+ L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0CmNvbmZpZ3VyZTo5MzczOiBjaGVja2luZyBmb3IgbWFs bG9jLmgKY29uZmlndXJlOjkzODM6IGNsYW5nLWNwcCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRl ICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jID4vZGV2L251bGwgMj5jb25mdGVzdC5v dXQKSW4gZmlsZSBpbmNsdWRlZCBmcm9tIGNvbmZpZ3VyZTo5Mzc5OgovdXNyL2luY2x1ZGUvbWFs bG9jLmg6MzoyOiBlcnJvcjogI2Vycm9yICI8bWFsbG9jLmg+IGhhcyBiZWVuIHJlcGxhY2VkIGJ5 IDxzdGRsaWIuaD4iCiNlcnJvciAiPG1hbGxvYy5oPiBoYXMgYmVlbiByZXBsYWNlZCBieSA8c3Rk bGliLmg+IgogXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3 YXM6CiNsaW5lIDkzNzggImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCiNpbmNsdWRl IDxtYWxsb2MuaD4KY29uZmlndXJlOjk0MTY6IGNoZWNraW5nIGZvciBYMTEvWEtCbGliLmgKY29u ZmlndXJlOjk0MjY6IGNsYW5nLWNwcCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3Iv bG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQKY29uZmln dXJlOjk0NjA6IGNoZWNraW5nIGZvciBzeXMvc3RhdHZmcy5oCmNvbmZpZ3VyZTo5NDcwOiBjbGFu Zy1jcHAgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29u ZnRlc3QuYyA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0CmNvbmZpZ3VyZTo5NDYwOiBjaGVja2lu ZyBmb3Igc3lzL3N0YXRmcy5oCmNvbmZpZ3VyZTo5NDcwOiBjbGFuZy1jcHAgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3Iv bG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyA+L2Rldi9udWxs IDI+Y29uZnRlc3Qub3V0CmNvbmZpZ3VyZTo5NDY2OjEwOiBmYXRhbCBlcnJvcjogJ3N5cy9zdGF0 ZnMuaCcgZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KICAgICAgICAgXgox IGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDk0 NjUgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCiNpbmNsdWRlIDxzeXMvc3RhdGZz Lmg+CmNvbmZpZ3VyZTo5NDYwOiBjaGVja2luZyBmb3Igc3lzL3Zmcy5oCmNvbmZpZ3VyZTo5NDcw OiBjbGFuZy1jcHAgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVdu by1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1 ZGUgY29uZnRlc3QuYyA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0CmNvbmZpZ3VyZTo5NDY2OjEw OiBmYXRhbCBlcnJvcjogJ3N5cy92ZnMuaCcgZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPHN5cy92 ZnMuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWlsZWQgcHJv Z3JhbSB3YXM6CiNsaW5lIDk0NjUgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCiNp bmNsdWRlIDxzeXMvdmZzLmg+CmNvbmZpZ3VyZTo5NDYwOiBjaGVja2luZyBmb3Igc3lzL21vdW50 LmgKY29uZmlndXJlOjk0NzA6IGNsYW5nLWNwcCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAt SS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQK Y29uZmlndXJlOjk1MTA6IGNoZWNraW5nIGZvciBuZXcKY29uZmlndXJlOjk1MjA6IGNsYW5nKysg LUUgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAt dyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRl c3QuQyA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0CmNvbmZpZ3VyZTo5NjE4OiBjaGVja2luZyBm b3Igc3lzL2NkZWZzLmgKY29uZmlndXJlOjk2Mjg6IGNsYW5nLWNwcCAtTzIgLXBpcGUgLW1hcmNo PXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2Nh bC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jID4vZGV2L251bGwgMj5j b25mdGVzdC5vdXQKY29uZmlndXJlOjk2NjU6IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lX3Ig aW4gLWxjX3IKY29uZmlndXJlOjk2ODQ6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rp b24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10 dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1J L3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVds LC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5jIC1sY19yICAgMT4mNQov dXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxjX3IKY2xhbmc6IGVycm9yOiBsaW5rZXIgY29tbWFu ZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSAodXNlIC12IHRvIHNlZSBpbnZvY2F0aW9uKQpjb25m aWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgOTY3MyAiY29uZmlndXJlIgojaW5jbHVk ZSAiY29uZmRlZnMuaCIKLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRv IGF2b2lkIGFuIGVycm9yLiAgKi8KLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0 Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgogICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJn dW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KY2hhciBnZXRob3N0YnluYW1l X3IoKTsKCmludCBtYWluKCkgewpnZXRob3N0YnluYW1lX3IoKQo7IHJldHVybiAwOyB9CmNvbmZp Z3VyZTo5NzI0OiBjaGVja2luZyBmb3IgYXRhbiBpbiAtbG0KY29uZmlndXJlOjk3NDM6IGNsYW5n IC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1m bm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlv bnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlz eXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9j YWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJ TiBjb25mdGVzdC5jIC1sbSAgIDE+JjUKY29uZmlndXJlOjk3NzQ6IGNoZWNraW5nIGZvciBkbG9w ZW4gaW4gLWxkbApjb25maWd1cmU6OTc5MzogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1z dHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAg LUkvdXNyL2xvY2FsL2luY2x1ZGUgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAt V2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgLWxkbCAgLWxtICAx PiY1Ci91c3IvYmluL2xkOiBjYW5ub3QgZmluZCAtbGRsCmNsYW5nOiBlcnJvcjogbGlua2VyIGNv bW1hbmQgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikK Y29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDk3ODIgImNvbmZpZ3VyZSIKI2lu Y2x1ZGUgImNvbmZkZWZzLmgiCi8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlw ZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0 IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRz IGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCmNoYXIgZGxvcGVuKCk7 CgppbnQgbWFpbigpIHsKZGxvcGVuKCkKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6OTg1NDogY2hl Y2tpbmcgZm9yIGRsYWRkcgpjb25maWd1cmU6OTg4MjogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1w aXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcg LWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMg LWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLURfR05VX1NPVVJDRSAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVt L3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAgLUwvdXNyL2xvY2FsL2xp YiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29u ZnRlc3QuYyAtbG0gIDE+JjUKY29uZmlndXJlOjEwMDI2OiBjaGVja2luZyBmb3Igc29ja2V0IGlu IC1sc29ja2V0CmNvbmZpZ3VyZToxMDA0NTogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1z dHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAg LUkvdXNyL2xvY2FsL2luY2x1ZGUgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAt V2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgLWxzb2NrZXQgIC1s bSAgMT4mNQovdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxzb2NrZXQKY2xhbmc6IGVycm9yOiBs aW5rZXIgY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSAodXNlIC12IHRvIHNlZSBpbnZv Y2F0aW9uKQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgMTAwMzQgImNvbmZp Z3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCi8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFs IHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi8qIFdlIHVzZSBjaGFyIGJlY2F1c2Ug aW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKICAgIGJ1aWx0aW4gYW5k IHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCmNoYXIg c29ja2V0KCk7CgppbnQgbWFpbigpIHsKc29ja2V0KCkKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6 MTAxMDA6IGNoZWNraW5nIGZvciBYRHJhd0xpbmVzIGluIC1sWDExCmNvbmZpZ3VyZToxMDExOTog Y2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1 bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1z ZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlv bnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAt dyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgIC1ML3Vz ci9sb2NhbC9saWIgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3Jp Z2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgLWxYMTEgLWxYMTEgIC1sbSAgMT4m NQpjb25maWd1cmU6MTAxNDA6IGNoZWNraW5nIGZvciBYZXh0QWRkRGlzcGxheSBpbiAtbFhleHQK Y29uZmlndXJlOjEwMTU5OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlh c2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9j YWwvaW5jbHVkZSAgLUwvdXNyL2xvY2FsL2xpYiAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9j YWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRlc3QuYyAtbFhl eHQgLWxYMTEgIC1sbSAgMT4mNQpjb25maWd1cmU6MTAxODI6IGNoZWNraW5nIGZvciBYdEZyZWUg aW4gLWxYdApjb25maWd1cmU6MTAyMDE6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rp b24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10 dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1J L3Vzci9sb2NhbC9pbmNsdWRlICAtTC91c3IvbG9jYWwvbGliICAtTC91c3IvbG9jYWwvbGliIC1M L3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVz dC5jIC1sWHQgIC1sbSAgMT4mNQpjb25maWd1cmU6MTAzNjg6IGNoZWNraW5nIGZvciBwdGhyZWFk X2NyZWF0ZSBpbiAtbHB0aHJlYWRzCmNsYW5nIC1vIGR1bW15IGR1bW15LmMgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1z dHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAg LUkvdXNyL2xvY2FsL2luY2x1ZGUgLWxwdGhyZWFkcyAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3Iv bG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gLWxtIAovdXNyL2Jp bi9sZDogY2Fubm90IGZpbmQgLWxwdGhyZWFkcwpjbGFuZzogZXJyb3I6IGxpbmtlciBjb21tYW5k IGZhaWxlZCB3aXRoIGV4aXQgY29kZSAxICh1c2UgLXYgdG8gc2VlIGludm9jYXRpb24pCmNvbmZp Z3VyZToxMDM5MTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1scHRocmVhZApjbGFu ZyAtbyBkdW1teSBkdW1teS5jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24t c2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rp b25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3Ig LXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1scHRo cmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVds LC1ycGF0aCxcJCRPUklHSU4gLWxtIApjb25maWd1cmU6MTA0OTY6IGNoZWNraW5nIHdoZXRoZXIg Y2xhbmcgYWNjZXB0cyAtcHRocmVhZApjb25maWd1cmU6MTA2MjQ6IGNoZWNraW5nIHdoZXRoZXIg bW1hcCgpIHNlZXMgd3JpdGUoKXMKY29uZmlndXJlOjEwNjY3OiBjbGFuZyAtbyBjb25mdGVzdCAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlh c2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0 aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNo PXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2Nh bC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xp YiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29u ZnRlc3QuYyAtbG0gIDE+JjUKY29uZmlndXJlOjEwNjk1OiBjaGVja2luZyB3aGV0aGVyIGNsYW5n IG5lZWRzIC10cmFkaXRpb25hbApjb25maWd1cmU6MTA3MDI6MTA6IGZhdGFsIGVycm9yOiAnc2d0 dHkuaCcgZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPHNndHR5Lmg+CiAgICAgICAgIF4KMSBlcnJv ciBnZW5lcmF0ZWQuCmNvbmZpZ3VyZToxMDcyMDoxMDogZmF0YWwgZXJyb3I6ICd0ZXJtaW8uaCcg ZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPHRlcm1pby5oPgogICAgICAgICBeCjEgZXJyb3IgZ2Vu ZXJhdGVkLgpjb25maWd1cmU6MTA3NDE6IGNoZWNraW5nIGZvciA4LWJpdCBjbGVhbiBtZW1jbXAK Y29uZmlndXJlOjEwNzU5OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlh c2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9j YWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1X bCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRlc3QuYyAtbG0gIDE+JjUKY29u ZmlndXJlOjEwNzc5OiBjaGVja2luZyBmb3IgcmFuZG9tCmNvbmZpZ3VyZToxMDgwNzogY2xhbmcg LW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9u cyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8y IC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5 c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1M L3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgs XCQkT1JJR0lOIGNvbmZ0ZXN0LmMgLWxtICAxPiY1CmNvbmZpZ3VyZToxMDc3OTogY2hlY2tpbmcg Zm9yIHN0cmVycm9yCmNvbmZpZ3VyZToxMDgwNzogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBl IC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZm dW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVk ZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNy L2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMg LWxtICAxPiY1CmNvbmZpZ3VyZToxMDc3OTogY2hlY2tpbmcgZm9yIGxjaG93bgpjb25maWd1cmU6 MTA4MDc6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVu Y3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRh LXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8t ZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRl IC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdp biAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5jIC1sbSAgMT4mNQpjb25maWd1cmU6MTA3 Nzk6IGNoZWNraW5nIGZvciBmY2htb2QKY29uZmlndXJlOjEwODA3OiBjbGFuZyAtbyBjb25mdGVz dCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1h bGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1z ZWN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9s b2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2Fs L2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4g Y29uZnRlc3QuYyAtbG0gIDE+JjUKY29uZmlndXJlOjEwNzc5OiBjaGVja2luZyBmb3Igc25wcmlu dGYKY29uZmlndXJlOjEwODA3OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1h bGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZmZ1bmN0aW9uLXNl Y3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3Iv bG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGli IC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRlc3QuYyAtbG0gIDE+JjUK Y29uZmlndXJlOjEwNzc5OiBjaGVja2luZyBmb3Igc3RhdHZmcwpjb25maWd1cmU6MTA4MDc6IGNs YW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2Vj dGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25z IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcg LWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFk ICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJw YXRoLFwkJE9SSUdJTiBjb25mdGVzdC5jIC1sbSAgMT4mNQpjb25maWd1cmU6MTA3Nzk6IGNoZWNr aW5nIGZvciBtZW1tb3ZlCmNvbmZpZ3VyZToxMDgwNzogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1w aXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcg LWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMg LWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5j bHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwv dXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0 LmMgLWxtICAxPiY1CmNvbmZpZ3VyZToxMDc3OTogY2hlY2tpbmcgZm9yIHJpbnQKY29uZmlndXJl OjEwODA3OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVu ZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1 bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0 YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25v LWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVk ZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmln aW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRlc3QuYyAtbG0gIDE+JjUKY29uZmlndXJlOjEw Nzc5OiBjaGVja2luZyBmb3Igc3RhdDY0CmNvbmZpZ3VyZToxMDgwNzogY2xhbmcgLW8gY29uZnRl c3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3Qt YWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEt c2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3Iv bG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2Nh bC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lO IGNvbmZ0ZXN0LmMgLWxtICAxPiY1Ci90bXAvY29uZnRlc3QtUkVMUklXLm86IEluIGZ1bmN0aW9u IGBtYWluJzoKY29uZnRlc3QuYzooLnRleHQubWFpbisweDcpOiB1bmRlZmluZWQgcmVmZXJlbmNl IHRvIGBzdGF0NjQnCmNsYW5nOiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVkIHdpdGggZXhp dCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOiBmYWlsZWQgcHJv Z3JhbSB3YXM6CiNsaW5lIDEwNzg0ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5oIgov KiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3 IHByb3RvdHlwZXMsCiAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHN0YXQ2NCgpOyBi ZWxvdy4gICovCiNpbmNsdWRlIDxhc3NlcnQuaD4KLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJu YWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLyogV2UgdXNlIGNoYXIgYmVjYXVz ZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgogICAgYnVpbHRpbiBh bmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KY2hh ciBzdGF0NjQoKTsKCmludCBtYWluKCkgewoKLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0 aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwogICAgdG8gYWx3YXlzIGZhaWwg d2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKICAgIHNvbWV0 aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAq LwojaWYgZGVmaW5lZCAoX19zdHViX3N0YXQ2NCkgfHwgZGVmaW5lZCAoX19zdHViX19fc3RhdDY0 KQpjaG9rZSBtZQojZWxzZQpzdGF0NjQoKTsKI2VuZGlmCgo7IHJldHVybiAwOyB9CmNvbmZpZ3Vy ZToxMDc3OTogY2hlY2tpbmcgZm9yIGxzdGF0NjQKY29uZmlndXJlOjEwODA3OiBjbGFuZyAtbyBj b25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1m ZGF0YS1zZWN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVt L3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4gY29uZnRlc3QuYyAtbG0gIDE+JjUKL3RtcC9jb25mdGVzdC0xWUF0VTIubzogSW4gZnVu Y3Rpb24gYG1haW4nOgpjb25mdGVzdC5jOigudGV4dC5tYWluKzB4Nyk6IHVuZGVmaW5lZCByZWZl cmVuY2UgdG8gYGxzdGF0NjQnCmNsYW5nOiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVkIHdp dGggZXhpdCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOiBmYWls ZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDEwNzg0ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVm cy5oIgovKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVs bHkgZmV3IHByb3RvdHlwZXMsCiAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGxzdGF0 NjQoKTsgYmVsb3cuICAqLwojaW5jbHVkZSA8YXNzZXJ0Lmg+Ci8qIE92ZXJyaWRlIGFueSBnY2My IGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi8qIFdlIHVzZSBjaGFy IGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKICAgIGJ1 aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4g ICovCmNoYXIgbHN0YXQ2NCgpOwoKaW50IG1haW4oKSB7CgovKiBUaGUgR05VIEMgbGlicmFyeSBk ZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCiAgICB0byBhbHdh eXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAog ICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBh bGlhcy4gICovCiNpZiBkZWZpbmVkIChfX3N0dWJfbHN0YXQ2NCkgfHwgZGVmaW5lZCAoX19zdHVi X19fbHN0YXQ2NCkKY2hva2UgbWUKI2Vsc2UKbHN0YXQ2NCgpOwojZW5kaWYKCjsgcmV0dXJuIDA7 IH0KY29uZmlndXJlOjEwNzc5OiBjaGVja2luZyBmb3IgdHJ1bmNhdGU2NApjb25maWd1cmU6MTA4 MDc6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rp b24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJy b3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1w dGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAt V2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5jIC1sbSAgMT4mNQovdG1wL2NvbmZ0ZXN0LTBy OW9ZMi5vOiBJbiBmdW5jdGlvbiBgbWFpbic6CmNvbmZ0ZXN0LmM6KC50ZXh0Lm1haW4rMHg3KTog dW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgdHJ1bmNhdGU2NCcKY2xhbmc6IGVycm9yOiBsaW5rZXIg Y29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSAodXNlIC12IHRvIHNlZSBpbnZvY2F0aW9u KQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUgMTA3ODQgImNvbmZpZ3VyZSIK I2luY2x1ZGUgImNvbmZkZWZzLmgiCi8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBt YWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKICAgIHdoaWNoIGNhbiBjb25mbGlj dCB3aXRoIGNoYXIgdHJ1bmNhdGU2NCgpOyBiZWxvdy4gICovCiNpbmNsdWRlIDxhc3NlcnQuaD4K LyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9y LiAgKi8KLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0 eXBlIG9mIGEgZ2NjMgogICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBl IHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KY2hhciB0cnVuY2F0ZTY0KCk7CgppbnQgbWFpbigpIHsK Ci8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0 IGltcGxlbWVudHMKICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlv bnMgYXJlIGFjdHVhbGx5IG5hbWVkCiAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQg dGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KI2lmIGRlZmluZWQgKF9fc3R1Yl90cnVu Y2F0ZTY0KSB8fCBkZWZpbmVkIChfX3N0dWJfX190cnVuY2F0ZTY0KQpjaG9rZSBtZQojZWxzZQp0 cnVuY2F0ZTY0KCk7CiNlbmRpZgoKOyByZXR1cm4gMDsgfQpjb25maWd1cmU6MTA3Nzk6IGNoZWNr aW5nIGZvciBzdGF0dmZzNjQKY29uZmlndXJlOjEwODA3OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9u cyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9p bmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAt TC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRl c3QuYyAtbG0gIDE+JjUKL3RtcC9jb25mdGVzdC04cEY2cXgubzogSW4gZnVuY3Rpb24gYG1haW4n Ogpjb25mdGVzdC5jOigudGV4dC5tYWluKzB4Nyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHN0 YXR2ZnM2NCcKY2xhbmc6IGVycm9yOiBsaW5rZXIgY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNv ZGUgMSAodXNlIC12IHRvIHNlZSBpbnZvY2F0aW9uKQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFt IHdhczoKI2xpbmUgMTA3ODQgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCi8qIFN5 c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJv dG90eXBlcywKICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgc3RhdHZmczY0KCk7IGJl bG93LiAgKi8KI2luY2x1ZGUgPGFzc2VydC5oPgovKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5h bCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwovKiBXZSB1c2UgY2hhciBiZWNhdXNl IGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCiAgICBidWlsdGluIGFu ZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwpjaGFy IHN0YXR2ZnM2NCgpOwoKaW50IG1haW4oKSB7CgovKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVz IHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCiAgICB0byBhbHdheXMgZmFp bCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAogICAgc29t ZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4g ICovCiNpZiBkZWZpbmVkIChfX3N0dWJfc3RhdHZmczY0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19z dGF0dmZzNjQpCmNob2tlIG1lCiNlbHNlCnN0YXR2ZnM2NCgpOwojZW5kaWYKCjsgcmV0dXJuIDA7 IH0KY29uZmlndXJlOjEwODM3OiBjaGVja2luZyBmb3IgZmxvY2tmaWxlCmNvbmZpZ3VyZToxMDg2 NTogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlv bi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0 aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1X bCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgLWxtICAxPiY1CmNvbmZpZ3VyZToxMDgzNzog Y2hlY2tpbmcgZm9yIGdldHBhZ2VzaXplCmNvbmZpZ3VyZToxMDg2NTogY2xhbmcgLW8gY29uZnRl c3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3Qt YWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEt c2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3Iv bG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2Nh bC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lO IGNvbmZ0ZXN0LmMgLWxtICAxPiY1CmNvbmZpZ3VyZToxMDg5NTogY2hlY2tpbmcgZm9yIGxvY2Fs dGltZV9yCmNvbmZpZ3VyZToxMDkyMzogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlv bi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkv dXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2Fs L2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgLWxtICAx PiY1CmNvbmZpZ3VyZToxMDg5NTogY2hlY2tpbmcgZm9yIHN0cnRva19yCmNvbmZpZ3VyZToxMDky MzogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlv bi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0 aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1X bCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgLWxtICAxPiY1CmNvbmZpZ3VyZToxMDk2MTog Y2hlY2tpbmcgZm9yIHdjcnRvbWIKY29uZmlndXJlOjEwOTczOiBjbGFuZysrIC1vIGNvbmZ0ZXN0 IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJy b3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1 bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUr KzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4 Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUg LXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2lu IC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LkMgLWxtICAxPiY1ClN0YWNrIGR1bXA6CjAu CVByb2dyYW0gYXJndW1lbnRzOiAvdXNyL2Jpbi9jbGFuZysrIC1jYzEgLXRyaXBsZSBpMzg2LXVu a25vd24tZnJlZWJzZDkuMCAtZW1pdC1vYmogLWRpc2FibGUtZnJlZSAtbWFpbi1maWxlLW5hbWUg Y29uZnRlc3QuQyAtbXJlbG9jYXRpb24tbW9kZWwgc3RhdGljIC1tZGlzYWJsZS1mcC1lbGltIC1y ZWxheGVkLWFsaWFzaW5nIC1tYXNtLXZlcmJvc2UgLW1jb25zdHJ1Y3Rvci1hbGlhc2VzIC10YXJn ZXQtY3B1IHBlbnRpdW00IC1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIgLWZmdW5jdGlvbi1zZWN0 aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMg LXJlc291cmNlLWRpciAvdXNyL2Jpbi8uLi9saWIvY2xhbmcvMy4wIC1pc3lzdGVtIC91c3IvbG9j YWwvaW5jbHVkZSAtSSAvdXNyL2xvY2FsL2luY2x1ZGUgLWZtb2R1bGUtY2FjaGUtcGF0aCAvdG1w L2NsYW5nLW1vZHVsZS1jYWNoZSAtTzIgLVduby1lcnJvciAtV25vLWVycm9yIC13IC1zdGQ9Z251 KysweCAtZmRlcHJlY2F0ZWQtbWFjcm8gLWZlcnJvci1saW1pdCAxOSAtZm1lc3NhZ2UtbGVuZ3Ro IDAgLXB0aHJlYWQgLWZuby1ydHRpIC1mZ251LXJ1bnRpbWUgLWZvYmpjLXJ1bnRpbWUtaGFzLWFy YyAtZm9iamMtcnVudGltZS1oYXMtd2VhayAtZm9iamMtZnJhZ2lsZS1hYmkgLWZkaWFnbm9zdGlj cy1zaG93LW9wdGlvbiAtbyAvdG1wL2NvbmZ0ZXN0LTFWbHhnMC5vIC14IGMrKyBjb25mdGVzdC5D IAoxLgk8ZW9mPiBwYXJzZXIgYXQgZW5kIG9mIGZpbGUKMi4JY29uZmlndXJlOjEwOTY4OjU6IExM Vk0gSVIgZ2VuZXJhdGlvbiBvZiBkZWNsYXJhdGlvbiAnbWFpbicKMy4JY29uZmlndXJlOjEwOTY4 OjU6IEdlbmVyYXRpbmcgY29kZSBmb3IgZGVjbGFyYXRpb24gJ21haW4nCjQuCWNvbmZpZ3VyZTox MDk2ODoxMjogTExWTSBJUiBnZW5lcmF0aW9uIG9mIGNvbXBvdW5kIHN0YXRlbWVudCAoJ3t9JykK Y2xhbmcrKzogZXJyb3I6IHVuYWJsZSB0byBleGVjdXRlIGNvbW1hbmQ6IElsbGVnYWwgaW5zdHJ1 Y3Rpb246IDQgKGNvcmUgZHVtcGVkKQpjbGFuZysrOiBlcnJvcjogY2xhbmcgZnJvbnRlbmQgY29t bWFuZCBmYWlsZWQgZHVlIHRvIHNpZ25hbCAyICh1c2UgLXYgdG8gc2VlIGludm9jYXRpb24pCmNs YW5nKys6IG5vdGU6IGRpYWdub3N0aWMgbXNnOiBQbGVhc2Ugc3VibWl0IGEgYnVnIHJlcG9ydCB0 byBodHRwOi8vbGx2bS5vcmcvYnVncy8gYW5kIGluY2x1ZGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50 cyBhbmQgYWxsIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uCmNsYW5nKys6IG5vdGU6IGRpYWdub3N0 aWMgbXNnOiBQcmVwcm9jZXNzZWQgc291cmNlKHMpIGFyZSBsb2NhdGVkIGF0OgpjbGFuZysrOiBu b3RlOiBkaWFnbm9zdGljIG1zZzogL3RtcC9jb25mdGVzdC0wQ3RhNXouaWkKY29uZmlndXJlOiBm YWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDEwOTY2ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25m ZGVmcy5oIgojaW5jbHVkZSA8d2NoYXIuaD4KaW50IG1haW4oKSB7Cm1ic3RhdGVfdCBwcz17MH07 d2NydG9tYigwLCdmJywmcHMpOwo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMDk5NjogY2hlY2tp bmcgZm9yIG1icnRvd2MKY29uZmlndXJlOjExMDA4OiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcg LWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9u LXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1m bm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlv bnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAt dyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJl YWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwt cnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LkMgLWxtICAxPiY1ClN0YWNrIGR1bXA6CjAuCVByb2dy YW0gYXJndW1lbnRzOiAvdXNyL2Jpbi9jbGFuZysrIC1jYzEgLXRyaXBsZSBpMzg2LXVua25vd24t ZnJlZWJzZDkuMCAtZW1pdC1vYmogLWRpc2FibGUtZnJlZSAtbWFpbi1maWxlLW5hbWUgY29uZnRl c3QuQyAtbXJlbG9jYXRpb24tbW9kZWwgc3RhdGljIC1tZGlzYWJsZS1mcC1lbGltIC1yZWxheGVk LWFsaWFzaW5nIC1tYXNtLXZlcmJvc2UgLW1jb25zdHJ1Y3Rvci1hbGlhc2VzIC10YXJnZXQtY3B1 IHBlbnRpdW00IC1tb21pdC1sZWFmLWZyYW1lLXBvaW50ZXIgLWZmdW5jdGlvbi1zZWN0aW9ucyAt ZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLXJlc291 cmNlLWRpciAvdXNyL2Jpbi8uLi9saWIvY2xhbmcvMy4wIC1pc3lzdGVtIC91c3IvbG9jYWwvaW5j bHVkZSAtSSAvdXNyL2xvY2FsL2luY2x1ZGUgLWZtb2R1bGUtY2FjaGUtcGF0aCAvdG1wL2NsYW5n LW1vZHVsZS1jYWNoZSAtTzIgLVduby1lcnJvciAtV25vLWVycm9yIC13IC1zdGQ9Z251KysweCAt ZmRlcHJlY2F0ZWQtbWFjcm8gLWZlcnJvci1saW1pdCAxOSAtZm1lc3NhZ2UtbGVuZ3RoIDAgLXB0 aHJlYWQgLWZuby1ydHRpIC1mZ251LXJ1bnRpbWUgLWZvYmpjLXJ1bnRpbWUtaGFzLWFyYyAtZm9i amMtcnVudGltZS1oYXMtd2VhayAtZm9iamMtZnJhZ2lsZS1hYmkgLWZkaWFnbm9zdGljcy1zaG93 LW9wdGlvbiAtbyAvdG1wL2NvbmZ0ZXN0LTZWNXlaSy5vIC14IGMrKyBjb25mdGVzdC5DIAoxLgk8 ZW9mPiBwYXJzZXIgYXQgZW5kIG9mIGZpbGUKMi4JY29uZmlndXJlOjExMDAzOjU6IExMVk0gSVIg Z2VuZXJhdGlvbiBvZiBkZWNsYXJhdGlvbiAnbWFpbicKMy4JY29uZmlndXJlOjExMDAzOjU6IEdl bmVyYXRpbmcgY29kZSBmb3IgZGVjbGFyYXRpb24gJ21haW4nCjQuCWNvbmZpZ3VyZToxMTAwMzox MjogTExWTSBJUiBnZW5lcmF0aW9uIG9mIGNvbXBvdW5kIHN0YXRlbWVudCAoJ3t9JykKY2xhbmcr KzogZXJyb3I6IHVuYWJsZSB0byBleGVjdXRlIGNvbW1hbmQ6IElsbGVnYWwgaW5zdHJ1Y3Rpb246 IDQgKGNvcmUgZHVtcGVkKQpjbGFuZysrOiBlcnJvcjogY2xhbmcgZnJvbnRlbmQgY29tbWFuZCBm YWlsZWQgZHVlIHRvIHNpZ25hbCAyICh1c2UgLXYgdG8gc2VlIGludm9jYXRpb24pCmNsYW5nKys6 IG5vdGU6IGRpYWdub3N0aWMgbXNnOiBQbGVhc2Ugc3VibWl0IGEgYnVnIHJlcG9ydCB0byBodHRw Oi8vbGx2bS5vcmcvYnVncy8gYW5kIGluY2x1ZGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQg YWxsIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uCmNsYW5nKys6IG5vdGU6IGRpYWdub3N0aWMgbXNn OiBQcmVwcm9jZXNzZWQgc291cmNlKHMpIGFyZSBsb2NhdGVkIGF0OgpjbGFuZysrOiBub3RlOiBk aWFnbm9zdGljIG1zZzogL3RtcC9jb25mdGVzdC12YXJidDYuaWkKY29uZmlndXJlOiBmYWlsZWQg cHJvZ3JhbSB3YXM6CiNsaW5lIDExMDAxICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVmcy5o IgojaW5jbHVkZSA8d2NoYXIuaD4KaW50IG1haW4oKSB7Cm1ic3RhdGVfdCBwcz17MH07bWJydG93 YygwLDAsMCwmcHMpOwo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMTA0MDogY2hlY2tpbmcgZm9y IHJlc19uaW5pdCgpCmNvbmZpZ3VyZToxMTA1NzogY2xhbmcgLW8gY29uZnRlc3QgLU8yIC1waXBl IC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZm dW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVk ZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNy L2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMg LWxtICAxPiY1CkluIGZpbGUgaW5jbHVkZWQgZnJvbSBjb25maWd1cmU6MTEwNTA6Ci91c3IvaW5j bHVkZS9yZXNvbHYuaDoxNTc6MTQ6IGVycm9yOiBhcnJheSBoYXMgaW5jb21wbGV0ZSBlbGVtZW50 IHR5cGUgJ3N0cnVjdCBzb2NrYWRkcl9pbicKICAgICAgICAgICAgICAgIG5zYWRkcl9saXN0W01B WE5TXTsgICAgIC8qJTwgYWRkcmVzcyBvZiBuYW1lIHNlcnZlciAqLwogICAgICAgICAgICAgICAg ICAgICAgICAgICBeCi91c3IvaW5jbHVkZS9yZXNvbHYuaDoxNTY6OTogbm90ZTogZm9yd2FyZCBk ZWNsYXJhdGlvbiBvZiAnc3RydWN0IHNvY2thZGRyX2luJwogICAgICAgIHN0cnVjdCBzb2NrYWRk cl9pbgogICAgICAgICAgICAgICBeCi91c3IvaW5jbHVkZS9yZXNvbHYuaDoxNzE6MTg6IGVycm9y OiBmaWVsZCBoYXMgaW5jb21wbGV0ZSB0eXBlICdzdHJ1Y3QgaW5fYWRkcicKICAgICAgICAgICAg ICAgIHN0cnVjdCBpbl9hZGRyICBhZGRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF4KL3Vzci9pbmNsdWRlL3Jlc29sdi5oOjE3MToxMDogbm90ZTogZm9yd2FyZCBkZWNsYXJhdGlv biBvZiAnc3RydWN0IGluX2FkZHInCiAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciAgYWRk cjsKICAgICAgICAgICAgICAgICAgICAgICBeCi91c3IvaW5jbHVkZS9yZXNvbHYuaDoxOTU6MjE6 IGVycm9yOiBmaWVsZCBoYXMgaW5jb21wbGV0ZSB0eXBlICdzdHJ1Y3Qgc29ja2FkZHJfaW4nCiAg ICAgICAgc3RydWN0IHNvY2thZGRyX2luICAgICAgc2luOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF4KL3Vzci9pbmNsdWRlL3Jlc29sdi5oOjE1Njo5OiBub3RlOiBmb3J3YXJkIGRl Y2xhcmF0aW9uIG9mICdzdHJ1Y3Qgc29ja2FkZHJfaW4nCiAgICAgICAgc3RydWN0IHNvY2thZGRy X2luCiAgICAgICAgICAgICAgIF4KMyBlcnJvcnMgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxl ZCBwcm9ncmFtIHdhczoKI2xpbmUgMTEwNDUgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZz LmgiCgogICAgICAgICNpZmRlZiBsaW51eAogICAgICAgICNkZWZpbmUgX0JTRF9TT1VSQ0UgMQog ICAgICAgICNlbmRpZgogICAgICAgICNpbmNsdWRlIDxyZXNvbHYuaD4KICAgICAgICAKaW50IG1h aW4oKSB7CmludCBmb28gPSByZXNfbmluaXQoJl9yZXMpOwo7IHJldHVybiAwOyB9CmNvbmZpZ3Vy ZToxMTA5MDogY2hlY2tpbmcgZm9yIGdudV9nZXRfbGliY192ZXJzaW9uKCkKY29uZmlndXJlOjEx MTA2OiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0 LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAt Zm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25z IC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVk ZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNy L2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LkMg LWxtICAxPiY1CmNvbmZpZ3VyZToxMTEwMjoyOTogZXJyb3I6IHVzZSBvZiB1bmRlY2xhcmVkIGlk ZW50aWZpZXIgJ2dudV9nZXRfbGliY192ZXJzaW9uJwpjb25zdCBjaGFyICpnbGliY192ZXJzaW9u ID0gZ251X2dldF9saWJjX3ZlcnNpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4K MSBlcnJvciBnZW5lcmF0ZWQuCmNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAx MTA5NSAiY29uZmlndXJlIgojaW5jbHVkZSAiY29uZmRlZnMuaCIKCiAgICAgICAgI2lmZGVmIEhB VkVfR05VX0xJQkNfVkVSU0lPTl9ICiAgICAgICAgI2luY2x1ZGUgPGdudS9saWJjLXZlcnNpb24u aD4KICAgICAgICAjZW5kaWYKICAgICAgICAKaW50IG1haW4oKSB7CmNvbnN0IGNoYXIgKmdsaWJj X3ZlcnNpb24gPSBnbnVfZ2V0X2xpYmNfdmVyc2lvbigpOwo7IHJldHVybiAwOyB9CmNvbmZpZ3Vy ZToxMTEzODogY2hlY2tpbmcgZm9yIGljb252IGluIC1sYwpjb25maWd1cmU6MTExNjA6IGNsYW5n KysgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcg LWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0 aW9ucyAtc3RkPWdudSsrMHggLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1w ZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3Iv bG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGli IC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRlc3QuQyAtbGMgIC1sbSAg MT4mNQovdG1wL2NvbmZ0ZXN0LWNheTZ2Ni5vOiBJbiBmdW5jdGlvbiBgbWFpbic6CmNvbmZ0ZXN0 LkM6KC50ZXh0Lm1haW4rMHg3KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgaWNvbnYnCmNsYW5n Kys6IGVycm9yOiBsaW5rZXIgY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNvZGUgMSAodXNlIC12 IHRvIHNlZSBpbnZvY2F0aW9uKQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoKI2xpbmUg MTExNDYgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCi8qIE92ZXJyaWRlIGFueSBn Y2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCiNpZmRlZiBfX2Nw bHVzcGx1cwpleHRlcm4gIkMiCiNlbmRpZgovKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdo dCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCiAgICBidWlsdGluIGFuZCB0aGVuIGl0 cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwpjaGFyIGljb252KCk7 CgppbnQgbWFpbigpIHsKaWNvbnYoKQo7IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMTE3OTogY2hl Y2tpbmcgZm9yIGljb252IGluIC1saWNvbnYKY29uZmlndXJlOjExMjAxOiBjbGFuZysrIC1vIGNv bmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1X bm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0 aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0 ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAt Zm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2lu Y2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXos b3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LkMgLWxpY29udiAgLWxtICAxPiY1 CmNvbmZpZ3VyZToxMTI2OTogY2hlY2tpbmcgZm9yIGljb252KCkKY29uZmlndXJlOjExMjg4OiBj bGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4 Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0 YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkv dXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2Fs L2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LkMgLWxtICAg LWxpY29udiAxPiY1CmNvbmZpZ3VyZToxMTMxNTogY2hlY2tpbmcgZm9yIGljb252KCkgd2l0aCBj b25zdCBpbnB1dApjb25maWd1cmU6MTEzMzU6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlv bnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZk YXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby1ydHRpIC1mZnVu Y3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtTzIgLXBpcGUg LW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vz ci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29u ZmlndXJlOjExMzY3OiBjaGVja2luZyBmb3IgbmxfbGFuZ2luZm8gYW5kIENPREVTRVQKY29uZmln dXJlOjExMzc5OiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8t c3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0 aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNl Y3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwv aW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIg LUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0 ZXN0LkMgLWxtICAxPiY1CmNvbmZpZ3VyZToxMTQxNDogY2hlY2tpbmcgZm9yIGFuIGltcGxlbWVu dGF0aW9uIG9mIHZhX2NvcHkoKQpjb25maWd1cmU6MTE0Mzg6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rp b25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9 cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2Fs L2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGli IC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25m dGVzdC5jIC1sbSAgMT4mNQpjb25maWd1cmU6MTE0NTU6IGNoZWNraW5nIGZvciBhbiBpbXBsZW1l bnRhdGlvbiBvZiBfX3ZhX2NvcHkoKQpjb25maWd1cmU6MTE0Nzk6IGNsYW5nIC1vIGNvbmZ0ZXN0 IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xv Y2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9jYWwv bGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBj b25mdGVzdC5jIC1sbSAgMT4mNQovdG1wL2NvbmZ0ZXN0LTRHV1RxUC5vOiBJbiBmdW5jdGlvbiBg Zic6CmNvbmZ0ZXN0LmM6KC50ZXh0LmYrMHgxNyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYF9f dmFfY29weScKY2xhbmc6IGVycm9yOiBsaW5rZXIgY29tbWFuZCBmYWlsZWQgd2l0aCBleGl0IGNv ZGUgMSAodXNlIC12IHRvIHNlZSBpbnZvY2F0aW9uKQpjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFt IHdhczoKI2xpbmUgMTE0NjUgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCgogICAg ICAgICNpbmNsdWRlIDxzdGRhcmcuaD4KICAgICAgICB2b2lkIGYgKGludCBpLCAuLi4pIHsKICAg ICAgICAgICAgdmFfbGlzdCBhcmdzMSwgYXJnczI7CiAgICAgICAgICAgIHZhX3N0YXJ0IChhcmdz MSwgaSk7CiAgICAgICAgICAgIF9fdmFfY29weSAoYXJnczIsIGFyZ3MxKTsKICAgICAgICAgICAg aWYgKHZhX2FyZyAoYXJnczIsIGludCkgIT0gNDIgfHwgdmFfYXJnIChhcmdzMSwgaW50KSAhPSA0 MikKICAgICAgICAgICAgICAgIGV4aXQgKDEpOwogICAgICAgICAgICB2YV9lbmQgKGFyZ3MxKTsg dmFfZW5kIChhcmdzMik7CiAgICAgICAgfQogICAgICAgIGludCBtYWluKCkgeyBmICgwLCA0Mik7 IHJldHVybiAwOyB9CmNvbmZpZ3VyZToxMTQ5NjogY2hlY2tpbmcgd2hldGhlciB2YV9saXN0cyBj YW4gYmUgY29waWVkIGJ5IHZhbHVlCmNvbmZpZ3VyZToxMTUyMDogY2xhbmcgLW8gY29uZnRlc3Qg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9j YWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9s aWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNv bmZ0ZXN0LmMgLWxtICAxPiY1CmNvbmZpZ3VyZToxMTY0MjogY2hlY2tpbmcgZm9yIGdjYyAzLjAg QUJJCmNvbmZpZ3VyZToxMTY2MDogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5v LXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1z ZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1PMiAtcGlwZSAtbWFyY2g9 cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2Fs L2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6 MTE2ODQ6IGNoZWNraW5nIGZvciBDKysgImV4cGxpY2l0IiBrZXl3b3JkCmNvbmZpZ3VyZToxMTY5 OTogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50 aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAt Zm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRp b25zIC1zdGQ9Z251KysweCAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLWZuby1leGNlcHRpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9s b2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6MTE3MjM6IGNoZWNraW5nIGZv ciBDKysgInR5cGVuYW1lIiBrZXl3b3JkCmNvbmZpZ3VyZToxMTc0NzogY2xhbmcrKyAtYyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13 IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlv bi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAt Zm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRp b25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3Ig LXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0 ZXN0LkMgMT4mNQpjb25maWd1cmU6MTE3NzE6IGNoZWNraW5nIGZvciBtb2Rlcm4gQysrIHRlbXBs YXRlIHNwZWNpYWxpemF0aW9uIHN5bnRheCBzdXBwb3J0CmNvbmZpZ3VyZToxMTc4NjogY2xhbmcr KyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmlj dC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25v LWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkg LWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9 Z251KysweCAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZu by1leGNlcHRpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1X bm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNs dWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6MTE4MTE6IGNoZWNraW5nIHdoZXRoZXIgcGFy dGlhbCB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiB3b3Jrcwpjb25maWd1cmU6MTE4MjQ6IGNsYW5n KysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVdu by1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRp IC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3Rk PWdudSsrMHggLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1m bm8tZXhjZXB0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt V25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5j bHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJlOjExODQ4OiBjaGVja2luZyB3aGV0aGVyIG9w ZXJhdG9ycyBtdXN0IGJlIHJlLWRlZmluZWQgZm9yIHRlbXBsYXRlcyBkZXJpdmVkIGZyb20gdGVt cGxhdGVzCmNvbmZpZ3VyZToxMTg2NTogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNo PXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAt Zm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEt c2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXJ0dGkgLWZmdW5jdGlv bi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xv Y2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1 cmU6MTE4OTA6IGNoZWNraW5nIHdoZXRoZXIgd2UgbmVlZCB0byBjYXN0IGEgZGVyaXZlZCB0ZW1w bGF0ZSB0byBwYXNzIGFzIGl0cyBiYXNlIGNsYXNzCmNvbmZpZ3VyZToxMTkwNDogY2xhbmcrKyAt YyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1h bGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVy cm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZm dW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251 KysweCAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1l eGNlcHRpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8t ZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRl IGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6MTE5Mjg6IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNv bXBpbGVyIGNhbiByZXNvbHZlIGNvbnN0IGFtYmlndWl0aWVzIGZvciB0ZW1wbGF0ZXMKY29uZmln dXJlOjExOTU0OiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10 dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5v LWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1m ZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAg LUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZToxMTk3OTogY2hl Y2tpbmcgd2hldGhlciB0aGUgQysrICJ1c2luZyIga2V5d29yZCBjYW4gY2hhbmdlIGFjY2Vzcwpj b25maWd1cmU6MTE5OTI6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJp Y3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25z IC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlv bnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRp dW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNs dWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJlOjEyMDAz OiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1m bm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1m bm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlv bnMgLXN0ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0 aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xv Y2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZToxMTk5OToxNTogZXJyb3I6ICdm b28nIGlzIGEgcHJpdmF0ZSBtZW1iZXIgb2YgJ0InCkIgYjsgcmV0dXJuIGIuZm9vKCk7CiAgICAg ICAgICAgICAgXgpjb25maWd1cmU6MTE5OTc6NjM6IG5vdGU6IGRlY2xhcmVkIHByaXZhdGUgaGVy ZQogICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIEIgOiBwdWJsaWMgQSB7IHByaXZhdGU6IHVz aW5nIEE6OmZvbzsgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxl ZCBwcm9ncmFtIHdhczoKI2xpbmUgMTE5OTUgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZz LmgiCmNsYXNzIEEgeyBwdWJsaWM6IGludCBmb28oKSB7IHJldHVybiAxOyB9IH07CiAgICAgICAg ICAgICAgICAgICAgICAgY2xhc3MgQiA6IHB1YmxpYyBBIHsgcHJpdmF0ZTogdXNpbmcgQTo6Zm9v OyB9OwppbnQgbWFpbigpIHsKQiBiOyByZXR1cm4gYi5mb28oKTsKOyByZXR1cm4gMDsgfQpjb25m aWd1cmU6MTIwMzQ6IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMrKyAidXNpbmciIGtleXdvcmQgcmVz b2x2ZXMgYW1iaWd1aXR5CmNvbmZpZ3VyZToxMjA1NTogY2xhbmcrKyAtYyAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhj ZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9u cyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXJ0dGkg LWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0 ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMgMT4m NQpjb25maWd1cmU6MTIwNzk6IGNoZWNraW5nIGZvciAic3RkOjoiIG5hbWVzcGFjZQpjb25maWd1 cmU6MTIwOTE6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1 bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8t ZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZk YXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAt SS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJlOjEyMTE1OiBjaGVj a2luZyB3aGV0aGVyIHN0YW5kYXJkIHRlbXBsYXRlIG9wZXJhdG9yIT0oKSBpcyBhbWJpZ3VvdXMK Y29uZmlndXJlOjEyMTMwOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10 dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9u cyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5j bHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZToxMjE1 NTogY2hlY2tpbmcgZm9yIEMrKyByZWludGVycHJldF9jYXN0CmNvbmZpZ3VyZToxMjE2ODogY2xh bmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt V25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0 dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1z dGQ9Z251KysweCAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMg LWZuby1leGNlcHRpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6MTIxOTI6IGNoZWNraW5nIGZvciBDKysg ZHluYW1pY19jYXN0IHRvIHZvaWQqCmNvbmZpZ3VyZToxMjIxOTogY2xhbmcrKyAtbyBjb25mdGVz dCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1h bGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVy cm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZm dW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251 KysweCAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1l eGNlcHRpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8t ZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRl IC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdp biAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5DIC1sbSAgMT4mNQpjb25maWd1cmU6MTIy NDY6IGNoZWNraW5nIHdoZXRoZXIgQysrIHJlcXVpcmVzIGltcGxlbWVudGF0aW9uIG9mIHVudXNl ZCB2aXJ0dWFsIG1ldGhvZHMKY29uZmlndXJlOjEyMjU4OiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3Ig LXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0 aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4 IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2Vw dGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0 aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1X bCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LkMgLWxtICAxPiY1CmNvbmZpZ3VyZToxMjI4NDog Y2hlY2tpbmcgZm9yIHRyb3VibGUgY29tcGFyaW5nIHRvIHplcm8gbmVhciBzdGQ6Om9wZXJhdG9y IT0oKQpjb25maWd1cmU6MTIzMDA6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZu by1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby1ydHRpIC1mZnVuY3Rpb24t c2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtTzIgLXBpcGUgLW1hcmNo PXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2Nh bC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJl OjEyMzMwOiBjaGVja2luZyBmb3IgX190aHJlYWQga2V5d29yZCBmb3IgVExTIHZhcmlhYmxlcwpj b25maWd1cmU6MTIzODQ6IGNoZWNraW5nIGZvciBtYWxsb2MuaApjb25maWd1cmU6MTI0MTg6IGNo ZWNraW5nIGZvciBtYWxsb2MvbWFsbG9jLmgKY29uZmlndXJlOjEyNDI4OiBjbGFuZysrIC1FIC1P MiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlz eXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LkMg Pi9kZXYvbnVsbCAyPmNvbmZ0ZXN0Lm91dApjb25maWd1cmU6MTI0MjQ6MTA6IGZhdGFsIGVycm9y OiAnbWFsbG9jL21hbGxvYy5oJyBmaWxlIG5vdCBmb3VuZAojaW5jbHVkZSA8bWFsbG9jL21hbGxv Yy5oPgogICAgICAgICBeCjEgZXJyb3IgZ2VuZXJhdGVkLgpjb25maWd1cmU6IGZhaWxlZCBwcm9n cmFtIHdhczoKI2xpbmUgMTI0MjMgImNvbmZpZ3VyZSIKI2luY2x1ZGUgImNvbmZkZWZzLmgiCiNp bmNsdWRlIDxtYWxsb2MvbWFsbG9jLmg+CmNvbmZpZ3VyZToxMjQ1MjogY2hlY2tpbmcgZm9yIHN5 cy9tYWxsb2MuaApjb25maWd1cmU6MTI0NjI6IGNsYW5nKysgLUUgLU8yIC1waXBlIC1tYXJjaD1w ZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwv aW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyA+L2Rldi9udWxsIDI+Y29u ZnRlc3Qub3V0CmNvbmZpZ3VyZToxMjQ5OTogY2hlY2tpbmcgZm9yIHN0cm5kdXAKY29uZmlndXJl OjEyNTMwOiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10 dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3Ry aWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9u cyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5j bHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwv dXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0 LkMgLWxtICAxPiY1CmNvbmZpZ3VyZToxMjQ5OTogY2hlY2tpbmcgZm9yIHBvc2l4X21lbWFsaWdu CmNvbmZpZ3VyZToxMjUzMDogY2xhbmcrKyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9u cyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRh dGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXJ0dGkgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNy L2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9j YWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJ TiBjb25mdGVzdC5DIC1sbSAgMT4mNQpjb25maWd1cmU6MTI0OTk6IGNoZWNraW5nIGZvciBtZW1h bGlnbgpjb25maWd1cmU6MTI1MzA6IGNsYW5nKysgLW8gY29uZnRlc3QgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1waXBl IC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4Y2Vw dGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMg LWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby1ydHRpIC1m ZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtTzIgLXBp cGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVt L3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNy L2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRP UklHSU4gY29uZnRlc3QuQyAtbG0gIDE+JjUKL3RtcC9jb25mdGVzdC16T29jNDEubzogSW4gZnVu Y3Rpb24gYG1haW4nOgpjb25mdGVzdC5DOigudGV4dC5tYWluKzB4Nyk6IHVuZGVmaW5lZCByZWZl cmVuY2UgdG8gYG1lbWFsaWduJwpjbGFuZysrOiBlcnJvcjogbGlua2VyIGNvbW1hbmQgZmFpbGVk IHdpdGggZXhpdCBjb2RlIDEgKHVzZSAtdiB0byBzZWUgaW52b2NhdGlvbikKY29uZmlndXJlOiBm YWlsZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDEyNTA0ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25m ZGVmcy5oIgovKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3Bl ZnVsbHkgZmV3IHByb3RvdHlwZXMsCiAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIG1l bWFsaWduKCk7IGJlbG93LiAgKi8KI2luY2x1ZGUgPGFzc2VydC5oPgovKiBPdmVycmlkZSBhbnkg Z2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwojaWZkZWYgX19j cGx1c3BsdXMKZXh0ZXJuICJDIgojZW5kaWYKLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWln aHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgogICAgYnVpbHRpbiBhbmQgdGhlbiBp dHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KY2hhciBtZW1hbGln bigpOwoKaW50IG1haW4oKSB7CgovKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9y IGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCiAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVO T1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAogICAgc29tZXRoaW5nIHN0 YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCiNpZiBk ZWZpbmVkIChfX3N0dWJfbWVtYWxpZ24pIHx8IGRlZmluZWQgKF9fc3R1Yl9fX21lbWFsaWduKQpj aG9rZSBtZQojZWxzZQptZW1hbGlnbigpOwojZW5kaWYKCjsgcmV0dXJuIDA7IH0KY29uZmlndXJl OjEyNDk5OiBjaGVja2luZyBmb3IgdmFsbG9jCmNvbmZpZ3VyZToxMjUzMDogY2xhbmcrKyAtbyBj b25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt V25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0 dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1z dGQ9Z251KysweCAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMg LWZuby1leGNlcHRpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16 LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5DIC1sbSAgMT4mNQpjb25maWd1 cmU6MTI1NjA6IGNoZWNraW5nIGZvciBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKY29u ZmlndXJlOjEyNTcyOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQg LW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0 LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAt Zm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25z IC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVt NCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVk ZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuQyAxPiY1CmNvbmZpZ3VyZToxMjU4Nzog Y2hlY2tpbmcgZm9yIF9fYXR0cmlidXRlX18oKG1hbGxvYykpCmNvbmZpZ3VyZToxMjU5OTogY2xh bmcrKyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0 cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt V25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9ucyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0 dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1z dGQ9Z251KysweCAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMg LWZuby1leGNlcHRpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00 IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9p bmNsdWRlIGNvbmZ0ZXN0LkMgMT4mNQpjb25maWd1cmU6MTI2MTQ6IGNoZWNraW5nIGZvciBfX2F0 dHJpYnV0ZV9fKCh3YXJuX3VudXNlZF9yZXN1bHQpKQpjb25maWd1cmU6MTI2MjY6IGNsYW5nKysg LWMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3Qt YWxpYXNpbmcgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtZm5vLWV4Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1m ZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdu dSsrMHggLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8t ZXhjZXB0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25v LWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVk ZSBjb25mdGVzdC5DIDE+JjUKY29uZmlndXJlOjEyNjQxOiBjaGVja2luZyBmb3IgX19hdHRyaWJ1 dGVfXygobm9yZXR1cm4pKQpjb25maWd1cmU6MTI2NTM6IGNsYW5nKysgLWMgLU8yIC1waXBlIC1t YXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLU8yIC1w aXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtZm5vLWV4 Y2VwdGlvbnMgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1ydHRpIC1mZnVuY3Rpb24tc2VjdGlv bnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtc3RkPWdudSsrMHggLWZuby1ydHRp IC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mbm8tZXhjZXB0aW9ucyAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lz dGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5DIDE+ JjUKY29uZmlndXJlOjEyNjc3OiBjaGVja2luZyBmb3IgTENfTUVTU0FHRVMKY29uZmlndXJlOjEy Njg5OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAt Zm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rp b25zIC1mZGF0YS1zZWN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAt TzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1p c3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5j IDE+JjUKY29uZmlndXJlOjEyNzE1OiBjaGVja2luZyBmb3IgbG9jYWxlY29udgpjb25maWd1cmU6 MTI3NDM6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5l PXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVu Y3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRh LXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8t ZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRl IC1wdGhyZWFkICAtTC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdp biAtV2wsLXJwYXRoLFwkJE9SSUdJTiBjb25mdGVzdC5jIC1sbSAgMT4mNQpjb25maWd1cmU6MTI5 Njk6IGNoZWNraW5nIGZvciBuc3ByLWNvbmZpZwpjb25maWd1cmU6MTMwMDQ6IGNoZWNraW5nIGZv ciBOU1BSIC0gdmVyc2lvbiA+PSA0LjkuMwpjb25maWd1cmU6MTMwNzI6IGNsYW5nIC1jIC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25z IC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1JL3Vzci9sb2NhbC9pbmNsdWRl L25zcHIgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29u ZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMzE0ODogY2hlY2tpbmcgZm9yIG5zcy1jb25maWcKY29u ZmlndXJlOjEzMTgzOiBjaGVja2luZyBmb3IgTlNTIC0gdmVyc2lvbiA+PSAzLjE0CmNvbmZpZ3Vy ZToxMzI3MzogY2hlY2tpbmcgZm9yIGpwZWdfZGVzdHJveV9jb21wcmVzcyBpbiAtbGpwZWcKY29u ZmlndXJlOjEzMjkyOiBjbGFuZyAtbyBjb25mdGVzdCAtSS91c3IvbG9jYWwvaW5jbHVkZSAtTzIg LXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2lu ZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9u cyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9p bmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSAtTC91c3IvbG9jYWwvbGliIC1wdGhyZWFkICAt TC91c3IvbG9jYWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRo LFwkJE9SSUdJTiBjb25mdGVzdC5jIC1sanBlZyAgLWxtICAxPiY1CmNvbmZpZ3VyZToxMzMyODog Y2xhbmcgLWMgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAt bXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcg LWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAt ZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2lu Y2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxMzM3NjogY2hlY2tpbmcgZm9yIGd6cmVh ZCBpbiAtbHoKY29uZmlndXJlOjEzMzk1OiBjbGFuZyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0 cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZmZ1bmN0 aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1t dHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAt SS91c3IvbG9jYWwvaW5jbHVkZSAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9j YWwvbGliIC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRlc3QuYyAtbHog IC1sbSAgMT4mNQpjb25maWd1cmU6MTM0MzA6IGNsYW5nIC1jIC1PMiAtcGlwZSAtbWFyY2g9cGVu dGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2Vj dGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBl bnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9s b2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTM0Nzc6IGNoZWNraW5nIGZv ciBCWjJfYnpyZWFkIGluIC1sYnoyCmNvbmZpZ3VyZToxMzQ5NjogY2xhbmcgLW8gY29uZnRlc3Qg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLU8yIC1waXBlIC1tYXJj aD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9j YWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9s aWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNv bmZ0ZXN0LmMgLWxiejIgIC1sbSAgMT4mNQpjb25maWd1cmU6MTM1NDU6IGNoZWNraW5nIGZvciBw bmdfZ2V0X3ZhbGlkIGluIC1scG5nCmNvbmZpZ3VyZToxMzU2NDogY2xhbmcgLW8gY29uZnRlc3Qg LUkvdXNyL2xvY2FsL2luY2x1ZGUgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVu dGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZmdW5jdGlv bi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2Vj dGlvbnMgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwv dXNyL2xvY2FsL2xpYiAtcHRocmVhZCAgLUwvdXNyL2xvY2FsL2xpYiAtTC91c3IvbG9jYWwvbGli IC1XbCwteixvcmlnaW4gLVdsLC1ycGF0aCxcJCRPUklHSU4gY29uZnRlc3QuYyAtbHBuZyAgLWxt ICAxPiY1CmNvbmZpZ3VyZToxMzU4NjogY2hlY2tpbmcgZm9yIHBuZ19nZXRfYWNUTCBpbiAtbHBu Zwpjb25maWd1cmU6MTM2MDU6IGNsYW5nIC1vIGNvbmZ0ZXN0IC1JL3Vzci9sb2NhbC9pbmNsdWRl IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFy Y2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xv Y2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1ML3Vzci9sb2NhbC9saWIgLXB0aHJl YWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2luIC1XbCwt cnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LmMgLWxwbmcgIC1sbSAgMT4mNQpjb25maWd1cmU6MTM2 NTM6IGNsYW5nIC1jIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1 bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFz aW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlv bnMgLWZkYXRhLXNlY3Rpb25zIC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRp dW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2Nh bC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpjb25maWd1cmU6MTM2OTU6IGNoZWNraW5nIGZvciBw a2ctY29uZmlnCmNvbmZpZ3VyZToxMzczOTogY2hlY2tpbmcgZm9yIGh1bnNwZWxsCmNvbmZpZ3Vy ZToxMzc0NjogY2hlY2tpbmcgTU9aX0hVTlNQRUxMX0NGTEFHUwpjb25maWd1cmU6MTM3NTE6IGNo ZWNraW5nIE1PWl9IVU5TUEVMTF9MSUJTCmNvbmZpZ3VyZToxMzg2MzogY2hlY2tpbmcgZm9yIGFw cGxpY2F0aW9uIHRvIGJ1aWxkCmNvbmZpZ3VyZToxMzg4MjogY2hlY2tpbmcgaWYgYXBwLXNwZWNp ZmljIGNvbmZ2YXJzLnNoIGV4aXN0cwpjb25maWd1cmU6MTQyMjk6IGNoZWNraW5nIGZvciBndGsr LTIuMCA+PSAyLjEwLjAgZ3RrKy11bml4LXByaW50LTIuMCBnbGliLTIuMCBnb2JqZWN0LTIuMCBn ZGsteDExLTIuMApjb25maWd1cmU6MTQyMzY6IGNoZWNraW5nIE1PWl9HVEsyX0NGTEFHUwpjb25m aWd1cmU6MTQyNDE6IGNoZWNraW5nIE1PWl9HVEsyX0xJQlMKY29uZmlndXJlOjE0MzQ1OiBjaGVj a2luZyBmb3IgbGlic3RhcnR1cC1ub3RpZmljYXRpb24tMS4wID49IDAuOApjb25maWd1cmU6MTQz NTI6IGNoZWNraW5nIE1PWl9TVEFSVFVQX05PVElGSUNBVElPTl9DRkxBR1MKY29uZmlndXJlOjE0 MzU3OiBjaGVja2luZyBNT1pfU1RBUlRVUF9OT1RJRklDQVRJT05fTElCUwpjb25maWd1cmU6MTQ2 OTA6IGNoZWNraW5nIGZvciBwYW5nbyA+PSAxLjE0LjAgcGFuZ29mdDIgPj0gMS4xNC4wCmNvbmZp Z3VyZToxNDY5NzogY2hlY2tpbmcgTU9aX1BBTkdPX0NGTEFHUwpjb25maWd1cmU6MTQ3MDI6IGNo ZWNraW5nIE1PWl9QQU5HT19MSUJTCmNvbmZpZ3VyZToxNTE1MzogY2hlY2tpbmcgZm9yIGdjb25m LTIuMCA+PSAxLjIuMSBnb2JqZWN0LTIuMCAKY29uZmlndXJlOjE1MTYwOiBjaGVja2luZyBNT1pf R0NPTkZfQ0ZMQUdTCmNvbmZpZ3VyZToxNTE2NTogY2hlY2tpbmcgTU9aX0dDT05GX0xJQlMKY29u ZmlndXJlOjE1MzAzOiBjaGVja2luZyBmb3IgZGJ1cy1nbGliLTEgPj0gMC42MApjb25maWd1cmU6 MTUzMTA6IGNoZWNraW5nIE1PWl9EQlVTX0dMSUJfQ0ZMQUdTCmNvbmZpZ3VyZToxNTMxNTogY2hl Y2tpbmcgTU9aX0RCVVNfR0xJQl9MSUJTCmNvbmZpZ3VyZToxNTk2ODogY2hlY2tpbmcgZm9yIHRh ciBhcmNoaXZlcgpjb25maWd1cmU6MTU5NzQ6IGNoZWNraW5nIGZvciBnbnV0YXIKY29uZmlndXJl OjE1OTc0OiBjaGVja2luZyBmb3IgZ3Rhcgpjb25maWd1cmU6MTYwMTE6IGNoZWNraW5nIGZvciB3 Z2V0CmNvbmZpZ3VyZToxNjAxNzogY2hlY2tpbmcgZm9yIHdnZXQKY29uZmlndXJlOjE2Mjg5OiBj aGVja2luZyBmb3Igc3FsaXRlMyA+PSAzLjcuMQpjb25maWd1cmU6MTYyOTY6IGNoZWNraW5nIFNR TElURV9DRkxBR1MKY29uZmlndXJlOjE2MzAxOiBjaGVja2luZyBTUUxJVEVfTElCUwpjb25maWd1 cmU6MTY1OTQ6IGNoZWNraW5nIGZvciB2YWxpZCBvcHRpbWl6YXRpb24gZmxhZ3MKY29uZmlndXJl OjE2NjA1OiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVt NCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNl Y3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9u cyAtTzIgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJv ciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29u ZnRlc3QuYyAxPiY1CmNvbmZpZ3VyZToxNzMyNDogY2hlY2tpbmcgZm9yIF9fY3hhX2RlbWFuZ2xl CmNvbmZpZ3VyZToxNzM1NTogY2xhbmcrKyAtbyBjb25mdGVzdCAtTzIgLXBpcGUgLW1hcmNoPXBl bnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtTzIgLXBpcGUgLW1h cmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1mbm8tZXhjZXB0aW9u cyAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXJ0dGkgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRh dGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1zdGQ9Z251KysweCAtZm5vLXJ0dGkgLWZmdW5j dGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZuby1leGNlcHRpb25zIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0vdXNy L2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1wdGhyZWFkICAtTC91c3IvbG9j YWwvbGliIC1ML3Vzci9sb2NhbC9saWIgLVdsLC16LG9yaWdpbiAtV2wsLXJwYXRoLFwkJE9SSUdJ TiBjb25mdGVzdC5DIC1sbSAgMT4mNQpjb25maWd1cmU6MTc0MDk6IGNoZWNraW5nIGZvciB1bndp bmQuaApjb25maWd1cmU6MTc0MTk6IGNsYW5nLWNwcCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00 IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9yIC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRl ICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25mdGVzdC5jID4vZGV2L251bGwgMj5jb25mdGVzdC5v dXQKY29uZmlndXJlOjE3NDE1OjEwOiBmYXRhbCBlcnJvcjogJ3Vud2luZC5oJyBmaWxlIG5vdCBm b3VuZAojaW5jbHVkZSA8dW53aW5kLmg+CiAgICAgICAgIF4KMSBlcnJvciBnZW5lcmF0ZWQuCmNv bmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAxNzQxNCAiY29uZmlndXJlIgojaW5j bHVkZSAiY29uZmRlZnMuaCIKI2luY2x1ZGUgPHVud2luZC5oPgpjb25maWd1cmU6MTc2MTA6IGNo ZWNraW5nIGZvciBnY2MgLXBpcGUgc3VwcG9ydApkdW1teS1oZWxsby5jOjI6Mzk6IHdhcm5pbmc6 IGltcGxpY2l0bHkgZGVjbGFyaW5nIEMgbGlicmFyeSBmdW5jdGlvbiAnZXhpdCcgd2l0aCB0eXBl ICd2b2lkIChpbnQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSknCmludCBtYWluKCkgeyBwcmlu dGYoIkhlbGxvIFdvcmxkXG4iKTsgZXhpdCgwKTsgfQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4KZHVtbXktaGVsbG8uYzoyOjM5OiBub3RlOiBwbGVhc2UgaW5jbHVkZSB0 aGUgaGVhZGVyIDxzdGRsaWIuaD4gb3IgZXhwbGljaXRseSBwcm92aWRlIGEgZGVjbGFyYXRpb24g Zm9yICdleGl0JwoxIHdhcm5pbmcgZ2VuZXJhdGVkLgpjb25maWd1cmU6MTc2MzI6IGNsYW5nIC1j IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFs aWFzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNl Y3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1waXBlIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0v dXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpj b25maWd1cmU6MTc2NjI6IGNoZWNraW5nIHdoZXRoZXIgQyBjb21waWxlciBzdXBwb3J0cyAtZnBy b2ZpbGUtZ2VuZXJhdGUKY29uZmlndXJlOjE3NjcxOiBjbGFuZyAtYyAtTzIgLXBpcGUgLW1hcmNo PXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLXN0cmlj dC1hbGlhc2luZyAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZmZ1bmN0aW9u LXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtcGlwZSAtZnByb2ZpbGUtZ2VuZXJhdGUgLWZwcm9m aWxlLWNvcnJlY3Rpb24gLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQg LVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2lu Y2x1ZGUgY29uZnRlc3QuYyAxPiY1CmNsYW5nOiB3YXJuaW5nOiBhcmd1bWVudCB1bnVzZWQgZHVy aW5nIGNvbXBpbGF0aW9uOiAnLWZwcm9maWxlLWdlbmVyYXRlJwpjbGFuZzogd2FybmluZzogYXJn dW1lbnQgdW51c2VkIGR1cmluZyBjb21waWxhdGlvbjogJy1mcHJvZmlsZS1jb3JyZWN0aW9uJwpj b25maWd1cmU6MTc3Njk6IGNoZWNraW5nIGZvciBjb3JyZWN0IHRlbXBvcmFyeSBvYmplY3QgZGVz dHJ1Y3Rpb24gb3JkZXIKY29uZmlndXJlOjE3Nzk3OiBjbGFuZysrIC1vIGNvbmZ0ZXN0IC1PMiAt cGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1PMiAtcGlwZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcg LWZuby1leGNlcHRpb25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9u LXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1m bm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlv bnMgLXBpcGUgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1l cnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUg LXB0aHJlYWQgIC1ML3Vzci9sb2NhbC9saWIgLUwvdXNyL2xvY2FsL2xpYiAtV2wsLXosb3JpZ2lu IC1XbCwtcnBhdGgsXCQkT1JJR0lOIGNvbmZ0ZXN0LkMgLWxtICAxPiY1CmNvbmZpZ3VyZToxNzgx ODogY2hlY2tpbmcgZm9yIGNvcnJlY3Qgb3ZlcmxvYWQgcmVzb2x1dGlvbiB3aXRoIGNvbnN0IGFu ZCB0ZW1wbGF0ZXMKY29uZmlndXJlOjE3ODUzOiBjbGFuZysrIC1jIC1PMiAtcGlwZSAtbWFyY2g9 cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1PMiAtcGlwZSAt bWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWZuby1leGNlcHRp b25zIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tcnR0aSAtZmZ1bmN0aW9uLXNlY3Rpb25zIC1m ZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXN0ZD1nbnUrKzB4IC1mbm8tcnR0aSAtZmZ1 bmN0aW9uLXNlY3Rpb25zIC1mZGF0YS1zZWN0aW9ucyAtZm5vLWV4Y2VwdGlvbnMgLXBpcGUgIC1X YWxsIC1XcG9pbnRlci1hcml0aCAtV292ZXJsb2FkZWQtdmlydHVhbCAtV2Vycm9yPXJldHVybi10 eXBlIC1XdHlwZS1saW1pdHMgLVdlbXB0eS1ib2R5IC1XZXJyb3I9Y29udmVyc2lvbi1udWxsIC1X bm8tY3Rvci1kdG9yLXByaXZhY3kgLVduby1vdmVybGVuZ3RoLXN0cmluZ3MgLVduby1pbnZhbGlk LW9mZnNldG9mIC1Xbm8tdmFyaWFkaWMtbWFjcm9zIC1Xbm8tYysrMHgtZXh0ZW5zaW9ucyAtV25v LWV4dGVuZGVkLW9mZnNldG9mIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiAtV25vLXJldHVy bi10eXBlLWMtbGlua2FnZSAtV25vLW1pc21hdGNoZWQtdGFncyAtV25vLXVua25vd24td2Fybmlu Zy1vcHRpb24gLVduby1yZXR1cm4tdHlwZS1jLWxpbmthZ2UgLVduby1taXNtYXRjaGVkLXRhZ3Mg LU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAt aXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3Qu QyAxPiY1CmNvbmZpZ3VyZToxODAyNjogY2hlY2tpbmcgZm9yIGdsaWItMi4wID49IDEuMy43IGdv YmplY3QtMi4wCmNvbmZpZ3VyZToxODAzMzogY2hlY2tpbmcgR0xJQl9DRkxBR1MKY29uZmlndXJl OjE4MDM4OiBjaGVja2luZyBHTElCX0xJQlMKY29uZmlndXJlOjE4MDk5OiBjaGVja2luZyBmb3Ig c3RkaW50LmgKY29uZmlndXJlOjE4MTA5OiBjbGFuZy1jcHAgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5j bHVkZSAgLUkvdXNyL2xvY2FsL2luY2x1ZGUgY29uZnRlc3QuYyA+L2Rldi9udWxsIDI+Y29uZnRl c3Qub3V0CmNvbmZpZ3VyZToxODA5OTogY2hlY2tpbmcgZm9yIGludHR5cGVzLmgKY29uZmlndXJl OjE4MTA5OiBjbGFuZy1jcHAgLU8yIC1waXBlIC1tYXJjaD1wZW50aXVtNCAtbXR1bmU9cGVudGl1 bTQgLVduby1lcnJvciAtdyAtaXN5c3RlbS91c3IvbG9jYWwvaW5jbHVkZSAgLUkvdXNyL2xvY2Fs L2luY2x1ZGUgY29uZnRlc3QuYyA+L2Rldi9udWxsIDI+Y29uZnRlc3Qub3V0CmNvbmZpZ3VyZTox ODA5OTogY2hlY2tpbmcgZm9yIHN5cy9pbnRfdHlwZXMuaApjb25maWd1cmU6MTgxMDk6IGNsYW5n LWNwcCAtTzIgLXBpcGUgLW1hcmNoPXBlbnRpdW00IC1tdHVuZT1wZW50aXVtNCAtV25vLWVycm9y IC13IC1pc3lzdGVtL3Vzci9sb2NhbC9pbmNsdWRlICAtSS91c3IvbG9jYWwvaW5jbHVkZSBjb25m dGVzdC5jID4vZGV2L251bGwgMj5jb25mdGVzdC5vdXQKY29uZmlndXJlOjE4MTA1OjEwOiBmYXRh bCBlcnJvcjogJ3N5cy9pbnRfdHlwZXMuaCcgZmlsZSBub3QgZm91bmQKI2luY2x1ZGUgPHN5cy9p bnRfdHlwZXMuaD4KICAgICAgICAgXgoxIGVycm9yIGdlbmVyYXRlZC4KY29uZmlndXJlOiBmYWls ZWQgcHJvZ3JhbSB3YXM6CiNsaW5lIDE4MTA0ICJjb25maWd1cmUiCiNpbmNsdWRlICJjb25mZGVm cy5oIgojaW5jbHVkZSA8c3lzL2ludF90eXBlcy5oPgpjb25maWd1cmU6MTgxOTk6IGNoZWNraW5n IGZvciBjYWlybyA+PSAxLjEwIHBpeG1hbi0xIGZyZWV0eXBlMiBmb250Y29uZmlnCmNvbmZpZ3Vy ZToxODIwNjogY2hlY2tpbmcgQ0FJUk9fQ0ZMQUdTCmNvbmZpZ3VyZToxODIxMTogY2hlY2tpbmcg Q0FJUk9fTElCUwpjb25maWd1cmU6MTgyOTI6IGNoZWNraW5nIGZvciBjYWlyby14bGliLXhyZW5k ZXIgPj0gMS4xMApjb25maWd1cmU6MTgyOTk6IGNoZWNraW5nIENBSVJPX1hSRU5ERVJfQ0ZMQUdT CmNvbmZpZ3VyZToxODMwNDogY2hlY2tpbmcgQ0FJUk9fWFJFTkRFUl9MSUJTCmNvbmZpZ3VyZTox ODkxMjogY2xhbmcgLWMgLVdhbGwgLVdwb2ludGVyLWFyaXRoIC1XZGVjbGFyYXRpb24tYWZ0ZXIt c3RhdGVtZW50IC1XZXJyb3I9cmV0dXJuLXR5cGUgLVd0eXBlLWxpbWl0cyAtV2VtcHR5LWJvZHkg LVduby11bnVzZWQgLVduby1vdmVybGVuZ3RoLXN0cmluZ3MgLU8yIC1waXBlIC1tYXJjaD1wZW50 aXVtNCAtbXR1bmU9cGVudGl1bTQgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1zdHJpY3QtYWxp YXNpbmcgLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0 aW9ucyAtZmRhdGEtc2VjdGlvbnMgLXBpcGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1PMiAtcGlw ZSAtbWFyY2g9cGVudGl1bTQgLW10dW5lPXBlbnRpdW00IC1Xbm8tZXJyb3IgLXcgLWlzeXN0ZW0v dXNyL2xvY2FsL2luY2x1ZGUgIC1JL3Vzci9sb2NhbC9pbmNsdWRlIGNvbmZ0ZXN0LmMgMT4mNQpT dGFjayBkdW1wOgowLglQcm9ncmFtIGFyZ3VtZW50czogL3Vzci9iaW4vY2xhbmcgLWNjMSAtdHJp cGxlIGkzODYtdW5rbm93bi1mcmVlYnNkOS4wIC1lbWl0LW9iaiAtZGlzYWJsZS1mcmVlIC1tYWlu LWZpbGUtbmFtZSBjb25mdGVzdC5jIC1tcmVsb2NhdGlvbi1tb2RlbCBzdGF0aWMgLW1kaXNhYmxl LWZwLWVsaW0gLXJlbGF4ZWQtYWxpYXNpbmcgLW1hc20tdmVyYm9zZSAtbWNvbnN0cnVjdG9yLWFs aWFzZXMgLXRhcmdldC1jcHUgcGVudGl1bTQgLW1vbWl0LWxlYWYtZnJhbWUtcG9pbnRlciAtZmZ1 bmN0aW9uLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIC1mZGF0 YS1zZWN0aW9ucyAtY292ZXJhZ2UtZmlsZSBjb25mdGVzdC5vIC1yZXNvdXJjZS1kaXIgL3Vzci9i aW4vLi4vbGliL2NsYW5nLzMuMCAtaXN5c3RlbSAvdXNyL2xvY2FsL2luY2x1ZGUgLUkgL3Vzci9s b2NhbC9pbmNsdWRlIC1JIC91c3IvbG9jYWwvaW5jbHVkZSAtZm1vZHVsZS1jYWNoZS1wYXRoIC90 bXAvY2xhbmctbW9kdWxlLWNhY2hlIC1PMiAtV2FsbCAtV3BvaW50ZXItYXJpdGggLVdkZWNsYXJh dGlvbi1hZnRlci1zdGF0ZW1lbnQgLVdlcnJvcj1yZXR1cm4tdHlwZSAtV3R5cGUtbGltaXRzIC1X ZW1wdHktYm9keSAtV25vLXVudXNlZCAtV25vLW92ZXJsZW5ndGgtc3RyaW5ncyAtV25vLWVycm9y IC13IC1mZXJyb3ItbGltaXQgMTkgLWZtZXNzYWdlLWxlbmd0aCAwIC1mZ251LXJ1bnRpbWUgLWZv YmpjLXJ1bnRpbWUtaGFzLWFyYyAtZm9iamMtcnVudGltZS1oYXMtd2VhayAtZm9iamMtZnJhZ2ls ZS1hYmkgLWZkaWFnbm9zdGljcy1zaG93LW9wdGlvbiAtbyBjb25mdGVzdC5vIC14IGMgY29uZnRl c3QuYyAKMS4JPGVvZj4gcGFyc2VyIGF0IGVuZCBvZiBmaWxlCjIuCWNvbmZpZ3VyZToxODkwMTo1 OiBMTFZNIElSIGdlbmVyYXRpb24gb2YgZGVjbGFyYXRpb24gJ21haW4nCjMuCWNvbmZpZ3VyZTox ODkwMTo1OiBHZW5lcmF0aW5nIGNvZGUgZm9yIGRlY2xhcmF0aW9uICdtYWluJwo0Lgljb25maWd1 cmU6MTg5MDE6MTI6IExMVk0gSVIgZ2VuZXJhdGlvbiBvZiBjb21wb3VuZCBzdGF0ZW1lbnQgKCd7 fScpCjUuCWNvbmZpZ3VyZToxODkwNDo0OTogTExWTSBJUiBnZW5lcmF0aW9uIG9mIGNvbXBvdW5k IHN0YXRlbWVudCAoJ3t9JykKY2xhbmc6IGVycm9yOiB1bmFibGUgdG8gZXhlY3V0ZSBjb21tYW5k OiBJbGxlZ2FsIGluc3RydWN0aW9uOiA0IChjb3JlIGR1bXBlZCkKY2xhbmc6IGVycm9yOiBjbGFu ZyBmcm9udGVuZCBjb21tYW5kIGZhaWxlZCBkdWUgdG8gc2lnbmFsIDIgKHVzZSAtdiB0byBzZWUg aW52b2NhdGlvbikKY2xhbmc6IG5vdGU6IGRpYWdub3N0aWMgbXNnOiBQbGVhc2Ugc3VibWl0IGEg YnVnIHJlcG9ydCB0byBodHRwOi8vbGx2bS5vcmcvYnVncy8gYW5kIGluY2x1ZGUgY29tbWFuZCBs aW5lIGFyZ3VtZW50cyBhbmQgYWxsIGRpYWdub3N0aWMgaW5mb3JtYXRpb24uCmNsYW5nOiBub3Rl OiBkaWFnbm9zdGljIG1zZzogUHJlcHJvY2Vzc2VkIHNvdXJjZShzKSBhcmUgbG9jYXRlZCBhdDoK Y2xhbmc6IG5vdGU6IGRpYWdub3N0aWMgbXNnOiAvdG1wL2NvbmZ0ZXN0LTNIODB1Wi5pCmNvbmZp Z3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOgojbGluZSAxODg5NCAiY29uZmlndXJlIgojaW5jbHVk ZSAiY29uZmRlZnMuaCIKCiAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+CiAgICAgICAgI2luY2x1 ZGUgPHN0ZGxpYi5oPgogICAgICAgICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogICAgICAgICNpbmNs dWRlIDxYMTEvSW50cmluc2ljLmg+CiAgICAKaW50IG1haW4oKSB7CgogICAgICAgIERpc3BsYXkg KmRweSA9IDA7CiAgICAgICAgaWYgKChkcHkgPSBYT3BlbkRpc3BsYXkoTlVMTCkpID09IE5VTEwp IHsKICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICI6IGNhbid0IG9wZW4gJXNcbiIsIFhEaXNw bGF5TmFtZShOVUxMKSk7CiAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgfQogICAgCjsgcmV0 dXJuIDA7IH0K --20cf30334f4b063c6704d7bae9c9-- From owner-freebsd-gecko@FreeBSD.ORG Tue Mar 12 19:27:13 2013 Return-Path: Delivered-To: gecko@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 4175152C; Tue, 12 Mar 2013 19:27:13 +0000 (UTC) (envelope-from jbeich@tormail.org) Received: from outgoing.tormail.org (outgoing.tormail.org [82.221.96.22]) by mx1.freebsd.org (Postfix) with ESMTP id 0230DA6C; Tue, 12 Mar 2013 19:27:12 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=internal.tormail.org) by outgoing.tormail.org with esmtp (Exim 4.72) (envelope-from ) id 1UFUql-0007Qy-35; Tue, 12 Mar 2013 22:27:03 +0300 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tormail.org; s=tm; h=Message-Id:X-TorMail-User:Content-Type:MIME-Version:References:Date:Subject:Cc:To:From; bh=ax4MoyisRWIHoB9JvnGxUBdWF95CZYqXHVWrcbXUB5w=; b=J2MiW1uVc0ktFraOH4hTHVHErKgFPJIitaCRtqvYkyMn6Q323d1pb5s+QoKW1gU+05kHl77jKLL1Pk+Xi0UdAeSfInKwFBRISwX6c5qFFBJ4C/cugkxWyzr3o9s1/ZYLp0norXsX8okEby6Rzar3Gn/1F5Iy3A0JOtU41yqmS5s=; Received: from jbeich by internal.tormail.org with local (Exim 4.63) (envelope-from ) id 1UFUoT-0002Ey-N1; Tue, 12 Mar 2013 19:24:48 +0000 From: Jan Beich To: awarecons Subject: Re: www/firefox & seamonkey ISSUES config errors Date: Tue, 12 Mar 2013 09:24:51 -1000 References: MIME-Version: 1.0 Content-Type: text/plain X-TorMail-User: jbeich Message-Id: <1UFUoT-0002Ey-N1@internal.tormail.org> Cc: gecko@FreeBSD.org, ports-bugs@freebsd.org X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 12 Mar 2013 19:27:13 -0000 awarecons writes: > configure:23844: checking size of int * > configure:23863: clang -o conftest -O2 -pipe -march=pentium4 -mtune=pentium4 -fno-strict-aliasing -fno-strict-aliasing -ffunction-sections -fdata-sections -fno-tree-vrp -Qunused-arguments -O2 -pipe -march=pentium4 -mtune=pentium4 -Wno-error -w -isystem/usr/local/include -I/usr/local/include -pthread -L/usr/local/lib -L/usr/local/lib -Wl,-z,origin -Wl,-rpath,\$$ORIGIN -Wl,-z,noexecstack conftest.c 1>&5 > Stack dump: > 0. Program arguments: /usr/bin/clang -cc1 -triple i386-unknown-freebsd9.0 -emit-obj -disable-free -main-file-name conftest.c -mrelocation-model static -mdisable-fp-elim -relaxed-aliasing -masm-verbose -mconstructor-aliases -target-cpu pentium4 -momit-leaf-frame-pointer -ffunction-sections -fdata-sections -resource-dir /usr/bin/../lib/clang/3.0 -isystem /usr/local/include -I /usr/local/include -fmodule-cache-path /tmp/clang-module-cache -O2 -Wno-error -w -ferror-limit 19 -fmessage-length 0 -pthread -fgnu-runtime -fobjc-runtime-has-arc -fobjc-runtime-has-weak -fobjc-fragile-abi -fdiagnostics-show-option -o /tmp/conftest-77qaJi.o -x c conftest.c > 1. parser at end of file > 2. configure:23854:1: LLVM IR generation of declaration 'main' > 3. configure:23854:1: Generating code for declaration 'main' > 4. configure:23855:1: LLVM IR generation of compound statement ('{}') > clang: error: unable to execute command: Illegal instruction: 4 (core dumped) > clang: error: clang frontend command failed due to signal 2 (use -v to see invocation) > clang: note: diagnostic msg: Please submit a bug report to http://llvm.org/bugs/ and include command line arguments and all diagnostic information. > clang: note: diagnostic msg: Preprocessed source(s) are located at: > clang: note: diagnostic msg: /tmp/conftest-PDiTwg.i > configure: failed program was: > #line 23852 "configure" > #include "confdefs.h" > #include > main() > { > FILE *f=fopen("conftestval", "w"); > if (!f) exit(1); > fprintf(f, "%d\n", sizeof(int *)); > exit(0); > } Try to remove -march/-mtune from CFLAGS. This may be a bug in clang 3.0 generating instructions your CPU doesn't support. From owner-freebsd-gecko@FreeBSD.ORG Wed Mar 13 19:18:03 2013 Return-Path: Delivered-To: gecko@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id EEC4651E; Wed, 13 Mar 2013 19:18:03 +0000 (UTC) (envelope-from crodr001@gmail.com) Received: from mail-lb0-f174.google.com (mail-lb0-f174.google.com [209.85.217.174]) by mx1.freebsd.org (Postfix) with ESMTP id 32784101; Wed, 13 Mar 2013 19:18:02 +0000 (UTC) Received: by mail-lb0-f174.google.com with SMTP id l12so1221784lbo.5 for ; Wed, 13 Mar 2013 12:18:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:x-received:sender:date:x-google-sender-auth:message-id :subject:from:to:content-type; bh=Kl4N2wgTJ3lTVOlptr4hm22WcGjv0N7r74/i1/RnFNg=; b=boVU5CfikPFkgmBUDKLbSQpo5PMKpbw89zxSvJUMwxvZaBT9tJrBnrdPCKl9WiVFDO 9L9zOqJIQu3xFU+Y3e/vnGJCuFKByBrqeoU6KFSH/RP+M76IRQLkxKMl35441l4lb5F7 ywsz3inzrpV7UeJ6tzmNw4HsDsFbaXckLSKswrPCbgQ86KG3mtr4EUxbNVyEnElt7Omi JA2VM612ZI3q/espFVMG2qNrY9PFt6XRDkIeg+1b+HT16VeL6+1MBUKx2DKJ7uoO3kEt u4l8zHqCRH4lXQ1TmuaVYKzi5PjqHTmO8meiYvAwhC8kznXg9yBLehIGYrTcoj0G/4wA XaHA== MIME-Version: 1.0 X-Received: by 10.152.122.100 with SMTP id lr4mr3241945lab.28.1363202281968; Wed, 13 Mar 2013 12:18:01 -0700 (PDT) Sender: crodr001@gmail.com Received: by 10.112.85.198 with HTTP; Wed, 13 Mar 2013 12:18:01 -0700 (PDT) Date: Wed, 13 Mar 2013 12:18:01 -0700 X-Google-Sender-Auth: ipOrw2ZDWVQToGLzyW4NrDX0JFs Message-ID: Subject: firefox 19.0,1 crashing under FreeBSD 7 From: Craig Rodrigues To: ports@freebsd.org, gecko@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Mar 2013 19:18:04 -0000 Hi, I have: -> system running FreeBSD 7-STABLE -> ports tree updated and rebuilt by me on this box Everything works fine, but when I try to run firefox 19.0,1 it crashes randomly. On the console, I am seeing this error message: [xcb] Unknown request in queue while dequeuing [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called [xcb] Aborting, sorry about that. Assertion failed: (!xcb_xlib_unknown_req_in_deq), function dequeue_pending_request, file xcb_io.c, line 178. Multiple segmentation faults occurred; can't display error dialog Anyone have an idea what the problem might be? I know that FreeBSD 7 is not supported by the ports team, but if there is a simple fix that I can do on my system, that would be great, since everything else works fine on this box. -- Craig From owner-freebsd-gecko@FreeBSD.ORG Wed Mar 13 22:48:18 2013 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 86FA44D2 for ; Wed, 13 Mar 2013 22:48:18 +0000 (UTC) (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: from trillian.chruetertee.ch (trillian.chruetertee.ch [217.150.245.56]) by mx1.freebsd.org (Postfix) with ESMTP id DDB3976A for ; Wed, 13 Mar 2013 22:48:17 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian [217.150.245.56]) by trillian.chruetertee.ch (8.14.4/8.14.3) with ESMTP id r2DMmFHP097380 for ; Wed, 13 Mar 2013 22:48:15 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: (from www@localhost) by trillian.chruetertee.ch (8.14.4/8.14.3/Submit) id r2DMmA8h096131 for freebsd-gecko@freebsd.org; Wed, 13 Mar 2013 22:48:10 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Date: Wed, 13 Mar 2013 22:48:10 GMT Message-Id: <201303132248.r2DMmA8h096131@trillian.chruetertee.ch> X-Authentication-Warning: trillian.chruetertee.ch: www set sender to svn-freebsd-gecko@chruetertee.ch using -f From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1212 - in trunk: mail/thunderbird/files www/firefox-esr/files www/firefox-nightly/files www/firefox/files www/seamonkey/files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: freebsd-gecko@freebsd.org List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Mar 2013 22:48:18 -0000 Author: jbeich Date: Wed Mar 13 22:48:10 2013 New Revision: 1212 Log: let configure detect res_ninit() Added: trunk/mail/thunderbird/files/patch-bug810716 trunk/www/firefox-esr/files/patch-bug810716 trunk/www/firefox-nightly/files/patch-bug810716 trunk/www/firefox/files/patch-bug810716 trunk/www/seamonkey/files/patch-bug810716 Added: trunk/mail/thunderbird/files/patch-bug810716 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/mail/thunderbird/files/patch-bug810716 Wed Mar 13 22:48:10 2013 (r1212) @@ -0,0 +1,95 @@ +diff --git configure.in configure.in +index 2084be9..eb6eeb2 100644 +--- configure.in ++++ configure.in +@@ -3369,14 +3369,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + +diff --git configure.in configure.in +index 2084be9..eb6eeb2 100644 +--- mozilla/configure.in ++++ mozilla/configure.in +@@ -3369,14 +3369,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + +diff --git extensions/auth/nsAuthGSSAPI.cpp extensions/auth/nsAuthGSSAPI.cpp +index e828beb..6444246 100644 +--- mozilla/extensions/auth/nsAuthGSSAPI.cpp ++++ mozilla/extensions/auth/nsAuthGSSAPI.cpp +@@ -39,6 +39,9 @@ typedef KLStatus (*KLCacheHasValidTickets_type)( + #endif + + #if defined(HAVE_RES_NINIT) ++#include ++#include ++#include + #include + #endif + +diff --git js/src/configure.in js/src/configure.in +index e25f569..b9722f9 100644 +--- mozilla/js/src/configure.in ++++ mozilla/js/src/configure.in +@@ -2797,14 +2797,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + Added: trunk/www/firefox-esr/files/patch-bug810716 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox-esr/files/patch-bug810716 Wed Mar 13 22:48:10 2013 (r1212) @@ -0,0 +1,68 @@ +diff --git configure.in configure.in +index 2084be9..eb6eeb2 100644 +--- configure.in ++++ configure.in +@@ -3369,14 +3369,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + +diff --git extensions/auth/nsAuthGSSAPI.cpp extensions/auth/nsAuthGSSAPI.cpp +index e828beb..6444246 100644 +--- extensions/auth/nsAuthGSSAPI.cpp ++++ extensions/auth/nsAuthGSSAPI.cpp +@@ -39,6 +39,9 @@ typedef KLStatus (*KLCacheHasValidTickets_type)( + #endif + + #if defined(HAVE_RES_NINIT) ++#include ++#include ++#include + #include + #endif + +diff --git js/src/configure.in js/src/configure.in +index e25f569..b9722f9 100644 +--- js/src/configure.in ++++ js/src/configure.in +@@ -2797,14 +2797,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + Added: trunk/www/firefox-nightly/files/patch-bug810716 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox-nightly/files/patch-bug810716 Wed Mar 13 22:48:10 2013 (r1212) @@ -0,0 +1,68 @@ +diff --git configure.in configure.in +index 2084be9..eb6eeb2 100644 +--- configure.in ++++ configure.in +@@ -3369,14 +3369,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + +diff --git extensions/auth/nsAuthGSSAPI.cpp extensions/auth/nsAuthGSSAPI.cpp +index e828beb..6444246 100644 +--- extensions/auth/nsAuthGSSAPI.cpp ++++ extensions/auth/nsAuthGSSAPI.cpp +@@ -39,6 +39,9 @@ typedef KLStatus (*KLCacheHasValidTickets_type)( + #endif + + #if defined(HAVE_RES_NINIT) ++#include ++#include ++#include + #include + #endif + +diff --git js/src/configure.in js/src/configure.in +index e25f569..b9722f9 100644 +--- js/src/configure.in ++++ js/src/configure.in +@@ -2797,14 +2797,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + Added: trunk/www/firefox/files/patch-bug810716 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox/files/patch-bug810716 Wed Mar 13 22:48:10 2013 (r1212) @@ -0,0 +1,68 @@ +diff --git configure.in configure.in +index 2084be9..eb6eeb2 100644 +--- configure.in ++++ configure.in +@@ -3369,14 +3369,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + +diff --git extensions/auth/nsAuthGSSAPI.cpp extensions/auth/nsAuthGSSAPI.cpp +index e828beb..6444246 100644 +--- extensions/auth/nsAuthGSSAPI.cpp ++++ extensions/auth/nsAuthGSSAPI.cpp +@@ -39,6 +39,9 @@ typedef KLStatus (*KLCacheHasValidTickets_type)( + #endif + + #if defined(HAVE_RES_NINIT) ++#include ++#include ++#include + #include + #endif + +diff --git js/src/configure.in js/src/configure.in +index e25f569..b9722f9 100644 +--- js/src/configure.in ++++ js/src/configure.in +@@ -2797,14 +2797,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + Added: trunk/www/seamonkey/files/patch-bug810716 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/seamonkey/files/patch-bug810716 Wed Mar 13 22:48:10 2013 (r1212) @@ -0,0 +1,95 @@ +diff --git configure.in configure.in +index 2084be9..eb6eeb2 100644 +--- configure.in ++++ configure.in +@@ -3369,14 +3369,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + +diff --git configure.in configure.in +index 2084be9..eb6eeb2 100644 +--- mozilla/configure.in ++++ mozilla/configure.in +@@ -3369,14 +3369,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + +diff --git extensions/auth/nsAuthGSSAPI.cpp extensions/auth/nsAuthGSSAPI.cpp +index e828beb..6444246 100644 +--- mozilla/extensions/auth/nsAuthGSSAPI.cpp ++++ mozilla/extensions/auth/nsAuthGSSAPI.cpp +@@ -39,6 +39,9 @@ typedef KLStatus (*KLCacheHasValidTickets_type)( + #endif + + #if defined(HAVE_RES_NINIT) ++#include ++#include ++#include + #include + #endif + +diff --git js/src/configure.in js/src/configure.in +index e25f569..b9722f9 100644 +--- mozilla/js/src/configure.in ++++ mozilla/js/src/configure.in +@@ -2797,14 +2797,19 @@ fi + AC_CACHE_CHECK( + [for res_ninit()], + ac_cv_func_res_ninit, +- [AC_TRY_LINK([ ++ [AC_TRY_RUN([ + #ifdef linux + #define _BSD_SOURCE 1 + #endif ++ #include ++ #include ++ #include + #include +- ], +- [int foo = res_ninit(&_res);], ++ int main(int argc, char **argv){ ++ int foo = res_ninit(&_res); ++ }], + [ac_cv_func_res_ninit=yes], ++ [ac_cv_func_res_ninit=no], + [ac_cv_func_res_ninit=no]) + ]) + From owner-freebsd-gecko@FreeBSD.ORG Wed Mar 13 22:48:28 2013 Return-Path: Delivered-To: freebsd-gecko@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 207EB4E7 for ; Wed, 13 Mar 2013 22:48:28 +0000 (UTC) (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: from trillian.chruetertee.ch (trillian.chruetertee.ch [217.150.245.56]) by mx1.freebsd.org (Postfix) with ESMTP id BB2B7773 for ; Wed, 13 Mar 2013 22:48:27 +0000 (UTC) Received: from trillian.chruetertee.ch (trillian [217.150.245.56]) by trillian.chruetertee.ch (8.14.4/8.14.3) with ESMTP id r2DMmQqW099037 for ; Wed, 13 Mar 2013 22:48:26 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Received: (from www@localhost) by trillian.chruetertee.ch (8.14.4/8.14.3/Submit) id r2DMmLDZ098024 for freebsd-gecko@freebsd.org; Wed, 13 Mar 2013 22:48:21 GMT (envelope-from svn-freebsd-gecko@chruetertee.ch) Date: Wed, 13 Mar 2013 22:48:21 GMT Message-Id: <201303132248.r2DMmLDZ098024@trillian.chruetertee.ch> X-Authentication-Warning: trillian.chruetertee.ch: www set sender to svn-freebsd-gecko@chruetertee.ch using -f From: svn-freebsd-gecko@chruetertee.ch To: freebsd-gecko@freebsd.org Subject: [SVN-Commit] r1213 - in trunk: Mk www/firefox-nightly/files www/firefox/files www/seamonkey/files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: freebsd-gecko@freebsd.org List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Mar 2013 22:48:28 -0000 Author: jbeich Date: Wed Mar 13 22:48:21 2013 New Revision: 1213 Log: if we ever have NetworkManager pick up geolocation from it NeckoWifi depends on a subset of http://projects.gnome.org/NetworkManager/developers/api/07/spec-07.html Added: trunk/www/firefox-nightly/files/patch-bug803480 trunk/www/firefox/files/patch-bug803480 trunk/www/seamonkey/files/patch-bug803480 Modified: trunk/Mk/bsd.gecko.mk Modified: trunk/Mk/bsd.gecko.mk ============================================================================== --- trunk/Mk/bsd.gecko.mk Wed Mar 13 22:48:10 2013 (r1212) +++ trunk/Mk/bsd.gecko.mk Wed Mar 13 22:48:21 2013 (r1213) @@ -671,7 +671,6 @@ --disable-gtktest \ --disable-freetypetest \ --disable-installer \ - --disable-necko-wifi \ --disable-updater \ --disable-pedantic @@ -679,6 +678,10 @@ LIBS+= -Wl,--as-needed,-lcxxrt,--no-as-needed .endif +.if !exists(${FILESDIR}/patch-bug803480) || ! ${PORT_OPTIONS:MDBUS} +MOZ_OPTIONS+= --disable-necko-wifi +.endif + .if ${MOZ_TOOLKIT:Mcairo-qt} # don't use - transparent backgrounds (bug 521582), USE_MOZILLA+= -cairo # ports/169343 Added: trunk/www/firefox-nightly/files/patch-bug803480 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox-nightly/files/patch-bug803480 Wed Mar 13 22:48:21 2013 (r1213) @@ -0,0 +1,41 @@ +diff --git configure.in configure.in +index fa283d0..936b6e0 100644 +--- configure.in ++++ configure.in +@@ -8229,16 +8229,26 @@ MOZ_ARG_DISABLE_BOOL(necko-wifi, + NECKO_WIFI=, + NECKO_WIFI=1) + +-if test "$OS_ARCH" = "OS2"; then +- dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566 +- NECKO_WIFI= +-fi +-if test "$NECKO_WIFI" -a \ +- "$OS_ARCH" != "Linux" -a \ +- "$OS_ARCH" != "Darwin" -a \ +- "$OS_ARCH" != "SunOS" -a \ +- "$OS_ARCH" != "WINNT"; then +- AC_MSG_ERROR([Necko WiFi scanning not supported on your platform, use --disable-necko-wifi]) ++if test "$NECKO_WIFI"; then ++ case "$OS_TARGET" in ++ Android) ++ ;; ++ Darwin) ++ ;; ++ SunOS) ++ ;; ++ WINNT) ++ ;; ++ OS2) ++ dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566 ++ NECKO_WIFI= ++ ;; ++ *) ++ if test -z "$MOZ_ENABLE_DBUS"; then ++ AC_MSG_ERROR([Necko WiFi scanning needs DBus on your platform, remove --disable-dbus or use --disable-necko-wifi]) ++ fi ++ ;; ++ esac + fi + + if test "$NECKO_WIFI"; then Added: trunk/www/firefox/files/patch-bug803480 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/firefox/files/patch-bug803480 Wed Mar 13 22:48:21 2013 (r1213) @@ -0,0 +1,41 @@ +diff --git configure.in configure.in +index fa283d0..936b6e0 100644 +--- configure.in ++++ configure.in +@@ -8229,16 +8229,26 @@ MOZ_ARG_DISABLE_BOOL(necko-wifi, + NECKO_WIFI=, + NECKO_WIFI=1) + +-if test "$OS_ARCH" = "OS2"; then +- dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566 +- NECKO_WIFI= +-fi +-if test "$NECKO_WIFI" -a \ +- "$OS_ARCH" != "Linux" -a \ +- "$OS_ARCH" != "Darwin" -a \ +- "$OS_ARCH" != "SunOS" -a \ +- "$OS_ARCH" != "WINNT"; then +- AC_MSG_ERROR([Necko WiFi scanning not supported on your platform, use --disable-necko-wifi]) ++if test "$NECKO_WIFI"; then ++ case "$OS_TARGET" in ++ Android) ++ ;; ++ Darwin) ++ ;; ++ SunOS) ++ ;; ++ WINNT) ++ ;; ++ OS2) ++ dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566 ++ NECKO_WIFI= ++ ;; ++ *) ++ if test -z "$MOZ_ENABLE_DBUS"; then ++ AC_MSG_ERROR([Necko WiFi scanning needs DBus on your platform, remove --disable-dbus or use --disable-necko-wifi]) ++ fi ++ ;; ++ esac + fi + + if test "$NECKO_WIFI"; then Added: trunk/www/seamonkey/files/patch-bug803480 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/www/seamonkey/files/patch-bug803480 Wed Mar 13 22:48:21 2013 (r1213) @@ -0,0 +1,82 @@ +diff --git configure.in configure.in +index fa283d0..936b6e0 100644 +--- configure.in ++++ configure.in +@@ -8229,16 +8229,26 @@ MOZ_ARG_DISABLE_BOOL(necko-wifi, + NECKO_WIFI=, + NECKO_WIFI=1) + +-if test "$OS_ARCH" = "OS2"; then +- dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566 +- NECKO_WIFI= +-fi +-if test "$NECKO_WIFI" -a \ +- "$OS_ARCH" != "Linux" -a \ +- "$OS_ARCH" != "Darwin" -a \ +- "$OS_ARCH" != "SunOS" -a \ +- "$OS_ARCH" != "WINNT"; then +- AC_MSG_ERROR([Necko WiFi scanning not supported on your platform, use --disable-necko-wifi]) ++if test "$NECKO_WIFI"; then ++ case "$OS_TARGET" in ++ Android) ++ ;; ++ Darwin) ++ ;; ++ SunOS) ++ ;; ++ WINNT) ++ ;; ++ OS2) ++ dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566 ++ NECKO_WIFI= ++ ;; ++ *) ++ if test -z "$MOZ_ENABLE_DBUS"; then ++ AC_MSG_ERROR([Necko WiFi scanning needs DBus on your platform, remove --disable-dbus or use --disable-necko-wifi]) ++ fi ++ ;; ++ esac + fi + + if test "$NECKO_WIFI"; then +diff --git configure.in configure.in +index fa283d0..936b6e0 100644 +--- mozilla/configure.in ++++ mozilla/configure.in +@@ -8229,16 +8229,26 @@ MOZ_ARG_DISABLE_BOOL(necko-wifi, + NECKO_WIFI=, + NECKO_WIFI=1) + +-if test "$OS_ARCH" = "OS2"; then +- dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566 +- NECKO_WIFI= +-fi +-if test "$NECKO_WIFI" -a \ +- "$OS_ARCH" != "Linux" -a \ +- "$OS_ARCH" != "Darwin" -a \ +- "$OS_ARCH" != "SunOS" -a \ +- "$OS_ARCH" != "WINNT"; then +- AC_MSG_ERROR([Necko WiFi scanning not supported on your platform, use --disable-necko-wifi]) ++if test "$NECKO_WIFI"; then ++ case "$OS_TARGET" in ++ Android) ++ ;; ++ Darwin) ++ ;; ++ SunOS) ++ ;; ++ WINNT) ++ ;; ++ OS2) ++ dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566 ++ NECKO_WIFI= ++ ;; ++ *) ++ if test -z "$MOZ_ENABLE_DBUS"; then ++ AC_MSG_ERROR([Necko WiFi scanning needs DBus on your platform, remove --disable-dbus or use --disable-necko-wifi]) ++ fi ++ ;; ++ esac + fi + + if test "$NECKO_WIFI"; then From owner-freebsd-gecko@FreeBSD.ORG Thu Mar 14 07:25:12 2013 Return-Path: Delivered-To: gecko@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 829AF91C; Thu, 14 Mar 2013 07:25:12 +0000 (UTC) (envelope-from jbeich@tormail.org) Received: from outgoing.tormail.org (outgoing.tormail.org [82.221.96.22]) by mx1.freebsd.org (Postfix) with ESMTP id 3B64C8D6; Thu, 14 Mar 2013 07:25:11 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=internal.tormail.org) by outgoing.tormail.org with esmtp (Exim 4.72) (envelope-from ) id 1UG2X9-0005pv-AW; Thu, 14 Mar 2013 10:25:03 +0300 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tormail.org; s=tm; h=Message-Id:X-TorMail-User:Content-Type:MIME-Version:References:Date:Subject:Cc:To:From; bh=tGLfaQMiTeLbfzCKaO6eYcXerTudKop4H/xjugdg7Tg=; b=fl1acawlH4A2sl0px3f41XjDQ/+Y5zjZoCPAgrzzdGl3Z22wQUXNSMMqIFS3XnbuXMyYhicL7RKwbMYmL3aswlHZYB9Kbnw5E+9wsi10IU5JSoCAA3/dKlnCsJjGi0AwkZf43Axyms1Q5DHMd0e1125iOXmPppbnGcVPcnKTPRI=; Received: from jbeich by internal.tormail.org with local (Exim 4.63) (envelope-from ) id 1UG2Uy-0006D0-Kb; Thu, 14 Mar 2013 07:22:50 +0000 From: Jan Beich To: Craig Rodrigues Subject: Re: firefox 19.0,1 crashing under FreeBSD 7 Date: Wed, 13 Mar 2013 23:51:42 +0000 References: MIME-Version: 1.0 Content-Type: text/plain X-TorMail-User: jbeich Message-Id: <1UG2Uy-0006D0-Kb@internal.tormail.org> Cc: ports@freebsd.org, gecko@freebsd.org X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Mar 2013 07:25:12 -0000 Craig Rodrigues writes: > [xcb] Unknown request in queue while dequeuing > [xcb] Most likely this is a multi-threaded client and XInitThreads has not > been called > [xcb] Aborting, sorry about that. > Assertion failed: (!xcb_xlib_unknown_req_in_deq), function > dequeue_pending_request, file xcb_io.c, line 178. > Multiple segmentation faults occurred; can't display error dialog Do you have cairo built with --enable-xlib-xcb or MOZ_USE_OMTC set in the environment? Can you confirm on 7.4-RELEASE ? From owner-freebsd-gecko@FreeBSD.ORG Sat Mar 16 12:05:48 2013 Return-Path: Delivered-To: gecko@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 40661758 for ; Sat, 16 Mar 2013 12:05:48 +0000 (UTC) (envelope-from jau@jau.iki.fi) Received: from jau.iki.fi (ip193-64-26-117.cust.eunet.fi [193.64.26.117]) by mx1.freebsd.org (Postfix) with ESMTP id BE094CBF for ; Sat, 16 Mar 2013 12:05:45 +0000 (UTC) Received: from jau.iki.fi (localhost [127.0.0.1]) by jau.iki.fi (8.14.6/8.14.5) with ESMTP id r2GC5RtP051064 for ; Sat, 16 Mar 2013 14:05:31 +0200 (EET) (envelope-from jau@jau.iki.fi) Received: (from jau@localhost) by jau.iki.fi (8.14.6/8.14.5/Submit) id r2GC5RYl051063 for gecko@freebsd.org; Sat, 16 Mar 2013 14:05:27 +0200 (EET) (envelope-from jau) Message-Id: <201303161205.r2GC5RYl051063@jau.iki.fi> Subject: Firefox, Thunderbird, and GIMP having problems with clang To: gecko@freebsd.org Date: Sat, 16 Mar 2013 14:05:27 +0200 (EET) From: jau@iki.fi (Jukka A. Ukkonen) Sender: jau@iki.fi Latin-Date: dies Saturni XVI Martie a.d. MMXIII Organization: Private person OS-Platform: FreeBSD Phone: +358-9-6215280 (home) / +358-500-606671 (gsm) Content-Conversion: prohibited X-Mailer: ELM [version 2.4 PL25+pgp] MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.2.7 (jau.iki.fi [127.0.0.1]); Sat, 16 Mar 2013 14:05:35 +0200 (EET) X-BeenThere: freebsd-gecko@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: jau@iki.fi List-Id: Gecko Rendering Engine issues List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 Mar 2013 12:05:48 -0000 Howdy, This is just in case nobody has noticed yet. When I built the FreeBSD-9.1 kernel and user space on AMD64 using clang all of Firefox, Thunderbird, and GIMP began terminating unexpectedly soon after they had been started. They just quickly flashed a window on the display and disappeared again. I did not even try to tracing GIMP, but both firefox and thunderbird showed symptoms like those below... (These were collected from firefox using ktrace and kdump.) 71185 firefox CALL clock_gettime(0x4,0x7fffffff2108) 71185 firefox RET clock_gettime 0 71185 firefox CALL clock_gettime(0x4,0x7fffffff2108) 71185 firefox RET clock_gettime 0 71185 Proxy Resolution RET wait4 35839/0x8bff 71185 firefox CALL clock_gettime(0x4,0x7fffffff2108) 71185 firefox RET clock_gettime 0 71185 firefox CALL clock_gettime(0x4,0x7fffffff2108) 71185 firefox RET clock_gettime 0 71185 firefox CALL clock_gettime(0x4,0x7fffffff2108) 71185 firefox RET clock_gettime 0 71185 firefox CALL clock_gettime(0x4,0x7fffffff2108) 71185 firefox RET clock_gettime 0 71185 firefox CALL clock_gettime(0x4,0x7fffffff2108) 71185 firefox RET clock_gettime 0 71185 Proxy Resolution CALL exit(0) 71185 firefox CALL clock_gettime(0x4,0x7fffffff2108) 71185 firefox RET _umtx_op -1 errno 4 Interrupted system call 71185 mozStorage #2 RET _umtx_op -1 errno 4 Interrupted system call 71185 firefox RET _umtx_op -1 errno 4 Interrupted system call 71185 Gecko_IOThread GIO fd 18 wrote 32 bytes 0x0000 1300 0000 0000 0000 ffff 0100 0000 0000 |................| 0x0010 0000 0000 0000 0000 0303 0300 0000 0000 |................| 71185 HTML5 Parser RET _umtx_op -1 errno 4 Interrupted system call 71185 firefox RET poll -1 errno 4 Interrupted system call 71185 mozStorage #1 RET _umtx_op -1 errno 4 Interrupted system call 71185 Cert Verify RET _umtx_op -1 errno 4 Interrupted system call 71185 Gecko_IOThread RET kevent -1 errno 4 Interrupted system call 71185 Socket Thread RET poll -1 errno 4 Interrupted system call 71185 DOM Worker RET _umtx_op -1 errno 4 Interrupted system call 71185 mozStorage #4 RET _umtx_op -1 errno 4 Interrupted system call 71185 mozStorage #3 RET _umtx_op -1 errno 4 Interrupted system call 71185 Cache I/O RET _umtx_op -1 errno 4 Interrupted system call 71185 XPCOM CC RET _umtx_op -1 errno 4 Interrupted system call 71185 Timer RET _umtx_op -1 errno 4 Interrupted system call 71185 StreamTrans #46 RET _umtx_op -1 errno 4 Interrupted system call 71185 firefox RET clock_gettime 0 71185 Hang Monitor RET _umtx_op -1 errno 4 Interrupted system call 71185 JS GC Helper RET _umtx_op -1 errno 4 Interrupted system call 71185 JS Watchdog RET _umtx_op -1 errno 4 Interrupted system call This was right at the end of the ktrace/kdump trace log. So, there was nothing more after those lines. I really have no idea yet about what this might be indicating. This is just FYI in case someone else might be able to reproduce the symptoms I have seen. I hope this helps. Cheers, // jau .--- ..- -.- -.- .- .- .-.-.- ..- -.- -.- --- -. . -. / Jukka A. Ukkonen, Oxit Ltd, Finland /__ M.Sc. (sw-eng & cs) (Phone) +358-500-606-671 / Internet: Jukka.Ukkonen(a)Oxit.Fi / Internet: jau(a)iki.fi v .--- .- ..- ...-.- .. -.- .. .-.-.- ..-. .. + + + + My opinions are mine and mine alone, not my employers. + + + +