/*
 * This is a RANDOMLY GENERATED PROGRAM.
 *
 * Generator: csmith 2.3.0
 * Git version: 3453904
 * Options:   --no-volatiles --no-packed-struct --no-math64 --no-bitfields --max-funcs 10 --lang-cpp
 * Seed:      2652789504
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
/* --- GLOBAL VARIABLES --- */
static uint32_t g_15 = 0x733582F8L;
static uint32_t g_59[8][3] = {{0x8CBDB62BL,18446744073709551613UL,0x8CBDB62BL},{0x8CBDB62BL,18446744073709551613UL,0x8CBDB62BL},{0x8CBDB62BL,18446744073709551613UL,0x8CBDB62BL},{0x8CBDB62BL,18446744073709551613UL,0x8CBDB62BL},{0x8CBDB62BL,18446744073709551613UL,0x8CBDB62BL},{0x8CBDB62BL,18446744073709551613UL,0x8CBDB62BL},{0x8CBDB62BL,18446744073709551613UL,0x8CBDB62BL},{0x8CBDB62BL,18446744073709551613UL,0x8CBDB62BL}};
static int32_t g_63 = (-1L);
static int32_t *g_62[2] = {&g_63,&g_63};
static uint8_t g_82 = 0xD9L;
static uint8_t g_90 = 3UL;
static uint8_t *g_89[8][8] = {{NULL,&g_90,&g_90,&g_90,&g_90,&g_90,NULL,NULL},{&g_90,NULL,&g_90,&g_90,NULL,&g_90,&g_90,&g_90},{&g_90,NULL,NULL,&g_90,&g_90,NULL,&g_90,NULL},{&g_90,&g_90,&g_90,&g_90,NULL,&g_90,&g_90,&g_90},{&g_90,&g_90,&g_90,&g_90,&g_90,&g_90,&g_90,&g_90},{&g_90,NULL,&g_90,NULL,NULL,&g_90,&g_90,&g_90},{&g_90,&g_90,&g_90,NULL,&g_90,&g_90,&g_90,&g_90},{&g_90,&g_90,&g_90,&g_90,NULL,&g_90,&g_90,&g_90}};
static uint16_t g_103 = 0x3B93L;
static int8_t g_145 = 0xD9L;
static uint32_t g_215 = 1UL;
static int16_t g_282 = 0x27C9L;
static int32_t g_285 = (-7L);
static int16_t g_286 = 0x9FF1L;
static uint32_t g_303 = 7UL;
static uint32_t g_348 = 0x558134D8L;
static uint8_t g_362 = 251UL;
static int8_t *g_392 = &g_145;
static int8_t **g_391 = &g_392;
static int8_t ***g_390 = &g_391;
static int8_t ****g_389 = &g_390;
static int32_t **g_423 = &g_62[1];
static int32_t ***g_422[6] = {&g_423,&g_423,&g_423,&g_423,&g_423,&g_423};
static int16_t g_424[6] = {0L,0L,0L,0L,0L,0L};
static uint16_t g_508[6] = {65535UL,65535UL,65535UL,65535UL,65535UL,65535UL};
static int32_t g_523 = 0x8D4A918BL;
static const int32_t *g_676 = NULL;
static const int16_t g_723 = 0x02F5L;
static int8_t *****g_731 = NULL;
static int32_t *g_774 = NULL;
static int16_t *g_780 = NULL;
static int16_t **g_779 = &g_780;
static int32_t *g_784[1] = {&g_63};
static int16_t **g_880 = &g_780;
static int8_t ******g_912[2][8] = {{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL},{NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL}};
static int8_t *******g_911 = &g_912[0][6];
static int8_t *******g_913 = &g_912[0][1];
static int8_t *** const *g_952 = &g_390;
static uint16_t g_962[2] = {0x7979L,0x7979L};
static uint32_t g_967 = 0xC921B81DL;
static uint32_t g_994 = 3UL;
static int32_t *g_1098 = &g_285;
static int32_t ** const g_1104 = &g_774;
static int32_t ** const *g_1103 = &g_1104;
static uint8_t g_1151 = 249UL;
static uint32_t *g_1184 = NULL;
static uint32_t **g_1183 = &g_1184;
static int32_t ** const g_1277 = NULL;
static int32_t ** const *g_1276 = &g_1277;
static int32_t ** const ** const g_1275 = &g_1276;
static int32_t ** const ** const *g_1274 = &g_1275;
static uint32_t g_1343 = 0x9569BCDEL;
static int16_t ***g_1406 = &g_779;
static const int32_t *g_1480 = NULL;
static const int32_t **g_1479 = &g_1480;
static const int32_t ***g_1478 = &g_1479;
static uint32_t g_1538 = 9UL;
static int8_t *** const **** const g_1582 = NULL;
static int8_t *** const **** const *g_1581 = &g_1582;
static int8_t *** const **** const **g_1580 = &g_1581;
static const int32_t g_1747 = 3L;
static uint32_t *g_1825 = &g_303;
static uint32_t **g_1824 = &g_1825;
static uint32_t ***g_1823 = &g_1824;
static uint32_t g_1846 = 0x64136C8AL;
static const uint16_t *g_1879 = &g_508[3];
static const uint16_t **g_1878 = &g_1879;
static int32_t * const g_1964 = NULL;
static int32_t * const *g_1963[1][6][2] = {{{NULL,NULL},{&g_1964,NULL},{NULL,&g_1964},{NULL,NULL},{&g_1964,NULL},{NULL,&g_1964}}};
static int32_t * const **g_1962[7][10] = {{&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][1][1],NULL,&g_1963[0][5][0],NULL,&g_1963[0][1][1],&g_1963[0][4][0],&g_1963[0][4][0]},{&g_1963[0][4][0],&g_1963[0][4][1],&g_1963[0][4][0],NULL,&g_1963[0][4][0],&g_1963[0][1][1],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][1][1],&g_1963[0][4][0]},{&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][1][1],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0]},{&g_1963[0][4][0],&g_1963[0][5][0],NULL,&g_1963[0][4][0],NULL,&g_1963[0][5][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][1]},{&g_1963[0][4][0],&g_1963[0][1][1],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][1][1],&g_1963[0][4][0]},{&g_1963[0][4][0],&g_1963[0][1][1],&g_1963[0][4][0],NULL,&g_1963[0][4][0],&g_1963[0][4][1],&g_1963[0][4][0],&g_1963[0][4][1],&g_1963[0][4][0],NULL},{NULL,&g_1963[0][5][0],NULL,&g_1963[0][1][1],&g_1963[0][4][0],&g_1963[0][4][0],&g_1963[0][4][0],NULL,NULL,&g_1963[0][4][0]}};
static int32_t * const **g_1965 = &g_1963[0][1][0];


