Bug 98295 - [UPDATE] games/cleanq3: security patch, fix on non-i386 and 4.X
Summary: [UPDATE] games/cleanq3: security patch, fix on non-i386 and 4.X
Status: Closed FIXED
Alias: None
Product: Ports & Packages
Classification: Unclassified
Component: Individual Port(s) (show other bugs)
Version: Latest
Hardware: Any Any
: Normal Affects Only Me
Assignee: Alexey Dokuchaev
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-06-01 18:10 UTC by Alejandro Pulver
Modified: 2006-07-23 19:56 UTC (History)
0 users

See Also:


Attachments
cleanq3.diff (41.98 KB, patch)
2006-06-01 18:10 UTC, Alejandro Pulver
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Alejandro Pulver freebsd_committer 2006-06-01 18:10:12 UTC

- Bump PORTREVISION.
- Use Makefile for building instead of scons, and remove Perl dependency.
- Use pkg-plist.
- Add OPTIONS. Allow to build without X11, threaded version, etc.
- Fix building on non-i386 and FreeBSD 4.X.
- Respect CFLAGS when optimizations are enabled.
- Add patch to fix 2 security vulnerabilities: see CVE-2006-2082. This patch has been taken from q3icculus.
Comment 1 Edwin Groothuis freebsd_committer 2006-06-01 18:16:21 UTC
Responsible Changed
From-To: freebsd-ports-bugs->danfe

Over to maintainer
Comment 2 Alejandro Pulver freebsd_committer 2006-06-01 22:32:10 UTC
- The previous diff had an incomplete version of the security patch,
  this one fixes it (files/patch-code-server-sv_client.c).

========== BEGIN ==========
Index: cleanq3/Makefile
===================================================================
RCS file: /home/pcvs/ports/games/cleanq3/Makefile,v
retrieving revision 1.2
diff -u -r1.2 Makefile
--- cleanq3/Makefile	22 Apr 2006 22:11:33 -0000	1.2
+++ cleanq3/Makefile	1 Jun 2006 21:21:15 -0000
@@ -7,6 +7,7 @@
 
 PORTNAME=	cleanq3
 PORTVERSION=	0.5.2
+PORTREVISION=	1
 CATEGORIES=	games
 MASTER_SITES=	http://tremor.quakedev.com/
 DISTNAME=	CleanQ3_v${PORTVERSION}-srcbin
@@ -14,72 +15,93 @@
 MAINTAINER=	danfe@FreeBSD.org
 COMMENT=	Cleaned up copy of the original Quake III Arena source code
 
-BUILD_DEPENDS=	nasm:${PORTSDIR}/devel/nasm
-
 USE_ZIP=	yes
-USE_PERL5_BUILD=yes
 USE_DOS2UNIX=	yes
+USE_GMAKE=	yes
 USE_GCC=	3.2+
-USE_GL=		yes
-
 WRKSRC=		${WRKDIR}/CleanQ3
-INSTDIR=	${WRKSRC}/code/install
+BUILD_WRKSRC=	${WRKSRC}/code/unix
 
-PLIST_FILES=	bin/cleanq3 bin/cleanq3ded \
-		lib/cleanq3/baseq3/cgame.so \
-		lib/cleanq3/baseq3/qagame.so \
-		lib/cleanq3/baseq3/ui.so \
-		lib/cleanq3/missionpack/cgame.so \
-		lib/cleanq3/missionpack/qagame.so \
-		lib/cleanq3/missionpack/ui.so
-PLIST_DIRS=	lib/cleanq3/baseq3 lib/cleanq3/missionpack lib/cleanq3
+OPTIONS=	CLIENT "Build client" on \
+		DEDICATED "Build dedicated server" on \
+		GAMELIBS "Build game libraries (when not mandatory)" off \
+		OPTIMIZED_CFLAGS "Enable compilation optimizations" on \
+		SMP "Build SMP (threaded) client" on
 
-OPTIONS=	OPTIMIZED_CFLAGS "Build with extra optimization options" on
+MAKE_ENV=	LIBDIR="${LIBDIR}"
+PLIST_SUB=	LIBDIR="${LIBDIR:S/${PREFIX}\///}"
+
+LIBDIR=		${PREFIX}/lib/${PORTNAME}
 
 .include <bsd.port.pre.mk>
 
-.if ${ARCH} != "i386"
-BROKEN=		Does not compile on ${ARCH}
+.if defined(WITHOUT_CLIENT) && defined(WITHOUT_DEDICATED) \
+    && defined(WITHOUT_SMP)
+IGNORE=		needs at least one of CLIENT, DEDICATED and SMP options
 .endif
 
-.if ${OSVERSION} < 500000
-BROKEN=		Does not compile on 4.x
+.if ${ARCH} == "i386"
+BUILD_DEPENDS+=	nasm:${PORTSDIR}/devel/nasm
 .endif
 
