/*
 * Copyright 2015 The Emscripten Authors.  All rights reserved.
 * Emscripten is available under two separate licenses, the MIT license and the
 * University of Illinois/NCSA Open Source License.  Both these licenses can be
 * found in the LICENSE file.
 *
 * 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