/* --- FORWARD DECLARATIONS --- */
static const int32_t  func_1(void);
static uint16_t  func_6(const uint8_t  p_7, uint8_t  p_8, uint16_t  p_9, uint8_t  p_10);
static int32_t  func_22(int32_t  p_23);
static int32_t * func_24(int32_t * p_25, int16_t  p_26, int32_t  p_27, int32_t * p_28, int8_t  p_29);
static int32_t * func_30(int32_t * p_31, uint32_t  p_32, int8_t  p_33);
static int32_t * func_34(int32_t  p_35, uint8_t  p_36, int8_t  p_37, uint16_t  p_38);
static uint16_t  func_40(int32_t * const  p_41, uint32_t  p_42, const int16_t  p_43);
static int32_t * func_44(uint8_t  p_45);
static uint8_t  func_46(int32_t  p_47, uint8_t  p_48, int32_t * p_49, int8_t  p_50);
static int32_t * func_53(uint16_t  p_54, int32_t * p_55, const int32_t * p_56);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_15 g_59 g_62 g_63 g_82 g_89 g_103 g_90 g_145 g_282 g_303 g_285 g_389 g_390 g_391 g_392 g_348 g_523 g_215 g_424 g_508 g_423 g_286 g_362 g_723 g_774 g_784 g_880 g_952 g_962 g_967 g_994 g_422 g_1098 g_1103 g_1151 g_1183 g_1343 g_1275 g_1276 g_1277 g_1184 g_1274 g_1478 g_1538 g_1580 g_1581 g_1747 g_1823 g_1824 g_1825 g_1846 g_1878 g_1879 g_1104
 * writes: g_63 g_82 g_103 g_215 g_145 g_282 g_286 g_90 g_303 g_285 g_523 g_348 g_62 g_392 g_508 g_676 g_731 g_424 g_779 g_59 g_362 g_911 g_913 g_1274 g_962 g_1406 g_1184 g_89 g_1478 g_1151 g_784 g_422 g_1343 g_15 g_1823 g_1846 g_994 g_1962 g_1965 g_1183
 */