-.if defined(WITH_OPTIMIZED_CFLAGS)
-CFLAGS=		-O6 -fomit-frame-pointer -ffast-math -falign-loops=2 -falign-jumps=2 \
-		-falign-functions=2 -fno-strict-aliasing -fstrength-reduce
-.endif
-
-post-patch: .SILENT
-	${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g ; \
-		s|%%X11BASE%%|${X11BASE}|g ; s|%%CFLAGS%%|${CFLAGS}|' \
-		${WRKSRC}/code/Construct ${WRKSRC}/code/unix/Conscript-client
-	${REINPLACE_CMD} -e 's|-ldl || ; s|i386\.so|\.so|' \
-		${WRKSRC}/code/cgame/Conscript \
-		${WRKSRC}/code/game/Conscript ${WRKSRC}/code/q3_ui/Conscript \
-		${WRKSRC}/code/unix/Conscript-dedicated \
-		${WRKSRC}/code/ui/Conscript
-	${REINPLACE_CMD} -e 's|%%Q3DIR%%|"${Q3DIR}"|' \
-		${WRKSRC}/code/unix/unix_shared.c
-	${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|' \
-		${WRKSRC}/code/unix/unix_main.c
-	${REINPLACE_CMD} -e 's|botlib.log|/dev/null|' \
-		${WRKSRC}/code/botlib/be_interface.c
+.if !defined(WITHOUT_CLIENT) || !defined(WITHOUT_SMP)
+USE_GL=		yes
+.endif
 
-do-build:
-	cd ${WRKSRC}/code && ${MAKE_ENV} ${PERL} unix/cons
+.if !defined(WITHOUT_CLIENT)
+MAKE_ENV+=	CLIENT=YES
+PLIST_SUB+=	CLIENT=""
+Q3BIN+=		cleanq3
+.else
+PLIST_SUB+=	CLIENT="@comment "
+.endif
+
+.if !defined(WITHOUT_DEDICATED)
+MAKE_ENV+=	DEDICATED=YES
+PLIST_SUB+=	DEDICATED=""
+Q3BIN+=		cleanq3ded
+.else
+PLIST_SUB+=	DEDICATED="@comment "
+.endif
+
+.if defined(WITH_GAMELIBS) || (${ARCH} != "i386" && ${ARCH} != "powerpc")
+MAKE_ENV+=	GAMELIBS=YES
+PLIST_SUB+=	GAMELIBS=""
+.else
+PLIST_SUB+=	GAMELIBS="@comment "
+.endif
+
+.if !defined(WITHOUT_OPTIMIZED_CFLAGS)
+MAKE_ENV+=	OPTIMIZED_CFLAGS=YES
+.endif
+
+.if !defined(WITHOUT_SMP)
+MAKE_ENV+=	SMP=YES \
+		PTHREAD_LIBS="${PTHREAD_LIBS}"
+PLIST_SUB+=	SMP=""
+Q3BIN+=		cleanq3-smp
+.else
+PLIST_SUB+=	SMP="@comment "
+.endif
+
+post-patch:
+	@${REINPLACE_CMD} -e 's|botlib\.log|/dev/null|' \
+		${WRKSRC}/code/botlib/be_interface.c
+	@${REINPLACE_CMD} -e \
+		's|//[[:blank:]]*\(Swap_Init[[:blank:]]*();\)|\1|' \
+		${WRKSRC}/code/botlib/be_interface.c \
+		${WRKSRC}/code/renderer/tr_init.c
 
 do-install:
-	${INSTALL_PROGRAM} ${INSTDIR}/linuxquake3 ${PREFIX}/bin/cleanq3
-	${INSTALL_PROGRAM} ${INSTDIR}/linuxq3ded ${PREFIX}/bin/cleanq3ded
-.for d in baseq3 missionpack
-	@${MKDIR} ${PREFIX}/lib/cleanq3/${d}
-	${INSTALL_PROGRAM} ${INSTDIR}/${d}/cgame.so ${PREFIX}/lib/cleanq3/${d}
-	${INSTALL_PROGRAM} ${INSTDIR}/${d}/qagame.so ${PREFIX}/lib/cleanq3/${d}
-	${INSTALL_PROGRAM} ${INSTDIR}/${d}/ui.so ${PREFIX}/lib/cleanq3/${d}
+.for bin in ${Q3BIN}
+	${INSTALL_PROGRAM} ${BUILD_WRKSRC}/release/${bin} ${PREFIX}/bin
+.endfor
+.if defined(WITH_GAMELIBS) || (${ARCH} != "i386" && ${ARCH} != "powerpc")
+.for dir in baseq3 missionpack
+	${MKDIR} ${LIBDIR}/${dir}
+	${INSTALL_PROGRAM} ${BUILD_WRKSRC}/release/${dir}/*.so ${LIBDIR}/${dir}
 .endfor
+.endif
 
 .include "${.CURDIR}/../quake3-data/Makefile.include"
-
 .include <bsd.port.post.mk>
Index: cleanq3/pkg-plist
===================================================================
RCS file: cleanq3/pkg-plist
diff -N cleanq3/pkg-plist
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/pkg-plist	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,13 @@
+%%DEDICATED%%bin/cleanq3ded
+%%CLIENT%%bin/cleanq3
+%%SMP%%bin/cleanq3-smp
+%%GAMELIBS%%%%LIBDIR%%/baseq3/cgame.so
+%%GAMELIBS%%%%LIBDIR%%/baseq3/qagame.so
+%%GAMELIBS%%%%LIBDIR%%/baseq3/ui.so
+%%GAMELIBS%%%%LIBDIR%%/missionpack/cgame.so
+%%GAMELIBS%%%%LIBDIR%%/missionpack/qagame.so
+%%GAMELIBS%%%%LIBDIR%%/missionpack/ui.so
+%%GAMELIBS%%@dirrm %%LIBDIR%%/missionpack
+%%GAMELIBS%%@dirrm %%LIBDIR%%/baseq3
+%%GAMELIBS%%@dirrm %%LIBDIR%%
+
Index: cleanq3/files/patch-code-Construct
===================================================================
RCS file: cleanq3/files/patch-code-Construct
diff -N cleanq3/files/patch-code-Construct
--- cleanq3/files/patch-code-Construct	20 Mar 2006 15:21:27 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,68 +0,0 @@
---- code/Construct.orig	Mon Mar 20 18:19:09 2006
-+++ code/Construct	Mon Mar 20 18:37:12 2006
-@@ -19,8 +19,8 @@
- use Cons_gcc;
- 
- # defaults
--$config = 'debug';
--$do_smp = 1;
-+$config = 'release';
-+$do_smp = 0;
- $do_masterserver = 0;
- $do_authserver = 0;
- $do_authport = 0;
-@@ -30,10 +30,10 @@
- $do_pk3 = 0;
- # those are exported
- $DO_WIN32 = 0;
--$NO_VM = 0;
-+$NO_VM = 1;
- $NO_SO = 0;
--$CC='gcc';
--$CXX='g++';
-+$CC=$ENV{CC};
-+$CXX=$ENV{CXX};
- 
- # detect an sdk build (don't attempt client build and other things)
- if ( -r 'unix/Conscript-client' )
-@@ -63,9 +63,6 @@
- else
- {
- 	# libc .. do the little magic!
--	$libc_cmd = '/lib/libc.so.6 |grep "GNU C "|grep version|awk -F "version " \'{ print $2 }\'|cut -b -3';
--	$libc = `$libc_cmd`;
--	chop ($libc);
- }
- 
- if ($DO_WIN32 eq 1)
-@@ -227,7 +224,7 @@
- # build the config directory
- $CONFIG_DIR = $config . '-' . $cpu . '-' . $OS . '-' . $libc;
- 
--$COMMON_CFLAGS = '-pipe -fsigned-char ';
-+$COMMON_CFLAGS = '-pipe -fsigned-char -I%%LOCALBASE%%/include -L%%LOCALBASE%%/lib -I%%X11BASE%%/include -L%%X11BASE%%/lib ';
- 
- if ($config eq 'debug')
- {
-@@ -237,7 +234,7 @@
- }
- else
- {
--  $BASE_CFLAGS = $COMMON_CFLAGS . '-DNDEBUG -O6 -mcpu=pentiumpro -march=pentium -fomit-frame-pointer -ffast-math -malign-loops=2 -malign-jumps=2 -malign-functions=2 -fno-strict-aliasing -fstrength-reduce ';
-+  $BASE_CFLAGS = $COMMON_CFLAGS . '-DNDEBUG %%CFLAGS%% ';
- 	$BSPC_BASE_CFLAGS = $BASE_CFLAGS . '-DLINUX -DBSPC -Dstricmp=strcasecmp ';
- }
- 
-@@ -302,9 +299,9 @@
- }
- 
- # build tools
--$env_tools = new cons();
--Command $env_tools 'qvmtools/q3lcc', '[perl] &build_tools(\'q3lcc\')';
--Command $env_tools 'qvmtools/q3asm', '[perl] &build_tools(\'q3asm\')';
-+#$env_tools = new cons();
-+#Command $env_tools 'qvmtools/q3lcc', '[perl] &build_tools(\'q3lcc\')';
-+#Command $env_tools 'qvmtools/q3asm', '[perl] &build_tools(\'q3asm\')';
- 
- if ($do_bspc eq 1)
- {
Index: cleanq3/files/patch-code-cgame-cg_weapons.c
===================================================================
RCS file: cleanq3/files/patch-code-cgame-cg_weapons.c
diff -N cleanq3/files/patch-code-cgame-cg_weapons.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-cgame-cg_weapons.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,23 @@
+--- ./code/cgame/cg_weapons.c.orig	Wed May 31 20:52:06 2006
++++ ./code/cgame/cg_weapons.c	Wed May 31 20:52:54 2006
+@@ -636,17 +636,17 @@
+ 	}
+ 
+ 	strcpy( path, item->world_model[0] );
+-	COM_StripExtension( path, path );
++	COM_StripExtension( path, path, sizeof(path) );
+ 	strcat( path, "_flash.md3" );
+ 	weaponInfo->flashModel = trap_R_RegisterModel( path );
+ 
+ 	strcpy( path, item->world_model[0] );
+-	COM_StripExtension( path, path );
++	COM_StripExtension( path, path, sizeof(path) );
+ 	strcat( path, "_barrel.md3" );
+ 	weaponInfo->barrelModel = trap_R_RegisterModel( path );
+ 
+ 	strcpy( path, item->world_model[0] );
+-	COM_StripExtension( path, path );
++	COM_StripExtension( path, path, sizeof(path) );
+ 	strcat( path, "_hand.md3" );
+ 	weaponInfo->handsModel = trap_R_RegisterModel( path );
+ 
Index: cleanq3/files/patch-code-game-q_shared.c
===================================================================
RCS file: cleanq3/files/patch-code-game-q_shared.c
diff -N cleanq3/files/patch-code-game-q_shared.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-game-q_shared.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,113 @@
+--- ./code/game/q_shared.c.orig	Wed May 31 20:52:06 2006
++++ ./code/game/q_shared.c	Wed May 31 20:54:26 2006
+@@ -38,14 +38,21 @@
+ COM_StripExtension
+ ============
+ */
+-void COM_StripExtension( const char *in, char *out ) {
+-	while ( *in && *in != '.' ) {
+-		*out++ = *in++;
++void COM_StripExtension( const char *in, char *out, int destsize ) {
++	int	length;
++
++	Q_strncpyz(out, in, destsize);
++
++	length = strlen(out)-1;
++	while (length > 0 && out[length] != '.') {
++		length--;
++		if (out[length] == '/')
++			return;		// no extension
+ 	}
+-	*out = 0;
++	if (length)
++		out[length] = 0;
+ }
+ 
+-
+ /*
+ ==================
+ COM_DefaultExtension
+@@ -79,29 +86,28 @@
+ 
+ ============================================================================
+ */
+-/*
++
+ // can't just use function pointers, or dll linkage can
+ // mess up when qcommon is included in multiple places
+-static short	(*_BigShort) (short l);
+-static short	(*_LittleShort) (short l);
+-static int		(*_BigLong) (int l);
+-static int		(*_LittleLong) (int l);
++static int16_t	(*_BigShort) (int16_t l);
++static int16_t	(*_LittleShort) (int16_t l);
++static int32_t	(*_BigLong) (int32_t l);
++static int32_t	(*_LittleLong) (int32_t l);
+ static qint64	(*_BigLong64) (qint64 l);
+ static qint64	(*_LittleLong64) (qint64 l);
+ static float	(*_BigFloat) (const float *l);
+ static float	(*_LittleFloat) (const float *l);
+ 
+-short	BigShort(short l){return _BigShort(l);}
+-short	LittleShort(short l) {return _LittleShort(l);}
+-int		BigLong (int l) {return _BigLong(l);}
+-int		LittleLong (int l) {return _LittleLong(l);}
++int16_t	BigShort(int16_t l){return _BigShort(l);}
++int16_t	LittleShort(int16_t l) {return _LittleShort(l);}
++int32_t	BigLong (int32_t l) {return _BigLong(l);}
++int32_t	LittleLong (int32_t l) {return _LittleLong(l);}
+ qint64 	BigLong64 (qint64 l) {return _BigLong64(l);}
+ qint64 	LittleLong64 (qint64 l) {return _LittleLong64(l);}
+-float	BigFloat (const float *l) {return _BigFloat(l);}
+-float	LittleFloat (const float *l) {return _LittleFloat(l);}
+-*/
++float	BigFloat (float l) {return _BigFloat(&l);}
++float	LittleFloat (float l) {return _LittleFloat(&l);}
+ 
+-short   ShortSwap (short l)
++int16_t	ShortSwap (int16_t l)
+ {
+ 	byte    b1,b2;
+ 
+@@ -111,12 +117,12 @@
+ 	return (b1<<8) + b2;
+ }
+ 
+-short	ShortNoSwap (short l)
++int16_t	ShortNoSwap (int16_t l)
+ {
+ 	return l;
+ }
+ 
+-int    LongSwap (int l)
++int32_t	LongSwap (int32_t l)
+ {
+ 	byte    b1,b2,b3,b4;
+ 
+@@ -128,7 +134,7 @@
+ 	return ((int)b1<<24) + ((int)b2<<16) + ((int)b3<<8) + b4;
+ }
+ 
+-int	LongNoSwap (int l)
++int32_t	LongNoSwap (int32_t l)
+ {
+ 	return l;
+ }
+@@ -179,7 +185,7 @@
+ Swap_Init
+ ================
+ */
+-/*
++
+ void Swap_Init (void)
+ {
+ 	byte	swaptest[2] = {1,0};
+@@ -209,7 +215,7 @@
+ 	}
+ 
+ }
+-*/
++
+ 
+ /*
+ ============================================================================
Index: cleanq3/files/patch-code-game-q_shared.h
===================================================================
RCS file: /home/pcvs/ports/games/cleanq3/files/patch-code-game-q_shared.h,v
retrieving revision 1.1
diff -u -r1.1 patch-code-game-q_shared.h
--- cleanq3/files/patch-code-game-q_shared.h	20 Mar 2006 15:21:27 -0000	1.1
+++ cleanq3/files/patch-code-game-q_shared.h	1 Jun 2006 21:21:15 -0000
@@ -1,6 +1,92 @@
---- code/game/q_shared.h.orig	Tue Aug 16 02:10:07 2005
-+++ code/game/q_shared.h	Tue Aug 23 14:16:34 2005
-@@ -452,13 +452,9 @@
+--- ./code/game/q_shared.h.orig	Wed May 31 20:52:06 2006
++++ ./code/game/q_shared.h	Wed May 31 20:54:33 2006
+@@ -126,12 +126,14 @@
+ 
+ #define ID_INLINE __inline 
+ 
++#if 0
+ static ID_INLINE short BigShort( short l) { return ShortSwap(l); }
+ #define LittleShort
+ static ID_INLINE int BigLong(int l) { LongSwap(l); }
+ #define LittleLong
+ static ID_INLINE float BigFloat(const float *l) { FloatSwap(l); }
+ #define LittleFloat
++#endif
+ 
+ #define	PATH_SEP '\\'
+ 
+@@ -182,12 +184,14 @@
+     return fi;
+ }
+ 
++#if 0
+ #define BigShort
+ static inline short LittleShort(short l) { return ShortSwap(l); }
+ #define BigLong
+ static inline int LittleLong (int l) { return LongSwap(l); }
+ #define BigFloat
+ static inline float LittleFloat (const float l) { return FloatSwap(&l); }
++#endif
+ 
+ #endif
+ 
+@@ -205,12 +209,14 @@
+ 
+ void Sys_PumpEvents( void );
+ 
++#if 0
+ #define BigShort
+ static inline short LittleShort(short l) { return ShortSwap(l); }
+ #define BigLong
+ static inline int LittleLong (int l) { return LongSwap(l); }
+ #define BigFloat
+ static inline float LittleFloat (const float l) { return FloatSwap(&l); }
++#endif
+ 
+ #endif
+ 
+@@ -244,6 +250,7 @@
+ #define	BOTLIB_HARD_LINKED
+ #endif
+ 
++#if 0
+ #if !idppc
+ inline static short BigShort( short l) { return ShortSwap(l); }
+ #define LittleShort
+@@ -259,6 +266,7 @@
+ #define BigFloat
+ inline static float LittleFloat (const float *l) { return FloatSwap(l); }
+ #endif
++#endif
+ 
+ #endif
+ 
+@@ -280,8 +288,16 @@
+ 
+ #define	PATH_SEP '/'
+ 
++#include <machine/param.h>
++#if __FreeBSD_version < 500000
++#include <inttypes.h>
++#else
++#include <stdint.h>
++#endif
++
+ // bk010116 - omitted Q3STATIC (see Linux above), broken target
+ 
++#if 0
+ #if !idppc
+ static short BigShort( short l) { return ShortSwap(l); }
+ #define LittleShort
+@@ -297,6 +313,7 @@
+ #define BigFloat
+ static float LittleFloat (const float *l) { return FloatSwap(l); }
+ #endif
++#endif
+ 
+ #endif
+ 
+@@ -428,13 +445,9 @@
  void *Hunk_Alloc( int size, ha_pref preference );
  #endif
  
@@ -14,3 +100,41 @@
  
  #if !( defined __VECTORC )
  void Com_Memset (void* dest, const int val, const size_t count);
+@@ -763,7 +776,7 @@
+ float Com_Clamp( float min, float max, float value );
+ 
+ char	*COM_SkipPath( char *pathname );
+-void	COM_StripExtension( const char *in, char *out );
++void	COM_StripExtension( const char *in, char *out, int destsize );
+ void	COM_DefaultExtension( char *path, int maxSize, const char *extension );
+ 
+ void	COM_BeginParseSession( const char *name );
+@@ -864,18 +877,18 @@
+ } qint64;
+ 
+ //=============================================
+-/*
+-short	BigShort(short l);
+-short	LittleShort(short l);
+-int		BigLong (int l);
+-int		LittleLong (int l);
+-qint64  BigLong64 (qint64 l);
+-qint64  LittleLong64 (qint64 l);
+-float	BigFloat (const float *l);
+-float	LittleFloat (const float *l);
++
++int16_t	BigShort(int16_t l);
++int16_t	LittleShort(int16_t l);
++int32_t	BigLong (int32_t l);
++int32_t	LittleLong (int32_t l);
++qint64	BigLong64 (qint64 l);
++qint64	LittleLong64 (qint64 l);
++float	BigFloat (float l);
++float	LittleFloat (float l);
+ 
+ void	Swap_Init (void);
+-*/
++
+ char	* QDECL va(char *format, ...);
+ 
+ //=============================================
Index: cleanq3/files/patch-code-q3_ui-ui_playermodel.c
===================================================================
RCS file: cleanq3/files/patch-code-q3_ui-ui_playermodel.c
diff -N cleanq3/files/patch-code-q3_ui-ui_playermodel.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-q3_ui-ui_playermodel.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,11 @@
+--- ./code/q3_ui/ui_playermodel.c.orig	Wed May 31 20:52:07 2006
++++ ./code/q3_ui/ui_playermodel.c	Wed May 31 20:54:50 2006
+@@ -404,7 +404,7 @@
+ 		{
+ 			filelen = strlen(fileptr);
+ 
+-			COM_StripExtension(fileptr,skinname);
++			COM_StripExtension(fileptr, skinname, sizeof(skinname));
+ 
+ 			// look for icon_????
+ 			if (!Q_stricmpn(skinname,"icon_",5))
Index: cleanq3/files/patch-code-q3_ui-ui_players.c
===================================================================
RCS file: cleanq3/files/patch-code-q3_ui-ui_players.c
diff -N cleanq3/files/patch-code-q3_ui-ui_players.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-q3_ui-ui_players.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,18 @@
+--- ./code/q3_ui/ui_players.c.orig	Wed May 31 20:52:07 2006
++++ ./code/q3_ui/ui_players.c	Wed May 31 20:55:05 2006
+@@ -69,13 +69,13 @@
+ 
+ 	if ( weaponNum == WP_MACHINEGUN || weaponNum == WP_GAUNTLET || weaponNum == WP_BFG ) {
+ 		strcpy( path, item->world_model[0] );
+-		COM_StripExtension( path, path );
++		COM_StripExtension( path, path, sizeof(path) );
+ 		strcat( path, "_barrel.md3" );
+ 		pi->barrelModel = trap_R_RegisterModel( path );
+ 	}
+ 
+ 	strcpy( path, item->world_model[0] );
+-	COM_StripExtension( path, path );
++	COM_StripExtension( path, path, sizeof(path) );
+ 	strcat( path, "_flash.md3" );
+ 	pi->flashModel = trap_R_RegisterModel( path );
+ 
Index: cleanq3/files/patch-code-q3_ui-ui_saveconfig.c
===================================================================
RCS file: cleanq3/files/patch-code-q3_ui-ui_saveconfig.c
diff -N cleanq3/files/patch-code-q3_ui-ui_saveconfig.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-q3_ui-ui_saveconfig.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,11 @@
+--- ./code/q3_ui/ui_saveconfig.c.orig	Wed May 31 20:52:07 2006
++++ ./code/q3_ui/ui_saveconfig.c	Wed May 31 20:55:15 2006
+@@ -85,7 +85,7 @@
+ 		return;
+ 	}
+ 
+-	COM_StripExtension(saveConfig.savename.field.buffer, configname );
++	COM_StripExtension(saveConfig.savename.field.buffer, configname, sizeof(configname) );
+ 	trap_Cmd_ExecuteText( EXEC_APPEND, va( "writeconfig %s.cfg\n", configname ) );
+ 	UI_PopMenu();
+ }
Index: cleanq3/files/patch-code-qcommon-common.c
===================================================================
RCS file: /home/pcvs/ports/games/cleanq3/files/patch-code-qcommon-common.c,v
retrieving revision 1.1
diff -u -r1.1 patch-code-qcommon-common.c
--- cleanq3/files/patch-code-qcommon-common.c	20 Mar 2006 15:21:27 -0000	1.1
+++ cleanq3/files/patch-code-qcommon-common.c	1 Jun 2006 21:21:15 -0000
@@ -1,15 +1,15 @@
---- code/qcommon/common.c.orig	Mon Aug 15 23:10:07 2005
-+++ code/qcommon/common.c	Wed Nov 23 10:53:29 2005
+--- ./code/qcommon/common.c.orig	Wed May 31 20:52:07 2006
++++ ./code/qcommon/common.c	Wed May 31 20:52:09 2006
 @@ -24,15 +24,8 @@
  #include "../game/q_shared.h"
  #include "qcommon.h"
  #include <setjmp.h>
 -#ifdef __linux__
-+#include <sys/types.h>
- #include <netinet/in.h>
+-#include <netinet/in.h>
 -#else
 -#if defined(MACOS_X)
--#include <netinet/in.h>
++#include <sys/types.h>
+ #include <netinet/in.h>
 -#else
 -#include <winsock.h>
 -#endif
@@ -17,3 +17,12 @@
  
  int demo_protocols[] =
  { 66, 67, 68, 0 };
+@@ -2367,7 +2360,7 @@
+ 	// cvar and command buffer management
+ 	Com_ParseCommandLine( commandLine );
+ 
+-//	Swap_Init ();
++	Swap_Init ();
+ 	Cbuf_Init ();
+ 
+ 	Com_InitZoneMemory();
Index: cleanq3/files/patch-code-qcommon-vm.c
===================================================================
RCS file: cleanq3/files/patch-code-qcommon-vm.c
diff -N cleanq3/files/patch-code-qcommon-vm.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-qcommon-vm.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,29 @@
+--- code/qcommon/vm.c.orig	Wed May 31 23:18:41 2006
++++ code/qcommon/vm.c	Wed May 31 23:19:43 2006
+@@ -225,7 +225,7 @@
+ 		return;
+ 	}
+ 
+-	COM_StripExtension( vm->name, name );
++	COM_StripExtension( vm->name, name, sizeof(name) );
+ 	Com_sprintf( symbols, sizeof( symbols ), "vm/%s.map", name );
+ 	len = FS_ReadFile( symbols, (void **)&mapfile );
+ 	if ( !mapfile ) {
+@@ -478,7 +478,7 @@
+ 		}
+ 	}
+ 
+-	if ( interpret == VMI_NATIVE ) {
++	if ( 1 ) {
+ 		// try to load as a system dll
+ 		Com_Printf( "Loading dll file %s.\n", vm->name );
+ 		vm->dllHandle = Sys_LoadDll( module, vm->fqpath , &vm->entryPoint, VM_DllSyscall );
+@@ -826,7 +826,7 @@
+ 
+ 
+ 
+-#ifdef oDLL_ONLY // bk010215 - for DLL_ONLY dedicated servers/builds w/o VM
++#ifdef DLL_ONLY // bk010215 - for DLL_ONLY dedicated servers/builds w/o VM
+ int	VM_CallCompiled( vm_t *vm, int *args ) {
+   return(0); 
+ }
Index: cleanq3/files/patch-code-renderer-tr_bsp.c
===================================================================
RCS file: cleanq3/files/patch-code-renderer-tr_bsp.c
diff -N cleanq3/files/patch-code-renderer-tr_bsp.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-renderer-tr_bsp.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,11 @@
+--- ./code/renderer/tr_bsp.c.orig	Wed May 31 20:52:07 2006
++++ ./code/renderer/tr_bsp.c	Wed May 31 20:55:47 2006
+@@ -1820,7 +1820,7 @@
+ 	Q_strncpyz( s_worldData.name, name, sizeof( s_worldData.name ) );
+ 
+ 	Q_strncpyz( s_worldData.baseName, COM_SkipPath( s_worldData.name ), sizeof( s_worldData.name ) );
+-	COM_StripExtension( s_worldData.baseName, s_worldData.baseName );
++	COM_StripExtension( s_worldData.baseName, s_worldData.baseName, sizeof(s_worldData.baseName) );
+ 
+ 	startMarker = ri.Hunk_Alloc(0, h_low);
+ 	c_gridVerts = 0;
Index: cleanq3/files/patch-code-renderer-tr_shader.c
===================================================================
RCS file: cleanq3/files/patch-code-renderer-tr_shader.c
diff -N cleanq3/files/patch-code-renderer-tr_shader.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-renderer-tr_shader.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,29 @@
+--- ./code/renderer/tr_shader.c.orig	Wed May 31 20:52:08 2006
++++ ./code/renderer/tr_shader.c	Wed May 31 20:56:20 2006
+@@ -99,7 +99,7 @@
+ 
+ 	// remap all the shaders with the given name
+ 	// even tho they might have different lightmaps
+-	COM_StripExtension( shaderName, strippedName );
++	COM_StripExtension( shaderName, strippedName, sizeof(strippedName) );
+ 	hash = generateHashValue(strippedName, FILE_HASH_SIZE);
+ 	for (sh = hashTable[hash]; sh; sh = sh->next) {
+ 		if (Q_stricmp(sh->name, strippedName) == 0) {
+@@ -2368,7 +2368,7 @@
+ 		return tr.defaultShader;
+ 	}
+ 
+-	COM_StripExtension( name, strippedName );
++	COM_StripExtension( name, strippedName, sizeof(strippedName) );
+ 
+ 	hash = generateHashValue(strippedName, FILE_HASH_SIZE);
+ 
+@@ -2436,7 +2436,7 @@
+ 		lightmapIndex = LIGHTMAP_BY_VERTEX;
+ 	}
+ 
+-	COM_StripExtension( name, strippedName );
++	COM_StripExtension( name, strippedName, sizeof(strippedName) );
+ 
+ 	hash = generateHashValue(strippedName, FILE_HASH_SIZE);
+ 
Index: cleanq3/files/patch-code-server-sv_client.c
===================================================================
RCS file: cleanq3/files/patch-code-server-sv_client.c
diff -N cleanq3/files/patch-code-server-sv_client.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-server-sv_client.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,73 @@
+--- code/server/sv_client.c.orig	Thu Jun  1 14:50:21 2006
++++ code/server/sv_client.c	Thu Jun  1 15:19:29 2006
+@@ -756,24 +756,54 @@
+ 	int curindex;
+ 	int rate;
+ 	int blockspersnap;
+-	int idPack, missionPack;
++	int idPack, missionPack, unreferenced = 1;
+ 	char errorMessage[1024];
++	char pakbuf[MAX_OSPATH], *pakptr;
++	const char *referencedPaks;
++	int numRefPaks;
+ 
+ 	if (!*cl->downloadName)
+ 		return;	// Nothing being downloaded
+ 
+ 	if (!cl->download) {
+-		// We open the file here
++		// Chop off filename extension.
++		Com_sprintf(pakbuf, sizeof(pakbuf), "%s", cl->downloadName);
++		pakptr = Q_strrchr(pakbuf, '.');
+ 
+-		Com_Printf( "clientDownload: %d : begining \"%s\"\n", cl - svs.clients, cl->downloadName );
++		if (pakptr) {
++			*pakptr = '\0';
+ 
+-		missionPack = FS_idPak(cl->downloadName, "missionpack");
+-		idPack = missionPack || FS_idPak(cl->downloadName, "baseq3");
++			// Check for pk3 filename extension
++			if (!Q_stricmp(pakptr + 1, "pk3")) {
++				referencedPaks = FS_ReferencedPakNames();
+ 
+-		if ( !sv_allowDownload->integer || idPack ||
++				// Check whether the file appears in the list of referenced
++				// paks to prevent downloading of arbitrary files.
++				Cmd_TokenizeString(referencedPaks);
++				numRefPaks = Cmd_Argc();
++
++				for (curindex = 0; curindex < numRefPaks; curindex++) {
++					if (!FS_FilenameCompare(Cmd_Argv(curindex), pakbuf)) {
++						unreferenced = 0;
++
++						// now that we know the file is referenced,
++						// check whether it's legal to download it.
++						missionPack = FS_idPak(pakbuf, "missionpack");
++						idPack = missionPack || FS_idPak(pakbuf, BASEGAME);
++
++						break;
++					}
++				}
++			}
++		}
++
++		// We open the file here
++		if ( !sv_allowDownload->integer || idPack || unreferenced ||
+ 			( cl->downloadSize = FS_SV_FOpenFileRead( cl->downloadName, &cl->download ) ) <= 0 ) {
+ 			// cannot auto-download file
+-			if (idPack) {
++			if (unreferenced) {
++				Com_sprintf(errorMessage, sizeof(errorMessage), "File \"%s\" is not referenced and cannot be downloaded.", cl->downloadName);
++			} else if (idPack) {
+ 				Com_Printf("clientDownload: %d : \"%s\" cannot download id pk3 files\n", cl - svs.clients, cl->downloadName);
+ 				if (missionPack) {
+ 					Com_sprintf(errorMessage, sizeof(errorMessage), "Cannot autodownload Team Arena file \"%s\"\n"
+@@ -809,6 +839,8 @@
+ 			return;
+ 		}
+  
++		Com_Printf( "clientDownload: %d : beginning \"%s\"\n", cl - svs.clients, cl->downloadName );
++
+ 		// Init
+ 		cl->downloadCurrentBlock = cl->downloadClientBlock = cl->downloadXmitBlock = 0;
+ 		cl->downloadCount = 0;
Index: cleanq3/files/patch-code-ui-ui_main.c
===================================================================
RCS file: cleanq3/files/patch-code-ui-ui_main.c
diff -N cleanq3/files/patch-code-ui-ui_main.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-ui-ui_main.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,11 @@
+--- ./code/ui/ui_main.c.orig	Wed May 31 20:52:08 2006
++++ ./code/ui/ui_main.c	Wed May 31 20:56:29 2006
+@@ -4971,7 +4971,7 @@
+ 		{
+ 			filelen = strlen(fileptr);
+ 
+-			COM_StripExtension(fileptr,skinname);
++			COM_StripExtension(fileptr, skinname, sizeof(skinname));
+ 
+ 			// look for icon_????
+ 			if (Q_stricmpn(skinname, "icon_", 5) == 0 && !(Q_stricmp(skinname,"icon_blue") == 0 || Q_stricmp(skinname,"icon_red") == 0))
Index: cleanq3/files/patch-code-ui-ui_players.c
===================================================================
RCS file: cleanq3/files/patch-code-ui-ui_players.c
diff -N cleanq3/files/patch-code-ui-ui_players.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-ui-ui_players.c	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,18 @@
+--- ./code/ui/ui_players.c.orig	Wed May 31 20:52:08 2006
++++ ./code/ui/ui_players.c	Wed May 31 20:56:47 2006
+@@ -70,13 +70,13 @@
+ 
+ 	if ( weaponNum == WP_MACHINEGUN || weaponNum == WP_GAUNTLET || weaponNum == WP_BFG ) {
+ 		strcpy( path, item->world_model[0] );
+-		COM_StripExtension( path, path );
++		COM_StripExtension( path, path, sizeof(path) );
+ 		strcat( path, "_barrel.md3" );
+ 		pi->barrelModel = trap_R_RegisterModel( path );
+ 	}
+ 
+ 	strcpy( path, item->world_model[0] );
+-	COM_StripExtension( path, path );
++	COM_StripExtension( path, path, sizeof(path) );
+ 	strcat( path, "_flash.md3" );
+ 	pi->flashModel = trap_R_RegisterModel( path );
+ 
Index: cleanq3/files/patch-code-unix-Conscript-client
===================================================================
RCS file: cleanq3/files/patch-code-unix-Conscript-client
diff -N cleanq3/files/patch-code-unix-Conscript-client
--- cleanq3/files/patch-code-unix-Conscript-client	20 Mar 2006 15:21:27 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,26 +0,0 @@
---- code/unix/Conscript-client.orig	Fri Mar 17 13:50:18 2006
-+++ code/unix/Conscript-client	Fri Mar 17 13:50:40 2006
-@@ -147,13 +147,13 @@
-   LINK => $LINK,
- 	ENV => { PATH => $ENV{PATH}, HOME => $ENV{HOME} },
-   CFLAGS => $BASE_CFLAGS,
--  LIBS => ' ' . $BUILD_DIR . '/unix/splines.a ' 
-+  LIBS => ' '
-   . $BUILD_DIR . '/unix/botlib.a ' 
-   . $BUILD_DIR . '/unix/jpeglib.a '
-   . $BUILD_DIR . '/unix/asmlib.a '
-   . $BUILD_DIR . '/unix/inlinelib.a '
- 	. $BASE_LDFLAGS
--  . '-L/usr/X11R6/lib -lX11 -lXext -lXxf86dga -lXxf86vm -ldl -lm'
-+  . '-L%%X11BASE%%/lib -lX11 -lXext -lXxf86dga -lXxf86vm -lm'
- );
- 
- @RENDERER_FILES = qw(
-@@ -231,7 +231,6 @@
-   ../unix/linux_common.c
-   ../unix/linux_qgl.c   
-   ../unix/linux_glimp.c   
--  ../unix/linux_joystick.c  
-   ../unix/linux_snd.c 
- 	../unix/linux_signals.c
-   );
Index: cleanq3/files/patch-code-unix-Makefile
===================================================================
RCS file: cleanq3/files/patch-code-unix-Makefile
diff -N cleanq3/files/patch-code-unix-Makefile
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ cleanq3/files/patch-code-unix-Makefile	1 Jun 2006 21:21:15 -0000
@@ -0,0 +1,352 @@
+--- ./code/unix/Makefile.orig	Wed May 31 20:52:08 2006
++++ ./code/unix/Makefile	Wed May 31 20:52:09 2006
+@@ -19,6 +19,7 @@
+ 
+ PLATFORM=$(shell uname|tr A-Z a-z)
+ PLATFORM_RELEASE=$(shell uname -r)
++ARCH=$(shell uname -m)
+ 
+ ###
+ ### These paths are where you probably want to change things
+@@ -34,7 +35,7 @@
+ 
+ # Build name
+ # BUILD_NAME=$(BUILD_NAME)
+-BUILD_NAME=quake3.x86
++BUILD_NAME=quake3
+ 
+ 
+ 
+@@ -46,8 +47,8 @@
+ 
+ BASEQ3_DIR=$(BDIR)/baseq3
+ 
+-BD=debug$(ARCH)$(GLIBC)
+-BR=release$(ARCH)$(GLIBC)
++BD=debug
++BR=release
+ CDIR=$(MOUNT_DIR)/client
+ SDIR=$(MOUNT_DIR)/server
+ RDIR=$(MOUNT_DIR)/renderer
+@@ -76,7 +77,7 @@
+ #############################################################################
+ 
+ ## Defaults
+-DLL_ONLY=false
++DLL_ONLY?=false
+ # bk010215 - TODO - add all defaults / kill Ryan
+ 
+ 
+@@ -197,33 +198,35 @@
+ 
+ ifeq ($(PLATFORM),freebsd)
+ 
++ifeq ($(ARCH),powerpc)
++ARCH=ppc
++endif
++
+ GLIBC= #libc is irrelevant
+ 
+-ifneq (,$(findstring alpha,$(shell uname -m)))
+-ARCH=axp
+-RPMARCH=alpha
+-VENDOR=dec
+-else #default to i386
+-ARCH=i386
+-RPMARCH=i386
+-VENDOR=unknown
+-endif #alpha test
++BASE_CFLAGS = $(CFLAGS) -DDATADIR='\"$(Q3DIR)\"' -DLIBDIR='\"$(LIBDIR)\"' -pipe
+ 
++GL_CFLAGS = -I$(X11BASE)/include
+ 
+-BASE_CFLAGS =  -pipe
++DEBUG_CFLAGS=$(BASE_CFLAGS) -g  -Wall -Werror
++RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG
+ 
+-GL_CFLAGS = -I$(MESADIR)/include -I/usr/X11R6/include
++ifdef OPTIMIZED_CFLAGS
++  ifeq ($(ARCH),i386)
++RELEASE_CFLAGS=$(BASE_CFLAGS) -O6 -fomit-frame-pointer -pipe -ffast-math -falign-loops=2 -falign-jumps=2 -falign-functions=2 -fno-strict-aliasing -fstrength-reduce
++  else
++RELEASE_CFLAGS=$(BASE_CFLAGS) -O6 -ffast-math -funroll-loops -fomit-frame-pointer -fexpensive-optimizations
++  endif
++endif
+ 
+-DEBUG_CFLAGS=$(BASE_CFLAGS) -g  -Wall -Werror
+-ifeq ($(ARCH),axp)
+-CC=pgcc
+-RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O6 -ffast-math -funroll-loops -fomit-frame-pointer -fexpensive-optimizations
+-else
+-#NEWPGCC=/loki/global/x86/bin/gcc # raistlin012301
+-#NEWPGCC=/usr/local/gcc-2.95.2/bin/gcc
+-NEWPGCC=/home/raistllin/src/gcc/build/install/bin/gcc
+-CC=$(shell if [ -f $(NEWPGCC) ]; then echo $(NEWPGCC); else echo pgcc; fi )
+-RELEASE_CFLAGS=$(BASE_CFLAGS) -DNDEBUG -O6 -mcpu=pentiumpro -march=pentium -fomit-frame-pointer -pipe -ffast-math -malign-loops=2 -malign-jumps=2 -malign-functions=2 -fno-strict-aliasing - fstrength-reduce
++ifneq ($(ARCH),i386)
++ifneq ($(ARCH),ppc)
++DLL_ONLY=true
++endif
++endif
++
++ifeq ($(DLL_ONLY),true)
++BASE_CFLAGS += -DDLL_ONLY
+ endif
+ 
+ LIBEXT=a
+@@ -235,25 +238,37 @@
+ ARFLAGS=ar rv
+ RANLIB=ranlib
+ 
+-THREAD_LDFLAGS=-lpthread
++THREAD_LDFLAGS=$(PTHREAD_LIBS)
+ # don't need -ldl (FreeBSD)
+-LDFLAGS=-lm
++LDFLAGS+=-lm
+ #GLLDFLAGS=-L/usr/X11R6/lib -L$(MESADIR)/lib -lGL -lX11 -lXext -lXxf86dga -lXxf86vm
+ #GLLDFLAGS=-L/usr/X11/lib -lGL -lX11 -lXext -lm
+-GLLDFLAGS=-L/usr/X11R6/lib -lGL -lX11 -lXext -lXxf86dga -lXxf86vm
++GLLDFLAGS=-L$(X11BASE)/lib -lGL -lX11 -lXext -lXxf86dga -lXxf86vm
+ 
+-ifeq ($(ARCH),axp)
+-TARGETS=\
+-        $(B)/$(PLATFORM)q3ded
+-else
+-TARGETS=\
+-	$(B)/$(PLATFORM)quake3 \
+-	$(B)/baseq3/cgame$(ARCH).$(SHLIBEXT) \
+-	$(B)/baseq3/qagame$(ARCH).$(SHLIBEXT) \
+-	$(B)/baseq3/ui$(ARCH).$(SHLIBEXT)     \
+-	$(B)/missionpack/cgame$(ARCH).$(SHLIBEXT) \
+-	$(B)/missionpack/qagame$(ARCH).$(SHLIBEXT) \
+-	$(B)/missionpack/ui$(ARCH).$(SHLIBEXT)
++ifdef CLIENT
++TARGETS+=$(B)/cleanq3
++endif
++
++ifdef DEDICATED
++TARGETS+=$(B)/cleanq3ded
++endif
++
++ifdef SMP
++TARGETS+=$(B)/cleanq3-smp
++endif
++
++ifeq ($(DLL_ONLY),true)
++GAMELIBS=yes
++endif
++
++ifdef GAMELIBS
++TARGETS+=\
++	$(B)/baseq3/cgame.$(SHLIBEXT) \
++	$(B)/baseq3/qagame.$(SHLIBEXT) \
++	$(B)/baseq3/ui.$(SHLIBEXT) \
++	$(B)/missionpack/cgame.$(SHLIBEXT) \
++	$(B)/missionpack/qagame.$(SHLIBEXT) \
++	$(B)/missionpack/ui.$(SHLIBEXT)
+ endif
+ 
+ else # ifeq freebsd
+@@ -348,7 +363,7 @@
+ 	$(MAKE)  targets B=$(BR) CFLAGS="$(RELEASE_CFLAGS)"
+ 
+ #Build both debug and release builds
+-all:build_debug build_release
++all:build_release
+ 
+ targets:makedirs $(TARGETS)
+ 
+@@ -516,20 +531,6 @@
+ 	$(B)/client/unix_net.o \
+ 	$(B)/client/unix_shared.o \
+ 	\
+-	$(B)/client/ahoptim.o  \
+-	$(B)/client/autohint.o \
+-	$(B)/client/ftbase.o   \
+-	$(B)/client/ftdebug.o  \
+-	$(B)/client/ftglyph.o  \
+-	$(B)/client/ftinit.o   \
+-	$(B)/client/ftmm.o     \
+-	$(B)/client/ftsystem.o \
+-	$(B)/client/raster1.o  \
+-	$(B)/client/sfnt.o     \
+-	$(B)/client/sfobjs.o   \
+-	$(B)/client/smooth.o   \
+-	$(B)/client/truetype.o
+-#	\
+ #	$(B)/client/q_parse.o \
+ #	$(B)/client/math_quaternion.o \
+ #	$(B)/client/util_str.o \
+@@ -541,7 +542,9 @@
+ #	$(B)/client/q_shared.o \
+ 
+     ifeq ($(ARCH),i386)
+-	  Q3OBJ += $(B)/client/vm_x86.o
++      ifeq ($(DLL_ONLY),false)
++	Q3OBJ += $(B)/client/vm_x86.o
++      endif
+     endif
+ 
+     ifeq ($(ARCH),ppc)
+@@ -559,10 +562,24 @@
+ 		$(B)/client/linux_qgl.o \
+ 		$(B)/client/linux_glimp.o \
+ 		$(B)/client/linux_snd.o \
++		$(B)/client/linux_signals.o \
++		$(B)/client/snd_mixa.o \
++		$(B)/client/matha.o
++
++	Q3POBJ_SMP=\
++		$(B)/client/linux_common.o \
++		$(B)/client/linux_qgl.o \
++		$(B)/client/linux_glimp_smp.o \
++		$(B)/client/linux_snd.o \
++		$(B)/client/linux_signals.o \
+ 		$(B)/client/snd_mixa.o \
+ 		$(B)/client/matha.o   \
+-		$(B)/client/ftol.o \
+-		$(B)/client/snapvector.o
++
++    ifeq ($(ARCH),i386)
++		Q3POBJ += $(B)/client/ftol.o $(B)/client/snapvector.o
++		Q3POBJ_SMP += $(B)/client/ftol.o $(B)/client/snapvector.o
++    endif
++
+ else
+ ifeq ($(PLATFORM),irix)
+ 	Q3POBJ=\
+@@ -602,12 +619,12 @@
+ endif #FreeBSD
+ endif #IRIX
+ 
+-$(B)/$(PLATFORM)quake3 : $(Q3OBJ) $(Q3POBJ)
++$(B)/cleanq3 : $(Q3OBJ) $(Q3POBJ)
+ 	$(CC)  -o $@ $(Q3OBJ) $(Q3POBJ) $(GLLDFLAGS) $(LDFLAGS) 
+ # TTimo: splines code requires C++ linking, but splines have not been officially included in the codebase
+ #	$(CXX)  -o $@ $(Q3OBJ) $(Q3POBJ) $(GLLDFLAGS) $(LDFLAGS) 
+ 
+-$(B)/$(PLATFORM)quake3-smp : $(Q3OBJ) $(Q3POBJ_SMP)
++$(B)/cleanq3-smp : $(Q3OBJ) $(Q3POBJ_SMP)
+ 	$(CC)  -o $@ $(Q3OBJ) $(Q3POBJ_SMP) $(GLLDFLAGS) \
+ 		$(THREAD_LDFLAGS) $(LDFLAGS) 
+ 
+@@ -758,6 +775,7 @@
+ $(B)/client/linux_qgl.o : $(UDIR)/linux_qgl.c; $(DO_CC)  $(GL_CFLAGS) 
+ $(B)/client/linux_input.o : $(UDIR)/linux_input.c; $(DO_CC) 
+ $(B)/client/linux_snd.o : $(UDIR)/linux_snd.c; $(DO_CC) 
++$(B)/client/linux_signals.o : $(UDIR)/linux_signals.c; $(DO_CC) $(GL_CFLAGS)
+ $(B)/client/snd_mixa.o : $(UDIR)/snd_mixa.s; $(DO_AS) 
+ $(B)/client/matha.o : $(UDIR)/matha.s; $(DO_AS) 
+ 
+@@ -912,13 +930,17 @@
+ 	$(B)/ded/unix_main.o \
+ 	$(B)/ded/unix_net.o \
+ 	$(B)/ded/unix_shared.o \
++	$(B)/ded/linux_signals.o \
+ 	\
+ 	$(B)/ded/null_client.o \
+ 	$(B)/ded/null_input.o \
+ 	$(B)/ded/null_snddma.o
+ 
+ ifeq ($(ARCH),i386)
+-  Q3DOBJ += $(B)/ded/vm_x86.o $(B)/ded/ftol.o $(B)/ded/snapvector.o
++  Q3DOBJ += $(B)/ded/ftol.o $(B)/ded/snapvector.o
++  ifeq ($(DLL_ONLY),false)
++  Q3DOBJ += $(B)/ded/vm_x86.o
++  endif
+ endif
+ 
+ ifeq ($(ARCH),ppc)
+@@ -927,7 +949,7 @@
+   endif
+ endif
+ 
+-$(B)/$(PLATFORM)q3ded : $(Q3DOBJ)
++$(B)/cleanq3ded : $(Q3DOBJ)
+ 	$(CC)  -o $@ $(Q3DOBJ) $(LDFLAGS)
+ 
+ $(B)/ded/sv_bot.o : $(SDIR)/sv_bot.c; $(DO_DED_CC) 
+@@ -988,6 +1010,7 @@
+ $(B)/ded/unix_main.o : $(UDIR)/unix_main.c; $(DO_DED_CC) 
+ $(B)/ded/unix_net.o : $(UDIR)/unix_net.c; $(DO_DED_CC) 
+ $(B)/ded/unix_shared.o : $(UDIR)/unix_shared.c; $(DO_DED_CC) 
++$(B)/ded/linux_signals.o : $(UDIR)/linux_signals.c; $(DO_DED_CC) 
+ $(B)/ded/null_client.o : $(NDIR)/null_client.c; $(DO_DED_CC) 
+ $(B)/ded/null_input.o : $(NDIR)/null_input.c; $(DO_DED_CC) 
+ $(B)/ded/null_snddma.o : $(NDIR)/null_snddma.c; $(DO_DED_CC) 
+@@ -1068,7 +1091,7 @@
+ 	$(B)/baseq3/cgame/q_math.o \
+ 	$(B)/baseq3/cgame/q_shared.o
+ 
+-$(B)/baseq3/cgame$(ARCH).$(SHLIBEXT) : $(Q3CGOBJ)
++$(B)/baseq3/cgame.$(SHLIBEXT) : $(Q3CGOBJ)
+ 	$(CC)  $(SHLIBLDFLAGS) -o $@ $(Q3CGOBJ)
+ 
+ $(B)/baseq3/cgame/bg_misc.o : $(GDIR)/bg_misc.c; $(DO_SHLIB_CC)         
+@@ -1128,7 +1151,7 @@
+ 	$(B)/missionpack/cgame/q_shared.o \
+ 	$(B)/missionpack/cgame/ui_shared.o
+ 
+-$(B)/missionpack/cgame$(ARCH).$(SHLIBEXT) : $(MPCGOBJ)
++$(B)/missionpack/cgame.$(SHLIBEXT) : $(MPCGOBJ)
+ 	$(CC) $(SHLIBLDFLAGS) -o $@ $(MPCGOBJ)
+ 
+ $(B)/missionpack/cgame/bg_misc.o : $(GDIR)/bg_misc.c; $(DO_SHLIB_CC)     -DMISSIONPACK 
+@@ -1200,7 +1223,7 @@
+ 	$(B)/baseq3/game/q_math.o \
+ 	$(B)/baseq3/game/q_shared.o
+ 
+-$(B)/baseq3/qagame$(ARCH).$(SHLIBEXT) : $(Q3GOBJ)
++$(B)/baseq3/qagame.$(SHLIBEXT) : $(Q3GOBJ)
+ 	$(CC)  $(SHLIBLDFLAGS) -o $@ $(Q3GOBJ)
+ 
+ $(B)/baseq3/game/ai_chat.o : $(GDIR)/ai_chat.c; $(DO_SHLIB_CC)     
+@@ -1278,7 +1301,7 @@
+ 	$(B)/missionpack/game/q_math.o \
+ 	$(B)/missionpack/game/q_shared.o
+ 
+-$(B)/missionpack/qagame$(ARCH).$(SHLIBEXT) : $(MPGOBJ)
++$(B)/missionpack/qagame.$(SHLIBEXT) : $(MPGOBJ)
+ 	$(CC) $(SHLIBLDFLAGS) -o $@ $(MPGOBJ)
+ 
+ $(B)/missionpack/game/ai_chat.o : $(GDIR)/ai_chat.c; $(DO_SHLIB_CC)    -DMISSIONPACK 
+@@ -1367,7 +1390,7 @@
+         $(B)/baseq3/ui/q_math.o \
+         $(B)/baseq3/ui/q_shared.o
+ 
+-$(B)/baseq3/ui$(ARCH).$(SHLIBEXT) : $(Q3UIOBJ)
++$(B)/baseq3/ui.$(SHLIBEXT) : $(Q3UIOBJ)
+ 	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3UIOBJ)
+ 
+ $(B)/baseq3/ui/bg_misc.o : $(GDIR)/bg_misc.c; $(DO_SHLIB_CC) 
+@@ -1410,7 +1433,7 @@
+ $(B)/baseq3/ui/ui_startserver.o : $(Q3UIDIR)/ui_startserver.c; $(DO_SHLIB_CC) 
+ $(B)/baseq3/ui/ui_team.o : $(Q3UIDIR)/ui_team.c; $(DO_SHLIB_CC) 
+ $(B)/baseq3/ui/ui_teamorders.o : $(Q3UIDIR)/ui_teamorders.c; $(DO_SHLIB_CC) 
+-$(B)/baseq3/ui/ui_syscalls.o : $(Q3UIDIR)/ui_syscalls.c; $(DO_SHLIB_CC) 
++$(B)/baseq3/ui/ui_syscalls.o : $(UIDIR)/ui_syscalls.c; $(DO_SHLIB_CC) 
+ $(B)/baseq3/ui/ui_video.o : $(Q3UIDIR)/ui_video.c; $(DO_SHLIB_CC) 
+ 
+ # bk001205 - these wre the only SHLIB compiles in 1.17
+@@ -1450,7 +1473,7 @@
+ #	$(B)/missionpack/ui/q_math.o \
+ #	$(B)/missionpack/ui/q_shared.o
+ 
+-$(B)/missionpack/ui$(ARCH).$(SHLIBEXT) : $(MPUIOBJ)
++$(B)/missionpack/ui.$(SHLIBEXT) : $(MPUIOBJ)
+ 	$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(MPUIOBJ)
+ 
+ $(B)/missionpack/ui/ui_atoms.o : $(UIDIR)/ui_atoms.c; $(DO_SHLIB_CC)  -DMISSIONPACK  
+@@ -2059,9 +2082,9 @@
+ 
+ copyfiles:
+ 	-mkdirhier $(COPYDIR)
+-	cp $(BR)/linuxquake3 $(COPYDIR)/quake3.x86
+-	strip $(COPYDIR)/quake3.x86
+-	chmod 755 $(COPYDIR)/quake3.x86
++	cp $(BR)/linuxquake3 $(COPYDIR)/quake3
++	strip $(COPYDIR)/quake3
++	chmod 755 $(COPYDIR)/quake3
+ 	cp $(BR)/linuxq3ded $(COPYDIR)/q3ded
+ 	strip $(COPYDIR)/q3ded
+ 	chmod 755 $(COPYDIR)/q3ded
Index: cleanq3/files/patch-code-unix-cons
===================================================================
RCS file: cleanq3/files/patch-code-unix-cons
diff -N cleanq3/files/patch-code-unix-cons
--- cleanq3/files/patch-code-unix-cons	20 Mar 2006 15:21:27 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,27 +0,0 @@
---- code/unix/cons.orig	Fri Jun 14 13:01:32 2002
-+++ code/unix/cons	Wed Nov 23 10:32:49 2005
-@@ -271,11 +271,11 @@
-      # Defaults for a typical (?) UNIX platform.
-      # Your mileage may vary.
-      'unix' => [
--		'CC'             => 'cc',
--		'CFLAGS'         => '',
-+		'CC'             => $ENV{CC},
-+		'CFLAGS'         => $ENV{CFLAGS},
- 		'CCCOM'          => '%CC %CFLAGS %_IFLAGS -c %< -o %>',
--		'CXX'            => '%CC',
--		'CXXFLAGS'       => '%CFLAGS',
-+		'CXX'            => $ENV{CXX},
-+		'CXXFLAGS'       => $ENV{CXXFLAGS},
- 		'CXXCOM'         => '%CXX %CXXFLAGS %_IFLAGS -c %< -o %>',
- 		'INCDIRPREFIX'   => '-I',
- 		'INCDIRSUFFIX'   => '',
-@@ -294,7 +294,7 @@
- 		'LD'             => 'ld',
- 		'LDFLAGS'        => '',
- 		'PREFLIB'        => 'lib',
--		'ENV'            => { 'PATH' => '/bin:/usr/bin' },
-+		'ENV'            => { 'PATH' => '/bin:/usr/bin:/usr/local/bin' },
- 		],
-      );
- 
Index: cleanq3/files/patch-code-unix-unix_main.c
===================================================================
RCS file: /home/pcvs/ports/games/cleanq3/files/patch-code-unix-unix_main.c,v
retrieving revision 1.1
diff -u -r1.1 patch-code-unix-unix_main.c
--- cleanq3/files/patch-code-unix-unix_main.c	20 Mar 2006 15:21:27 -0000	1.1
+++ cleanq3/files/patch-code-unix-unix_main.c	1 Jun 2006 21:21:15 -0000
@@ -1,5 +1,5 @@
---- code/unix/unix_main.c.orig	Mon Mar 20 18:39:10 2006
-+++ code/unix/unix_main.c	Mon Mar 20 20:24:22 2006
+--- ./code/unix/unix_main.c.orig	Wed May 31 20:52:08 2006
++++ ./code/unix/unix_main.c	Wed May 31 20:52:09 2006
 @@ -722,17 +722,7 @@
    assert( name );
  
@@ -25,7 +25,7 @@
        {
 +        Com_Printf( "Sys_LoadDll(%s) failed:\n\"%s\"\n", fn, dlerror() );
 +        // FreeBSD package installation path
-+        fn = FS_BuildOSPath( "%%PREFIX%%/lib/cleanq3", gamedir, fname );
++        fn = FS_BuildOSPath( LIBDIR , gamedir, fname );
 +        Com_Printf( "Sys_LoadDll(%s)... \n", fn );
 +        libHandle = dlopen( fn, Q_RTLD );
 +
Index: cleanq3/files/patch-code-unix-unix_shared.c
===================================================================
RCS file: /home/pcvs/ports/games/cleanq3/files/patch-code-unix-unix_shared.c,v
retrieving revision 1.1
diff -u -r1.1 patch-code-unix-unix_shared.c
--- cleanq3/files/patch-code-unix-unix_shared.c	20 Mar 2006 15:21:27 -0000	1.1
+++ cleanq3/files/patch-code-unix-unix_shared.c	1 Jun 2006 21:21:15 -0000
@@ -1,11 +1,11 @@
---- code/unix/unix_shared.c.orig	Mon Aug 15 20:10:07 2005
-+++ code/unix/unix_shared.c	Sun Nov 20 18:41:22 2005
+--- ./code/unix/unix_shared.c.orig	Wed May 31 20:52:08 2006
++++ ./code/unix/unix_shared.c	Wed May 31 20:52:09 2006
 @@ -38,7 +38,7 @@
  static char cdPath[MAX_OSPATH];
  
  // Used to determine local installation path
 -static char installPath[MAX_OSPATH];
-+static char installPath[MAX_OSPATH] = %%Q3DIR%%;
++static char installPath[MAX_OSPATH] = DATADIR;
  
  // Used to determine where to store user-specific files
  static char homePath[MAX_OSPATH];
@@ -34,7 +34,7 @@
  
  	// test the wrap issue
  #if 0	
-@@ -136,7 +140,7 @@
+@@ -136,10 +140,10 @@
  
  	return ret;
  }
@@ -42,4 +42,8 @@
 +// #endif
  
  //#if 0 // bk001215 - see snapvector.nasm for replacement
- #if (defined __APPLE__) // rcg010206 - using this for PPC builds...
+-#if (defined __APPLE__) // rcg010206 - using this for PPC builds...
++#ifndef __i386__ // rcg010206 - using this for PPC builds...
+ long fastftol( float f ) { // bk001213 - from win32/win_shared.c
+   //static int tmp;
+   //	__asm fld f
=========== END ===========
Comment 3 Alejandro Pulver freebsd_committer 2006-06-04 22:49:42 UTC
LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KSGFzaDogU0hBMQ0KDQpUaGlzIG5l
dyBkaWZmIHJlcGxhY2VzIHBwYyBieSBwb3dlcnBjIGluIHRoZSBNYWtlZmlsZSBzaW5jZSBpdCdz
IHRoZQ0KY29ycmVjdCBvbmUgaW4gRnJlZUJTRC4gSXQgYWxzbyB1c2VzIGEgbGlzdCBvZiBzdXBw
b3J0ZWQgYXJjaGl0ZWN0dXJlcw0KaW5zdGVhZCBvZiBoYXJkY29kaW5nIHRoZW0uDQoNCj09PT09
PT09PT0gQkVHSU4gPT09PT09PT09PQ0KSW5kZXg6IE1ha2VmaWxlDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1Mg
ZmlsZTogL2hvbWUvcGN2cy9wb3J0cy9nYW1lcy9jbGVhbnEzL01ha2VmaWxlLHYNCnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIE1ha2VmaWxlDQotIC0tLSBNYWtlZmlsZQky
MiBBcHIgMjAwNiAyMjoxMTozMyAtMDAwMAkxLjINCisrKyBNYWtlZmlsZQk0IEp1biAyMDA2IDIx
OjQ0OjAzIC0wMDAwDQpAQCAtNyw2ICs3LDcgQEANCiANCiBQT1JUTkFNRT0JY2xlYW5xMw0KIFBP
UlRWRVJTSU9OPQkwLjUuMg0KK1BPUlRSRVZJU0lPTj0JMg0KIENBVEVHT1JJRVM9CWdhbWVzDQog
TUFTVEVSX1NJVEVTPQlodHRwOi8vdHJlbW9yLnF1YWtlZGV2LmNvbS8NCiBESVNUTkFNRT0JQ2xl
YW5RM192JHtQT1JUVkVSU0lPTn0tc3JjYmluDQpAQCAtMTQsNzIgKzE1LDEwNCBAQA0KIE1BSU5U
QUlORVI9CWRhbmZlQEZyZWVCU0Qub3JnDQogQ09NTUVOVD0JQ2xlYW5lZCB1cCBjb3B5IG9mIHRo
ZSBvcmlnaW5hbCBRdWFrZSBJSUkgQXJlbmEgc291cmNlIGNvZGUNCiANCi0gLUJVSUxEX0RFUEVO
RFM9CW5hc206JHtQT1JUU0RJUn0vZGV2ZWwvbmFzbQ0KLSAtDQogVVNFX1pJUD0JeWVzDQotIC1V
U0VfUEVSTDVfQlVJTEQ9eWVzDQogVVNFX0RPUzJVTklYPQl5ZXMNCitVU0VfR01BS0U9CXllcw0K
IFVTRV9HQ0M9CTMuMisNCi0gLVVTRV9HTD0JCXllcw0KLSAtDQogV1JLU1JDPQkJJHtXUktESVJ9
L0NsZWFuUTMNCi0gLUlOU1RESVI9CSR7V1JLU1JDfS9jb2RlL2luc3RhbGwNCitCVUlMRF9XUktT
UkM9CSR7V1JLU1JDfS9jb2RlL3VuaXgNCisNCitPUFRJT05TPQlDTElFTlQgIkJ1aWxkIGNsaWVu
dCIgb24gXA0KKwkJREVESUNBVEVEICJCdWlsZCBkZWRpY2F0ZWQgc2VydmVyIiBvbiBcDQorCQlH
QU1FTElCUyAiQnVpbGQgZ2FtZSBsaWJyYXJpZXMgKHdoZW4gbm90IG1hbmRhdG9yeSkiIG9mZiBc
DQorCQlPUFRJTUlaRURfQ0ZMQUdTICJFbmFibGUgY29tcGlsYXRpb24gb3B0aW1pemF0aW9ucyIg
b24gXA0KKwkJU01QICJCdWlsZCBTTVAgKHRocmVhZGVkKSBjbGllbnQiIG9uDQogDQotIC1QTElT
VF9GSUxFUz0JYmluL2NsZWFucTMgYmluL2NsZWFucTNkZWQgXA0KLSAtCQlsaWIvY2xlYW5xMy9i
YXNlcTMvY2dhbWUuc28gXA0KLSAtCQlsaWIvY2xlYW5xMy9iYXNlcTMvcWFnYW1lLnNvIFwNCi0g
LQkJbGliL2NsZWFucTMvYmFzZXEzL3VpLnNvIFwNCi0gLQkJbGliL2NsZWFucTMvbWlzc2lvbnBh
Y2svY2dhbWUuc28gXA0KLSAtCQlsaWIvY2xlYW5xMy9taXNzaW9ucGFjay9xYWdhbWUuc28gXA0K
LSAtCQlsaWIvY2xlYW5xMy9taXNzaW9ucGFjay91aS5zbw0KLSAtUExJU1RfRElSUz0JbGliL2Ns
ZWFucTMvYmFzZXEzIGxpYi9jbGVhbnEzL21pc3Npb25wYWNrIGxpYi9jbGVhbnEzDQorTUFLRV9F
TlY9CUxJQkRJUj0iJHtMSUJESVJ9Ig0KK1BMSVNUX1NVQj0JTElCRElSPSIke0xJQkRJUjpTLyR7
UFJFRklYfVwvLy99Ig0KIA0KLSAtT1BUSU9OUz0JT1BUSU1JWkVEX0NGTEFHUyAiQnVpbGQgd2l0
aCBleHRyYSBvcHRpbWl6YXRpb24gb3B0aW9ucyIgb24NCitMSUJESVI9CQkke1BSRUZJWH0vbGli
LyR7UE9SVE5BTUV9DQorVk1fQVJDSFM9CWkzODYgcG93ZXJwYw0KIA0KIC5pbmNsdWRlIDxic2Qu
cG9ydC5wcmUubWs+DQogDQotIC0uaWYgJHtBUkNIfSAhPSAiaTM4NiINCi0gLUJST0tFTj0JCURv
ZXMgbm90IGNvbXBpbGUgb24gJHtBUkNIfQ0KKy5pZiBkZWZpbmVkKFdJVEhPVVRfQ0xJRU5UKSAm
JiBkZWZpbmVkKFdJVEhPVVRfREVESUNBVEVEKSAmJiBcDQorICAgIGRlZmluZWQoV0lUSE9VVF9T
TVApDQorSUdOT1JFPQkJbmVlZHMgYXQgbGVhc3Qgb25lIG9mIENMSUVOVCwgREVESUNBVEVEIGFu
ZCBTTVAgb3B0aW9ucw0KIC5lbmRpZg0KIA0KLSAtLmlmICR7T1NWRVJTSU9OfSA8IDUwMDAwMA0K
LSAtQlJPS0VOPQkJRG9lcyBub3QgY29tcGlsZSBvbiA0LngNCisuaWYgJHtBUkNIfSA9PSAiaTM4
NiINCitCVUlMRF9ERVBFTkRTKz0JbmFzbToke1BPUlRTRElSfS9kZXZlbC9uYXNtDQogLmVuZGlm
DQogDQotIC0uaWYgZGVmaW5lZChXSVRIX09QVElNSVpFRF9DRkxBR1MpDQotIC1DRkxBR1M9CQkt
TzYgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZmYXN0LW1hdGggLWZhbGlnbi1sb29wcz0yIC1mYWxp
Z24tanVtcHM9MiBcDQotIC0JCS1mYWxpZ24tZnVuY3Rpb25zPTIgLWZuby1zdHJpY3QtYWxpYXNp
bmcgLWZzdHJlbmd0aC1yZWR1Y2UNCi0gLS5lbmRpZg0KLSAtDQotIC1wb3N0LXBhdGNoOiAuU0lM
RU5UDQotIC0JJHtSRUlOUExBQ0VfQ01EfSAtZSAnc3wlJUxPQ0FMQkFTRSUlfCR7TE9DQUxCQVNF
fXxnIDsgXA0KLSAtCQlzfCUlWDExQkFTRSUlfCR7WDExQkFTRX18ZyA7IHN8JSVDRkxBR1MlJXwk
e0NGTEFHU318JyBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL0NvbnN0cnVjdCAke1dSS1NSQ30vY29k
ZS91bml4L0NvbnNjcmlwdC1jbGllbnQNCi0gLQkke1JFSU5QTEFDRV9DTUR9IC1lICdzfC1sZGwg
fHwgOyBzfGkzODZcLnNvfFwuc298JyBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL2NnYW1lL0NvbnNj
cmlwdCBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL2dhbWUvQ29uc2NyaXB0ICR7V1JLU1JDfS9jb2Rl
L3EzX3VpL0NvbnNjcmlwdCBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL3VuaXgvQ29uc2NyaXB0LWRl
ZGljYXRlZCBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL3VpL0NvbnNjcmlwdA0KLSAtCSR7UkVJTlBM
QUNFX0NNRH0gLWUgJ3N8JSVRM0RJUiUlfCIke1EzRElSfSJ8JyBcDQotIC0JCSR7V1JLU1JDfS9j
b2RlL3VuaXgvdW5peF9zaGFyZWQuYw0KLSAtCSR7UkVJTlBMQUNFX0NNRH0gLWUgJ3N8JSVQUkVG
SVglJXwke1BSRUZJWH18JyBcDQotIC0JCSR7V1JLU1JDfS9jb2RlL3VuaXgvdW5peF9tYWluLmMN
Ci0gLQkke1JFSU5QTEFDRV9DTUR9IC1lICdzfGJvdGxpYi5sb2d8L2Rldi9udWxsfCcgXA0KLSAt
CQkke1dSS1NSQ30vY29kZS9ib3RsaWIvYmVfaW50ZXJmYWNlLmMNCisuZm9yIGkgaW4gJHtBUkNI
fQ0KKy4gICBpZiAke1ZNX0FSQ0hTOk0ke2l9fSAhPSAiIg0KK0hBVkVfVk1fQ09NUElMRUQ9CXll
cw0KKy4gICBlbmRpZg0KKy5lbmRmb3INCiANCi0gLWRvLWJ1aWxkOg0KLSAtCWNkICR7V1JLU1JD
fS9jb2RlICYmICR7TUFLRV9FTlZ9ICR7UEVSTH0gdW5peC9jb25zDQorLmlmICFkZWZpbmVkKEhB
VkVfVk1fQ09NUElMRUQpDQorTUFLRV9FTlYrPQlETExfT05MWT10cnVlDQorLmVuZGlmDQorDQor
LmlmICFkZWZpbmVkKFdJVEhPVVRfQ0xJRU5UKSB8fCAhZGVmaW5lZChXSVRIT1VUX1NNUCkNCitV
U0VfR0w9CQl5ZXMNCisuZW5kaWYNCisNCisuaWYgIWRlZmluZWQoV0lUSE9VVF9DTElFTlQpDQor
TUFLRV9FTlYrPQlDTElFTlQ9WUVTDQorUExJU1RfU1VCKz0JQ0xJRU5UPSIiDQorUTNCSU4rPQkJ
Y2xlYW5xMw0KKy5lbHNlDQorUExJU1RfU1VCKz0JQ0xJRU5UPSJAY29tbWVudCAiDQorLmVuZGlm
DQorDQorLmlmICFkZWZpbmVkKFdJVEhPVVRfREVESUNBVEVEKQ0KK01BS0VfRU5WKz0JREVESUNB
VEVEPVlFUw0KK1BMSVNUX1NVQis9CURFRElDQVRFRD0iIg0KK1EzQklOKz0JCWNsZWFucTNkZWQN
CisuZWxzZQ0KK1BMSVNUX1NVQis9CURFRElDQVRFRD0iQGNvbW1lbnQgIg0KKy5lbmRpZg0KKw0K
Ky5pZiBkZWZpbmVkKFdJVEhfR0FNRUxJQlMpIHx8ICFkZWZpbmVkKEhBVkVfVk1fQ09NUElMRUQp
DQorTUFLRV9FTlYrPQlHQU1FTElCUz1ZRVMNCitQTElTVF9TVUIrPQlHQU1FTElCUz0iIg0KKy5l
bHNlDQorUExJU1RfU1VCKz0JR0FNRUxJQlM9IkBjb21tZW50ICINCisuZW5kaWYNCisNCisuaWYg
IWRlZmluZWQoV0lUSE9VVF9PUFRJTUlaRURfQ0ZMQUdTKQ0KK01BS0VfRU5WKz0JT1BUSU1JWkVE
X0NGTEFHUz1ZRVMNCisuZW5kaWYNCisNCisuaWYgIWRlZmluZWQoV0lUSE9VVF9TTVApDQorTUFL
RV9FTlYrPQlTTVA9WUVTIFwNCisJCVBUSFJFQURfTElCUz0iJHtQVEhSRUFEX0xJQlN9Ig0KK1BM
SVNUX1NVQis9CVNNUD0iIg0KK1EzQklOKz0JCWNsZWFucTMtc21wDQorLmVsc2UNCitQTElTVF9T
VUIrPQlTTVA9IkBjb21tZW50ICINCisuZW5kaWYNCisNCitwb3N0LXBhdGNoOg0KKwlAJHtSRUlO
UExBQ0VfQ01EfSAtZSAnc3xib3RsaWJcLmxvZ3wvZGV2L251bGx8JyBcDQorCQkke1dSS1NSQ30v
Y29kZS9ib3RsaWIvYmVfaW50ZXJmYWNlLmMNCisJQCR7UkVJTlBMQUNFX0NNRH0gLWUgXA0KKwkJ
J3N8Ly9bWzpibGFuazpdXSpcKFN3YXBfSW5pdFtbOmJsYW5rOl1dKigpO1wpfFwxfCcgXA0KKwkJ
JHtXUktTUkN9L2NvZGUvYm90bGliL2JlX2ludGVyZmFjZS5jIFwNCisJCSR7V1JLU1JDfS9jb2Rl
L3JlbmRlcmVyL3RyX2luaXQuYw0KIA0KIGRvLWluc3RhbGw6DQotIC0JJHtJTlNUQUxMX1BST0dS
QU19ICR7SU5TVERJUn0vbGludXhxdWFrZTMgJHtQUkVGSVh9L2Jpbi9jbGVhbnEzDQotIC0JJHtJ
TlNUQUxMX1BST0dSQU19ICR7SU5TVERJUn0vbGludXhxM2RlZCAke1BSRUZJWH0vYmluL2NsZWFu
cTNkZWQNCi0gLS5mb3IgZCBpbiBiYXNlcTMgbWlzc2lvbnBhY2sNCi0gLQlAJHtNS0RJUn0gJHtQ
UkVGSVh9L2xpYi9jbGVhbnEzLyR7ZH0NCi0gLQkke0lOU1RBTExfUFJPR1JBTX0gJHtJTlNURElS
fS8ke2R9L2NnYW1lLnNvICR7UFJFRklYfS9saWIvY2xlYW5xMy8ke2R9DQotIC0JJHtJTlNUQUxM
X1BST0dSQU19ICR7SU5TVERJUn0vJHtkfS9xYWdhbWUuc28gJHtQUkVGSVh9L2xpYi9jbGVhbnEz
LyR7ZH0NCi0gLQkke0lOU1RBTExfUFJPR1JBTX0gJHtJTlNURElSfS8ke2R9L3VpLnNvICR7UFJF
RklYfS9saWIvY2xlYW5xMy8ke2R9DQorLmZvciBiaW4gaW4gJHtRM0JJTn0NCisJJHtJTlNUQUxM
X1BST0dSQU19ICR7QlVJTERfV1JLU1JDfS9yZWxlYXNlLyR7YmlufSAke1BSRUZJWH0vYmluDQog
LmVuZGZvcg0KKy5pZiBkZWZpbmVkKFdJVEhfR0FNRUxJQlMpIHx8ICFkZWZpbmVkKEhBVkVfVk1f
Q09NUElMRUQpDQorLmZvciBkaXIgaW4gYmFzZXEzIG1pc3Npb25wYWNrDQorCSR7TUtESVJ9ICR7
TElCRElSfS8ke2Rpcn0NCisJJHtJTlNUQUxMX1BST0dSQU19ICR7QlVJTERfV1JLU1JDfS9yZWxl
YXNlLyR7ZGlyfS8qLnNvICR7TElCRElSfS8ke2Rpcn0NCisuZW5kZm9yDQorLmVuZGlmDQogDQog
LmluY2x1ZGUgIiR7LkNVUkRJUn0vLi4vcXVha2UzLWRhdGEvTWFrZWZpbGUuaW5jbHVkZSINCi0g
LQ0KIC5pbmNsdWRlIDxic2QucG9ydC5wb3N0Lm1rPg0KSW5kZXg6IHBrZy1wbGlzdA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KUkNTIGZpbGU6IHBrZy1wbGlzdA0KZGlmZiAtTiBwa2ctcGxpc3QNCi0gLS0tIC9kZXYv
bnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwDQorKysgcGtnLXBsaXN0CTQgSnVuIDIwMDYg
MjE6NDQ6MDMgLTAwMDANCkBAIC0wLDAgKzEsMTMgQEANCislJURFRElDQVRFRCUlYmluL2NsZWFu
cTNkZWQNCislJUNMSUVOVCUlYmluL2NsZWFucTMNCislJVNNUCUlYmluL2NsZWFucTMtc21wDQor
JSVHQU1FTElCUyUlJSVMSUJESVIlJS9iYXNlcTMvY2dhbWUuc28NCislJUdBTUVMSUJTJSUlJUxJ
QkRJUiUlL2Jhc2VxMy9xYWdhbWUuc28NCislJUdBTUVMSUJTJSUlJUxJQkRJUiUlL2Jhc2VxMy91
aS5zbw0KKyUlR0FNRUxJQlMlJSUlTElCRElSJSUvbWlzc2lvbnBhY2svY2dhbWUuc28NCislJUdB
TUVMSUJTJSUlJUxJQkRJUiUlL21pc3Npb25wYWNrL3FhZ2FtZS5zbw0KKyUlR0FNRUxJQlMlJSUl
TElCRElSJSUvbWlzc2lvbnBhY2svdWkuc28NCislJUdBTUVMSUJTJSVAZGlycm0gJSVMSUJESVIl
JS9taXNzaW9ucGFjaw0KKyUlR0FNRUxJQlMlJUBkaXJybSAlJUxJQkRJUiUlL2Jhc2VxMw0KKyUl
R0FNRUxJQlMlJUBkaXJybSAlJUxJQkRJUiUlDQorDQpJbmRleDogZmlsZXMvcGF0Y2gtY29kZS1D
b25zdHJ1Y3QNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLUNvbnN0cnVj
dA0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLUNvbnN0cnVjdA0KLSAtLS0gZmlsZXMvcGF0Y2gt
Y29kZS1Db25zdHJ1Y3QJMjAgTWFyIDIwMDYgMTU6MjE6MjcgLTAwMDAJMS4xDQorKysgL2Rldi9u
dWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCkBAIC0xLDY4ICswLDAgQEANCi0gLS0tLSBj
b2RlL0NvbnN0cnVjdC5vcmlnCU1vbiBNYXIgMjAgMTg6MTk6MDkgMjAwNg0KLSAtKysrIGNvZGUv
Q29uc3RydWN0CU1vbiBNYXIgMjAgMTg6Mzc6MTIgMjAwNg0KLSAtQEAgLTE5LDggKzE5LDggQEAN
Ci0gLSB1c2UgQ29uc19nY2M7DQotIC0gDQotIC0gIyBkZWZhdWx0cw0KLSAtLSRjb25maWcgPSAn
ZGVidWcnOw0KLSAtLSRkb19zbXAgPSAxOw0KLSAtKyRjb25maWcgPSAncmVsZWFzZSc7DQotIC0r
JGRvX3NtcCA9IDA7DQotIC0gJGRvX21hc3RlcnNlcnZlciA9IDA7DQotIC0gJGRvX2F1dGhzZXJ2
ZXIgPSAwOw0KLSAtICRkb19hdXRocG9ydCA9IDA7DQotIC1AQCAtMzAsMTAgKzMwLDEwIEBADQot
IC0gJGRvX3BrMyA9IDA7DQotIC0gIyB0aG9zZSBhcmUgZXhwb3J0ZWQNCi0gLSAkRE9fV0lOMzIg
PSAwOw0KLSAtLSROT19WTSA9IDA7DQotIC0rJE5PX1ZNID0gMTsNCi0gLSAkTk9fU08gPSAwOw0K
LSAtLSRDQz0nZ2NjJzsNCi0gLS0kQ1hYPSdnKysnOw0KLSAtKyRDQz0kRU5We0NDfTsNCi0gLSsk
Q1hYPSRFTlZ7Q1hYfTsNCi0gLSANCi0gLSAjIGRldGVjdCBhbiBzZGsgYnVpbGQgKGRvbid0IGF0
dGVtcHQgY2xpZW50IGJ1aWxkIGFuZCBvdGhlciB0aGluZ3MpDQotIC0gaWYgKCAtciAndW5peC9D
b25zY3JpcHQtY2xpZW50JyApDQotIC1AQCAtNjMsOSArNjMsNiBAQA0KLSAtIGVsc2UNCi0gLSB7
DQotIC0gCSMgbGliYyAuLiBkbyB0aGUgbGl0dGxlIG1hZ2ljIQ0KLSAtLQkkbGliY19jbWQgPSAn
L2xpYi9saWJjLnNvLjYgfGdyZXAgIkdOVSBDICJ8Z3JlcCB2ZXJzaW9ufGF3ayAtRiAidmVyc2lv
biAiIFwneyBwcmludCAkMiB9XCd8Y3V0IC1iIC0zJzsNCi0gLS0JJGxpYmMgPSBgJGxpYmNfY21k
YDsNCi0gLS0JY2hvcCAoJGxpYmMpOw0KLSAtIH0NCi0gLSANCi0gLSBpZiAoJERPX1dJTjMyIGVx
IDEpDQotIC1AQCAtMjI3LDcgKzIyNCw3IEBADQotIC0gIyBidWlsZCB0aGUgY29uZmlnIGRpcmVj
dG9yeQ0KLSAtICRDT05GSUdfRElSID0gJGNvbmZpZyAuICctJyAuICRjcHUgLiAnLScgLiAkT1Mg
LiAnLScgLiAkbGliYzsNCi0gLSANCi0gLS0kQ09NTU9OX0NGTEFHUyA9ICctcGlwZSAtZnNpZ25l
ZC1jaGFyICc7DQotIC0rJENPTU1PTl9DRkxBR1MgPSAnLXBpcGUgLWZzaWduZWQtY2hhciAtSSUl
TE9DQUxCQVNFJSUvaW5jbHVkZSAtTCUlTE9DQUxCQVNFJSUvbGliIC1JJSVYMTFCQVNFJSUvaW5j
bHVkZSAtTCUlWDExQkFTRSUlL2xpYiAnOw0KLSAtIA0KLSAtIGlmICgkY29uZmlnIGVxICdkZWJ1
ZycpDQotIC0gew0KLSAtQEAgLTIzNyw3ICsyMzQsNyBAQA0KLSAtIH0NCi0gLSBlbHNlDQotIC0g
ew0KLSAtLSAgJEJBU0VfQ0ZMQUdTID0gJENPTU1PTl9DRkxBR1MgLiAnLUROREVCVUcgLU82IC1t
Y3B1PXBlbnRpdW1wcm8gLW1hcmNoPXBlbnRpdW0gLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZmYXN0
LW1hdGggLW1hbGlnbi1sb29wcz0yIC1tYWxpZ24tanVtcHM9MiAtbWFsaWduLWZ1bmN0aW9ucz0y
IC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mc3RyZW5ndGgtcmVkdWNlICc7DQotIC0rICAkQkFTRV9D
RkxBR1MgPSAkQ09NTU9OX0NGTEFHUyAuICctRE5ERUJVRyAlJUNGTEFHUyUlICc7DQotIC0gCSRC
U1BDX0JBU0VfQ0ZMQUdTID0gJEJBU0VfQ0ZMQUdTIC4gJy1ETElOVVggLURCU1BDIC1Ec3RyaWNt
cD1zdHJjYXNlY21wICc7DQotIC0gfQ0KLSAtIA0KLSAtQEAgLTMwMiw5ICsyOTksOSBAQA0KLSAt
IH0NCi0gLSANCi0gLSAjIGJ1aWxkIHRvb2xzDQotIC0tJGVudl90b29scyA9IG5ldyBjb25zKCk7
DQotIC0tQ29tbWFuZCAkZW52X3Rvb2xzICdxdm10b29scy9xM2xjYycsICdbcGVybF0gJmJ1aWxk
X3Rvb2xzKFwncTNsY2NcJyknOw0KLSAtLUNvbW1hbmQgJGVudl90b29scyAncXZtdG9vbHMvcTNh
c20nLCAnW3BlcmxdICZidWlsZF90b29scyhcJ3EzYXNtXCcpJzsNCi0gLSsjJGVudl90b29scyA9
IG5ldyBjb25zKCk7DQotIC0rI0NvbW1hbmQgJGVudl90b29scyAncXZtdG9vbHMvcTNsY2MnLCAn
W3BlcmxdICZidWlsZF90b29scyhcJ3EzbGNjXCcpJzsNCi0gLSsjQ29tbWFuZCAkZW52X3Rvb2xz
ICdxdm10b29scy9xM2FzbScsICdbcGVybF0gJmJ1aWxkX3Rvb2xzKFwncTNhc21cJyknOw0KLSAt
IA0KLSAtIGlmICgkZG9fYnNwYyBlcSAxKQ0KLSAtIHsNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2Rl
LWNnYW1lLWNnX3dlYXBvbnMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGZpbGVzL3BhdGNoLWNv
ZGUtY2dhbWUtY2dfd2VhcG9ucy5jDQpkaWZmIC1OIGZpbGVzL3BhdGNoLWNvZGUtY2dhbWUtY2df
d2VhcG9ucy5jDQotIC0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysr
IGZpbGVzL3BhdGNoLWNvZGUtY2dhbWUtY2dfd2VhcG9ucy5jCTQgSnVuIDIwMDYgMjE6NDQ6MDMg
LTAwMDANCkBAIC0wLDAgKzEsMjMgQEANCistLS0gLi9jb2RlL2NnYW1lL2NnX3dlYXBvbnMuYy5v
cmlnCVdlZCBNYXkgMzEgMjA6NTI6MDYgMjAwNg0KKysrKyAuL2NvZGUvY2dhbWUvY2dfd2VhcG9u
cy5jCVdlZCBNYXkgMzEgMjA6NTI6NTQgMjAwNg0KK0BAIC02MzYsMTcgKzYzNiwxNyBAQA0KKyAJ
fQ0KKyANCisgCXN0cmNweSggcGF0aCwgaXRlbS0+d29ybGRfbW9kZWxbMF0gKTsNCistCUNPTV9T
dHJpcEV4dGVuc2lvbiggcGF0aCwgcGF0aCApOw0KKysJQ09NX1N0cmlwRXh0ZW5zaW9uKCBwYXRo
LCBwYXRoLCBzaXplb2YocGF0aCkgKTsNCisgCXN0cmNhdCggcGF0aCwgIl9mbGFzaC5tZDMiICk7
DQorIAl3ZWFwb25JbmZvLT5mbGFzaE1vZGVsID0gdHJhcF9SX1JlZ2lzdGVyTW9kZWwoIHBhdGgg
KTsNCisgDQorIAlzdHJjcHkoIHBhdGgsIGl0ZW0tPndvcmxkX21vZGVsWzBdICk7DQorLQlDT01f
U3RyaXBFeHRlbnNpb24oIHBhdGgsIHBhdGggKTsNCisrCUNPTV9TdHJpcEV4dGVuc2lvbiggcGF0
aCwgcGF0aCwgc2l6ZW9mKHBhdGgpICk7DQorIAlzdHJjYXQoIHBhdGgsICJfYmFycmVsLm1kMyIg
KTsNCisgCXdlYXBvbkluZm8tPmJhcnJlbE1vZGVsID0gdHJhcF9SX1JlZ2lzdGVyTW9kZWwoIHBh
dGggKTsNCisgDQorIAlzdHJjcHkoIHBhdGgsIGl0ZW0tPndvcmxkX21vZGVsWzBdICk7DQorLQlD
T01fU3RyaXBFeHRlbnNpb24oIHBhdGgsIHBhdGggKTsNCisrCUNPTV9TdHJpcEV4dGVuc2lvbigg
cGF0aCwgcGF0aCwgc2l6ZW9mKHBhdGgpICk7DQorIAlzdHJjYXQoIHBhdGgsICJfaGFuZC5tZDMi
ICk7DQorIAl3ZWFwb25JbmZvLT5oYW5kc01vZGVsID0gdHJhcF9SX1JlZ2lzdGVyTW9kZWwoIHBh
dGggKTsNCisgDQpJbmRleDogZmlsZXMvcGF0Y2gtY29kZS1nYW1lLXFfc2hhcmVkLmMNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLWdhbWUtcV9zaGFyZWQuYw0KZGlmZiAt
TiBmaWxlcy9wYXRjaC1jb2RlLWdhbWUtcV9zaGFyZWQuYw0KLSAtLS0gL2Rldi9udWxsCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDANCisrKyBmaWxlcy9wYXRjaC1jb2RlLWdhbWUtcV9zaGFyZWQu
Ywk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAtMCwwICsxLDExMyBAQA0KKy0tLSAuL2Nv
ZGUvZ2FtZS9xX3NoYXJlZC5jLm9yaWcJV2VkIE1heSAzMSAyMDo1MjowNiAyMDA2DQorKysrIC4v
Y29kZS9nYW1lL3Ffc2hhcmVkLmMJV2VkIE1heSAzMSAyMDo1NDoyNiAyMDA2DQorQEAgLTM4LDE0
ICszOCwyMSBAQA0KKyBDT01fU3RyaXBFeHRlbnNpb24NCisgPT09PT09PT09PT09DQorICovDQor
LXZvaWQgQ09NX1N0cmlwRXh0ZW5zaW9uKCBjb25zdCBjaGFyICppbiwgY2hhciAqb3V0ICkgew0K
Ky0Jd2hpbGUgKCAqaW4gJiYgKmluICE9ICcuJyApIHsNCistCQkqb3V0KysgPSAqaW4rKzsNCisr
dm9pZCBDT01fU3RyaXBFeHRlbnNpb24oIGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQsIGludCBk
ZXN0c2l6ZSApIHsNCisrCWludAlsZW5ndGg7DQorKw0KKysJUV9zdHJuY3B5eihvdXQsIGluLCBk
ZXN0c2l6ZSk7DQorKw0KKysJbGVuZ3RoID0gc3RybGVuKG91dCktMTsNCisrCXdoaWxlIChsZW5n
dGggPiAwICYmIG91dFtsZW5ndGhdICE9ICcuJykgew0KKysJCWxlbmd0aC0tOw0KKysJCWlmIChv
dXRbbGVuZ3RoXSA9PSAnLycpDQorKwkJCXJldHVybjsJCS8vIG5vIGV4dGVuc2lvbg0KKyAJfQ0K
Ky0JKm91dCA9IDA7DQorKwlpZiAobGVuZ3RoKQ0KKysJCW91dFtsZW5ndGhdID0gMDsNCisgfQ0K
KyANCistDQorIC8qDQorID09PT09PT09PT09PT09PT09PQ0KKyBDT01fRGVmYXVsdEV4dGVuc2lv
bg0KK0BAIC03OSwyOSArODYsMjggQEANCisgDQorID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKi8N
CistLyoNCisrDQorIC8vIGNhbid0IGp1c3QgdXNlIGZ1bmN0aW9uIHBvaW50ZXJzLCBvciBkbGwg
bGlua2FnZSBjYW4NCisgLy8gbWVzcyB1cCB3aGVuIHFjb21tb24gaXMgaW5jbHVkZWQgaW4gbXVs
dGlwbGUgcGxhY2VzDQorLXN0YXRpYyBzaG9ydAkoKl9CaWdTaG9ydCkgKHNob3J0IGwpOw0KKy1z
dGF0aWMgc2hvcnQJKCpfTGl0dGxlU2hvcnQpIChzaG9ydCBsKTsNCistc3RhdGljIGludAkJKCpf
QmlnTG9uZykgKGludCBsKTsNCistc3RhdGljIGludAkJKCpfTGl0dGxlTG9uZykgKGludCBsKTsN
Cisrc3RhdGljIGludDE2X3QJKCpfQmlnU2hvcnQpIChpbnQxNl90IGwpOw0KKytzdGF0aWMgaW50
MTZfdAkoKl9MaXR0bGVTaG9ydCkgKGludDE2X3QgbCk7DQorK3N0YXRpYyBpbnQzMl90CSgqX0Jp
Z0xvbmcpIChpbnQzMl90IGwpOw0KKytzdGF0aWMgaW50MzJfdAkoKl9MaXR0bGVMb25nKSAoaW50
MzJfdCBsKTsNCisgc3RhdGljIHFpbnQ2NAkoKl9CaWdMb25nNjQpIChxaW50NjQgbCk7DQorIHN0
YXRpYyBxaW50NjQJKCpfTGl0dGxlTG9uZzY0KSAocWludDY0IGwpOw0KKyBzdGF0aWMgZmxvYXQJ
KCpfQmlnRmxvYXQpIChjb25zdCBmbG9hdCAqbCk7DQorIHN0YXRpYyBmbG9hdAkoKl9MaXR0bGVG
bG9hdCkgKGNvbnN0IGZsb2F0ICpsKTsNCisgDQorLXNob3J0CUJpZ1Nob3J0KHNob3J0IGwpe3Jl
dHVybiBfQmlnU2hvcnQobCk7fQ0KKy1zaG9ydAlMaXR0bGVTaG9ydChzaG9ydCBsKSB7cmV0dXJu
IF9MaXR0bGVTaG9ydChsKTt9DQorLWludAkJQmlnTG9uZyAoaW50IGwpIHtyZXR1cm4gX0JpZ0xv
bmcobCk7fQ0KKy1pbnQJCUxpdHRsZUxvbmcgKGludCBsKSB7cmV0dXJuIF9MaXR0bGVMb25nKGwp
O30NCisraW50MTZfdAlCaWdTaG9ydChpbnQxNl90IGwpe3JldHVybiBfQmlnU2hvcnQobCk7fQ0K
KytpbnQxNl90CUxpdHRsZVNob3J0KGludDE2X3QgbCkge3JldHVybiBfTGl0dGxlU2hvcnQobCk7
fQ0KKytpbnQzMl90CUJpZ0xvbmcgKGludDMyX3QgbCkge3JldHVybiBfQmlnTG9uZyhsKTt9DQor
K2ludDMyX3QJTGl0dGxlTG9uZyAoaW50MzJfdCBsKSB7cmV0dXJuIF9MaXR0bGVMb25nKGwpO30N
CisgcWludDY0IAlCaWdMb25nNjQgKHFpbnQ2NCBsKSB7cmV0dXJuIF9CaWdMb25nNjQobCk7fQ0K
KyBxaW50NjQgCUxpdHRsZUxvbmc2NCAocWludDY0IGwpIHtyZXR1cm4gX0xpdHRsZUxvbmc2NChs
KTt9DQorLWZsb2F0CUJpZ0Zsb2F0IChjb25zdCBmbG9hdCAqbCkge3JldHVybiBfQmlnRmxvYXQo
bCk7fQ0KKy1mbG9hdAlMaXR0bGVGbG9hdCAoY29uc3QgZmxvYXQgKmwpIHtyZXR1cm4gX0xpdHRs
ZUZsb2F0KGwpO30NCistKi8NCisrZmxvYXQJQmlnRmxvYXQgKGZsb2F0IGwpIHtyZXR1cm4gX0Jp
Z0Zsb2F0KCZsKTt9DQorK2Zsb2F0CUxpdHRsZUZsb2F0IChmbG9hdCBsKSB7cmV0dXJuIF9MaXR0
bGVGbG9hdCgmbCk7fQ0KKyANCistc2hvcnQgICBTaG9ydFN3YXAgKHNob3J0IGwpDQorK2ludDE2
X3QJU2hvcnRTd2FwIChpbnQxNl90IGwpDQorIHsNCisgCWJ5dGUgICAgYjEsYjI7DQorIA0KK0BA
IC0xMTEsMTIgKzExNywxMiBAQA0KKyAJcmV0dXJuIChiMTw8OCkgKyBiMjsNCisgfQ0KKyANCist
c2hvcnQJU2hvcnROb1N3YXAgKHNob3J0IGwpDQorK2ludDE2X3QJU2hvcnROb1N3YXAgKGludDE2
X3QgbCkNCisgew0KKyAJcmV0dXJuIGw7DQorIH0NCisgDQorLWludCAgICBMb25nU3dhcCAoaW50
IGwpDQorK2ludDMyX3QJTG9uZ1N3YXAgKGludDMyX3QgbCkNCisgew0KKyAJYnl0ZSAgICBiMSxi
MixiMyxiNDsNCisgDQorQEAgLTEyOCw3ICsxMzQsNyBAQA0KKyAJcmV0dXJuICgoaW50KWIxPDwy
NCkgKyAoKGludCliMjw8MTYpICsgKChpbnQpYjM8PDgpICsgYjQ7DQorIH0NCisgDQorLWludAlM
b25nTm9Td2FwIChpbnQgbCkNCisraW50MzJfdAlMb25nTm9Td2FwIChpbnQzMl90IGwpDQorIHsN
CisgCXJldHVybiBsOw0KKyB9DQorQEAgLTE3OSw3ICsxODUsNyBAQA0KKyBTd2FwX0luaXQNCisg
PT09PT09PT09PT09PT09PQ0KKyAqLw0KKy0vKg0KKysNCisgdm9pZCBTd2FwX0luaXQgKHZvaWQp
DQorIHsNCisgCWJ5dGUJc3dhcHRlc3RbMl0gPSB7MSwwfTsNCitAQCAtMjA5LDcgKzIxNSw3IEBA
DQorIAl9DQorIA0KKyB9DQorLSovDQorKw0KKyANCisgLyoNCisgPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KSW5kZXg6IGZpbGVzL3BhdGNoLWNvZGUtZ2FtZS1xX3NoYXJlZC5oDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpS
Q1MgZmlsZTogL2hvbWUvcGN2cy9wb3J0cy9nYW1lcy9jbGVhbnEzL2ZpbGVzL3BhdGNoLWNvZGUt
Z2FtZS1xX3NoYXJlZC5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xDQpkaWZmIC11IC1yMS4x
IHBhdGNoLWNvZGUtZ2FtZS1xX3NoYXJlZC5oDQotIC0tLSBmaWxlcy9wYXRjaC1jb2RlLWdhbWUt
cV9zaGFyZWQuaAkyMCBNYXIgMjAwNiAxNToyMToyNyAtMDAwMAkxLjENCisrKyBmaWxlcy9wYXRj
aC1jb2RlLWdhbWUtcV9zaGFyZWQuaAk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAtMSw2
ICsxLDkyIEBADQotIC0tLS0gY29kZS9nYW1lL3Ffc2hhcmVkLmgub3JpZwlUdWUgQXVnIDE2IDAy
OjEwOjA3IDIwMDUNCi0gLSsrKyBjb2RlL2dhbWUvcV9zaGFyZWQuaAlUdWUgQXVnIDIzIDE0OjE2
OjM0IDIwMDUNCi0gLUBAIC00NTIsMTMgKzQ1Miw5IEBADQorLS0tIC4vY29kZS9nYW1lL3Ffc2hh
cmVkLmgub3JpZwlXZWQgTWF5IDMxIDIwOjUyOjA2IDIwMDYNCisrKysgLi9jb2RlL2dhbWUvcV9z
aGFyZWQuaAlXZWQgTWF5IDMxIDIwOjU0OjMzIDIwMDYNCitAQCAtMTI2LDEyICsxMjYsMTQgQEAN
CisgDQorICNkZWZpbmUgSURfSU5MSU5FIF9faW5saW5lIA0KKyANCisrI2lmIDANCisgc3RhdGlj
IElEX0lOTElORSBzaG9ydCBCaWdTaG9ydCggc2hvcnQgbCkgeyByZXR1cm4gU2hvcnRTd2FwKGwp
OyB9DQorICNkZWZpbmUgTGl0dGxlU2hvcnQNCisgc3RhdGljIElEX0lOTElORSBpbnQgQmlnTG9u
ZyhpbnQgbCkgeyBMb25nU3dhcChsKTsgfQ0KKyAjZGVmaW5lIExpdHRsZUxvbmcNCisgc3RhdGlj
IElEX0lOTElORSBmbG9hdCBCaWdGbG9hdChjb25zdCBmbG9hdCAqbCkgeyBGbG9hdFN3YXAobCk7
IH0NCisgI2RlZmluZSBMaXR0bGVGbG9hdA0KKysjZW5kaWYNCisgDQorICNkZWZpbmUJUEFUSF9T
RVAgJ1xcJw0KKyANCitAQCAtMTgyLDEyICsxODQsMTQgQEANCisgICAgIHJldHVybiBmaTsNCisg
fQ0KKyANCisrI2lmIDANCisgI2RlZmluZSBCaWdTaG9ydA0KKyBzdGF0aWMgaW5saW5lIHNob3J0
IExpdHRsZVNob3J0KHNob3J0IGwpIHsgcmV0dXJuIFNob3J0U3dhcChsKTsgfQ0KKyAjZGVmaW5l
IEJpZ0xvbmcNCisgc3RhdGljIGlubGluZSBpbnQgTGl0dGxlTG9uZyAoaW50IGwpIHsgcmV0dXJu
IExvbmdTd2FwKGwpOyB9DQorICNkZWZpbmUgQmlnRmxvYXQNCisgc3RhdGljIGlubGluZSBmbG9h
dCBMaXR0bGVGbG9hdCAoY29uc3QgZmxvYXQgbCkgeyByZXR1cm4gRmxvYXRTd2FwKCZsKTsgfQ0K
KysjZW5kaWYNCisgDQorICNlbmRpZg0KKyANCitAQCAtMjA1LDEyICsyMDksMTQgQEANCisgDQor
IHZvaWQgU3lzX1B1bXBFdmVudHMoIHZvaWQgKTsNCisgDQorKyNpZiAwDQorICNkZWZpbmUgQmln
U2hvcnQNCisgc3RhdGljIGlubGluZSBzaG9ydCBMaXR0bGVTaG9ydChzaG9ydCBsKSB7IHJldHVy
biBTaG9ydFN3YXAobCk7IH0NCisgI2RlZmluZSBCaWdMb25nDQorIHN0YXRpYyBpbmxpbmUgaW50
IExpdHRsZUxvbmcgKGludCBsKSB7IHJldHVybiBMb25nU3dhcChsKTsgfQ0KKyAjZGVmaW5lIEJp
Z0Zsb2F0DQorIHN0YXRpYyBpbmxpbmUgZmxvYXQgTGl0dGxlRmxvYXQgKGNvbnN0IGZsb2F0IGwp
IHsgcmV0dXJuIEZsb2F0U3dhcCgmbCk7IH0NCisrI2VuZGlmDQorIA0KKyAjZW5kaWYNCisgDQor
QEAgLTI0NCw2ICsyNTAsNyBAQA0KKyAjZGVmaW5lCUJPVExJQl9IQVJEX0xJTktFRA0KKyAjZW5k
aWYNCisgDQorKyNpZiAwDQorICNpZiAhaWRwcGMNCisgaW5saW5lIHN0YXRpYyBzaG9ydCBCaWdT
aG9ydCggc2hvcnQgbCkgeyByZXR1cm4gU2hvcnRTd2FwKGwpOyB9DQorICNkZWZpbmUgTGl0dGxl
U2hvcnQNCitAQCAtMjU5LDYgKzI2Niw3IEBADQorICNkZWZpbmUgQmlnRmxvYXQNCisgaW5saW5l
IHN0YXRpYyBmbG9hdCBMaXR0bGVGbG9hdCAoY29uc3QgZmxvYXQgKmwpIHsgcmV0dXJuIEZsb2F0
U3dhcChsKTsgfQ0KKyAjZW5kaWYNCisrI2VuZGlmDQorIA0KKyAjZW5kaWYNCisgDQorQEAgLTI4
MCw4ICsyODgsMTYgQEANCisgDQorICNkZWZpbmUJUEFUSF9TRVAgJy8nDQorIA0KKysjaW5jbHVk
ZSA8bWFjaGluZS9wYXJhbS5oPg0KKysjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMDANCisr
I2luY2x1ZGUgPGludHR5cGVzLmg+DQorKyNlbHNlDQorKyNpbmNsdWRlIDxzdGRpbnQuaD4NCisr
I2VuZGlmDQorKw0KKyAvLyBiazAxMDExNiAtIG9taXR0ZWQgUTNTVEFUSUMgKHNlZSBMaW51eCBh
Ym92ZSksIGJyb2tlbiB0YXJnZXQNCisgDQorKyNpZiAwDQorICNpZiAhaWRwcGMNCisgc3RhdGlj
IHNob3J0IEJpZ1Nob3J0KCBzaG9ydCBsKSB7IHJldHVybiBTaG9ydFN3YXAobCk7IH0NCisgI2Rl
ZmluZSBMaXR0bGVTaG9ydA0KK0BAIC0yOTcsNiArMzEzLDcgQEANCisgI2RlZmluZSBCaWdGbG9h
dA0KKyBzdGF0aWMgZmxvYXQgTGl0dGxlRmxvYXQgKGNvbnN0IGZsb2F0ICpsKSB7IHJldHVybiBG
bG9hdFN3YXAobCk7IH0NCisgI2VuZGlmDQorKyNlbmRpZg0KKyANCisgI2VuZGlmDQorIA0KK0BA
IC00MjgsMTMgKzQ0NSw5IEBADQogIHZvaWQgKkh1bmtfQWxsb2MoIGludCBzaXplLCBoYV9wcmVm
IHByZWZlcmVuY2UgKTsNCiAgI2VuZGlmDQogIA0KQEAgLTE0LDMgKzEwMCw0MSBAQA0KICANCiAg
I2lmICEoIGRlZmluZWQgX19WRUNUT1JDICkNCiAgdm9pZCBDb21fTWVtc2V0ICh2b2lkKiBkZXN0
LCBjb25zdCBpbnQgdmFsLCBjb25zdCBzaXplX3QgY291bnQpOw0KK0BAIC03NjMsNyArNzc2LDcg
QEANCisgZmxvYXQgQ29tX0NsYW1wKCBmbG9hdCBtaW4sIGZsb2F0IG1heCwgZmxvYXQgdmFsdWUg
KTsNCisgDQorIGNoYXIJKkNPTV9Ta2lwUGF0aCggY2hhciAqcGF0aG5hbWUgKTsNCistdm9pZAlD
T01fU3RyaXBFeHRlbnNpb24oIGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQgKTsNCisrdm9pZAlD
T01fU3RyaXBFeHRlbnNpb24oIGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQsIGludCBkZXN0c2l6
ZSApOw0KKyB2b2lkCUNPTV9EZWZhdWx0RXh0ZW5zaW9uKCBjaGFyICpwYXRoLCBpbnQgbWF4U2l6
ZSwgY29uc3QgY2hhciAqZXh0ZW5zaW9uICk7DQorIA0KKyB2b2lkCUNPTV9CZWdpblBhcnNlU2Vz
c2lvbiggY29uc3QgY2hhciAqbmFtZSApOw0KK0BAIC04NjQsMTggKzg3NywxOCBAQA0KKyB9IHFp
bnQ2NDsNCisgDQorIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQorLS8qDQorLXNob3J0CUJpZ1Nob3J0KHNob3J0IGwpOw0KKy1zaG9ydAlMaXR0bGVTaG9y
dChzaG9ydCBsKTsNCistaW50CQlCaWdMb25nIChpbnQgbCk7DQorLWludAkJTGl0dGxlTG9uZyAo
aW50IGwpOw0KKy1xaW50NjQgIEJpZ0xvbmc2NCAocWludDY0IGwpOw0KKy1xaW50NjQgIExpdHRs
ZUxvbmc2NCAocWludDY0IGwpOw0KKy1mbG9hdAlCaWdGbG9hdCAoY29uc3QgZmxvYXQgKmwpOw0K
Ky1mbG9hdAlMaXR0bGVGbG9hdCAoY29uc3QgZmxvYXQgKmwpOw0KKysNCisraW50MTZfdAlCaWdT
aG9ydChpbnQxNl90IGwpOw0KKytpbnQxNl90CUxpdHRsZVNob3J0KGludDE2X3QgbCk7DQorK2lu
dDMyX3QJQmlnTG9uZyAoaW50MzJfdCBsKTsNCisraW50MzJfdAlMaXR0bGVMb25nIChpbnQzMl90
IGwpOw0KKytxaW50NjQJQmlnTG9uZzY0IChxaW50NjQgbCk7DQorK3FpbnQ2NAlMaXR0bGVMb25n
NjQgKHFpbnQ2NCBsKTsNCisrZmxvYXQJQmlnRmxvYXQgKGZsb2F0IGwpOw0KKytmbG9hdAlMaXR0
bGVGbG9hdCAoZmxvYXQgbCk7DQorIA0KKyB2b2lkCVN3YXBfSW5pdCAodm9pZCk7DQorLSovDQor
Kw0KKyBjaGFyCSogUURFQ0wgdmEoY2hhciAqZm9ybWF0LCAuLi4pOw0KKyANCisgLy89PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkluZGV4OiBmaWxlcy9wYXRj
aC1jb2RlLXEzX3VpLXVpX3BsYXllcm1vZGVsLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxl
cy9wYXRjaC1jb2RlLXEzX3VpLXVpX3BsYXllcm1vZGVsLmMNCmRpZmYgLU4gZmlsZXMvcGF0Y2gt
Y29kZS1xM191aS11aV9wbGF5ZXJtb2RlbC5jDQotIC0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMA0KKysrIGZpbGVzL3BhdGNoLWNvZGUtcTNfdWktdWlfcGxheWVybW9kZWwu
Ywk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAtMCwwICsxLDExIEBADQorLS0tIC4vY29k
ZS9xM191aS91aV9wbGF5ZXJtb2RlbC5jLm9yaWcJV2VkIE1heSAzMSAyMDo1MjowNyAyMDA2DQor
KysrIC4vY29kZS9xM191aS91aV9wbGF5ZXJtb2RlbC5jCVdlZCBNYXkgMzEgMjA6NTQ6NTAgMjAw
Ng0KK0BAIC00MDQsNyArNDA0LDcgQEANCisgCQl7DQorIAkJCWZpbGVsZW4gPSBzdHJsZW4oZmls
ZXB0cik7DQorIA0KKy0JCQlDT01fU3RyaXBFeHRlbnNpb24oZmlsZXB0cixza2lubmFtZSk7DQor
KwkJCUNPTV9TdHJpcEV4dGVuc2lvbihmaWxlcHRyLCBza2lubmFtZSwgc2l6ZW9mKHNraW5uYW1l
KSk7DQorIA0KKyAJCQkvLyBsb29rIGZvciBpY29uXz8/Pz8NCisgCQkJaWYgKCFRX3N0cmljbXBu
KHNraW5uYW1lLCJpY29uXyIsNSkpDQpJbmRleDogZmlsZXMvcGF0Y2gtY29kZS1xM191aS11aV9w
bGF5ZXJzLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLXEzX3VpLXVp
X3BsYXllcnMuYw0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLXEzX3VpLXVpX3BsYXllcnMuYw0K
LSAtLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCisrKyBmaWxlcy9wYXRj
aC1jb2RlLXEzX3VpLXVpX3BsYXllcnMuYwk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAt
MCwwICsxLDE4IEBADQorLS0tIC4vY29kZS9xM191aS91aV9wbGF5ZXJzLmMub3JpZwlXZWQgTWF5
IDMxIDIwOjUyOjA3IDIwMDYNCisrKysgLi9jb2RlL3EzX3VpL3VpX3BsYXllcnMuYwlXZWQgTWF5
IDMxIDIwOjU1OjA1IDIwMDYNCitAQCAtNjksMTMgKzY5LDEzIEBADQorIA0KKyAJaWYgKCB3ZWFw
b25OdW0gPT0gV1BfTUFDSElORUdVTiB8fCB3ZWFwb25OdW0gPT0gV1BfR0FVTlRMRVQgfHwgd2Vh
cG9uTnVtID09IFdQX0JGRyApIHsNCisgCQlzdHJjcHkoIHBhdGgsIGl0ZW0tPndvcmxkX21vZGVs
WzBdICk7DQorLQkJQ09NX1N0cmlwRXh0ZW5zaW9uKCBwYXRoLCBwYXRoICk7DQorKwkJQ09NX1N0
cmlwRXh0ZW5zaW9uKCBwYXRoLCBwYXRoLCBzaXplb2YocGF0aCkgKTsNCisgCQlzdHJjYXQoIHBh
dGgsICJfYmFycmVsLm1kMyIgKTsNCisgCQlwaS0+YmFycmVsTW9kZWwgPSB0cmFwX1JfUmVnaXN0
ZXJNb2RlbCggcGF0aCApOw0KKyAJfQ0KKyANCisgCXN0cmNweSggcGF0aCwgaXRlbS0+d29ybGRf
bW9kZWxbMF0gKTsNCistCUNPTV9TdHJpcEV4dGVuc2lvbiggcGF0aCwgcGF0aCApOw0KKysJQ09N
X1N0cmlwRXh0ZW5zaW9uKCBwYXRoLCBwYXRoLCBzaXplb2YocGF0aCkgKTsNCisgCXN0cmNhdCgg
cGF0aCwgIl9mbGFzaC5tZDMiICk7DQorIAlwaS0+Zmxhc2hNb2RlbCA9IHRyYXBfUl9SZWdpc3Rl
ck1vZGVsKCBwYXRoICk7DQorIA0KSW5kZXg6IGZpbGVzL3BhdGNoLWNvZGUtcTNfdWktdWlfc2F2
ZWNvbmZpZy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogZmlsZXMvcGF0Y2gtY29kZS1xM191aS11
aV9zYXZlY29uZmlnLmMNCmRpZmYgLU4gZmlsZXMvcGF0Y2gtY29kZS1xM191aS11aV9zYXZlY29u
ZmlnLmMNCi0gLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwDQorKysgZmls
ZXMvcGF0Y2gtY29kZS1xM191aS11aV9zYXZlY29uZmlnLmMJNCBKdW4gMjAwNiAyMTo0NDowMyAt
MDAwMA0KQEAgLTAsMCArMSwxMSBAQA0KKy0tLSAuL2NvZGUvcTNfdWkvdWlfc2F2ZWNvbmZpZy5j
Lm9yaWcJV2VkIE1heSAzMSAyMDo1MjowNyAyMDA2DQorKysrIC4vY29kZS9xM191aS91aV9zYXZl
Y29uZmlnLmMJV2VkIE1heSAzMSAyMDo1NToxNSAyMDA2DQorQEAgLTg1LDcgKzg1LDcgQEANCisg
CQlyZXR1cm47DQorIAl9DQorIA0KKy0JQ09NX1N0cmlwRXh0ZW5zaW9uKHNhdmVDb25maWcuc2F2
ZW5hbWUuZmllbGQuYnVmZmVyLCBjb25maWduYW1lICk7DQorKwlDT01fU3RyaXBFeHRlbnNpb24o
c2F2ZUNvbmZpZy5zYXZlbmFtZS5maWVsZC5idWZmZXIsIGNvbmZpZ25hbWUsIHNpemVvZihjb25m
aWduYW1lKSApOw0KKyAJdHJhcF9DbWRfRXhlY3V0ZVRleHQoIEVYRUNfQVBQRU5ELCB2YSggIndy
aXRlY29uZmlnICVzLmNmZ1xuIiwgY29uZmlnbmFtZSApICk7DQorIAlVSV9Qb3BNZW51KCk7DQor
IH0NCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXFjb21tb24tY29tbW9uLmMNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
ClJDUyBmaWxlOiAvaG9tZS9wY3ZzL3BvcnRzL2dhbWVzL2NsZWFucTMvZmlsZXMvcGF0Y2gtY29k
ZS1xY29tbW9uLWNvbW1vbi5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xDQpkaWZmIC11IC1y
MS4xIHBhdGNoLWNvZGUtcWNvbW1vbi1jb21tb24uYw0KLSAtLS0gZmlsZXMvcGF0Y2gtY29kZS1x
Y29tbW9uLWNvbW1vbi5jCTIwIE1hciAyMDA2IDE1OjIxOjI3IC0wMDAwCTEuMQ0KKysrIGZpbGVz
L3BhdGNoLWNvZGUtcWNvbW1vbi1jb21tb24uYwk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpA
QCAtMSwxNSArMSwxNSBAQA0KLSAtLS0tIGNvZGUvcWNvbW1vbi9jb21tb24uYy5vcmlnCU1vbiBB
dWcgMTUgMjM6MTA6MDcgMjAwNQ0KLSAtKysrIGNvZGUvcWNvbW1vbi9jb21tb24uYwlXZWQgTm92
IDIzIDEwOjUzOjI5IDIwMDUNCistLS0gLi9jb2RlL3Fjb21tb24vY29tbW9uLmMub3JpZwlXZWQg
TWF5IDMxIDIwOjUyOjA3IDIwMDYNCisrKysgLi9jb2RlL3Fjb21tb24vY29tbW9uLmMJV2VkIE1h
eSAzMSAyMDo1MjowOSAyMDA2DQogQEAgLTI0LDE1ICsyNCw4IEBADQogICNpbmNsdWRlICIuLi9n
YW1lL3Ffc2hhcmVkLmgiDQogICNpbmNsdWRlICJxY29tbW9uLmgiDQogICNpbmNsdWRlIDxzZXRq
bXAuaD4NCiAtI2lmZGVmIF9fbGludXhfXw0KLSAtKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCi0g
LSAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPg0KKy0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPg0KIC0j
ZWxzZQ0KIC0jaWYgZGVmaW5lZChNQUNPU19YKQ0KLSAtLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+
DQorKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisgI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiAt
I2Vsc2UNCiAtI2luY2x1ZGUgPHdpbnNvY2suaD4NCiAtI2VuZGlmDQpAQCAtMTcsMyArMTcsMTIg
QEANCiAgDQogIGludCBkZW1vX3Byb3RvY29sc1tdID0NCiAgeyA2NiwgNjcsIDY4LCAwIH07DQor
QEAgLTIzNjcsNyArMjM2MCw3IEBADQorIAkvLyBjdmFyIGFuZCBjb21tYW5kIGJ1ZmZlciBtYW5h
Z2VtZW50DQorIAlDb21fUGFyc2VDb21tYW5kTGluZSggY29tbWFuZExpbmUgKTsNCisgDQorLS8v
CVN3YXBfSW5pdCAoKTsNCisrCVN3YXBfSW5pdCAoKTsNCisgCUNidWZfSW5pdCAoKTsNCisgDQor
IAlDb21fSW5pdFpvbmVNZW1vcnkoKTsNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXFjb21tb24t
dm0uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGZpbGVzL3BhdGNoLWNvZGUtcWNvbW1vbi12bS5j
DQpkaWZmIC1OIGZpbGVzL3BhdGNoLWNvZGUtcWNvbW1vbi12bS5jDQotIC0tLSAvZGV2L251bGwJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysrIGZpbGVzL3BhdGNoLWNvZGUtcWNvbW1vbi12
bS5jCTQgSnVuIDIwMDYgMjE6NDQ6MDMgLTAwMDANCkBAIC0wLDAgKzEsMjkgQEANCistLS0gY29k
ZS9xY29tbW9uL3ZtLmMub3JpZwlXZWQgTWF5IDMxIDIzOjE4OjQxIDIwMDYNCisrKysgY29kZS9x
Y29tbW9uL3ZtLmMJV2VkIE1heSAzMSAyMzoxOTo0MyAyMDA2DQorQEAgLTIyNSw3ICsyMjUsNyBA
QA0KKyAJCXJldHVybjsNCisgCX0NCisgDQorLQlDT01fU3RyaXBFeHRlbnNpb24oIHZtLT5uYW1l
LCBuYW1lICk7DQorKwlDT01fU3RyaXBFeHRlbnNpb24oIHZtLT5uYW1lLCBuYW1lLCBzaXplb2Yo
bmFtZSkgKTsNCisgCUNvbV9zcHJpbnRmKCBzeW1ib2xzLCBzaXplb2YoIHN5bWJvbHMgKSwgInZt
LyVzLm1hcCIsIG5hbWUgKTsNCisgCWxlbiA9IEZTX1JlYWRGaWxlKCBzeW1ib2xzLCAodm9pZCAq
KikmbWFwZmlsZSApOw0KKyAJaWYgKCAhbWFwZmlsZSApIHsNCitAQCAtNDc4LDcgKzQ3OCw3IEBA
DQorIAkJfQ0KKyAJfQ0KKyANCistCWlmICggaW50ZXJwcmV0ID09IFZNSV9OQVRJVkUgKSB7DQor
KwlpZiAoIDEgKSB7DQorIAkJLy8gdHJ5IHRvIGxvYWQgYXMgYSBzeXN0ZW0gZGxsDQorIAkJQ29t
X1ByaW50ZiggIkxvYWRpbmcgZGxsIGZpbGUgJXMuXG4iLCB2bS0+bmFtZSApOw0KKyAJCXZtLT5k
bGxIYW5kbGUgPSBTeXNfTG9hZERsbCggbW9kdWxlLCB2bS0+ZnFwYXRoICwgJnZtLT5lbnRyeVBv
aW50LCBWTV9EbGxTeXNjYWxsICk7DQorQEAgLTgyNiw3ICs4MjYsNyBAQA0KKyANCisgDQorIA0K
Ky0jaWZkZWYgb0RMTF9PTkxZIC8vIGJrMDEwMjE1IC0gZm9yIERMTF9PTkxZIGRlZGljYXRlZCBz
ZXJ2ZXJzL2J1aWxkcyB3L28gVk0NCisrI2lmZGVmIERMTF9PTkxZIC8vIGJrMDEwMjE1IC0gZm9y
IERMTF9PTkxZIGRlZGljYXRlZCBzZXJ2ZXJzL2J1aWxkcyB3L28gVk0NCisgaW50CVZNX0NhbGxD
b21waWxlZCggdm1fdCAqdm0sIGludCAqYXJncyApIHsNCisgICByZXR1cm4oMCk7IA0KKyB9DQpJ
bmRleDogZmlsZXMvcGF0Y2gtY29kZS1yZW5kZXJlci10cl9ic3AuYw0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNT
IGZpbGU6IGZpbGVzL3BhdGNoLWNvZGUtcmVuZGVyZXItdHJfYnNwLmMNCmRpZmYgLU4gZmlsZXMv
cGF0Y2gtY29kZS1yZW5kZXJlci10cl9ic3AuYw0KLSAtLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDANCisrKyBmaWxlcy9wYXRjaC1jb2RlLXJlbmRlcmVyLXRyX2JzcC5jCTQg
SnVuIDIwMDYgMjE6NDQ6MDMgLTAwMDANCkBAIC0wLDAgKzEsMTEgQEANCistLS0gLi9jb2RlL3Jl
bmRlcmVyL3RyX2JzcC5jLm9yaWcJV2VkIE1heSAzMSAyMDo1MjowNyAyMDA2DQorKysrIC4vY29k
ZS9yZW5kZXJlci90cl9ic3AuYwlXZWQgTWF5IDMxIDIwOjU1OjQ3IDIwMDYNCitAQCAtMTgyMCw3
ICsxODIwLDcgQEANCisgCVFfc3RybmNweXooIHNfd29ybGREYXRhLm5hbWUsIG5hbWUsIHNpemVv
Ziggc193b3JsZERhdGEubmFtZSApICk7DQorIA0KKyAJUV9zdHJuY3B5eiggc193b3JsZERhdGEu
YmFzZU5hbWUsIENPTV9Ta2lwUGF0aCggc193b3JsZERhdGEubmFtZSApLCBzaXplb2YoIHNfd29y
bGREYXRhLm5hbWUgKSApOw0KKy0JQ09NX1N0cmlwRXh0ZW5zaW9uKCBzX3dvcmxkRGF0YS5iYXNl
TmFtZSwgc193b3JsZERhdGEuYmFzZU5hbWUgKTsNCisrCUNPTV9TdHJpcEV4dGVuc2lvbiggc193
b3JsZERhdGEuYmFzZU5hbWUsIHNfd29ybGREYXRhLmJhc2VOYW1lLCBzaXplb2Yoc193b3JsZERh
dGEuYmFzZU5hbWUpICk7DQorIA0KKyAJc3RhcnRNYXJrZXIgPSByaS5IdW5rX0FsbG9jKDAsIGhf
bG93KTsNCisgCWNfZ3JpZFZlcnRzID0gMDsNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXJlbmRl
cmVyLXRyX3NoYWRlci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogZmlsZXMvcGF0Y2gtY29kZS1y
ZW5kZXJlci10cl9zaGFkZXIuYw0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLXJlbmRlcmVyLXRy
X3NoYWRlci5jDQotIC0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysr
IGZpbGVzL3BhdGNoLWNvZGUtcmVuZGVyZXItdHJfc2hhZGVyLmMJNCBKdW4gMjAwNiAyMTo0NDow
MyAtMDAwMA0KQEAgLTAsMCArMSwyOSBAQA0KKy0tLSAuL2NvZGUvcmVuZGVyZXIvdHJfc2hhZGVy
LmMub3JpZwlXZWQgTWF5IDMxIDIwOjUyOjA4IDIwMDYNCisrKysgLi9jb2RlL3JlbmRlcmVyL3Ry
X3NoYWRlci5jCVdlZCBNYXkgMzEgMjA6NTY6MjAgMjAwNg0KK0BAIC05OSw3ICs5OSw3IEBADQor
IA0KKyAJLy8gcmVtYXAgYWxsIHRoZSBzaGFkZXJzIHdpdGggdGhlIGdpdmVuIG5hbWUNCisgCS8v
IGV2ZW4gdGhvIHRoZXkgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgbGlnaHRtYXBzDQorLQlDT01fU3Ry
aXBFeHRlbnNpb24oIHNoYWRlck5hbWUsIHN0cmlwcGVkTmFtZSApOw0KKysJQ09NX1N0cmlwRXh0
ZW5zaW9uKCBzaGFkZXJOYW1lLCBzdHJpcHBlZE5hbWUsIHNpemVvZihzdHJpcHBlZE5hbWUpICk7
DQorIAloYXNoID0gZ2VuZXJhdGVIYXNoVmFsdWUoc3RyaXBwZWROYW1lLCBGSUxFX0hBU0hfU0la
RSk7DQorIAlmb3IgKHNoID0gaGFzaFRhYmxlW2hhc2hdOyBzaDsgc2ggPSBzaC0+bmV4dCkgew0K
KyAJCWlmIChRX3N0cmljbXAoc2gtPm5hbWUsIHN0cmlwcGVkTmFtZSkgPT0gMCkgew0KK0BAIC0y
MzY4LDcgKzIzNjgsNyBAQA0KKyAJCXJldHVybiB0ci5kZWZhdWx0U2hhZGVyOw0KKyAJfQ0KKyAN
CistCUNPTV9TdHJpcEV4dGVuc2lvbiggbmFtZSwgc3RyaXBwZWROYW1lICk7DQorKwlDT01fU3Ry
aXBFeHRlbnNpb24oIG5hbWUsIHN0cmlwcGVkTmFtZSwgc2l6ZW9mKHN0cmlwcGVkTmFtZSkgKTsN
CisgDQorIAloYXNoID0gZ2VuZXJhdGVIYXNoVmFsdWUoc3RyaXBwZWROYW1lLCBGSUxFX0hBU0hf
U0laRSk7DQorIA0KK0BAIC0yNDM2LDcgKzI0MzYsNyBAQA0KKyAJCWxpZ2h0bWFwSW5kZXggPSBM
SUdIVE1BUF9CWV9WRVJURVg7DQorIAl9DQorIA0KKy0JQ09NX1N0cmlwRXh0ZW5zaW9uKCBuYW1l
LCBzdHJpcHBlZE5hbWUgKTsNCisrCUNPTV9TdHJpcEV4dGVuc2lvbiggbmFtZSwgc3RyaXBwZWRO
YW1lLCBzaXplb2Yoc3RyaXBwZWROYW1lKSApOw0KKyANCisgCWhhc2ggPSBnZW5lcmF0ZUhhc2hW
YWx1ZShzdHJpcHBlZE5hbWUsIEZJTEVfSEFTSF9TSVpFKTsNCisgDQpJbmRleDogZmlsZXMvcGF0
Y2gtY29kZS1zZXJ2ZXItc3ZfY2xpZW50LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9w
YXRjaC1jb2RlLXNlcnZlci1zdl9jbGllbnQuYw0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLXNl
cnZlci1zdl9jbGllbnQuYw0KLSAtLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw
MDANCisrKyBmaWxlcy9wYXRjaC1jb2RlLXNlcnZlci1zdl9jbGllbnQuYwk0IEp1biAyMDA2IDIx
OjQ0OjAzIC0wMDAwDQpAQCAtMCwwICsxLDczIEBADQorLS0tIGNvZGUvc2VydmVyL3N2X2NsaWVu
dC5jLm9yaWcJVGh1IEp1biAgMSAxNDo1MDoyMSAyMDA2DQorKysrIGNvZGUvc2VydmVyL3N2X2Ns
aWVudC5jCVRodSBKdW4gIDEgMTU6MTk6MjkgMjAwNg0KK0BAIC03NTYsMjQgKzc1Niw1NCBAQA0K
KyAJaW50IGN1cmluZGV4Ow0KKyAJaW50IHJhdGU7DQorIAlpbnQgYmxvY2tzcGVyc25hcDsNCist
CWludCBpZFBhY2ssIG1pc3Npb25QYWNrOw0KKysJaW50IGlkUGFjaywgbWlzc2lvblBhY2ssIHVu
cmVmZXJlbmNlZCA9IDE7DQorIAljaGFyIGVycm9yTWVzc2FnZVsxMDI0XTsNCisrCWNoYXIgcGFr
YnVmW01BWF9PU1BBVEhdLCAqcGFrcHRyOw0KKysJY29uc3QgY2hhciAqcmVmZXJlbmNlZFBha3M7
DQorKwlpbnQgbnVtUmVmUGFrczsNCisgDQorIAlpZiAoISpjbC0+ZG93bmxvYWROYW1lKQ0KKyAJ
CXJldHVybjsJLy8gTm90aGluZyBiZWluZyBkb3dubG9hZGVkDQorIA0KKyAJaWYgKCFjbC0+ZG93
bmxvYWQpIHsNCistCQkvLyBXZSBvcGVuIHRoZSBmaWxlIGhlcmUNCisrCQkvLyBDaG9wIG9mZiBm
aWxlbmFtZSBleHRlbnNpb24uDQorKwkJQ29tX3NwcmludGYocGFrYnVmLCBzaXplb2YocGFrYnVm
KSwgIiVzIiwgY2wtPmRvd25sb2FkTmFtZSk7DQorKwkJcGFrcHRyID0gUV9zdHJyY2hyKHBha2J1
ZiwgJy4nKTsNCisgDQorLQkJQ29tX1ByaW50ZiggImNsaWVudERvd25sb2FkOiAlZCA6IGJlZ2lu
aW5nIFwiJXNcIlxuIiwgY2wgLSBzdnMuY2xpZW50cywgY2wtPmRvd25sb2FkTmFtZSApOw0KKysJ
CWlmIChwYWtwdHIpIHsNCisrCQkJKnBha3B0ciA9ICdcMCc7DQorIA0KKy0JCW1pc3Npb25QYWNr
ID0gRlNfaWRQYWsoY2wtPmRvd25sb2FkTmFtZSwgIm1pc3Npb25wYWNrIik7DQorLQkJaWRQYWNr
ID0gbWlzc2lvblBhY2sgfHwgRlNfaWRQYWsoY2wtPmRvd25sb2FkTmFtZSwgImJhc2VxMyIpOw0K
KysJCQkvLyBDaGVjayBmb3IgcGszIGZpbGVuYW1lIGV4dGVuc2lvbg0KKysJCQlpZiAoIVFfc3Ry
aWNtcChwYWtwdHIgKyAxLCAicGszIikpIHsNCisrCQkJCXJlZmVyZW5jZWRQYWtzID0gRlNfUmVm
ZXJlbmNlZFBha05hbWVzKCk7DQorIA0KKy0JCWlmICggIXN2X2FsbG93RG93bmxvYWQtPmludGVn
ZXIgfHwgaWRQYWNrIHx8DQorKwkJCQkvLyBDaGVjayB3aGV0aGVyIHRoZSBmaWxlIGFwcGVhcnMg
aW4gdGhlIGxpc3Qgb2YgcmVmZXJlbmNlZA0KKysJCQkJLy8gcGFrcyB0byBwcmV2ZW50IGRvd25s
b2FkaW5nIG9mIGFyYml0cmFyeSBmaWxlcy4NCisrCQkJCUNtZF9Ub2tlbml6ZVN0cmluZyhyZWZl
cmVuY2VkUGFrcyk7DQorKwkJCQludW1SZWZQYWtzID0gQ21kX0FyZ2MoKTsNCisrDQorKwkJCQlm
b3IgKGN1cmluZGV4ID0gMDsgY3VyaW5kZXggPCBudW1SZWZQYWtzOyBjdXJpbmRleCsrKSB7DQor
KwkJCQkJaWYgKCFGU19GaWxlbmFtZUNvbXBhcmUoQ21kX0FyZ3YoY3VyaW5kZXgpLCBwYWtidWYp
KSB7DQorKwkJCQkJCXVucmVmZXJlbmNlZCA9IDA7DQorKw0KKysJCQkJCQkvLyBub3cgdGhhdCB3
ZSBrbm93IHRoZSBmaWxlIGlzIHJlZmVyZW5jZWQsDQorKwkJCQkJCS8vIGNoZWNrIHdoZXRoZXIg
aXQncyBsZWdhbCB0byBkb3dubG9hZCBpdC4NCisrCQkJCQkJbWlzc2lvblBhY2sgPSBGU19pZFBh
ayhwYWtidWYsICJtaXNzaW9ucGFjayIpOw0KKysJCQkJCQlpZFBhY2sgPSBtaXNzaW9uUGFjayB8
fCBGU19pZFBhayhwYWtidWYsIEJBU0VHQU1FKTsNCisrDQorKwkJCQkJCWJyZWFrOw0KKysJCQkJ
CX0NCisrCQkJCX0NCisrCQkJfQ0KKysJCX0NCisrDQorKwkJLy8gV2Ugb3BlbiB0aGUgZmlsZSBo
ZXJlDQorKwkJaWYgKCAhc3ZfYWxsb3dEb3dubG9hZC0+aW50ZWdlciB8fCBpZFBhY2sgfHwgdW5y
ZWZlcmVuY2VkIHx8DQorIAkJCSggY2wtPmRvd25sb2FkU2l6ZSA9IEZTX1NWX0ZPcGVuRmlsZVJl
YWQoIGNsLT5kb3dubG9hZE5hbWUsICZjbC0+ZG93bmxvYWQgKSApIDw9IDAgKSB7DQorIAkJCS8v
IGNhbm5vdCBhdXRvLWRvd25sb2FkIGZpbGUNCistCQkJaWYgKGlkUGFjaykgew0KKysJCQlpZiAo
dW5yZWZlcmVuY2VkKSB7DQorKwkJCQlDb21fc3ByaW50ZihlcnJvck1lc3NhZ2UsIHNpemVvZihl
cnJvck1lc3NhZ2UpLCAiRmlsZSBcIiVzXCIgaXMgbm90IHJlZmVyZW5jZWQgYW5kIGNhbm5vdCBi
ZSBkb3dubG9hZGVkLiIsIGNsLT5kb3dubG9hZE5hbWUpOw0KKysJCQl9IGVsc2UgaWYgKGlkUGFj
aykgew0KKyAJCQkJQ29tX1ByaW50ZigiY2xpZW50RG93bmxvYWQ6ICVkIDogXCIlc1wiIGNhbm5v
dCBkb3dubG9hZCBpZCBwazMgZmlsZXNcbiIsIGNsIC0gc3ZzLmNsaWVudHMsIGNsLT5kb3dubG9h
ZE5hbWUpOw0KKyAJCQkJaWYgKG1pc3Npb25QYWNrKSB7DQorIAkJCQkJQ29tX3NwcmludGYoZXJy
b3JNZXNzYWdlLCBzaXplb2YoZXJyb3JNZXNzYWdlKSwgIkNhbm5vdCBhdXRvZG93bmxvYWQgVGVh
bSBBcmVuYSBmaWxlIFwiJXNcIlxuIg0KK0BAIC04MDksNiArODM5LDggQEANCisgCQkJcmV0dXJu
Ow0KKyAJCX0NCisgIA0KKysJCUNvbV9QcmludGYoICJjbGllbnREb3dubG9hZDogJWQgOiBiZWdp
bm5pbmcgXCIlc1wiXG4iLCBjbCAtIHN2cy5jbGllbnRzLCBjbC0+ZG93bmxvYWROYW1lICk7DQor
Kw0KKyAJCS8vIEluaXQNCisgCQljbC0+ZG93bmxvYWRDdXJyZW50QmxvY2sgPSBjbC0+ZG93bmxv
YWRDbGllbnRCbG9jayA9IGNsLT5kb3dubG9hZFhtaXRCbG9jayA9IDA7DQorIAkJY2wtPmRvd25s
b2FkQ291bnQgPSAwOw0KSW5kZXg6IGZpbGVzL3BhdGNoLWNvZGUtdWktdWlfbWFpbi5jDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQpSQ1MgZmlsZTogZmlsZXMvcGF0Y2gtY29kZS11aS11aV9tYWluLmMNCmRpZmYgLU4g
ZmlsZXMvcGF0Y2gtY29kZS11aS11aV9tYWluLmMNCi0gLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwDQorKysgZmlsZXMvcGF0Y2gtY29kZS11aS11aV9tYWluLmMJNCBKdW4g
MjAwNiAyMTo0NDowMyAtMDAwMA0KQEAgLTAsMCArMSwxMSBAQA0KKy0tLSAuL2NvZGUvdWkvdWlf
bWFpbi5jLm9yaWcJV2VkIE1heSAzMSAyMDo1MjowOCAyMDA2DQorKysrIC4vY29kZS91aS91aV9t
YWluLmMJV2VkIE1heSAzMSAyMDo1NjoyOSAyMDA2DQorQEAgLTQ5NzEsNyArNDk3MSw3IEBADQor
IAkJew0KKyAJCQlmaWxlbGVuID0gc3RybGVuKGZpbGVwdHIpOw0KKyANCistCQkJQ09NX1N0cmlw
RXh0ZW5zaW9uKGZpbGVwdHIsc2tpbm5hbWUpOw0KKysJCQlDT01fU3RyaXBFeHRlbnNpb24oZmls
ZXB0ciwgc2tpbm5hbWUsIHNpemVvZihza2lubmFtZSkpOw0KKyANCisgCQkJLy8gbG9vayBmb3Ig
aWNvbl8/Pz8/DQorIAkJCWlmIChRX3N0cmljbXBuKHNraW5uYW1lLCAiaWNvbl8iLCA1KSA9PSAw
ICYmICEoUV9zdHJpY21wKHNraW5uYW1lLCJpY29uX2JsdWUiKSA9PSAwIHx8IFFfc3RyaWNtcChz
a2lubmFtZSwiaWNvbl9yZWQiKSA9PSAwKSkNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXVpLXVp
X3BsYXllcnMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGZpbGVzL3BhdGNoLWNvZGUtdWktdWlf
cGxheWVycy5jDQpkaWZmIC1OIGZpbGVzL3BhdGNoLWNvZGUtdWktdWlfcGxheWVycy5jDQotIC0t
LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysrIGZpbGVzL3BhdGNoLWNv
ZGUtdWktdWlfcGxheWVycy5jCTQgSnVuIDIwMDYgMjE6NDQ6MDMgLTAwMDANCkBAIC0wLDAgKzEs
MTggQEANCistLS0gLi9jb2RlL3VpL3VpX3BsYXllcnMuYy5vcmlnCVdlZCBNYXkgMzEgMjA6NTI6
MDggMjAwNg0KKysrKyAuL2NvZGUvdWkvdWlfcGxheWVycy5jCVdlZCBNYXkgMzEgMjA6NTY6NDcg
MjAwNg0KK0BAIC03MCwxMyArNzAsMTMgQEANCisgDQorIAlpZiAoIHdlYXBvbk51bSA9PSBXUF9N
QUNISU5FR1VOIHx8IHdlYXBvbk51bSA9PSBXUF9HQVVOVExFVCB8fCB3ZWFwb25OdW0gPT0gV1Bf
QkZHICkgew0KKyAJCXN0cmNweSggcGF0aCwgaXRlbS0+d29ybGRfbW9kZWxbMF0gKTsNCistCQlD
T01fU3RyaXBFeHRlbnNpb24oIHBhdGgsIHBhdGggKTsNCisrCQlDT01fU3RyaXBFeHRlbnNpb24o
IHBhdGgsIHBhdGgsIHNpemVvZihwYXRoKSApOw0KKyAJCXN0cmNhdCggcGF0aCwgIl9iYXJyZWwu
bWQzIiApOw0KKyAJCXBpLT5iYXJyZWxNb2RlbCA9IHRyYXBfUl9SZWdpc3Rlck1vZGVsKCBwYXRo
ICk7DQorIAl9DQorIA0KKyAJc3RyY3B5KCBwYXRoLCBpdGVtLT53b3JsZF9tb2RlbFswXSApOw0K
Ky0JQ09NX1N0cmlwRXh0ZW5zaW9uKCBwYXRoLCBwYXRoICk7DQorKwlDT01fU3RyaXBFeHRlbnNp
b24oIHBhdGgsIHBhdGgsIHNpemVvZihwYXRoKSApOw0KKyAJc3RyY2F0KCBwYXRoLCAiX2ZsYXNo
Lm1kMyIgKTsNCisgCXBpLT5mbGFzaE1vZGVsID0gdHJhcF9SX1JlZ2lzdGVyTW9kZWwoIHBhdGgg
KTsNCisgDQpJbmRleDogZmlsZXMvcGF0Y2gtY29kZS11bml4LUNvbnNjcmlwdC1jbGllbnQNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtQ29uc2NyaXB0LWNsaWVu
dA0KZGlmZiAtTiBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtQ29uc2NyaXB0LWNsaWVudA0KLSAtLS0g
ZmlsZXMvcGF0Y2gtY29kZS11bml4LUNvbnNjcmlwdC1jbGllbnQJMjAgTWFyIDIwMDYgMTU6MjE6
MjcgLTAwMDAJMS4xDQorKysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDANCkBA
IC0xLDI2ICswLDAgQEANCi0gLS0tLSBjb2RlL3VuaXgvQ29uc2NyaXB0LWNsaWVudC5vcmlnCUZy
aSBNYXIgMTcgMTM6NTA6MTggMjAwNg0KLSAtKysrIGNvZGUvdW5peC9Db25zY3JpcHQtY2xpZW50
CUZyaSBNYXIgMTcgMTM6NTA6NDAgMjAwNg0KLSAtQEAgLTE0NywxMyArMTQ3LDEzIEBADQotIC0g
ICBMSU5LID0+ICRMSU5LLA0KLSAtIAlFTlYgPT4geyBQQVRIID0+ICRFTlZ7UEFUSH0sIEhPTUUg
PT4gJEVOVntIT01FfSB9LA0KLSAtICAgQ0ZMQUdTID0+ICRCQVNFX0NGTEFHUywNCi0gLS0gIExJ
QlMgPT4gJyAnIC4gJEJVSUxEX0RJUiAuICcvdW5peC9zcGxpbmVzLmEgJyANCi0gLSsgIExJQlMg
PT4gJyAnDQotIC0gICAuICRCVUlMRF9ESVIgLiAnL3VuaXgvYm90bGliLmEgJyANCi0gLSAgIC4g
JEJVSUxEX0RJUiAuICcvdW5peC9qcGVnbGliLmEgJw0KLSAtICAgLiAkQlVJTERfRElSIC4gJy91
bml4L2FzbWxpYi5hICcNCi0gLSAgIC4gJEJVSUxEX0RJUiAuICcvdW5peC9pbmxpbmVsaWIuYSAn
DQotIC0gCS4gJEJBU0VfTERGTEFHUw0KLSAtLSAgLiAnLUwvdXNyL1gxMVI2L2xpYiAtbFgxMSAt
bFhleHQgLWxYeGY4NmRnYSAtbFh4Zjg2dm0gLWxkbCAtbG0nDQotIC0rICAuICctTCUlWDExQkFT
RSUlL2xpYiAtbFgxMSAtbFhleHQgLWxYeGY4NmRnYSAtbFh4Zjg2dm0gLWxtJw0KLSAtICk7DQot
IC0gDQotIC0gQFJFTkRFUkVSX0ZJTEVTID0gcXcoDQotIC1AQCAtMjMxLDcgKzIzMSw2IEBADQot
IC0gICAuLi91bml4L2xpbnV4X2NvbW1vbi5jDQotIC0gICAuLi91bml4L2xpbnV4X3FnbC5jICAg
DQotIC0gICAuLi91bml4L2xpbnV4X2dsaW1wLmMgICANCi0gLS0gIC4uL3VuaXgvbGludXhfam95
c3RpY2suYyAgDQotIC0gICAuLi91bml4L2xpbnV4X3NuZC5jIA0KLSAtIAkuLi91bml4L2xpbnV4
X3NpZ25hbHMuYw0KLSAtICAgKTsNCkluZGV4OiBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtTWFrZWZp
bGUNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NClJDUyBmaWxlOiBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtTWFrZWZpbGUN
CmRpZmYgLU4gZmlsZXMvcGF0Y2gtY29kZS11bml4LU1ha2VmaWxlDQotIC0tLSAvZGV2L251bGwJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysrIGZpbGVzL3BhdGNoLWNvZGUtdW5peC1NYWtl
ZmlsZQk0IEp1biAyMDA2IDIxOjQ0OjAzIC0wMDAwDQpAQCAtMCwwICsxLDM2NCBAQA0KKy0tLSBj
b2RlL3VuaXgvTWFrZWZpbGUub3JpZwlTdW4gSnVuICA0IDE4OjA2OjE3IDIwMDYNCisrKysgY29k
ZS91bml4L01ha2VmaWxlCVN1biBKdW4gIDQgMTg6MDc6NDYgMjAwNg0KK0BAIC0xOSw2ICsxOSw3
IEBADQorIA0KKyBQTEFURk9STT0kKHNoZWxsIHVuYW1lfHRyIEEtWiBhLXopDQorIFBMQVRGT1JN
X1JFTEVBU0U9JChzaGVsbCB1bmFtZSAtcikNCisrQVJDSD0kKHNoZWxsIHVuYW1lIC1tKQ0KKyAN
CisgIyMjDQorICMjIyBUaGVzZSBwYXRocyBhcmUgd2hlcmUgeW91IHByb2JhYmx5IHdhbnQgdG8g
Y2hhbmdlIHRoaW5ncw0KK0BAIC0zNCw3ICszNSw3IEBADQorIA0KKyAjIEJ1aWxkIG5hbWUNCisg
IyBCVUlMRF9OQU1FPSQoQlVJTERfTkFNRSkNCistQlVJTERfTkFNRT1xdWFrZTMueDg2DQorK0JV
SUxEX05BTUU9cXVha2UzDQorIA0KKyANCisgDQorQEAgLTQ2LDggKzQ3LDggQEANCisgDQorIEJB
U0VRM19ESVI9JChCRElSKS9iYXNlcTMNCisgDQorLUJEPWRlYnVnJChBUkNIKSQoR0xJQkMpDQor
LUJSPXJlbGVhc2UkKEFSQ0gpJChHTElCQykNCisrQkQ9ZGVidWcNCisrQlI9cmVsZWFzZQ0KKyBD
RElSPSQoTU9VTlRfRElSKS9jbGllbnQNCisgU0RJUj0kKE1PVU5UX0RJUikvc2VydmVyDQorIFJE
SVI9JChNT1VOVF9ESVIpL3JlbmRlcmVyDQorQEAgLTc2LDcgKzc3LDcgQEANCisgIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMNCisgDQorICMjIERlZmF1bHRzDQorLURMTF9PTkxZPWZhbHNlDQorK0RMTF9P
TkxZPz1mYWxzZQ0KKyAjIGJrMDEwMjE1IC0gVE9ETyAtIGFkZCBhbGwgZGVmYXVsdHMgLyBraWxs
IFJ5YW4NCisgDQorIA0KK0BAIC0xOTksMzEgKzIwMCwyMyBAQA0KKyANCisgR0xJQkM9ICNsaWJj
IGlzIGlycmVsZXZhbnQNCisgDQorLWlmbmVxICgsJChmaW5kc3RyaW5nIGFscGhhLCQoc2hlbGwg
dW5hbWUgLW0pKSkNCistQVJDSD1heHANCistUlBNQVJDSD1hbHBoYQ0KKy1WRU5ET1I9ZGVjDQor
LWVsc2UgI2RlZmF1bHQgdG8gaTM4Ng0KKy1BUkNIPWkzODYNCistUlBNQVJDSD1pMzg2DQorLVZF
TkRPUj11bmtub3duDQorLWVuZGlmICNhbHBoYSB0ZXN0DQorK0JBU0VfQ0ZMQUdTID0gJChDRkxB
R1MpIC1EREFUQURJUj0nXCIkKFEzRElSKVwiJyAtRExJQkRJUj0nXCIkKExJQkRJUilcIicgLXBp
cGUNCisgDQorK0dMX0NGTEFHUyA9IC1JJChYMTFCQVNFKS9pbmNsdWRlDQorIA0KKy1CQVNFX0NG
TEFHUyA9ICAtcGlwZQ0KKytERUJVR19DRkxBR1M9JChCQVNFX0NGTEFHUykgLWcgIC1XYWxsIC1X
ZXJyb3INCisrUkVMRUFTRV9DRkxBR1M9JChCQVNFX0NGTEFHUykgLUROREVCVUcNCisgDQorLUdM
X0NGTEFHUyA9IC1JJChNRVNBRElSKS9pbmNsdWRlIC1JL3Vzci9YMTFSNi9pbmNsdWRlDQorK2lm
ZGVmIE9QVElNSVpFRF9DRkxBR1MNCisrICBpZmVxICgkKEFSQ0gpLGkzODYpDQorK1JFTEVBU0Vf
Q0ZMQUdTPSQoQkFTRV9DRkxBR1MpIC1PNiAtZm9taXQtZnJhbWUtcG9pbnRlciAtcGlwZSAtZmZh
c3QtbWF0aCAtZmFsaWduLWxvb3BzPTIgLWZhbGlnbi1qdW1wcz0yIC1mYWxpZ24tZnVuY3Rpb25z
PTIgLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZzdHJlbmd0aC1yZWR1Y2UNCisrICBlbHNlDQorK1JF
TEVBU0VfQ0ZMQUdTPSQoQkFTRV9DRkxBR1MpIC1PNiAtZmZhc3QtbWF0aCAtZnVucm9sbC1sb29w
cyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZmV4cGVuc2l2ZS1vcHRpbWl6YXRpb25zDQorKyAgZW5k
aWYNCisrZW5kaWYNCisgDQorLURFQlVHX0NGTEFHUz0kKEJBU0VfQ0ZMQUdTKSAtZyAgLVdhbGwg
LVdlcnJvcg0KKy1pZmVxICgkKEFSQ0gpLGF4cCkNCistQ0M9cGdjYw0KKy1SRUxFQVNFX0NGTEFH
Uz0kKEJBU0VfQ0ZMQUdTKSAtRE5ERUJVRyAtTzYgLWZmYXN0LW1hdGggLWZ1bnJvbGwtbG9vcHMg
LWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZleHBlbnNpdmUtb3B0aW1pemF0aW9ucw0KKy1lbHNlDQor
LSNORVdQR0NDPS9sb2tpL2dsb2JhbC94ODYvYmluL2djYyAjIHJhaXN0bGluMDEyMzAxDQorLSNO
RVdQR0NDPS91c3IvbG9jYWwvZ2NjLTIuOTUuMi9iaW4vZ2NjDQorLU5FV1BHQ0M9L2hvbWUvcmFp
c3RsbGluL3NyYy9nY2MvYnVpbGQvaW5zdGFsbC9iaW4vZ2NjDQorLUNDPSQoc2hlbGwgaWYgWyAt
ZiAkKE5FV1BHQ0MpIF07IHRoZW4gZWNobyAkKE5FV1BHQ0MpOyBlbHNlIGVjaG8gcGdjYzsgZmkg
KQ0KKy1SRUxFQVNFX0NGTEFHUz0kKEJBU0VfQ0ZMQUdTKSAtRE5ERUJVRyAtTzYgLW1jcHU9cGVu
dGl1bXBybyAtbWFyY2g9cGVudGl1bSAtZm9taXQtZnJhbWUtcG9pbnRlciAtcGlwZSAtZmZhc3Qt
bWF0aCAtbWFsaWduLWxvb3BzPTIgLW1hbGlnbi1qdW1wcz0yIC1tYWxpZ24tZnVuY3Rpb25zPTIg
LWZuby1zdHJpY3QtYWxpYXNpbmcgLSBmc3RyZW5ndGgtcmVkdWNlDQorK2lmZXEgKCQoRExMX09O
TFkpLHRydWUpDQorK0JBU0VfQ0ZMQUdTICs9IC1ERExMX09OTFkNCisgZW5kaWYNCisgDQorIExJ
QkVYVD1hDQorQEAgLTIzNSwyNSArMjI4LDM3IEBADQorIEFSRkxBR1M9YXIgcnYNCisgUkFOTElC
PXJhbmxpYg0KKyANCistVEhSRUFEX0xERkxBR1M9LWxwdGhyZWFkDQorK1RIUkVBRF9MREZMQUdT
PSQoUFRIUkVBRF9MSUJTKQ0KKyAjIGRvbid0IG5lZWQgLWxkbCAoRnJlZUJTRCkNCistTERGTEFH
Uz0tbG0NCisrTERGTEFHUys9LWxtDQorICNHTExERkxBR1M9LUwvdXNyL1gxMVI2L2xpYiAtTCQo
TUVTQURJUikvbGliIC1sR0wgLWxYMTEgLWxYZXh0IC1sWHhmODZkZ2EgLWxYeGY4NnZtDQorICNH
TExERkxBR1M9LUwvdXNyL1gxMS9saWIgLWxHTCAtbFgxMSAtbFhleHQgLWxtDQorLUdMTERGTEFH
Uz0tTC91c3IvWDExUjYvbGliIC1sR0wgLWxYMTEgLWxYZXh0IC1sWHhmODZkZ2EgLWxYeGY4NnZt
DQorK0dMTERGTEFHUz0tTCQoWDExQkFTRSkvbGliIC1sR0wgLWxYMTEgLWxYZXh0IC1sWHhmODZk
Z2EgLWxYeGY4NnZtDQorIA0KKy1pZmVxICgkKEFSQ0gpLGF4cCkNCistVEFSR0VUUz1cDQorLSAg
ICAgICAgJChCKS8kKFBMQVRGT1JNKXEzZGVkDQorLWVsc2UNCistVEFSR0VUUz1cDQorLQkkKEIp
LyQoUExBVEZPUk0pcXVha2UzIFwNCistCSQoQikvYmFzZXEzL2NnYW1lJChBUkNIKS4kKFNITElC
RVhUKSBcDQorLQkkKEIpL2Jhc2VxMy9xYWdhbWUkKEFSQ0gpLiQoU0hMSUJFWFQpIFwNCistCSQo
QikvYmFzZXEzL3VpJChBUkNIKS4kKFNITElCRVhUKSAgICAgXA0KKy0JJChCKS9taXNzaW9ucGFj
ay9jZ2FtZSQoQVJDSCkuJChTSExJQkVYVCkgXA0KKy0JJChCKS9taXNzaW9ucGFjay9xYWdhbWUk
KEFSQ0gpLiQoU0hMSUJFWFQpIFwNCistCSQoQikvbWlzc2lvbnBhY2svdWkkKEFSQ0gpLiQoU0hM
SUJFWFQpDQorK2lmZGVmIENMSUVOVA0KKytUQVJHRVRTKz0kKEIpL2NsZWFucTMNCisrZW5kaWYN
CisrDQorK2lmZGVmIERFRElDQVRFRA0KKytUQVJHRVRTKz0kKEIpL2NsZWFucTNkZWQNCisrZW5k
aWYNCisrDQorK2lmZGVmIFNNUA0KKytUQVJHRVRTKz0kKEIpL2NsZWFucTMtc21wDQorK2VuZGlm
DQorKw0KKytpZmVxICgkKERMTF9PTkxZKSx0cnVlKQ0KKytHQU1FTElCUz15ZXMNCisrZW5kaWYN
CisrDQorK2lmZGVmIEdBTUVMSUJTDQorK1RBUkdFVFMrPVwNCisrCSQoQikvYmFzZXEzL2NnYW1l
LiQoU0hMSUJFWFQpIFwNCisrCSQoQikvYmFzZXEzL3FhZ2FtZS4kKFNITElCRVhUKSBcDQorKwkk
KEIpL2Jhc2VxMy91aS4kKFNITElCRVhUKSBcDQorKwkkKEIpL21pc3Npb25wYWNrL2NnYW1lLiQo
U0hMSUJFWFQpIFwNCisrCSQoQikvbWlzc2lvbnBhY2svcWFnYW1lLiQoU0hMSUJFWFQpIFwNCisr
CSQoQikvbWlzc2lvbnBhY2svdWkuJChTSExJQkVYVCkNCisgZW5kaWYNCisgDQorIGVsc2UgIyBp
ZmVxIGZyZWVic2QNCitAQCAtMzQ4LDcgKzM1Myw3IEBADQorIAkkKE1BS0UpICB0YXJnZXRzIEI9
JChCUikgQ0ZMQUdTPSIkKFJFTEVBU0VfQ0ZMQUdTKSINCisgDQorICNCdWlsZCBib3RoIGRlYnVn
IGFuZCByZWxlYXNlIGJ1aWxkcw0KKy1hbGw6YnVpbGRfZGVidWcgYnVpbGRfcmVsZWFzZQ0KKyth
bGw6YnVpbGRfcmVsZWFzZQ0KKyANCisgdGFyZ2V0czptYWtlZGlycyAkKFRBUkdFVFMpDQorIA0K
K0BAIC01MTYsMjAgKzUyMSw2IEBADQorIAkkKEIpL2NsaWVudC91bml4X25ldC5vIFwNCisgCSQo
QikvY2xpZW50L3VuaXhfc2hhcmVkLm8gXA0KKyAJXA0KKy0JJChCKS9jbGllbnQvYWhvcHRpbS5v
ICBcDQorLQkkKEIpL2NsaWVudC9hdXRvaGludC5vIFwNCistCSQoQikvY2xpZW50L2Z0YmFzZS5v
ICAgXA0KKy0JJChCKS9jbGllbnQvZnRkZWJ1Zy5vICBcDQorLQkkKEIpL2NsaWVudC9mdGdseXBo
Lm8gIFwNCistCSQoQikvY2xpZW50L2Z0aW5pdC5vICAgXA0KKy0JJChCKS9jbGllbnQvZnRtbS5v
ICAgICBcDQorLQkkKEIpL2NsaWVudC9mdHN5c3RlbS5vIFwNCistCSQoQikvY2xpZW50L3Jhc3Rl
cjEubyAgXA0KKy0JJChCKS9jbGllbnQvc2ZudC5vICAgICBcDQorLQkkKEIpL2NsaWVudC9zZm9i
anMubyAgIFwNCistCSQoQikvY2xpZW50L3Ntb290aC5vICAgXA0KKy0JJChCKS9jbGllbnQvdHJ1
ZXR5cGUubw0KKy0jCVwNCisgIwkkKEIpL2NsaWVudC9xX3BhcnNlLm8gXA0KKyAjCSQoQikvY2xp
ZW50L21hdGhfcXVhdGVybmlvbi5vIFwNCisgIwkkKEIpL2NsaWVudC91dGlsX3N0ci5vIFwNCitA
QCAtNTQxLDEwICs1MzIsMTIgQEANCisgIwkkKEIpL2NsaWVudC9xX3NoYXJlZC5vIFwNCisgDQor
ICAgICBpZmVxICgkKEFSQ0gpLGkzODYpDQorLQkgIFEzT0JKICs9ICQoQikvY2xpZW50L3ZtX3g4
Ni5vDQorKyAgICAgIGlmZXEgKCQoRExMX09OTFkpLGZhbHNlKQ0KKysJUTNPQkogKz0gJChCKS9j
bGllbnQvdm1feDg2Lm8NCisrICAgICAgZW5kaWYNCisgICAgIGVuZGlmDQorIA0KKy0gICAgaWZl
cSAoJChBUkNIKSxwcGMpDQorKyAgICBpZmVxICgkKEFSQ0gpLHBvd2VycGMpDQorICAgICAgIGlm
ZXEgKCQoRExMX09OTFkpLGZhbHNlKQ0KKyAgICAgICAgIFEzT0JKICs9ICQoQikvY2xpZW50L3Zt
X3BwYy5vDQorICAgICAgIGVuZGlmDQorQEAgLTU1OSwxMCArNTUyLDI0IEBADQorIAkJJChCKS9j
bGllbnQvbGludXhfcWdsLm8gXA0KKyAJCSQoQikvY2xpZW50L2xpbnV4X2dsaW1wLm8gXA0KKyAJ
CSQoQikvY2xpZW50L2xpbnV4X3NuZC5vIFwNCisrCQkkKEIpL2NsaWVudC9saW51eF9zaWduYWxz
Lm8gXA0KKysJCSQoQikvY2xpZW50L3NuZF9taXhhLm8gXA0KKysJCSQoQikvY2xpZW50L21hdGhh
Lm8NCisrDQorKwlRM1BPQkpfU01QPVwNCisrCQkkKEIpL2NsaWVudC9saW51eF9jb21tb24ubyBc
DQorKwkJJChCKS9jbGllbnQvbGludXhfcWdsLm8gXA0KKysJCSQoQikvY2xpZW50L2xpbnV4X2ds
aW1wX3NtcC5vIFwNCisrCQkkKEIpL2NsaWVudC9saW51eF9zbmQubyBcDQorKwkJJChCKS9jbGll
bnQvbGludXhfc2lnbmFscy5vIFwNCisgCQkkKEIpL2NsaWVudC9zbmRfbWl4YS5vIFwNCisgCQkk
KEIpL2NsaWVudC9tYXRoYS5vICAgXA0KKy0JCSQoQikvY2xpZW50L2Z0b2wubyBcDQorLQkJJChC
KS9jbGllbnQvc25hcHZlY3Rvci5vDQorKw0KKysgICAgaWZlcSAoJChBUkNIKSxpMzg2KQ0KKysJ
CVEzUE9CSiArPSAkKEIpL2NsaWVudC9mdG9sLm8gJChCKS9jbGllbnQvc25hcHZlY3Rvci5vDQor
KwkJUTNQT0JKX1NNUCArPSAkKEIpL2NsaWVudC9mdG9sLm8gJChCKS9jbGllbnQvc25hcHZlY3Rv
ci5vDQorKyAgICBlbmRpZg0KKysNCisgZWxzZQ0KKyBpZmVxICgkKFBMQVRGT1JNKSxpcml4KQ0K
KyAJUTNQT0JKPVwNCitAQCAtNjAyLDEyICs2MDksMTIgQEANCisgZW5kaWYgI0ZyZWVCU0QNCisg
ZW5kaWYgI0lSSVgNCisgDQorLSQoQikvJChQTEFURk9STSlxdWFrZTMgOiAkKFEzT0JKKSAkKFEz
UE9CSikNCisrJChCKS9jbGVhbnEzIDogJChRM09CSikgJChRM1BPQkopDQorIAkkKENDKSAgLW8g
JEAgJChRM09CSikgJChRM1BPQkopICQoR0xMREZMQUdTKSAkKExERkxBR1MpIA0KKyAjIFRUaW1v
OiBzcGxpbmVzIGNvZGUgcmVxdWlyZXMgQysrIGxpbmtpbmcsIGJ1dCBzcGxpbmVzIGhhdmUgbm90
IGJlZW4gb2ZmaWNpYWxseSBpbmNsdWRlZCBpbiB0aGUgY29kZWJhc2UNCisgIwkkKENYWCkgIC1v
ICRAICQoUTNPQkopICQoUTNQT0JKKSAkKEdMTERGTEFHUykgJChMREZMQUdTKSANCisgDQorLSQo
QikvJChQTEFURk9STSlxdWFrZTMtc21wIDogJChRM09CSikgJChRM1BPQkpfU01QKQ0KKyskKEIp
L2NsZWFucTMtc21wIDogJChRM09CSikgJChRM1BPQkpfU01QKQ0KKyAJJChDQykgIC1vICRAICQo
UTNPQkopICQoUTNQT0JKX1NNUCkgJChHTExERkxBR1MpIFwNCisgCQkkKFRIUkVBRF9MREZMQUdT
KSAkKExERkxBR1MpIA0KKyANCitAQCAtNzU4LDYgKzc2NSw3IEBADQorICQoQikvY2xpZW50L2xp
bnV4X3FnbC5vIDogJChVRElSKS9saW51eF9xZ2wuYzsgJChET19DQykgICQoR0xfQ0ZMQUdTKSAN
CisgJChCKS9jbGllbnQvbGludXhfaW5wdXQubyA6ICQoVURJUikvbGludXhfaW5wdXQuYzsgJChE
T19DQykgDQorICQoQikvY2xpZW50L2xpbnV4X3NuZC5vIDogJChVRElSKS9saW51eF9zbmQuYzsg
JChET19DQykgDQorKyQoQikvY2xpZW50L2xpbnV4X3NpZ25hbHMubyA6ICQoVURJUikvbGludXhf
c2lnbmFscy5jOyAkKERPX0NDKSAkKEdMX0NGTEFHUykNCisgJChCKS9jbGllbnQvc25kX21peGEu
byA6ICQoVURJUikvc25kX21peGEuczsgJChET19BUykgDQorICQoQikvY2xpZW50L21hdGhhLm8g
OiAkKFVESVIpL21hdGhhLnM7ICQoRE9fQVMpIA0KKyANCitAQCAtNzY3LDcgKzc3NSw3IEBADQor
ICQoQikvY2xpZW50L3ZtX3g4Ni5vIDogJChDTURJUikvdm1feDg2LmM7ICQoRE9fQ0MpIA0KKyBl
bmRpZg0KKyANCistaWZlcSAoJChBUkNIKSxwcGMpDQorK2lmZXEgKCQoQVJDSCkscG93ZXJwYykN
CisgaWZlcSAoJChETExfT05MWSksZmFsc2UpDQorICQoQikvY2xpZW50L3ZtX3BwYy5vIDogJChD
TURJUikvdm1fcHBjLmM7ICQoRE9fQ0MpDQorIGVuZGlmDQorQEAgLTkxMiwyMiArOTIwLDI2IEBA
DQorIAkkKEIpL2RlZC91bml4X21haW4ubyBcDQorIAkkKEIpL2RlZC91bml4X25ldC5vIFwNCisg
CSQoQikvZGVkL3VuaXhfc2hhcmVkLm8gXA0KKysJJChCKS9kZWQvbGludXhfc2lnbmFscy5vIFwN
CisgCVwNCisgCSQoQikvZGVkL251bGxfY2xpZW50Lm8gXA0KKyAJJChCKS9kZWQvbnVsbF9pbnB1
dC5vIFwNCisgCSQoQikvZGVkL251bGxfc25kZG1hLm8NCisgDQorIGlmZXEgKCQoQVJDSCksaTM4
NikNCistICBRM0RPQkogKz0gJChCKS9kZWQvdm1feDg2Lm8gJChCKS9kZWQvZnRvbC5vICQoQikv
ZGVkL3NuYXB2ZWN0b3Iubw0KKysgIFEzRE9CSiArPSAkKEIpL2RlZC9mdG9sLm8gJChCKS9kZWQv
c25hcHZlY3Rvci5vDQorKyAgaWZlcSAoJChETExfT05MWSksZmFsc2UpDQorKyAgUTNET0JKICs9
ICQoQikvZGVkL3ZtX3g4Ni5vDQorKyAgZW5kaWYNCisgZW5kaWYNCisgDQorLWlmZXEgKCQoQVJD
SCkscHBjKQ0KKytpZmVxICgkKEFSQ0gpLHBvd2VycGMpDQorICAgaWZlcSAoJChETExfT05MWSks
ZmFsc2UpDQorICAgICBRM0RPQkogKz0gJChCKS9kZWQvdm1fcHBjLm8NCisgICBlbmRpZg0KKyBl
bmRpZg0KKyANCistJChCKS8kKFBMQVRGT1JNKXEzZGVkIDogJChRM0RPQkopDQorKyQoQikvY2xl
YW5xM2RlZCA6ICQoUTNET0JKKQ0KKyAJJChDQykgIC1vICRAICQoUTNET0JKKSAkKExERkxBR1Mp
DQorIA0KKyAkKEIpL2RlZC9zdl9ib3QubyA6ICQoU0RJUikvc3ZfYm90LmM7ICQoRE9fREVEX0ND
KSANCitAQCAtOTg4LDYgKzEwMDAsNyBAQA0KKyAkKEIpL2RlZC91bml4X21haW4ubyA6ICQoVURJ
UikvdW5peF9tYWluLmM7ICQoRE9fREVEX0NDKSANCisgJChCKS9kZWQvdW5peF9uZXQubyA6ICQo
VURJUikvdW5peF9uZXQuYzsgJChET19ERURfQ0MpIA0KKyAkKEIpL2RlZC91bml4X3NoYXJlZC5v
IDogJChVRElSKS91bml4X3NoYXJlZC5jOyAkKERPX0RFRF9DQykgDQorKyQoQikvZGVkL2xpbnV4
X3NpZ25hbHMubyA6ICQoVURJUikvbGludXhfc2lnbmFscy5jOyAkKERPX0RFRF9DQykgDQorICQo
QikvZGVkL251bGxfY2xpZW50Lm8gOiAkKE5ESVIpL251bGxfY2xpZW50LmM7ICQoRE9fREVEX0ND
KSANCisgJChCKS9kZWQvbnVsbF9pbnB1dC5vIDogJChORElSKS9udWxsX2lucHV0LmM7ICQoRE9f
REVEX0NDKSANCisgJChCKS9kZWQvbnVsbF9zbmRkbWEubyA6ICQoTkRJUikvbnVsbF9zbmRkbWEu
YzsgJChET19ERURfQ0MpIA0KK0BAIC0xMDAxLDcgKzEwMTQsNyBAQA0KKyAkKEIpL2RlZC9zbmFw
dmVjdG9yLm8gOiAkKFVESVIpL3NuYXB2ZWN0b3IubmFzbTsgJChET19OQVNNKSANCisgZW5kaWYN
CisgDQorLWlmZXEgKCQoQVJDSCkscHBjKQ0KKytpZmVxICgkKEFSQ0gpLHBvd2VycGMpDQorIGlm
ZXEgKCQoRExMX09OTFkpLGZhbHNlKQ0KKyAkKEIpL2RlZC92bV9wcGMubyA6ICQoQ01ESVIpL3Zt
X3BwYy5jOyAkKERPX0RFRF9DQykNCisgZW5kaWYNCitAQCAtMTA2OCw3ICsxMDgxLDcgQEANCisg
CSQoQikvYmFzZXEzL2NnYW1lL3FfbWF0aC5vIFwNCisgCSQoQikvYmFzZXEzL2NnYW1lL3Ffc2hh
cmVkLm8NCisgDQorLSQoQikvYmFzZXEzL2NnYW1lJChBUkNIKS4kKFNITElCRVhUKSA6ICQoUTND
R09CSikNCisrJChCKS9iYXNlcTMvY2dhbWUuJChTSExJQkVYVCkgOiAkKFEzQ0dPQkopDQorIAkk
KENDKSAgJChTSExJQkxERkxBR1MpIC1vICRAICQoUTNDR09CSikNCisgDQorICQoQikvYmFzZXEz
L2NnYW1lL2JnX21pc2MubyA6ICQoR0RJUikvYmdfbWlzYy5jOyAkKERPX1NITElCX0NDKSAgICAg
ICAgIA0KK0BAIC0xMTI4LDcgKzExNDEsNyBAQA0KKyAJJChCKS9taXNzaW9ucGFjay9jZ2FtZS9x
X3NoYXJlZC5vIFwNCisgCSQoQikvbWlzc2lvbnBhY2svY2dhbWUvdWlfc2hhcmVkLm8NCisgDQor
LSQoQikvbWlzc2lvbnBhY2svY2dhbWUkKEFSQ0gpLiQoU0hMSUJFWFQpIDogJChNUENHT0JKKQ0K
KyskKEIpL21pc3Npb25wYWNrL2NnYW1lLiQoU0hMSUJFWFQpIDogJChNUENHT0JKKQ0KKyAJJChD
QykgJChTSExJQkxERkxBR1MpIC1vICRAICQoTVBDR09CSikNCisgDQorICQoQikvbWlzc2lvbnBh
Y2svY2dhbWUvYmdfbWlzYy5vIDogJChHRElSKS9iZ19taXNjLmM7ICQoRE9fU0hMSUJfQ0MpICAg
ICAtRE1JU1NJT05QQUNLIA0KK0BAIC0xMjAwLDcgKzEyMTMsNyBAQA0KKyAJJChCKS9iYXNlcTMv
Z2FtZS9xX21hdGgubyBcDQorIAkkKEIpL2Jhc2VxMy9nYW1lL3Ffc2hhcmVkLm8NCisgDQorLSQo
QikvYmFzZXEzL3FhZ2FtZSQoQVJDSCkuJChTSExJQkVYVCkgOiAkKFEzR09CSikNCisrJChCKS9i
YXNlcTMvcWFnYW1lLiQoU0hMSUJFWFQpIDogJChRM0dPQkopDQorIAkkKENDKSAgJChTSExJQkxE
RkxBR1MpIC1vICRAICQoUTNHT0JKKQ0KKyANCisgJChCKS9iYXNlcTMvZ2FtZS9haV9jaGF0Lm8g
OiAkKEdESVIpL2FpX2NoYXQuYzsgJChET19TSExJQl9DQykgICAgIA0KK0BAIC0xMjc4LDcgKzEy
OTEsNyBAQA0KKyAJJChCKS9taXNzaW9ucGFjay9nYW1lL3FfbWF0aC5vIFwNCisgCSQoQikvbWlz
c2lvbnBhY2svZ2FtZS9xX3NoYXJlZC5vDQorIA0KKy0kKEIpL21pc3Npb25wYWNrL3FhZ2FtZSQo
QVJDSCkuJChTSExJQkVYVCkgOiAkKE1QR09CSikNCisrJChCKS9taXNzaW9ucGFjay9xYWdhbWUu
JChTSExJQkVYVCkgOiAkKE1QR09CSikNCisgCSQoQ0MpICQoU0hMSUJMREZMQUdTKSAtbyAkQCAk
KE1QR09CSikNCisgDQorICQoQikvbWlzc2lvbnBhY2svZ2FtZS9haV9jaGF0Lm8gOiAkKEdESVIp
L2FpX2NoYXQuYzsgJChET19TSExJQl9DQykgICAgLURNSVNTSU9OUEFDSyANCitAQCAtMTM2Nyw3
ICsxMzgwLDcgQEANCisgICAgICAgICAkKEIpL2Jhc2VxMy91aS9xX21hdGgubyBcDQorICAgICAg
ICAgJChCKS9iYXNlcTMvdWkvcV9zaGFyZWQubw0KKyANCistJChCKS9iYXNlcTMvdWkkKEFSQ0gp
LiQoU0hMSUJFWFQpIDogJChRM1VJT0JKKQ0KKyskKEIpL2Jhc2VxMy91aS4kKFNITElCRVhUKSA6
ICQoUTNVSU9CSikNCisgCSQoQ0MpICQoQ0ZMQUdTKSAkKFNITElCTERGTEFHUykgLW8gJEAgJChR
M1VJT0JKKQ0KKyANCisgJChCKS9iYXNlcTMvdWkvYmdfbWlzYy5vIDogJChHRElSKS9iZ19taXNj
LmM7ICQoRE9fU0hMSUJfQ0MpIA0KK0BAIC0xNDEwLDcgKzE0MjMsNyBAQA0KKyAkKEIpL2Jhc2Vx
My91aS91aV9zdGFydHNlcnZlci5vIDogJChRM1VJRElSKS91aV9zdGFydHNlcnZlci5jOyAkKERP
X1NITElCX0NDKSANCisgJChCKS9iYXNlcTMvdWkvdWlfdGVhbS5vIDogJChRM1VJRElSKS91aV90
ZWFtLmM7ICQoRE9fU0hMSUJfQ0MpIA0KKyAkKEIpL2Jhc2VxMy91aS91aV90ZWFtb3JkZXJzLm8g
OiAkKFEzVUlESVIpL3VpX3RlYW1vcmRlcnMuYzsgJChET19TSExJQl9DQykgDQorLSQoQikvYmFz
ZXEzL3VpL3VpX3N5c2NhbGxzLm8gOiAkKFEzVUlESVIpL3VpX3N5c2NhbGxzLmM7ICQoRE9fU0hM
SUJfQ0MpIA0KKyskKEIpL2Jhc2VxMy91aS91aV9zeXNjYWxscy5vIDogJChVSURJUikvdWlfc3lz
Y2FsbHMuYzsgJChET19TSExJQl9DQykgDQorICQoQikvYmFzZXEzL3VpL3VpX3ZpZGVvLm8gOiAk
KFEzVUlESVIpL3VpX3ZpZGVvLmM7ICQoRE9fU0hMSUJfQ0MpIA0KKyANCisgIyBiazAwMTIwNSAt
IHRoZXNlIHdyZSB0aGUgb25seSBTSExJQiBjb21waWxlcyBpbiAxLjE3DQorQEAgLTE0NTAsNyAr
MTQ2Myw3IEBADQorICMJJChCKS9taXNzaW9ucGFjay91aS9xX21hdGgubyBcDQorICMJJChCKS9t
aXNzaW9ucGFjay91aS9xX3NoYXJlZC5vDQorIA0KKy0kKEIpL21pc3Npb25wYWNrL3VpJChBUkNI
KS4kKFNITElCRVhUKSA6ICQoTVBVSU9CSikNCisrJChCKS9taXNzaW9ucGFjay91aS4kKFNITElC
RVhUKSA6ICQoTVBVSU9CSikNCisgCSQoQ0MpICQoQ0ZMQUdTKSAkKFNITElCTERGTEFHUykgLW8g
JEAgJChNUFVJT0JKKQ0KKyANCisgJChCKS9taXNzaW9ucGFjay91aS91aV9hdG9tcy5vIDogJChV
SURJUikvdWlfYXRvbXMuYzsgJChET19TSExJQl9DQykgIC1ETUlTU0lPTlBBQ0sgIA0KK0BAIC0y
MDU5LDkgKzIwNzIsOSBAQA0KKyANCisgY29weWZpbGVzOg0KKyAJLW1rZGlyaGllciAkKENPUFlE
SVIpDQorLQljcCAkKEJSKS9saW51eHF1YWtlMyAkKENPUFlESVIpL3F1YWtlMy54ODYNCistCXN0
cmlwICQoQ09QWURJUikvcXVha2UzLng4Ng0KKy0JY2htb2QgNzU1ICQoQ09QWURJUikvcXVha2Uz
Lng4Ng0KKysJY3AgJChCUikvbGludXhxdWFrZTMgJChDT1BZRElSKS9xdWFrZTMNCisrCXN0cmlw
ICQoQ09QWURJUikvcXVha2UzDQorKwljaG1vZCA3NTUgJChDT1BZRElSKS9xdWFrZTMNCisgCWNw
ICQoQlIpL2xpbnV4cTNkZWQgJChDT1BZRElSKS9xM2RlZA0KKyAJc3RyaXAgJChDT1BZRElSKS9x
M2RlZA0KKyAJY2htb2QgNzU1ICQoQ09QWURJUikvcTNkZWQNCkluZGV4OiBmaWxlcy9wYXRjaC1j
b2RlLXVuaXgtY29ucw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGZpbGVzL3BhdGNoLWNvZGUtdW5p
eC1jb25zDQpkaWZmIC1OIGZpbGVzL3BhdGNoLWNvZGUtdW5peC1jb25zDQotIC0tLSBmaWxlcy9w
YXRjaC1jb2RlLXVuaXgtY29ucwkyMCBNYXIgMjAwNiAxNToyMToyNyAtMDAwMAkxLjENCisrKyAv
ZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KQEAgLTEsMjcgKzAsMCBAQA0KLSAt
LS0tIGNvZGUvdW5peC9jb25zLm9yaWcJRnJpIEp1biAxNCAxMzowMTozMiAyMDAyDQotIC0rKysg
Y29kZS91bml4L2NvbnMJV2VkIE5vdiAyMyAxMDozMjo0OSAyMDA1DQotIC1AQCAtMjcxLDExICsy
NzEsMTEgQEANCi0gLSAgICAgICMgRGVmYXVsdHMgZm9yIGEgdHlwaWNhbCAoPykgVU5JWCBwbGF0
Zm9ybS4NCi0gLSAgICAgICMgWW91ciBtaWxlYWdlIG1heSB2YXJ5Lg0KLSAtICAgICAgJ3VuaXgn
ID0+IFsNCi0gLS0JCSdDQycgICAgICAgICAgICAgPT4gJ2NjJywNCi0gLS0JCSdDRkxBR1MnICAg
ICAgICAgPT4gJycsDQotIC0rCQknQ0MnICAgICAgICAgICAgID0+ICRFTlZ7Q0N9LA0KLSAtKwkJ
J0NGTEFHUycgICAgICAgICA9PiAkRU5We0NGTEFHU30sDQotIC0gCQknQ0NDT00nICAgICAgICAg
ID0+ICclQ0MgJUNGTEFHUyAlX0lGTEFHUyAtYyAlPCAtbyAlPicsDQotIC0tCQknQ1hYJyAgICAg
ICAgICAgID0+ICclQ0MnLA0KLSAtLQkJJ0NYWEZMQUdTJyAgICAgICA9PiAnJUNGTEFHUycsDQot
IC0rCQknQ1hYJyAgICAgICAgICAgID0+ICRFTlZ7Q1hYfSwNCi0gLSsJCSdDWFhGTEFHUycgICAg
ICAgPT4gJEVOVntDWFhGTEFHU30sDQotIC0gCQknQ1hYQ09NJyAgICAgICAgID0+ICclQ1hYICVD
WFhGTEFHUyAlX0lGTEFHUyAtYyAlPCAtbyAlPicsDQotIC0gCQknSU5DRElSUFJFRklYJyAgID0+
ICctSScsDQotIC0gCQknSU5DRElSU1VGRklYJyAgID0+ICcnLA0KLSAtQEAgLTI5NCw3ICsyOTQs
NyBAQA0KLSAtIAkJJ0xEJyAgICAgICAgICAgICA9PiAnbGQnLA0KLSAtIAkJJ0xERkxBR1MnICAg
ICAgICA9PiAnJywNCi0gLSAJCSdQUkVGTElCJyAgICAgICAgPT4gJ2xpYicsDQotIC0tCQknRU5W
JyAgICAgICAgICAgID0+IHsgJ1BBVEgnID0+ICcvYmluOi91c3IvYmluJyB9LA0KLSAtKwkJJ0VO
VicgICAgICAgICAgICA9PiB7ICdQQVRIJyA9PiAnL2JpbjovdXNyL2JpbjovdXNyL2xvY2FsL2Jp
bicgfSwNCi0gLSAJCV0sDQotIC0gICAgICApOw0KLSAtIA0KSW5kZXg6IGZpbGVzL3BhdGNoLWNv
ZGUtdW5peC11bml4X21haW4uYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL3BjdnMvcG9y
dHMvZ2FtZXMvY2xlYW5xMy9maWxlcy9wYXRjaC1jb2RlLXVuaXgtdW5peF9tYWluLmMsdg0KcmV0
cmlldmluZyByZXZpc2lvbiAxLjENCmRpZmYgLXUgLXIxLjEgcGF0Y2gtY29kZS11bml4LXVuaXhf
bWFpbi5jDQotIC0tLSBmaWxlcy9wYXRjaC1jb2RlLXVuaXgtdW5peF9tYWluLmMJMjAgTWFyIDIw
MDYgMTU6MjE6MjcgLTAwMDAJMS4xDQorKysgZmlsZXMvcGF0Y2gtY29kZS11bml4LXVuaXhfbWFp
bi5jCTQgSnVuIDIwMDYgMjE6NDQ6MDMgLTAwMDANCkBAIC0xLDUgKzEsNSBAQA0KLSAtLS0tIGNv
ZGUvdW5peC91bml4X21haW4uYy5vcmlnCU1vbiBNYXIgMjAgMTg6Mzk6MTAgMjAwNg0KLSAtKysr
IGNvZGUvdW5peC91bml4X21haW4uYwlNb24gTWFyIDIwIDIwOjI0OjIyIDIwMDYNCistLS0gLi9j
b2RlL3VuaXgvdW5peF9tYWluLmMub3JpZwlXZWQgTWF5IDMxIDIwOjUyOjA4IDIwMDYNCisrKysg
Li9jb2RlL3VuaXgvdW5peF9tYWluLmMJV2VkIE1heSAzMSAyMDo1MjowOSAyMDA2DQogQEAgLTcy
MiwxNyArNzIyLDcgQEANCiAgICBhc3NlcnQoIG5hbWUgKTsNCiAgDQpAQCAtMjUsNyArMjUsNyBA
QA0KICAgICAgICB7DQogKyAgICAgICAgQ29tX1ByaW50ZiggIlN5c19Mb2FkRGxsKCVzKSBmYWls
ZWQ6XG5cIiVzXCJcbiIsIGZuLCBkbGVycm9yKCkgKTsNCiArICAgICAgICAvLyBGcmVlQlNEIHBh
Y2thZ2UgaW5zdGFsbGF0aW9uIHBhdGgNCi0gLSsgICAgICAgIGZuID0gRlNfQnVpbGRPU1BhdGgo
ICIlJVBSRUZJWCUlL2xpYi9jbGVhbnEzIiwgZ2FtZWRpciwgZm5hbWUgKTsNCisrICAgICAgICBm
biA9IEZTX0J1aWxkT1NQYXRoKCBMSUJESVIgLCBnYW1lZGlyLCBmbmFtZSApOw0KICsgICAgICAg
IENvbV9QcmludGYoICJTeXNfTG9hZERsbCglcykuLi4gXG4iLCBmbiApOw0KICsgICAgICAgIGxp
YkhhbmRsZSA9IGRsb3BlbiggZm4sIFFfUlRMRCApOw0KICsNCkluZGV4OiBmaWxlcy9wYXRjaC1j
b2RlLXVuaXgtdW5peF9zaGFyZWQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IC9ob21lL3BjdnMv
cG9ydHMvZ2FtZXMvY2xlYW5xMy9maWxlcy9wYXRjaC1jb2RlLXVuaXgtdW5peF9zaGFyZWQuYyx2
DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQ0KZGlmZiAtdSAtcjEuMSBwYXRjaC1jb2RlLXVuaXgt
dW5peF9zaGFyZWQuYw0KLSAtLS0gZmlsZXMvcGF0Y2gtY29kZS11bml4LXVuaXhfc2hhcmVkLmMJ
MjAgTWFyIDIwMDYgMTU6MjE6MjcgLTAwMDAJMS4xDQorKysgZmlsZXMvcGF0Y2gtY29kZS11bml4
LXVuaXhfc2hhcmVkLmMJNCBKdW4gMjAwNiAyMTo0NDowMyAtMDAwMA0KQEAgLTEsMTEgKzEsMTEg
QEANCi0gLS0tLSBjb2RlL3VuaXgvdW5peF9zaGFyZWQuYy5vcmlnCU1vbiBBdWcgMTUgMjA6MTA6
MDcgMjAwNQ0KLSAtKysrIGNvZGUvdW5peC91bml4X3NoYXJlZC5jCVN1biBOb3YgMjAgMTg6NDE6
MjIgMjAwNQ0KKy0tLSAuL2NvZGUvdW5peC91bml4X3NoYXJlZC5jLm9yaWcJV2VkIE1heSAzMSAy
MDo1MjowOCAyMDA2DQorKysrIC4vY29kZS91bml4L3VuaXhfc2hhcmVkLmMJV2VkIE1heSAzMSAy
MDo1MjowOSAyMDA2DQogQEAgLTM4LDcgKzM4LDcgQEANCiAgc3RhdGljIGNoYXIgY2RQYXRoW01B
WF9PU1BBVEhdOw0KICANCiAgLy8gVXNlZCB0byBkZXRlcm1pbmUgbG9jYWwgaW5zdGFsbGF0aW9u
IHBhdGgNCiAtc3RhdGljIGNoYXIgaW5zdGFsbFBhdGhbTUFYX09TUEFUSF07DQotIC0rc3RhdGlj
IGNoYXIgaW5zdGFsbFBhdGhbTUFYX09TUEFUSF0gPSAlJVEzRElSJSU7DQorK3N0YXRpYyBjaGFy
IGluc3RhbGxQYXRoW01BWF9PU1BBVEhdID0gREFUQURJUjsNCiAgDQogIC8vIFVzZWQgdG8gZGV0
ZXJtaW5lIHdoZXJlIHRvIHN0b3JlIHVzZXItc3BlY2lmaWMgZmlsZXMNCiAgc3RhdGljIGNoYXIg
aG9tZVBhdGhbTUFYX09TUEFUSF07DQpAQCAtMzQsNyArMzQsNyBAQA0KICANCiAgCS8vIHRlc3Qg
dGhlIHdyYXAgaXNzdWUNCiAgI2lmIDAJDQotIC1AQCAtMTM2LDcgKzE0MCw3IEBADQorQEAgLTEz
NiwxMCArMTQwLDEwIEBADQogIA0KICAJcmV0dXJuIHJldDsNCiAgfQ0KQEAgLTQyLDQgKzQyLDgg
QEANCiArLy8gI2VuZGlmDQogIA0KICAvLyNpZiAwIC8vIGJrMDAxMjE1IC0gc2VlIHNuYXB2ZWN0
b3IubmFzbSBmb3IgcmVwbGFjZW1lbnQNCi0gLSAjaWYgKGRlZmluZWQgX19BUFBMRV9fKSAvLyBy
Y2cwMTAyMDYgLSB1c2luZyB0aGlzIGZvciBQUEMgYnVpbGRzLi4uDQorLSNpZiAoZGVmaW5lZCBf
X0FQUExFX18pIC8vIHJjZzAxMDIwNiAtIHVzaW5nIHRoaXMgZm9yIFBQQyBidWlsZHMuLi4NCisr
I2lmbmRlZiBfX2kzODZfXyAvLyByY2cwMTAyMDYgLSB1c2luZyB0aGlzIGZvciBQUEMgYnVpbGRz
Li4uDQorIGxvbmcgZmFzdGZ0b2woIGZsb2F0IGYgKSB7IC8vIGJrMDAxMjEzIC0gZnJvbSB3aW4z
Mi93aW5fc2hhcmVkLmMNCisgICAvL3N0YXRpYyBpbnQgdG1wOw0KKyAgIC8vCV9fYXNtIGZsZCBm
DQo9PT09PT09PT09PSBFTkQgPT09PT09PT09PT0NCi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0t
LS0tDQpWZXJzaW9uOiBHbnVQRyB2MS40LjMgKEZyZWVCU0QpDQoNCmlEOERCUUZFZzFXQWlWMDVF
cFJjUDJFUkFsRG9BS0NsT3VSaUgrS1RhcnBicHdxTmMzVm1pVFkzYkFDZ2tWUHgNCitBeGVqQjlz
TVpYbGxXVjliUGI1VjNzPQ0KPTZHRmUNCi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQ0K
Comment 4 Alejandro Pulver freebsd_committer 2006-07-23 19:49:27 UTC
State Changed
From-To: open->closed

Committed.