Main Page | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

dlfcn.c

Go to the documentation of this file.
00001 /*
00002 Copyright (c) 2002 Jorge Acereda  <jacereda@users.sourceforge.net> &
00003                    Peter O'Gorman <ogorman@users.sourceforge.net>
00004                    
00005 Portions may be copyright others, see the AUTHORS file included with this
00006 distribution.                  
00007 
00008 Maintained by Peter O'Gorman <ogorman@users.sourceforge.net>
00009 
00010 Bug Reports and other queries should go to <ogorman@users.sourceforge.net>
00011 
00012 Permission is hereby granted, free of charge, to any person obtaining
00013 a copy of this software and associated documentation files (the
00014 "Software"), to deal in the Software without restriction, including
00015 without limitation the rights to use, copy, modify, merge, publish,
00016 distribute, sublicense, and/or sell copies of the Software, and to
00017 permit persons to whom the Software is furnished to do so, subject to
00018 the following conditions:
00019 
00020 The above copyright notice and this permission notice shall be
00021 included in all copies or substantial portions of the Software.
00022 
00023 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00024 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00025 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00026 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00027 LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00028 OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00029 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00030 */
00031 
00032 #include <pthread.h>
00033 #include <stdio.h>
00034 #include <stdlib.h>
00035 #include <string.h>
00036 #include <sys/types.h>
00037 #include <sys/stat.h>
00038 #include <stdarg.h>
00039 #include <limits.h>
00040 #include <mach-o/dyld.h>
00041 #include <mach-o/nlist.h>
00042 #include <mach-o/getsect.h>
00043 /* Just playing to see if it would compile with the freebsd headers, it does,
00044  * but because of the different values for RTLD_LOCAL etc, it would break binary
00045  * compat... oh well
00046  */
00047 #ifndef __BSD_VISIBLE
00048 #define __BSD_VISIBLE 1
00049 #endif
00050 #include <asterisk/dlfcn-compat.h>
00051 
00052 #ifndef dl_restrict
00053 #define dl_restrict __restrict
00054 #endif
00055 /* This is not available on 10.1 */
00056 #ifndef LC_LOAD_WEAK_DYLIB
00057 #define  LC_LOAD_WEAK_DYLIB (0x18 | LC_REQ_DYLD)
00058 #endif
00059 
00060 /* With this stuff here, this thing may actually compile/run on 10.0 systems
00061  * Not that I have a 10.0 system to test it on anylonger
00062  */
00063 #ifndef LC_REQ_DYLD
00064 #define LC_REQ_DYLD 0x80000000
00065 #endif
00066 #ifndef NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED
00067 #define NSADDIMAGE_OPTION_RETURN_ONLY_IF_LOADED 0x4
00068 #endif
00069 #ifndef NSADDIMAGE_OPTION_RETURN_ON_ERROR
00070 #define NSADDIMAGE_OPTION_RETURN_ON_ERROR 0x1
00071 #endif
00072 #ifndef NSLOOKUPSYMBOLINIMAGE_OPTION_BIND
00073 #define NSLOOKUPSYMBOLINIMAGE_OPTION_BIND 0x0
00074 #endif
00075 #ifndef NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR
00076 #define NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR 0x4
00077 #endif
00078 /* These symbols will be looked for in dyld */
00079 static const struct mach_header *(*dyld_NSAddImage) (const char *, unsigned long) = 0;
00080 static int (*dyld_NSIsSymbolNameDefinedInImage) (const struct mach_header *, const char *) = 0;
00081 static NSSymbol(*dyld_NSLookupSymbolInImage)
00082    (const struct mach_header *, const char *, unsigned long) = 0;
00083 
00084 /* Define this to make dlcompat reuse data block. This way in theory we save
00085  * a little bit of overhead. However we then couldn't correctly catch excess
00086  * calls to dlclose(). Hence we don't use this feature
00087  */
00088 #undef REUSE_STATUS
00089 
00090 /* Size of the internal error message buffer (used by dlerror()) */
00091 #define ERR_STR_LEN        251
00092 
00093 /* Maximum number of search paths supported by getSearchPath */
00094 #define MAX_SEARCH_PATHS   32
00095 
00096 
00097 #define MAGIC_DYLIB_OFI ((NSObjectFileImage) 'DYOF')
00098 #define MAGIC_DYLIB_MOD ((NSModule) 'DYMO')
00099 
00100 /* internal flags */
00101 #define DL_IN_LIST 0x01
00102 
00103 /* our mutex */
00104 static pthread_mutex_t dlcompat_mutex;
00105 /* Our thread specific storage
00106  */
00107 static pthread_key_t dlerror_key;
00108 
00109 struct dlthread
00110 {
00111    int lockcnt;
00112    unsigned char errset;
00113    char errstr[ERR_STR_LEN];
00114 };
00115 
00116 /* This is our central data structure. Whenever a module is loaded via
00117  * dlopen(), we create such a struct.
00118  */
00119 struct dlstatus
00120 {
00121    struct dlstatus *next;     /* pointer to next element in the linked list */
00122    NSModule module;
00123    const struct mach_header *lib;
00124    int refs;               /* reference count */
00125    int mode;               /* mode in which this module was loaded */
00126    dev_t device;
00127    ino_t inode;
00128    int flags;              /* Any internal flags we may need */
00129 };
00130 
00131 /* Head node of the dlstatus list */
00132 static struct dlstatus mainStatus = { 0, MAGIC_DYLIB_MOD, NULL, -1, RTLD_GLOBAL, 0, 0, 0 };
00133 static struct dlstatus *stqueue = &mainStatus;
00134 
00135 
00136 /* Storage for the last error message (used by dlerror()) */
00137 /* static char err_str[ERR_STR_LEN]; */
00138 /* static int err_filled = 0; */
00139 
00140 /* Prototypes to internal functions */
00141 static void debug(const char *fmt, ...);
00142 static void error(const char *str, ...);
00143 static const char *safegetenv(const char *s);
00144 static const char *searchList(void);
00145 static const char *getSearchPath(int i);
00146 static const char *getFullPath(int i, const char *file);
00147 static const struct stat *findFile(const char *file, const char **fullPath);
00148 static int isValidStatus(struct dlstatus *status);
00149 static inline int isFlagSet(int mode, int flag);
00150 static struct dlstatus *lookupStatus(const struct stat *sbuf);
00151 static void insertStatus(struct dlstatus *dls, const struct stat *sbuf);
00152 static int promoteLocalToGlobal(struct dlstatus *dls);
00153 static void *reference(struct dlstatus *dls, int mode);
00154 static void *dlsymIntern(struct dlstatus *dls, const char *symbol, int canSetError);
00155 static struct dlstatus *allocStatus(void);
00156 static struct dlstatus *loadModule(const char *path, const struct stat *sbuf, int mode);
00157 static NSSymbol *search_linked_libs(const struct mach_header *mh, const char *symbol);
00158 static const char *get_lib_name(const struct mach_header *mh);
00159 static const struct mach_header *get_mach_header_from_NSModule(NSModule * mod);
00160 static void dlcompat_init_func(void);
00161 static inline void dolock(void);
00162 static inline void dounlock(void);
00163 static void dlerrorfree(void *data);
00164 static void resetdlerror(void);
00165 static const struct mach_header *my_find_image(const char *name);
00166 static const struct mach_header *image_for_address(const void *address);
00167 static void dlcompat_cleanup(void);
00168 static inline const char *dyld_error_str(void);
00169 
00170 #if FINK_BUILD
00171 /* Two Global Functions */
00172 void *dlsym_prepend_underscore(void *handle, const char *symbol);
00173 void *dlsym_auto_underscore(void *handle, const char *symbol);
00174 
00175 /* And their _intern counterparts */
00176 static void *dlsym_prepend_underscore_intern(void *handle, const char *symbol);
00177 static void *dlsym_auto_underscore_intern(void *handle, const char *symbol);
00178 #endif
00179 
00180 /* Functions */
00181 
00182 static void debug(const char *fmt, ...)
00183 {
00184 #if DEBUG > 1
00185    va_list arg;
00186    va_start(arg, fmt);
00187    fprintf(stderr, "DLDEBUG: ");
00188    vfprintf(stderr, fmt, arg);
00189    fprintf(stderr, "\n");
00190    fflush(stderr);
00191    va_end(arg);
00192 #endif
00193 }
00194 
00195 static void error(const char *str, ...)
00196 {
00197    va_list arg;
00198    struct dlthread  *tss;
00199    char * err_str;
00200    va_start(arg, str);
00201    tss = pthread_getspecific(dlerror_key);
00202    err_str = tss->errstr;
00203    strncpy(err_str, "dlcompat: ", ERR_STR_LEN);
00204    vsnprintf(err_str + 10, ERR_STR_LEN - 10, str, arg);
00205    va_end(arg);
00206    debug("ERROR: %s\n", err_str);
00207    tss->errset = 1;
00208 }
00209 
00210 static void warning(const char *str)
00211 {
00212 #if DEBUG > 0
00213    fprintf(stderr, "WARNING: dlcompat: %s\n", str);
00214 #endif
00215 }
00216 
00217 static const char *safegetenv(const char *s)
00218 {
00219    const char *ss = getenv(s);
00220    return ss ? ss : "";
00221 }
00222 
00223 /* because this is only used for debugging and error reporting functions, we
00224  * don't really care about how elegant it is... it could use the load
00225  * commands to find the install name of the library, but...
00226  */
00227 static const char *get_lib_name(const struct mach_header *mh)
00228 {
00229    unsigned long count = _dyld_image_count();
00230    unsigned long i;
00231    const char *val = NULL;
00232    if (mh)
00233    {
00234       for (i = 0; i < count; i++)
00235       {
00236          if (mh == _dyld_get_image_header(i))
00237          {
00238             val = _dyld_get_image_name(i);
00239             break;
00240          }
00241       }
00242    }
00243    return val;
00244 }
00245 
00246 /* Returns the mach_header for the module bu going through all the loaded images
00247  * and finding the one with the same name as the module. There really ought to be
00248  * an api for doing this, would be faster, but there isn't one right now
00249  */
00250 static const struct mach_header *get_mach_header_from_NSModule(NSModule * mod)
00251 {
00252    const char *mod_name = NSNameOfModule(mod);
00253    struct mach_header *mh = NULL;
00254    unsigned long count = _dyld_image_count();
00255    unsigned long i;
00256    debug("Module name: %s", mod_name);
00257    for (i = 0; i < count; i++)
00258    {
00259       if (!strcmp(mod_name, _dyld_get_image_name(i)))
00260       {
00261          mh = _dyld_get_image_header(i);
00262          break;
00263       }
00264    }
00265    return mh;
00266 }
00267 
00268 
00269 /* Compute and return a list of all directories that we should search when
00270  * trying to locate a module. We first look at the values of LD_LIBRARY_PATH
00271  * and DYLD_LIBRARY_PATH, and then finally fall back to looking into
00272  * /usr/lib and /lib. Since both of the environments variables can contain a
00273  * list of colon separated paths, we simply concat them and the two other paths
00274  * into one big string, which we then can easily parse.
00275  * Splitting this string into the actual path list is done by getSearchPath()
00276  */
00277 static const char *searchList()
00278 {
00279    size_t buf_size;
00280    static char *buf=NULL;
00281    const char *ldlp = safegetenv("LD_LIBRARY_PATH");
00282    const char *dyldlp = safegetenv("DYLD_LIBRARY_PATH");
00283    const char *stdpath = getenv("DYLD_FALLBACK_LIBRARY_PATH");
00284    if (!stdpath)
00285       stdpath = "/usr/local/lib:/lib:/usr/lib";
00286    if (!buf)
00287    {  
00288       buf_size = strlen(ldlp) + strlen(dyldlp) + strlen(stdpath) + 4;
00289       buf = malloc(buf_size);
00290       snprintf(buf, buf_size, "%s%s%s%s%s%c", dyldlp, (dyldlp[0] ? ":" : ""), ldlp, (ldlp[0] ? ":" : ""),
00291              stdpath, '\0');
00292    }
00293    return buf;
00294 }
00295 
00296 /* Returns the ith search path from the list as computed by searchList() */
00297 static const char *getSearchPath(int i)
00298 {
00299    static const char *list = 0;
00300    static char **path = (char **)0;
00301    static int end = 0;
00302    static int numsize = MAX_SEARCH_PATHS;
00303    static char **tmp;
00304    /* So we can call free() in the "destructor" we use i=-1 to return the alloc'd array */
00305    if (i == -1)
00306    {
00307       return (const char*)path;
00308    }
00309    if (!path)
00310    {
00311       path = (char **)calloc(MAX_SEARCH_PATHS, sizeof(char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list && !end)
00314       ass="keeywordtype">char **));
00312    }
00313    if (!list &&am