static const int32_t  func_1(void)
{ /* block id: 0 */
    const uint16_t l_11 = 0x4455L;
    int32_t l_1555 = 0x00505C0CL;
    int32_t l_1556[8][9][3] = {{{0x5BA35C0BL,0x9F9DA2C1L,(-1L)},{1L,0xECEA9552L,0L},{(-8L),0x5BA35C0BL,0x840C1025L},{(-1L),(-9L),0x4C341CDFL},{(-1L),0xA620E726L,1L},{(-8L),0xFCF3F372L,0x8F0E76B5L},{1L,8L,9L},{0x5BA35C0BL,(-7L),0xE70FD212L},{0xFB3E70BDL,1L,0x3081723BL}},{{1L,1L,0L},{0x2EC6152BL,0x8767A7D5L,0x0FB05229L},{0x0FB05229L,1L,0x2C3FC962L},{1L,7L,7L},{(-10L),0x0FB05229L,0xE70FD212L},{1L,0L,0x75971B18L},{0x25FEDC37L,(-6L),0xECEA9552L},{8L,(-1L),0x17A80B04L},{(-8L),(-6L),0x721292E7L}},{{0x0FB05229L,0L,0x25FEDC37L},{(-1L),0x0FB05229L,1L},{0x2B3AB78DL,7L,0L},{9L,1L,0x75971B18L},{2L,0x8767A7D5L,0x219E9EA6L},{1L,1L,(-1L)},{1L,2L,0x2EC6152BL},{0x721292E7L,0L,2L},{0x8F0E76B5L,7L,(-8L)}},{{(-10L),(-10L),0x17A80B04L},{0x0781D026L,(-1L),0xCF9FBE73L},{2L,0L,0xCF9FBE73L},{(-1L),0x1725E518L,0x17A80B04L},{7L,0x2B3AB78DL,(-8L)},{0x2EC6152BL,1L,2L},{0xFCF3F372L,(-8L),0x2EC6152BL},{0x8767A7D5L,7L,(-1L)},{(-8L),0xFCF3F372L,0x219E9EA6L}},{{0x25FEDC37L,0L,0x75971B18L},{0x8F0E76B5L,(-1L),0L},{1L,0x5D805A00L,1L},{(-8L),(-1L),0x25FEDC37L},{0xFCF3F372L,0xCFE1C7EBL,0x721292E7L},{0x2C3FC962L,0x0FB05229L,0x17A80B04L},{1L,(-10L),0xECEA9552L},{0x2C3FC962L,0x8767A7D5L,0x75971B18L},{0xFCF3F372L,0x0781D026L,0xE70FD212L}},{{(-8L),0x2B3AB78DL,7L},{1L,0xFCF3F372L,0x2C3FC962L},{0x8F0E76B5L,0xCFE1C7EBL,0x0FB05229L},{0x25FEDC37L,7L,0L},{(-8L),0x3D40FEA2L,0xDC3EAE57L},{0x8767A7D5L,(-6L),0xCF9FBE73L},{0xFCF3F372L,0x840C1025L,0x3081723BL},{0x2EC6152BL,2L,1L},{7L,(-10L),0x8767A7D5L}},{{(-1L),(-8L),0x0FB05229L},{2L,(-8L),0xE70FD212L},{0x0781D026L,(-10L),0x1B192979L},{(-10L),2L,0x219E9EA6L},{0x8F0E76B5L,0x840C1025L,(-10L)},{0x721292E7L,(-6L),(-8L)},{1L,0x3D40FEA2L,(-10L)},{1L,7L,0x721292E7L},{2L,0xCFE1C7EBL,0x3081723BL}},{{9L,0xFCF3F372L,0xDC3EAE57L},{0x2B3AB78DL,0x2B3AB78DL,0xECEA9552L},{(-1L),0x0781D026L,(-10L)},{0x0FB05229L,0x8767A7D5L,0x2EC6152BL},{(-8L),(-10L),0x2B3AB78DL},{8L,0x0FB05229L,0x2EC6152BL},{0x25FEDC37L,0xCFE1C7EBL,(-10L)},{1L,(-1L),0xECEA9552L},{(-10L),0x5D805A00L,0xDC3EAE57L}}};
    int8_t *** const **l_1602[8];
    int8_t *** const ***l_1601 = &l_1602[3];
    int8_t *** const ****l_1600 = &l_1601;
    int8_t *** const *****l_1599 = &l_1600;
    int8_t *** const ******l_1598 = &l_1599;
    int8_t *** const *******l_1597 = &l_1598;
    uint32_t l_1605 = 0x86078C0DL;
    int32_t l_1614 = 0x313ADA74L;
    uint8_t l_1642 = 247UL;
    uint16_t l_1660 = 65529UL;
    uint32_t l_1700[7][3] = {{0x0A527F03L,0xAE66E278L,0x0A527F03L},{0xEAA84933L,0xEAA84933L,0xEAA84933L},{0x0A527F03L,0xAE66E278L,0x0A527F03L},{0xEAA84933L,0xEAA84933L,0xEAA84933L},{0x0A527F03L,0xAE66E278L,0x0A527F03L},{0xEAA84933L,0xEAA84933L,0xEAA84933L},{0x0A527F03L,0xAE66E278L,0x0A527F03L}};
    int32_t l_1728 = 0L;
    int16_t l_1807 = (-1L);
    int16_t l_1812 = 0xFE1CL;
    uint32_t l_1865 = 0xDFA15BD4L;
    int32_t l_1868 = 6L;
    int32_t l_1896 = 2L;
    uint32_t l_1908 = 0x8617CF71L;
    int16_t l_1934 = 0x8E25L;
    uint32_t l_1944 = 0x8D0924CCL;
    uint16_t l_1970 = 1UL;
    int32_t l_2062[10][5] = {{0x628C41E2L,0xF269F5F7L,0x77F60509L,1L,0x4131AA8BL},{0xF269F5F7L,1L,0x77F60509L,1L,0x77F60509L},{0x4131AA8BL,0x4131AA8BL,1L,0x628C41E2L,(-10L)},{0xF269F5F7L,(-10L),0x43B4816FL,0x628C41E2L,0x628C41E2L},{0x628C41E2L,0x704BFC4BL,0x628C41E2L,1L,(-1L)},{0x43B4816FL,(-10L),0xF269F5F7L,1L,(-1L)},{1L,0x4131AA8BL,0x4131AA8BL,1L,0x628C41E2L},{0x77F60509L,1L,0xF269F5F7L,(-1L),(-10L)},{0x77F60509L,0xF269F5F7L,0x628C41E2L,0xF269F5F7L,0x77F60509L},{1L,1L,0x43B4816FL,(-1L),0x4131AA8BL}};
    int16_t l_2066 = 0xAACBL;
    const int32_t l_2069[7] = {(-10L),(-10L),(-3L),(-10L),(-10L),(-3L),(-10L)};
    int i, j, k;
    for (i = 0; i < 8; i++)
        l_1602[i] = &g_952;
    if ((safe_mul_func_int16_t_s_s((safe_unary_minus_func_int16_t_s(0xA439L)), ((+(func_6(l_11, l_11, (~((safe_mod_func_int16_t_s_s((-6L), (-9L))) | g_15)), ((safe_lshift_func_uint16_t_u_u((safe_div_func_uint32_t_u_u((g_15 || (l_1555 = (g_15 , (safe_add_func_int32_t_s_s(func_22(g_15), l_11))))), l_1556[0][6][2])), l_1556[0][6][2])) , 0xACL)) == l_1556[0][6][2])) != l_11))))
    { /* block id: 618 */
        uint32_t * const l_1576 = &g_994;
        int8_t *********l_1577 = NULL;
        int8_t **********l_1578 = &l_1577;
        int32_t l_1579 = 0xD6CE2362L;
        int32_t l_1644 = 0L;
        int32_t ***l_1674[8][7][3] = {{{&g_423,&g_423,&g_423},{&g_423,NULL,NULL},{NULL,&g_423,&g_423},{&g_423,&g_423,&g_423},{&g_423,&g_423,&g_423},{NULL,NULL,&g_423},{&g_423,&g_423,NULL}},{{&g_423,NULL,&g_423},{&g_423,NULL,&g_423},{NULL,&g_423,&g_423},{NULL,NULL,NULL},{&g_423,&g_423,&g_423},{&g_423,NULL,&g_423},{&g_423,&g_423,&g_423}},{{&g_423,&g_423,&g_423},{&g_423,NULL,NULL},{&g_423,&g_423,&g_423},{&g_423,NULL,&g_423},{NULL,NULL,&g_423},{NULL,&g_423,&g_423},{&g_423,NULL,&g_423}},{{&g_423,NULL,NULL},{&g_423,&g_423,NULL},{NULL,NULL,&g_423},{&g_423,&g_423,&g_423},{&g_423,&g_423,&g_423},{NULL,NULL,NULL},{&g_423,&g_423,NULL}},{{&g_423,NULL,&g_423},{&g_423,&g_423,&g_423},{&g_423,NULL,&g_423},{&g_423,NULL,&g_423},{&g_423,&g_423,&g_423},{&g_423,NULL,NULL},{NULL,&g_423,&g_423}},{{&g_423,&g_423,&g_423},{&g_423,&g_423,&g_423},{NULL,NULL,&g_423},{&g_423,&g_423,NULL},{&g_423,NULL,&g_423},{&g_423,NULL,&g_423},{NULL,&g_423,&g_423}},{{NULL,NULL,NULL},{&g_423,&g_423,&g_423},{&g_423,NULL,&g_423},{&g_423,&g_423,&g_423},{&g_423,&g_423,&g_423},{&g_423,NULL,NULL},{&g_423,&g_423,&g_423}},{{&g_423,NULL,&g_423},{NULL,NULL,&g_423},{NULL,&g_423,&g_423},{&g_423,NULL,&g_423},{&g_423,NULL,NULL},{&g_423,&g_423,NULL},{NULL,NULL,&g_423}}};
        uint8_t l_1690[7][1][9] = {{{6UL,0x75L,0xFEL,0x34L,254UL,0xFEL,4UL,0xFEL,0UL}},{{0xA6L,0xDBL,6UL,0x3BL,250UL,0xA6L,250UL,0x3BL,6UL}},{{254UL,254UL,0xA6L,0x3BL,0x34L,0x7BL,1UL,0x75L,0x3BL}},{{0xD0L,255UL,0xCFL,0x34L,0xA6L,0x5DL,255UL,0x05L,4UL}},{{0x16L,4UL,0xA6L,0xCFL,247UL,0xCFL,0xA6L,4UL,0x16L}},{{1UL,4UL,6UL,0x75L,254UL,6UL,0UL,6UL,0xA6L}},{{0xA6L,255UL,0xFEL,249UL,0x34L,0xA6L,247UL,0x37L,0x37L}}};
        int32_t l_1767 = 0x5201B98EL;
        int32_t l_1837 = 0xFBF597A0L;
        int8_t l_1860 = 0xBDL;
        int16_t l_1907 = 0x1B16L;
        int i, j, k;
        { /* block id: 655 */
            uint8_t *l_1659 = &g_1151;
            uint32_t l_1661 = 18446744073709551615UL;
            int32_t l_1666[9][9] = {{0L,(-1L),8L,0x054E1666L,0x6F90DCE8L,(-3L),(-3L),0x6F90DCE8L,0x054E1666L},{(-4L),0L,(-4L),1L,8L,(-3L),(-1L),(-1L),0L},{0x76302E3DL,0x054E1666L,8L,(-7L),(-1L),8L,0L,0x4B8ED885L,0x5D3529C2L},{(-3L),(-3L),0x5A6FA756L,1L,1L,0x5A6FA756L,(-3L),(-3L),(-4L)},{5L,(-3L),0L,0x054E1666L,0x5BED2F1DL,0x5D3529C2L,8L,(-4L),0x6F90DCE8L},{(-3L),0x054E1666L,(-1L),0x5A6FA756L,(-4L),(-7L),0x4B8ED885L,(-7L),(-4L)},{(-1L),0L,0x089782AAL,0x5D3529C2L,0L,0x5A6FA756L,0x76302E3DL,(-4L),(-1L)},{0L,5L,(-3L),1L,0x089782AAL,8L,0L,0x054E1666L,0x4B8ED885L},{(-3L),8L,1L,(-4L),0L,(-4L),1L,8L,(-3L)}};
            uint32_t *l_1749 = &g_15;
            uint32_t **l_1748 = &l_1749;
            int32_t l_1768 = 0x14BC0121L;
            int32_t l_1769 = 0xD59F5CB9L;
            int32_t l_1771 = 0x03BCD403L;
            uint16_t l_1802 = 0x0B9EL;
            int8_t ***l_1806 = NULL;
            int32_t l_1810 = 0xF5DC6F3BL;
            int32_t **l_1822 = NULL;
            uint8_t l_1838 = 6UL;
            int8_t *******l_1841 = &g_912[0][6];
            uint32_t l_1855[3];
            int32_t *l_1876 = &g_523;
            uint16_t *l_1881 = &g_962[0];
            uint16_t **l_1880 = &l_1881;
            uint32_t l_1889[7][8] = {{18446744073709551615UL,18446744073709551615UL,18446744073709551615UL,18446744073709551615UL,18446744073709551615UL,0UL,0xC22579C0L,0xB916C167L},{18446744073709551615UL,18446744073709551608UL,0xA7DD9E02L,18446744073709551615UL,18446744073709551615UL,0xA7DD9E02L,18446744073709551608UL,18446744073709551615UL},{1UL,0UL,0xA7DD9E02L,0xFA2D174EL,0xC22579C0L,18446744073709551615UL,0xC22579C0L,0xFA2D174EL},{18446744073709551615UL,5UL,18446744073709551615UL,0xB916C167L,0xFA2D174EL,18446744073709551615UL,0xA7DD9E02L,0xA7DD9E02L},{0xA7DD9E02L,0UL,1UL,1UL,0UL,0xA7DD9E02L,0xFA2D174EL,0xC22579C0L},{0xA7DD9E02L,18446744073709551608UL,18446744073709551615UL,0UL,0xFA2D174EL,0UL,18446744073709551615UL,18446744073709551608UL},{18446744073709551615UL,18446744073709551615UL,18446744073709551615UL,0UL,0xC22579C0L,0xB916C167L,0xB916C167L,0xC22579C0L}};
            const uint32_t l_1911 = 0x878C8A4FL;
            int16_t l_1922[10] = {0xC1F6L,4L,3L,4L,0xC1F6L,0xC1F6L,4L,3L,4L,0xC1F6L};
            int i, j;
            for (i = 0; i < 3; i++)
                l_1855[i] = 1UL;
            if (((l_11 && l_1642) != (safe_mod_func_uint8_t_u_u(((*l_1659) = l_1579), (l_1661 |= ((***g_390) ^= l_1660))))))
            { /* block id: 659 */
                int32_t ***l_1673 = &g_423;
                int8_t * const *l_1727 = &g_392;
                int8_t * const **l_1726 = &l_1727;
                int8_t * const ***l_1725 = &l_1726;
                int8_t * const ****l_1724 = &l_1725;
                int32_t l_1731 = 0xF963E4F3L;
                int16_t l_1752 = 0x1975L;
                int32_t l_1766 = 0x1C16E7BFL;
                uint8_t l_1772 = 0x06L;
                int32_t * const l_1775 = &l_1728;
                uint32_t l_1801 = 4UL;
                int16_t **l_1804 = &g_780;
                int32_t l_1813 = 0L;
                uint32_t ****l_1826 = &g_1823;
                if ((l_1644 == (safe_lshift_func_uint16_t_u_u((safe_mul_func_uint8_t_u_u((l_1642 > ((l_1666[4][2] < (l_1555 >= ((safe_rshift_func_int16_t_s_u(((g_424[5] != l_1666[4][2]) , (g_1151 > ((safe_mul_func_int16_t_s_s((safe_add_func_uint32_t_u_u(((l_1642 , l_1673) == NULL), l_1556[0][6][2])), l_1642)) , 0x040FD296L))), g_723)) > 0x5D72L))) && l_1666[4][2])), l_1666[4][2])), g_63))))
                { /* block id: 660 */
                }
                else
                { /* block id: 676 */
                    uint16_t *l_1711 = &g_962[0];
                    int32_t l_1729 = 0xDA02551FL;
                    int16_t *l_1730 = &g_286;
                    int8_t **l_1744 = &g_392;
                    uint32_t **l_1750 = &l_1749;
                    int32_t l_1754 = 1L;
                    int32_t l_1808 = 0x35B96FE0L;
                    int32_t l_1809 = 0xA3DB4C1DL;
                    int32_t l_1811 = (-1L);
                    uint32_t l_1814 = 0UL;
                    l_1731 &= ((4UL ^ ((((safe_add_func_uint16_t_u_u(0xF0A5L, 0L)) <= (l_1556[3][5][2] , (safe_div_func_int8_t_s_s(((((safe_rshift_func_uint8_t_u_s(((*l_1659)--), (safe_add_func_int16_t_s_s(l_1660, ((*l_1711) = g_962[0]))))) , &g_1184) != (((*l_1730) = (0xA1L < (safe_lshift_func_uint8_t_u_s((safe_mul_func_int8_t_s_s(((safe_mul_func_uint16_t_u_u((safe_sub_func_uint16_t_u_u(((safe_add_func_int16_t_s_s((((safe_mod_func_uint8_t_u_u(((((NULL == l_1724) < 0x4315L) || 0x26F6L) , l_1728), 251UL)) != 0xD2FAL) & l_1605), l_1729)) | l_1700[5][1]), g_1538)), 3UL)) ^ 0x11D93480L), l_1729)), 1)))) , &g_1184)) || 0x3D61L), (****g_389))))) & (-8L)) < l_1556[0][6][2])) | 0x64BCL);
                    if (l_1661)
                        goto lbl_1739;
lbl_1739:
lbl_1817:
                    for (g_15 = (-23); (g_15 >= 46); g_15++)
                    { /* block id: 689 */
                    }
                    if ((((((l_1666[0][2] , ((((((((l_1666[4][2] || ((safe_lshift_func_int8_t_s_s((+(safe_sub_func_int16_t_s_s((0x82L & ((1L ^ l_1754) && l_1605)), l_1556[5][7][1]))), (safe_mul_func_uint16_t_u_u(l_1754, (((safe_unary_minus_func_uint16_t_u(((*l_1711) |= g_285))) , (**g_391)) <= l_1766))))) <= l_1754)) , 0xB1B9L) <= l_1700[5][1]) >= l_1729) , l_1661) >= l_1767) <= 0xB082C6C2L) > l_1666[0][0])) , l_1576) != NULL) == l_1729) | l_1661))
                    { /* block id: 700 */
                    }
                    else
                    { /* block id: 707 */
                        if (l_1767)
                            goto lbl_1817;
                        (*g_423) = &l_1556[6][8][0];
                    }
                }
            }
        }
    }
    return l_1556[0][6][2];
}

