Added auto counting of parameters for declaration and definition of fake functions for global use. Adjusted unit tests of global functions
diff --git a/.gitignore b/.gitignore
index 0187b3d..ed09e27 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
 build/
 *~
+*.sublime-project
+*.sublime-workspace
diff --git a/fakegen.rb b/fakegen.rb
index 6c4ac21..a393eed 100644
--- a/fakegen.rb
+++ b/fakegen.rb
@@ -423,17 +423,6 @@
     #{generate_arg_sequence($MAX_ARGS - 1, '', true, ',')}
 
 
-#define FAKE_VALUE_FUNC(...) \
-    FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
-
-#define FUNC_VALUE_(N,...) \
-    FUNC_VALUE_N(N,__VA_ARGS__)
-
-#define FUNC_VALUE_N(N,...) \
-    FAKE_VALUE_FUNC ## N(__VA_ARGS__)
-
-
-
 #define PP_NARG_MINUS1(...) \
     PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())
 
@@ -446,6 +435,19 @@
     #{generate_arg_sequence($MAX_ARGS, '', true, ',')}
 
 
+
+/* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */
+
+#define FAKE_VALUE_FUNC(...) \
+    FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define FUNC_VALUE_(N,...) \
+    FUNC_VALUE_N(N,__VA_ARGS__)
+
+#define FUNC_VALUE_N(N,...) \
+    FAKE_VALUE_FUNC ## N(__VA_ARGS__)
+
+
 #define FAKE_VOID_FUNC(...) \
     FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
 
@@ -475,6 +477,92 @@
 #define FUNC_VOID_VARARG_N(N,...) \
     FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
 
+
+
+/* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */
+
+#define DECLARE_FAKE_VALUE_FUNC(...) \
+    DEC_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define DEC_FUNC_VALUE_(N,...)  \
+    DEC_FUNC_VALUE_N(N,__VA_ARGS__)
+
+#define DEC_FUNC_VALUE_N(N,...) \
+    DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__)
+
+
+#define DECLARE_FAKE_VOID_FUNC(...) \
+    DEC_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
+
+#define DEC_FUNC_VOID_(N,...) \
+    DEC_FUNC_VOID_N(N, __VA_ARGS__)    
+
+#define DEC_FUNC_VOID_N(N,...) \
+    DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__)
+
+
+#define DECLARE_FAKE_VALUE_FUNC_VARARG(...) \
+    DEC_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define DEC_FUNC_VALUE_VARARG_(N,...) \
+    DEC_FUNC_VALUE_VARARG_N(N, __VA_ARGS__)    
+
+#define DEC_FUNC_VALUE_VARARG_N(N,...) \
+    DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__)
+
+
+#define DECLARE_FAKE_VOID_FUNC_VARARG(...) \
+    DEC_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
+
+#define DEC_FUNC_VOID_VARARG_(N,...) \
+    DEC_FUNC_VOID_VARARG_N(N, __VA_ARGS__)    
+
+#define DEC_FUNC_VOID_VARARG_N(N,...) \
+    DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
+
+
+
+/* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */
+
+#define DEFINE_FAKE_VALUE_FUNC(...) \
+    DEF_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define DEF_FUNC_VALUE_(N,...)  \
+    DEF_FUNC_VALUE_N(N,__VA_ARGS__)
+
+#define DEF_FUNC_VALUE_N(N,...) \
+    DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__)
+
+
+#define DEFINE_FAKE_VOID_FUNC(...) \
+    DEF_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
+
+#define DEF_FUNC_VOID_(N,...) \
+    DEF_FUNC_VOID_N(N,__VA_ARGS__) 
+
+#define DEF_FUNC_VOID_N(N,...) \
+    DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__) 
+
+
+#define DEFINE_FAKE_VALUE_FUNC_VARARG(...) \
+    DEF_FUNC_VALUE_VARARG(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define DEF_FUNC_VALUE_VARARG(N,...) \
+    DEF_FUNC_VALUE_VARARG_N(N,__VA_ARGS__) 
+
+#define DEF_FUNC_VALUE_VARARG_N(N,...) \
+    DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) 
+
+
+#define DEFINE_FAKE_VOID_FUNC_VARARG(...) \
+    DEF_FUNC_VOID_VARARG(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
+
+#define DEF_FUNC_VOID_VARARG(N,...) \
+    DEF_FUNC_VOID_VARARG_N(N,__VA_ARGS__) 
+
+#define DEF_FUNC_VOID_VARARG_N(N,...) \
+    DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) 
+
   MACRO_COUNTING
 end
 