#include <assert.h>

/* ------------------------------------------ */
/* 
 * reads : g_508 g_389 g_390 g_391 g_392 g_784 g_63 g_994 g_423 g_774 g_59 g_362 g_82 g_89 g_103 g_15 g_303 g_145 g_286 g_348 g_880 g_723 g_952 g_424 g_962 g_967 g_285 g_282 g_422 g_1098 g_1103 g_1151 g_1183 g_90 g_215 g_1343 g_1275 g_1276 g_1277 g_1184 g_1274
 * writes: g_508 g_962 g_145 g_215 g_424 g_82 g_62 g_779 g_59 g_90 g_286 g_362 g_282 g_103 g_63 g_348 g_303 g_911 g_913 g_285 g_1274 g_676 g_1406 g_1184 g_89 g_784 g_422
 */
static uint16_t  func_6(const uint8_t  p_7, uint8_t  p_8, uint16_t  p_9, uint8_t  p_10)
{ /* block id: 609 */
    int32_t l_1557 = 0x73B6994BL;
    uint16_t *l_1564 = &g_962[0];
    int32_t **l_1565 = &g_784[0];
    uint16_t l_1570 = 0UL;
    const int16_t l_1573 = 0x08CDL;
    int32_t *TEMP;
    int32_t **SAVE = l_1565;
    printf("will   store %d, %d, %d\n", (int)l_1565, (int)&l_1565, SAVE); // waka
    TEMP = func_34(l_1557, 0, p_10, g_994);
    printf("almost store %d, %d, %d\n", (int)l_1565, (int)&l_1565, SAVE); // waka
    assert(SAVE == l_1565);
    (*l_1565) = TEMP;
    printf("now    store %d, %d, %d\n", (int)l_1565, (int)&l_1565, SAVE); // waka
    return 0;
}


/* ------------------------------------------ */
/* 
 * reads : g_15 g_59 g_62 g_63 g_82 g_89 g_103 g_90 g_145 g_282 g_303 g_285 g_389 g_390 g_391 g_392 g_348 g_523 g_215 g_424 g_508 g_423 g_286 g_362 g_723 g_774 g_784 g_880 g_952 g_962 g_967 g_994 g_422 g_1098 g_1103 g_1151 g_1183 g_1343 g_1275 g_1276 g_1277 g_1184 g_1274 g_1478 g_1538
 * writes: g_63 g_82 g_103 g_215 g_145 g_282 g_286 g_90 g_303 g_285 g_523 g_348 g_62 g_392 g_508 g_676 g_731 g_424 g_779 g_59 g_362 g_911 g_913 g_1274 g_962 g_1406 g_1184 g_89 g_1478 g_1151
 */
static int32_t  func_22(int32_t  p_23)
{ /* block id: 1 */
    int32_t l_66 = 0x65FBC01DL;
    int32_t *l_67 = &g_63;
    int16_t l_265 = 1L;
    int32_t l_743 = 0xC930FD06L;
    int32_t *l_1472 = &g_63;
    (*g_423) = func_24(func_30((l_1472 = (l_67 = func_34((l_743 ^= ((safe_unary_minus_func_int16_t_s(0xAE07L)) & func_40(func_44(func_46((safe_lshift_func_uint8_t_u_u(g_15, p_23)), p_23, func_53((g_15 && (g_59[2][1] <= ((*l_67) ^= (((safe_rshift_func_int8_t_s_u((NULL == g_62[1]), 4)) , (safe_mod_func_int8_t_s_s(((&g_63 == &g_63) | g_59[2][1]), l_66))) , p_23)))), g_62[1], &l_66), p_23)), l_265, p_23))), p_23, p_23, l_265))), p_23, l_66), l_66, p_23, &l_66, l_265);
    return p_23;
}