diff --git a/fff.h b/fff.h
index ee664dd..4094b91 100644
--- a/fff.h
+++ b/fff.h
@@ -29,7 +29,7 @@
 #include <stdarg.h>
 #include <string.h> /* For memset and memcpy */
 
-#define FFF_MAX_ARGS (25u)
+#define FFF_MAX_ARGS (20u)
 #ifndef FFF_ARG_HISTORY_LEN
     #define FFF_ARG_HISTORY_LEN (50u)
 #endif
@@ -1619,556 +1619,6 @@
     DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     
 
-#define DECLARE_FAKE_VOID_FUNC21(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC21(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20); \
-                } \
-                else{ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20); \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC21(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    DECLARE_FAKE_VOID_FUNC21(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    DEFINE_FAKE_VOID_FUNC21(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    
-
-#define DECLARE_FAKE_VOID_FUNC22(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC22(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21); \
-                } \
-                else{ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21); \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC22(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    DECLARE_FAKE_VOID_FUNC22(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    DEFINE_FAKE_VOID_FUNC22(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    
-
-#define DECLARE_FAKE_VOID_FUNC23(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC23(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22); \
-                } \
-                else{ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22); \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC23(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    DECLARE_FAKE_VOID_FUNC23(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    DEFINE_FAKE_VOID_FUNC23(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    
-
-#define DECLARE_FAKE_VOID_FUNC24(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ARG(ARG23_TYPE, 23, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC24(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            SAVE_ARG(FUNCNAME, 23); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-                SAVE_ARG_HISTORY(FUNCNAME, 23); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23); \
-                } \
-                else{ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23); \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC24(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    DECLARE_FAKE_VOID_FUNC24(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    DEFINE_FAKE_VOID_FUNC24(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    
-
-#define DECLARE_FAKE_VOID_FUNC25(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ARG(ARG23_TYPE, 23, FUNCNAME) \
-            DECLARE_ARG(ARG24_TYPE, 24, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, ARG24_TYPE arg24); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, ARG24_TYPE arg24); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC25(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, ARG24_TYPE arg24){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            SAVE_ARG(FUNCNAME, 23); \
-            SAVE_ARG(FUNCNAME, 24); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-                SAVE_ARG_HISTORY(FUNCNAME, 23); \
-                SAVE_ARG_HISTORY(FUNCNAME, 24); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24); \
-                } \
-                else{ \
-                    FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24); \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC25(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    DECLARE_FAKE_VOID_FUNC25(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    DEFINE_FAKE_VOID_FUNC25(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    
-
 #define DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
     FFF_EXTERN_C \
         typedef struct FUNCNAME##_Fake { \
@@ -3702,566 +3152,6 @@
     DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
     
 
-#define DECLARE_FAKE_VALUE_FUNC21(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC21(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20); \
-                } \
-                else{ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC21(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC21(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC21(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE) \
-    
-
-#define DECLARE_FAKE_VALUE_FUNC22(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC22(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21); \
-                } \
-                else{ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC22(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC22(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC22(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE) \
-    
-
-#define DECLARE_FAKE_VALUE_FUNC23(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC23(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22); \
-                } \
-                else{ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC23(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC23(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC23(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE) \
-    
-
-#define DECLARE_FAKE_VALUE_FUNC24(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ARG(ARG23_TYPE, 23, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC24(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            SAVE_ARG(FUNCNAME, 23); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-                SAVE_ARG_HISTORY(FUNCNAME, 23); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23); \
-                } \
-                else{ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC24(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC24(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC24(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE) \
-    
-
-#define DECLARE_FAKE_VALUE_FUNC25(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ARG(ARG23_TYPE, 23, FUNCNAME) \
-            DECLARE_ARG(ARG24_TYPE, 24, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, ARG24_TYPE arg24); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, ARG24_TYPE arg24); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC25(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, ARG24_TYPE arg24){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            SAVE_ARG(FUNCNAME, 23); \
-            SAVE_ARG(FUNCNAME, 24); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-                SAVE_ARG_HISTORY(FUNCNAME, 23); \
-                SAVE_ARG_HISTORY(FUNCNAME, 24); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-                if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24); \
-                } \
-                else{ \
-                    return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24); \
-                } \
-            } \
-            if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, arg24); \
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC25(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC25(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC25(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ARG24_TYPE) \
-    
-
 #define DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
     FFF_EXTERN_C \
         typedef struct FUNCNAME##_Fake { \
@@ -5554,526 +4444,6 @@
     DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     
 
-#define DECLARE_FAKE_VOID_FUNC21_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, va_list ap); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC21_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg19);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, ap);\
-                va_end(ap);\
-            }\
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC21_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC21_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC21_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    
-
-#define DECLARE_FAKE_VOID_FUNC22_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, va_list ap); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC22_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg20);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, ap);\
-                va_end(ap);\
-            }\
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC22_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC22_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC22_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    
-
-#define DECLARE_FAKE_VOID_FUNC23_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, va_list ap); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC23_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg21);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, ap);\
-                va_end(ap);\
-            }\
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC23_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC23_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC23_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    
-
-#define DECLARE_FAKE_VOID_FUNC24_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, va_list ap); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC24_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg22);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, ap);\
-                va_end(ap);\
-            }\
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC24_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC24_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC24_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    
-
-#define DECLARE_FAKE_VOID_FUNC25_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ARG(ARG23_TYPE, 23, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, va_list ap); \
-            void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VOID_FUNC25_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            SAVE_ARG(FUNCNAME, 23); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-                SAVE_ARG_HISTORY(FUNCNAME, 23); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                va_list ap;\
-                va_start(ap, arg23);\
-              FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, ap);\
-                va_end(ap);\
-            }\
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VOID_FUNC25_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC25_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC25_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    
-
 #define DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
     FFF_EXTERN_C \
         typedef struct FUNCNAME##_Fake { \
@@ -7442,570 +5812,32 @@
     DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
     
 
-#define DECLARE_FAKE_VALUE_FUNC21_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, va_list ap); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC21_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg19);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC21_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC21_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC21_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ...) \
-    
-
-#define DECLARE_FAKE_VALUE_FUNC22_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, va_list ap); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC22_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg20);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC22_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC22_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC22_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ...) \
-    
-
-#define DECLARE_FAKE_VALUE_FUNC23_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, va_list ap); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC23_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg21);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC23_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC23_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC23_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ...) \
-    
-
-#define DECLARE_FAKE_VALUE_FUNC24_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, va_list ap); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC24_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg22);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC24_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC24_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC24_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ...) \
-    
-
-#define DECLARE_FAKE_VALUE_FUNC25_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    FFF_EXTERN_C \
-        typedef struct FUNCNAME##_Fake { \
-            DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-            DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-            DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-            DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-            DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-            DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-            DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-            DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-            DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-            DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-            DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-            DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-            DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-            DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-            DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-            DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-            DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-            DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-            DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-            DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-            DECLARE_ARG(ARG20_TYPE, 20, FUNCNAME) \
-            DECLARE_ARG(ARG21_TYPE, 21, FUNCNAME) \
-            DECLARE_ARG(ARG22_TYPE, 22, FUNCNAME) \
-            DECLARE_ARG(ARG23_TYPE, 23, FUNCNAME) \
-            DECLARE_ALL_FUNC_COMMON \
-            DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-            DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-            RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, va_list ap); \
-            RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, va_list ap); \
-        } FUNCNAME##_Fake;\
-        extern FUNCNAME##_Fake FUNCNAME##_fake;\
-        void FUNCNAME##_reset(); \
-    FFF_END_EXTERN_C \
-
-#define DEFINE_FAKE_VALUE_FUNC25_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    FFF_EXTERN_C \
-        FUNCNAME##_Fake FUNCNAME##_fake;\
-        RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19, ARG20_TYPE arg20, ARG21_TYPE arg21, ARG22_TYPE arg22, ARG23_TYPE arg23, ...){ \
-            SAVE_ARG(FUNCNAME, 0); \
-            SAVE_ARG(FUNCNAME, 1); \
-            SAVE_ARG(FUNCNAME, 2); \
-            SAVE_ARG(FUNCNAME, 3); \
-            SAVE_ARG(FUNCNAME, 4); \
-            SAVE_ARG(FUNCNAME, 5); \
-            SAVE_ARG(FUNCNAME, 6); \
-            SAVE_ARG(FUNCNAME, 7); \
-            SAVE_ARG(FUNCNAME, 8); \
-            SAVE_ARG(FUNCNAME, 9); \
-            SAVE_ARG(FUNCNAME, 10); \
-            SAVE_ARG(FUNCNAME, 11); \
-            SAVE_ARG(FUNCNAME, 12); \
-            SAVE_ARG(FUNCNAME, 13); \
-            SAVE_ARG(FUNCNAME, 14); \
-            SAVE_ARG(FUNCNAME, 15); \
-            SAVE_ARG(FUNCNAME, 16); \
-            SAVE_ARG(FUNCNAME, 17); \
-            SAVE_ARG(FUNCNAME, 18); \
-            SAVE_ARG(FUNCNAME, 19); \
-            SAVE_ARG(FUNCNAME, 20); \
-            SAVE_ARG(FUNCNAME, 21); \
-            SAVE_ARG(FUNCNAME, 22); \
-            SAVE_ARG(FUNCNAME, 23); \
-            if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){\
-                SAVE_ARG_HISTORY(FUNCNAME, 0); \
-                SAVE_ARG_HISTORY(FUNCNAME, 1); \
-                SAVE_ARG_HISTORY(FUNCNAME, 2); \
-                SAVE_ARG_HISTORY(FUNCNAME, 3); \
-                SAVE_ARG_HISTORY(FUNCNAME, 4); \
-                SAVE_ARG_HISTORY(FUNCNAME, 5); \
-                SAVE_ARG_HISTORY(FUNCNAME, 6); \
-                SAVE_ARG_HISTORY(FUNCNAME, 7); \
-                SAVE_ARG_HISTORY(FUNCNAME, 8); \
-                SAVE_ARG_HISTORY(FUNCNAME, 9); \
-                SAVE_ARG_HISTORY(FUNCNAME, 10); \
-                SAVE_ARG_HISTORY(FUNCNAME, 11); \
-                SAVE_ARG_HISTORY(FUNCNAME, 12); \
-                SAVE_ARG_HISTORY(FUNCNAME, 13); \
-                SAVE_ARG_HISTORY(FUNCNAME, 14); \
-                SAVE_ARG_HISTORY(FUNCNAME, 15); \
-                SAVE_ARG_HISTORY(FUNCNAME, 16); \
-                SAVE_ARG_HISTORY(FUNCNAME, 17); \
-                SAVE_ARG_HISTORY(FUNCNAME, 18); \
-                SAVE_ARG_HISTORY(FUNCNAME, 19); \
-                SAVE_ARG_HISTORY(FUNCNAME, 20); \
-                SAVE_ARG_HISTORY(FUNCNAME, 21); \
-                SAVE_ARG_HISTORY(FUNCNAME, 22); \
-                SAVE_ARG_HISTORY(FUNCNAME, 23); \
-            }\
-            else{\
-                HISTORY_DROPPED(FUNCNAME);\
-            }\
-            INCREMENT_CALL_COUNT(FUNCNAME); \
-            REGISTER_CALL(FUNCNAME); \
-            if(FUNCNAME##_fake.custom_fake){\
-                RETURN_TYPE ret;\
-                va_list ap;\
-                va_start(ap, arg23);\
-                ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19, arg20, arg21, arg22, arg23, ap);\
-                va_end(ap);\
-                return ret;\
-            }\
-            RETURN_FAKE_RESULT(FUNCNAME)  \
-        } \
-        DEFINE_RESET_FUNCTION(FUNCNAME) \
-    FFF_END_EXTERN_C \
-
-#define FAKE_VALUE_FUNC25_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC25_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC25_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE, ARG20_TYPE, ARG21_TYPE, ARG22_TYPE, ARG23_TYPE, ...) \
-    
-
 #define PP_NARG_MINUS2(...)     PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2())
 
 #define PP_NARG_MINUS2_(...)     PP_ARG_MINUS2_N(__VA_ARGS__)
 
-#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, N, ...)   N
+#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, N, ...)   N
 
 #define PP_RSEQ_N_MINUS2()     19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
 
 
-#define FAKE_VALUE_FUNC(...)     FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
-
-#define FUNC_VALUE_(N,...)     FUNC_VALUE_N(N,__VA_ARGS__)
-
-#define FUNC_VALUE_N(N,...)     FAKE_VALUE_FUNC ## N(__VA_ARGS__)
-
-
-
 #define PP_NARG_MINUS1(...)     PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1())
 
 #define PP_NARG_MINUS1_(...)     PP_ARG_MINUS1_N(__VA_ARGS__)
 
-#define PP_ARG_MINUS1_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, N, ...)   N
+#define PP_ARG_MINUS1_N(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, N, ...)   N
 
-#define PP_RSEQ_N_MINUS1()     25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+#define PP_RSEQ_N_MINUS1()     20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+
+
+
+/* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */
+
+#define FAKE_VALUE_FUNC(...)     FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define FUNC_VALUE_(N,...)     FUNC_VALUE_N(N,__VA_ARGS__)
+
+#define FUNC_VALUE_N(N,...)     FAKE_VALUE_FUNC ## N(__VA_ARGS__)
 
 
 #define FAKE_VOID_FUNC(...)     FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
@@ -8029,4 +5861,66 @@
 #define FUNC_VOID_VARARG_N(N,...)     FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
 
 
+
+/* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */
+
+#define DECLARE_FAKE_VALUE_FUNC(...)     DEC_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define DEC_FUNC_VALUE_(N,...)      DEC_FUNC_VALUE_N(N,__VA_ARGS__)
+
+#define DEC_FUNC_VALUE_N(N,...)     DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__)
+
+
+#define DECLARE_FAKE_VOID_FUNC(...)     DEC_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
+
+#define DEC_FUNC_VOID_(N,...)     DEC_FUNC_VOID_N(N, __VA_ARGS__)    
+
+#define DEC_FUNC_VOID_N(N,...)     DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__)
+
+
+#define DECLARE_FAKE_VALUE_FUNC_VARARG(...)     DEC_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define DEC_FUNC_VALUE_VARARG_(N,...)     DEC_FUNC_VALUE_VARARG_N(N, __VA_ARGS__)    
+
+#define DEC_FUNC_VALUE_VARARG_N(N,...)     DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__)
+
+
+#define DECLARE_FAKE_VOID_FUNC_VARARG(...)     DEC_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
+
+#define DEC_FUNC_VOID_VARARG_(N,...)     DEC_FUNC_VOID_VARARG_N(N, __VA_ARGS__)    
+
+#define DEC_FUNC_VOID_VARARG_N(N,...)     DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__)
+
+
+
+/* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */
+
+#define DEFINE_FAKE_VALUE_FUNC(...)     DEF_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define DEF_FUNC_VALUE_(N,...)      DEF_FUNC_VALUE_N(N,__VA_ARGS__)
+
+#define DEF_FUNC_VALUE_N(N,...)     DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__)
+
+
+#define DEFINE_FAKE_VOID_FUNC(...)     DEF_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
+
+#define DEF_FUNC_VOID_(N,...)     DEF_FUNC_VOID_N(N,__VA_ARGS__) 
+
+#define DEF_FUNC_VOID_N(N,...)     DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__) 
+
+
+#define DEFINE_FAKE_VALUE_FUNC_VARARG(...)     DEF_FUNC_VALUE_VARARG(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define DEF_FUNC_VALUE_VARARG(N,...)     DEF_FUNC_VALUE_VARARG_N(N,__VA_ARGS__) 
+
+#define DEF_FUNC_VALUE_VARARG_N(N,...)     DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__) 
+
+
+#define DEFINE_FAKE_VOID_FUNC_VARARG(...)     DEF_FUNC_VOID_VARARG(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__)
+
+#define DEF_FUNC_VOID_VARARG(N,...)     DEF_FUNC_VOID_VARARG_N(N,__VA_ARGS__) 
+
+#define DEF_FUNC_VOID_VARARG_N(N,...)     DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__) 
+
+
 #endif /* FAKE_FUNCTIONS */
diff --git a/ruby_test.rb b/ruby_test.rb
new file mode 100644
index 0000000..f770541
--- /dev/null
+++ b/ruby_test.rb
@@ -0,0 +1,50 @@
+$MAX_ARGS = 20
+
+
+#{ $MAX_ARGS.times {|arg_count| '_' + arg_count.to_s }
+def generate_reverse_arg_sequence(args)
+  (0..args).flat_map {|i| ['_' + i.to_s]}.join(", ")
+end
+
+def generate_arg_sequence(args, prefix, do_reverse) 
+ fmap = (0..args).flat_map {|i| [prefix + i.to_s]}
+ if do_reverse then fmap.reverse.join(", ") else fmap.join(", ") end
+end
+
+
+def output_macro_counting_shortcuts
+  puts <<-MACRO_COUNTING
+
+#define PP_NARG_MINUS2(...) \
+    PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2())
+
+#define PP_NARG_MINUS2_(...) \
+    PP_ARG_MINUS2_N(__VA_ARGS__)
+
+#define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, N, ...)   N
+#define PP_ARG_MINUS2_N(returnVal, #{ generate_arg_sequence($MAX_ARGS - 1, '_', false) }, N, ...)   N
+
+#define PP_RSEQ_N_MINUS2() \
+    19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+#define PP_RSEQ_N_MINUS2() \
+    #{ generate_arg_sequence($MAX_ARGS - 1, '', true) }
+
+
+#define FAKE_VALUE_FUNC(...) \
+    FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__)
+
+#define FUNC_VALUE_(N,...) \
+    FUNC_VALUE_N(N,__VA_ARGS__)
+
+#define FUNC_VALUE_N(N,...) \
+    FAKE_VALUE_FUNC ## N(__VA_ARGS__)
+
+  MACRO_COUNTING
+end
+
+puts generate_arg_sequence($MAX_ARGS, '', false)
+puts generate_arg_sequence($MAX_ARGS, '_', false)
+puts generate_arg_sequence($MAX_ARGS, '', true)
+puts generate_arg_sequence($MAX_ARGS, '_', true)
+
+output_macro_counting_shortcuts
\ No newline at end of file
diff --git a/test/global_fakes.c b/test/global_fakes.c
index 1b93394..0acfe05 100644
--- a/test/global_fakes.c
+++ b/test/global_fakes.c
@@ -1,15 +1,16 @@
 #include "global_fakes.h"
 #include <string.h> // for memcpy
 
-DEFINE_FAKE_VOID_FUNC1(voidfunc1, int);
-DEFINE_FAKE_VOID_FUNC2(voidfunc2, char, char);
-DEFINE_FAKE_VOID_FUNC1(voidfunc1outparam, char *);
-DEFINE_FAKE_VALUE_FUNC0(long, longfunc0);
-DEFINE_FAKE_VALUE_FUNC0(enum MYBOOL, enumfunc0);
-DEFINE_FAKE_VALUE_FUNC0(struct MyStruct, structfunc0);
-DEFINE_FAKE_VOID_FUNC3_VARARG(voidfunc3var, const char *, int, ...);
-DEFINE_FAKE_VALUE_FUNC3_VARARG(int, valuefunc3var, const char *, int, ...);
+DEFINE_FAKE_VOID_FUNC(voidfunc1, int);
+DEFINE_FAKE_VOID_FUNC(voidfunc2, char, char);
+DEFINE_FAKE_VOID_FUNC(voidfunc1outparam, char *);
+
+DEFINE_FAKE_VALUE_FUNC(long, longfunc0);
+DEFINE_FAKE_VALUE_FUNC(enum MYBOOL, enumfunc0);
+DEFINE_FAKE_VALUE_FUNC(struct MyStruct, structfunc0);
+DEFINE_FAKE_VOID_FUNC_VARARG(voidfunc3var, const char *, int, ...);
+DEFINE_FAKE_VALUE_FUNC_VARARG(int, valuefunc3var, const char *, int, ...);
 #ifndef __cplusplus
-DEFINE_FAKE_VALUE_FUNC3(int, strlcpy3, char* const, const char* const, const size_t);
+DEFINE_FAKE_VALUE_FUNC(int, strlcpy3, char* const, const char* const, const size_t);
 #endif /* __cplusplus */
-DEFINE_FAKE_VOID_FUNC20(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
+DEFINE_FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
diff --git a/test/global_fakes.h b/test/global_fakes.h
index 8ee7c3f..57afb4d 100644
--- a/test/global_fakes.h
+++ b/test/global_fakes.h
@@ -24,18 +24,18 @@
 struct MyStruct structfunc();
 ////  End Imaginary production code header file ///
 
-DECLARE_FAKE_VOID_FUNC1(voidfunc1, int);
-DECLARE_FAKE_VOID_FUNC2(voidfunc2, char, char);
-DECLARE_FAKE_VOID_FUNC1(voidfunc1outparam, char *);
-DECLARE_FAKE_VALUE_FUNC0(long, longfunc0);
-DECLARE_FAKE_VALUE_FUNC0(enum MYBOOL, enumfunc0);
-DECLARE_FAKE_VALUE_FUNC0(struct MyStruct, structfunc0);
-DECLARE_FAKE_VOID_FUNC3_VARARG(voidfunc3var, const char *, int, ...);
-DECLARE_FAKE_VALUE_FUNC3_VARARG(int, valuefunc3var, const char *, int, ...);
-DECLARE_FAKE_VOID_FUNC20(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
+DECLARE_FAKE_VOID_FUNC(voidfunc1, int);
+DECLARE_FAKE_VOID_FUNC(voidfunc2, char, char);
+DECLARE_FAKE_VOID_FUNC(voidfunc1outparam, char *);
+DECLARE_FAKE_VALUE_FUNC(long, longfunc0);
+DECLARE_FAKE_VALUE_FUNC(enum MYBOOL, enumfunc0);
+DECLARE_FAKE_VALUE_FUNC(struct MyStruct, structfunc0);
+DECLARE_FAKE_VOID_FUNC_VARARG(voidfunc3var, const char *, int, ...);
+DECLARE_FAKE_VALUE_FUNC_VARARG(int, valuefunc3var, const char *, int, ...);
+DECLARE_FAKE_VOID_FUNC(voidfunc20, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int);
 
 #ifndef __cplusplus
 int strlcpy3(char* const, const char* const, const size_t);
-DECLARE_FAKE_VALUE_FUNC3(int, strlcpy3, char* const, const char* const, const size_t);
+DECLARE_FAKE_VALUE_FUNC(int, strlcpy3, char* const, const char* const, const size_t);
 #endif /* __cplusplus */
 #endif /* GLOBAL_FAKES_H_ */