/* ------------------------------------------ */
/* 
 * reads : g_282 g_82 g_1538 g_1098 g_423
 * writes: g_282 g_508 g_1151 g_285 g_62
 */
static int32_t * func_24(int32_t * p_25, int16_t  p_26, int32_t  p_27, int32_t * p_28, int8_t  p_29)
{ /* block id: 590 */
    return &g_285;
}


/* ------------------------------------------ */
/* 
 * reads : g_145 g_303 g_423 g_1478 g_1098 g_1151 g_103 g_952 g_390 g_391 g_392 g_389 g_424 g_723 g_508 g_774 g_59 g_784 g_362 g_82 g_89 g_15 g_63 g_286 g_348 g_880 g_962 g_967 g_285 g_994 g_282 g_422 g_1103 g_1183 g_90 g_215 g_1343 g_1275 g_1276 g_1277 g_1184 g_1274
 * writes: g_145 g_303 g_62 g_1478 g_285 g_1151 g_103 g_215 g_424 g_82 g_779 g_59 g_90 g_286 g_362 g_282 g_63 g_348 g_508 g_911 g_913 g_1274 g_962 g_676 g_1406 g_1184 g_89
 */
static int32_t * func_30(int32_t * p_31, uint32_t  p_32, int8_t  p_33)
{ /* block id: 569 */
    return p_31;
}


/* ------------------------------------------ */
/* 
 * reads : g_215 g_508 g_392 g_82 g_423 g_774 g_59 g_784 g_90 g_362 g_89 g_103 g_15 g_63 g_389 g_390 g_391 g_303 g_145 g_286 g_348 g_880 g_723 g_952 g_424 g_962 g_967 g_285 g_994 g_282 g_422 g_1098 g_1103 g_1151 g_1183 g_1343 g_1275 g_1276 g_1277 g_1184 g_1274
 * writes: g_215 g_424 g_145 g_82 g_62 g_779 g_59 g_90 g_286 g_362 g_282 g_103 g_63 g_348 g_508 g_303 g_911 g_913 g_285 g_1274 g_962 g_676 g_1406 g_1184 g_89
 */
static int32_t * func_34(int32_t  p_35, uint8_t  p_36, int8_t  p_37, uint16_t  p_38)
{ /* block id: 280 */
printf("func 34\n");//storing to %d, %d, %d, %d\n", (int)l_1565, (int)l_1564, (int)g_389, (int)***g_389); // waka
    int32_t *l_765[8] = {NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
    int32_t **l_764 = &l_765[6];
    int32_t l_767 = (-5L);
    int32_t *l_783[5][3][7] = {{{&g_63,&g_285,&g_63,&g_285,&g_63,&g_285,&g_63},{NULL,NULL,&g_285,&g_285,NULL,NULL,&g_285},{&l_767,&g_285,&l_767,&g_285,&l_767,&g_285,&l_767}},{{NULL,&g_285,&g_285,NULL,NULL,&g_285,&g_285},{&g_63,&g_285,&g_63,&g_285,&g_63,&g_285,&g_63},{NULL,NULL,&g_285,&g_285,NULL,NULL,&g_285}},{{&l_767,&g_285,&l_767,&g_285,&l_767,&g_285,&l_767},{NULL,&g_285,&g_285,NULL,NULL,&g_285,&g_285},{&g_63,&g_285,&g_63,&g_285,&g_63,&g_285,&g_63}},{{NULL,NULL,&g_285,&g_285,NULL,NULL,&g_285},{&l_767,&g_285,&l_767,&g_285,&l_767,&g_285,&l_767},{NULL,&g_285,&g_285,NULL,NULL,&g_285,&g_285}},{{&g_63,&g_285,&g_63,&g_285,&g_63,&g_285,&g_63},{NULL,NULL,&g_285,&g_285,NULL,NULL,&g_285},{&l_767,&g_285,&l_767,&g_285,&l_767,&g_285,&l_767}}};
    uint8_t *l_787 = &g_362;
    int32_t *l_856 = &l_767;
    int8_t l_951 = 0xDBL;
    uint32_t l_961[5];
    uint32_t l_1059[2];
    int32_t *l_1062 = &g_63;
    uint16_t l_1085 = 2UL;
    int32_t l_1110 = 0L;
    int16_t l_1111 = 0x66E5L;
    uint8_t l_1139 = 255UL;
    int16_t l_1219 = 2L;
    uint8_t l_1223 = 0xAAL;
    uint32_t l_1229 = 9UL;
    int32_t ** const *l_1273[10] = {&g_423,&g_423,&g_423,&g_423,&g_423,&g_423,&g_423,&g_423,&g_423,&g_423};
    int32_t ** const **l_1272 = &l_1273[4];
    int32_t ** const ** const *l_1271 = &l_1272;
    int32_t l_1359 = 0xD2678BC1L;
    int16_t l_1372 = 0x9249L;
    int32_t *l_1411 = NULL;
    uint16_t *l_1435[5] = {&l_1085,&l_1085,&l_1085,&l_1085,&l_1085};
    uint16_t **l_1434 = &l_1435[4];
    int32_t l_1446 = 0x281A3CDBL;
    uint32_t *l_1458 = &g_303;
    int32_t *l_1471 = &g_285;
    int i, j, k;
    for (i = 0; i < 5; i++)
        l_961[i] = 3UL;
    for (i = 0; i < 2; i++)
        l_1059[i] = 0x5FF0A07FL;
    for (g_215 = 0; (g_215 != 30); g_215 = safe_add_func_int8_t_s_s(g_215, 3))
    { /* block id: 283 */
        int16_t *l_766[5] = {&g_424[5],&g_424[5],&g_424[5],&g_424[5],&g_424[5]};
        int32_t l_768[1][9] = {{0L,0x6211FB4EL,0x6211FB4EL,0L,0x6211FB4EL,0x6211FB4EL,0L,0x6211FB4EL,0x6211FB4EL}};
        int32_t *l_769[7] = {&l_768[0][0],&l_768[0][0],&l_768[0][0],&l_768[0][0],&l_768[0][0],&l_768[0][0],&l_768[0][0]};
        int i, j;
        l_768[0][0] &= (safe_sub_func_uint8_t_u_u((safe_sub_func_int16_t_s_s((((~249UL) > ((p_36 && (safe_add_func_uint32_t_u_u(((safe_rshift_func_uint16_t_u_u((p_37 > (0x00128ACDL == (~(safe_sub_func_uint32_t_u_u((safe_sub_func_int8_t_s_s((1L || g_508[1]), ((*g_392) = (safe_add_func_int16_t_s_s((g_424[5] = (g_508[3] | ((l_764 == &l_765[6]) != 0L))), 65535UL))))), p_37))))), l_767)) < 0x03L), p_37))) <= 1UL)) > 0x0D31L), 0xB86CL)), p_35));
        l_767 = 0xAC174C09L;
        for (g_82 = (-24); (g_82 >= 3); ++g_82)
        { /* block id: 290 */
            int32_t *l_776 = &g_523;
            int32_t **l_775 = &l_776;
            int16_t **l_778 = &l_766[1];
            int32_t l_781 = 0xB48D391EL;
            uint32_t *l_782 = NULL;
            (*g_423) = &l_767;
            p_35 ^= ((safe_sub_func_uint16_t_u_u(1UL, (((*l_764) = g_774) == ((*l_775) = &g_523)))) != ((l_764 != ((!((g_59[4][2] ^= (((g_779 = l_778) != &g_780) != l_781)) , (0x26A1L ^ 0x4EB3L))) , l_775)) <= 0x4899931BL));
        }
printf("func 34 out1\n");//storing to %d, %d, %d, %d\n", (int)l_1565, (int)l_1564, (int)g_389, (int)***g_389); // waka
        return g_784[0];
    }
printf("func 34 out6 last\n");//storing to %d, %d, %d, %d\n", (int)l_1565, (int)l_1564, (int)g_389, (int)***g_389); // waka
    return l_1471;
}


/* ------------------------------------------ */
/* 
 * reads : g_103 g_63 g_282 g_15 g_59 g_303 g_82 g_285 g_90 g_389 g_390 g_391 g_392 g_145 g_348 g_523 g_215 g_424 g_62 g_508 g_423 g_286 g_362 g_723 g_89
 * writes: g_63 g_282 g_286 g_90 g_303 g_82 g_285 g_523 g_348 g_62 g_392 g_145 g_508 g_676 g_731 g_103
 */
static uint16_t  func_40(int32_t * const  p_41, uint32_t  p_42, const int16_t  p_43)
{ /* block id: 67 */
    return 0;
}


/* ------------------------------------------ */
/* 
 * reads : g_145 g_82 g_59 g_63
 * writes: g_145 g_82 g_103 g_63
 */
static int32_t * func_44(uint8_t  p_45)
{ /* block id: 45 */
    return &g_63;
}


/* ------------------------------------------ */
/* 
 * reads : g_63 g_90 g_82 g_103 g_59 g_15 g_145 g_89
 * writes: g_63 g_103 g_215 g_82
 */
static uint8_t  func_46(int32_t  p_47, uint8_t  p_48, int32_t * p_49, int8_t  p_50)
{ /* block id: 10 */
    return 0;
}


/* ------------------------------------------ */
/* 
 * reads : g_82 g_89 g_59 g_103 g_63 g_15 g_285
 * writes: g_82 g_103 g_63
 */
static int32_t * func_53(uint16_t  p_54, int32_t * p_55, const int32_t * p_56)
{ /* block id: 3 */
    return &g_63;
}




/* ---------------------------------------- */
int main (int argc, char* argv[])
{
    int i, j, k;
    int print_hash_value = 0;
    if (argc == 2 && strcmp(argv[1], "1") == 0) print_hash_value = 1;
    platform_main_begin();
    crc32_gentab();
    func_1();
    transparent_crc(g_15, "g_15", print_hash_value);
    for (i = 0; i < 8; i++)
    {
        for (j = 0; j < 3; j++)
        {
            transparent_crc(g_59[i][j], "g_59[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_63, "g_63", print_hash_value);
    transparent_crc(g_82, "g_82", print_hash_value);
    transparent_crc(g_90, "g_90", print_hash_value);
    transparent_crc(g_103, "g_103", print_hash_value);
    transparent_crc(g_145, "g_145", print_hash_value);
    transparent_crc(g_215, "g_215", print_hash_value);
    transparent_crc(g_282, "g_282", print_hash_value);
    transparent_crc(g_285, "g_285", print_hash_value);
    transparent_crc(g_286, "g_286", print_hash_value);
    transparent_crc(g_303, "g_303", print_hash_value);
    transparent_crc(g_348, "g_348", print_hash_value);
    transparent_crc(g_362, "g_362", print_hash_value);
    for (i = 0; i < 6; i++)
    {
        transparent_crc(g_424[i], "g_424[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    for (i = 0; i < 6; i++)
    {
        transparent_crc(g_508[i], "g_508[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_523, "g_523", print_hash_value);
    transparent_crc(g_723, "g_723", print_hash_value);
    for (i = 0; i < 2; i++)
    {
        transparent_crc(g_962[i], "g_962[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_967, "g_967", print_hash_value);
    transparent_crc(g_994, "g_994", print_hash_value);
    transparent_crc(g_1151, "g_1151", print_hash_value);
    transparent_crc(g_1343, "g_1343", print_hash_value);
    transparent_crc(g_1538, "g_1538", print_hash_value);
    transparent_crc(g_1747, "g_1747", print_hash_value);
    transparent_crc(g_1846, "g_1846", print_hash_value);
    platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
    return 0;
}

// /usr/bin/python Dev/emscripten/emcc -O2 --llvm-opts 3 Dev/emscripten/tests/fuzz/temp_fuzzcode29254_.cpp -o Dev/emscripten/tests/fuzz/temp_fuzzcode29254_.js -I Dev/csmith/runtime

