/*
 * Copyright 2014 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.2.0
 * Git version: bf42ffd
 * Options:   --no-volatiles --no-packed-struct --no-math64
 * Seed:      2616503890
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
struct S0 {
   int32_t  f0;
   signed f1 : 20;
   signed f2 : 24;
   unsigned f3 : 26;
   int8_t  f4;
   unsigned f5 : 24;
   unsigned f6 : 29;
   signed : 0;
};

struct S1 {
   const uint32_t  f0;
   const uint32_t  f1;
   uint8_t  f2;
   int16_t  f3;
};

struct S2 {
   signed f0 : 15;
   unsigned : 0;
};

struct S3 {
   uint32_t  f0;
   uint32_t  f1;
};

union U4 {
   const int32_t  f0;
};

/* --- GLOBAL VARIABLES --- */
static int32_t g_5 = (-1L);
static struct S3 g_25 = {0x4D91F06EL,0x5FCB4448L};
static struct S3 g_49[9] = {{4294967288UL,0xD28BC130L},{4294967288UL,0xD28BC130L},{4294967288UL,0xD28BC130L},{4294967288UL,0xD28BC130L},{4294967288UL,0xD28BC130L},{4294967288UL,0xD28BC130L},{4294967288UL,0xD28BC130L},{4294967288UL,0xD28BC130L},{4294967288UL,0xD28BC130L}};
static int32_t g_52 = 0x7DC46221L;
static int8_t g_82 = 0xC8L;
static int32_t g_90 = 0x34F93D1DL;
static int8_t g_92 = 0x9FL;
static uint8_t g_96 = 0xE9L;
static struct S1 g_99 = {0xCD962F93L,0UL,0UL,4L};
static uint16_t g_103 = 0x5C9BL;
static struct S0 g_108 = {-1L,-898,-748,7155,0xCCL,1045,17733};
static const union U4 g_109 = {0x2D6F4160L};
static struct S2 g_110 = {123};
static uint16_t *g_165 = &g_103;
static union U4 g_183 = {0L};
static const struct S2 *g_192[6][10] = {{&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110},{&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110},{&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110},{&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110},{&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110},{&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110,&g_110}};
static const struct S2 **g_191 = &g_192[3][4];
static const struct S2 g_218 = {169};
static int8_t g_258 = 0xF5L;
static int32_t *g_304 = &g_52;
static uint16_t g_332 = 1UL;
static union U4 g_345[10][1] = {{{-9L}},{{-8L}},{{-8L}},{{-9L}},{{-8L}},{{-8L}},{{-9L}},{{-8L}},{{-8L}},{{-9L}}};
static int8_t g_393[6] = {0L,0L,0L,0L,0L,0L};
static uint16_t g_395 = 0xE48FL;
static uint8_t g_398 = 0x12L;
static const struct S1 g_404[9][3][7] = {{{{4294967292UL,1UL,1UL,0x9004L},{4294967289UL,0x2D40B248L,9UL,-4L},{1UL,0x14CE5E2CL,255UL,0L},{4294967293UL,9UL,0xC3L,-1L},{9UL,0UL,0xF5L,0x8933L},{0x6EEFBF3DL,0x0697DDFDL,0x28L,-9L},{4294967289UL,0x2D40B248L,9UL,-4L}},{{0xF16E1005L,0x69DEE0BEL,254UL,1L},{0x5BF993C5L,0xAF30037DL,6UL,0x86D2L},{0x3D1AF904L,6UL,9UL,0x2382L},{0xF16E1005L,0x69DEE0BEL,254UL,1L},{0UL,8UL,0x3FL,0xC4F6L},{0xF1D13282L,0xDC13E8D4L,0x09L,0xA438L},{0UL,1UL,0xBEL,-1L}},{{0xB4FDA9A7L,0UL,253UL,0xB6B4L},{4294967292UL,0x6F35DE22L,1UL,-5L},{0xABD76823L,0x5C4094FAL,0xA7L,0x73B2L},{0xDAC922BDL,4294967294UL,0x6DL,0xD7DCL},{0x875F6C4FL,0xCA33B9B0L,255UL,1L},{0xFD8E57F7L,0x5D91100AL,250UL,0x47E3L},{0xFD8E57F7L,0x5D91100AL,250UL,0x47E3L}}},{{{4294967292UL,0xE89D2B46L,255UL,0x36E0L},{0UL,1UL,0xBEL,-1L},{0xC95419F9L,0xF1DC8401L,254UL,0L},{0UL,1UL,0xBEL,-1L},{4294967292UL,0xE89D2B46L,255UL,0x36E0L},{0UL,0xEFDC9B0EL,0xF6L,-6L},{0x31191B3CL,0xD2860BEAL,249UL,0xCA00L}},{{1UL,0x107BAB83L,0x8AL,-1L},{0x7ACE9691L,0UL,0UL,-4L},{4294967295UL,0x0399C950L,0x97L,0L},{0x92CBD4F1L,0xF902C1C3L,255UL,-1L},{4294967289UL,0x4AFC16F4L,0x01L,-1L},{0x9998859DL,0UL,0UL,0xDCE0L},{9UL,0UL,0xF5L,0x8933L}},{{0x3D1AF904L,6UL,9UL,0x2382L},{0x8B37F662L,1UL,0UL,0xDC69L},{4294967295UL,0x2E972767L,0x39L,0x5645L},{0x8441D93CL,0xB82A1ADDL,0x37L,0xF064L},{0x8B37F662L,1UL,0UL,0xDC69L},{1UL,0x4B1F371AL,0x74L,0x3354L},{4294967295UL,0xF04724DEL,0UL,1L}}},{{{1UL,0x107BAB83L,0x8AL,-1L},{0x92CBD4F1L,0xF902C1C3L,255UL,-1L},{0x6EEFBF3DL,0x0697DDFDL,0x28L,-9L},{0xFFF82B4BL,0xAB1E80A6L,0xC5L,5L},{0x46979E7AL,4294967295UL,0x4CL,1L},{0x95A17D55L,0xD9337297L,7UL,0xCBA7L},{4294967292UL,1UL,1UL,0x9004L}},{{4294967292UL,0xE89D2B46L,255UL,0x36E0L},{0UL,1UL,0xE9L,1L},{0x5BF993C5L,0xAF30037DL,6UL,0x86D2L},{4294967295UL,0xEA9EC9E5L,0UL,1L},{1UL,0x4B1F371AL,0x74L,0x3354L},{4294967286UL,0x5DAECA4EL,8UL,-9L},{4294967292UL,0xE89D2B46L,255UL,0x36E0L}},{{0xB4FDA9A7L,0UL,253UL,0xB6B4L},{4294967292UL,1UL,1UL,0x9004L},{0xDAC922BDL,4294967294UL,0x6DL,0xD7DCL},{4294967289UL,0x4AFC16F4L,0x01L,-1L},{0x69C1217CL,0x67F03E08L,0xF4L,0L},{0xB4FDA9A7L,0UL,253UL,0xB6B4L},{0xDA074F93L,0xC781FFB4L,0x04L,0xE568L}}},{{{0xF16E1005L,0x69DEE0BEL,254UL,1L},{0xF013A00DL,0x9E73816BL,7UL,0x34A3L},{0x784D76C3L,0xFBEB689CL,255UL,0xCB7DL},{0x31191B3CL,0xD2860BEAL,249UL,0xCA00L},{0x31191B3CL,0xD2860BEAL,249UL,0xCA00L},{0x784D76C3L,0xFBEB689CL,255UL,0xCB7DL},{0xF013A00DL,0x9E73816BL,7UL,0x34A3L}},{{4294967292UL,1UL,1UL,0x9004L},{0x7ACE9691L,0UL,0UL,-4L},{4294967295UL,6UL,0x39L,1L},{0xAF10A225L,8UL,0x5BL,0L},{0x5BB4543EL,0xA355F2F5L,0UL,-1L},{4294967289UL,0x4AFC16F4L,0x01L,-1L},{0x46979E7AL,4294967295UL,0x4CL,1L}},{{0x1E34A7E3L,2UL,0x35L,-3L},{0x7ED76638L,0UL,0x81L,0xCBD2L},{0x3D1AF904L,6UL,9UL,0x2382L},{0xF1D13282L,0xDC13E8D4L,0x09L,0xA438L},{0xF013A00DL,0x9E73816BL,7UL,0x34A3L},{0x4FC46E8AL,0xD6B44EB8L,251UL,0xE72EL},{0x5BF993C5L,0xAF30037DL,6UL,0x86D2L}}},{{{4294967292UL,0x6F35DE22L,1UL,-5L},{0x69C1217CL,0x67F03E08L,0xF4L,0L},{0x6EEFBF3DL,0x0697DDFDL,0x28L,-9L},{0xAF10A225L,8UL,0x5BL,0L},{0x875F6C4FL,0xCA33B9B0L,255UL,1L},{0xF899DD77L,0xA3A3B24CL,1UL,-3L},{4294967286UL,0x789C42E1L,6UL,-1L}},{{4294967295UL,0x7F701539L,0xD0L,-1L},{0x5BF993C5L,0xAF30037DL,6UL,0x86D2L},{0x8441D93CL,0xB82A1ADDL,0x37L,0xF064L},{0x31191B3CL,0xD2860BEAL,249UL,0xCA00L},{0UL,4294967295UL,0x0BL,0x685FL},{0UL,1UL,0xE9L,1L},{0x31191B3CL,0xD2860BEAL,249UL,0xCA00L}},{{0x2D3EC666L,0x823C73E7L,0x94L,0x14BDL},{9UL,0UL,0xF5L,0x8933L},{0x9998859DL,0UL,0UL,0xDCE0L},{4294967289UL,0x4AFC16F4L,0x01L,-1L},{0x92CBD4F1L,0xF902C1C3L,255UL,-1L},{4294967295UL,0x0399C950L,0x97L,0L},{0x7ACE9691L,0UL,0UL,-4L}}},{{{0x31191B3CL,0xD2860BEAL,249UL,0xCA00L},{0x8B37F662L,1UL,0UL,0xDC69L},{0xC95419F9L,0xF1DC8401L,254UL,0L},{4294967295UL,0xEA9EC9E5L,0UL,1L},{0x90D64501L,0x4A5C382BL,9UL,-1L},{0xCE0E03FCL,4294967286UL,252UL,-6L},{0x90D64501L,0x4A5C382BL,9UL,-1L}},{{0xFFF82B4BL,0xAB1E80A6L,0xC5L,5L},{0xDA074F93L,0xC781FFB4L,0x04L,0xE568L},{0xDA074F93L,0xC781FFB4L,0x04L,0xE568L},{0xFFF82B4BL,0xAB1E80A6L,0xC5L,5L},{0x5BB4543EL,0xA355F2F5L,0UL,-1L},{0x2D3EC666L,0x823C73E7L,0x94L,0x14BDL},{0x875F6C4FL,0xCA33B9B0L,255UL,1L}},{{4294967286UL,0x5DAECA4EL,8UL,-9L},{0x8D5C7EE6L,1UL,0xCEL,0x8DF8L},{1UL,0x4B1F371AL,0x74L,0x3354L},{0x8441D93CL,0xB82A1ADDL,0x37L,0xF064L},{0UL,1UL,0xBEL,-1L},{4294967286UL,0x5DAECA4EL,8UL,-9L},{0UL,1UL,0xE9L,1L}}},{{{0x69C1217CL,0x67F03E08L,0xF4L,0L},{0x875F6C4FL,0xCA33B9B0L,255UL,1L},{1UL,0x14CE5E2CL,255UL,0L},{0x92CBD4F1L,0xF902C1C3L,255UL,-1L},{4294967286UL,0x789C42E1L,6UL,-1L},{0xF899DD77L,0xA3A3B24CL,1UL,-3L},{0x875F6C4FL,0xCA33B9B0L,255UL,1L}},{{0xF16E1005L,0x69DEE0BEL,254UL,1L},{4294967295UL,0xF04724DEL,0UL,1L},{0x1E34A7E3L,2UL,0x35L,-3L},{0UL,1UL,0xBEL,-1L},{1UL,0x4B1F371AL,0x74L,0x3354L},{0xF1D13282L,0xDC13E8D4L,0x09L,0xA438L},{0x90D64501L,0x4A5C382BL,9UL,-1L}},{{0xABD76823L,0x5C4094FAL,0xA7L,0x73B2L},{4294967289UL,0x2D40B248L,9UL,-4L},{4294967295UL,6UL,0x39L,1L},{0xDAC922BDL,4294967294UL,0x6DL,0xD7DCL},{4294967289UL,0x2D40B248L,9UL,-4L},{0xDA074F93L,0xC781FFB4L,0x04L,0xE568L},{0x7ACE9691L,0UL,0UL,-4L}}},{{{0x39B853AAL,4294967292UL,0x81L,0xC7A0L},{0UL,1UL,0xBEL,-1L},{0xCE0E03FCL,4294967286UL,252UL,-6L},{0xF16E1005L,0x69DEE0BEL,254UL,1L},{0xF013A00DL,0x9E73816BL,7UL,0x34A3L},{1UL,4294967291UL,246UL,0x32EEL},{0x1E34A7E3L,2UL,0x35L,-3L}},{{0xABD76823L,0x5C4094FAL,0xA7L,0x73B2L},{0x6EEFBF3DL,0x0697DDFDL,0x28L,-9L},{4294967295UL,4294967290UL,252UL,2L},{0xC2ECAACAL,4294967295UL,0x82L,0xD801L},{4294967295UL,4294967290UL,252UL,2L},{0x6EEFBF3DL,0x0697DDFDL,0x28L,-9L},{0xABD76823L,0x5C4094FAL,0xA7L,0x73B2L}},{{0xB7131E29L,0xA1E58848L,0xEAL,1L},{0x1E34A7E3L,2UL,0x35L,-3L},{0UL,5UL,250UL,0x4C0BL},{1UL,0xC1D7F27EL,0x9FL,0xB17DL},{0x3D1AF904L,6UL,9UL,0x2382L},{0x5AE9864FL,0xA033A2BEL,1UL,0xFE78L},{0x784D76C3L,0xFBEB689CL,255UL,0xCB7DL}}},{{{4294967295UL,6UL,0x39L,1L},{0xB4FDA9A7L,0UL,253UL,0xB6B4L},{4294967293UL,9UL,0xC3L,-1L},{0x9998859DL,0UL,0UL,0xDCE0L},{4294967295UL,0x0399C950L,0x97L,0L},{4294967293UL,9UL,0xC3L,-1L},{0UL,0xCC5E76F7L,0xBFL,0x5E44L}},{{0x4FC46E8AL,0xD6B44EB8L,251UL,0xE72EL},{0UL,0xEFDC9B0EL,0xF6L,-6L},{0UL,5UL,250UL,0x4C0BL},{4294967295UL,0xF04724DEL,0UL,1L},{2UL,0xF7CF134CL,1UL,0x2E10L},{0x2A40AB47L,0x27F0A379L,0xCBL,0x2F41L},{0UL,1UL,0xE9L,1L}},{{0x512C9CC6L,4294967295UL,0x73L,7L},{4294967295UL,0x0399C950L,0x97L,0L},{4294967295UL,4294967290UL,252UL,2L},{0xC4D78A4AL,8UL,0x5AL,0xCE6CL},{0UL,0xCC5E76F7L,0xBFL,0x5E44L},{0x512C9CC6L,4294967295UL,0x73L,7L},{0x95A17D55L,0xD9337297L,7UL,0xCBA7L}}}};
static int8_t g_452 = 7L;
static int32_t g_454 = 0xB2827763L;
static uint16_t g_455[1] = {0xADE9L};
static int32_t g_465 = 0x5BA367D9L;
static int8_t g_466 = 0x08L;
static uint8_t g_467 = 255UL;
static uint16_t g_518 = 0UL;
static struct S1 g_525 = {0xC8451B01L,6UL,0x90L,1L};
static const struct S1 *g_524[2][8][6] = {{{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]}},{{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]},{(void*)0,&g_404[3][1][6],&g_404[4][2][5],&g_99,&g_404[4][2][5],&g_404[3][1][6]}}};
static int8_t g_531 = 0x57L;
static int32_t g_532 = (-4L);
static int16_t g_534 = 0xCE5BL;
static uint16_t g_535[3][6][4] = {{{1UL,65531UL,1UL,0UL},{65531UL,1UL,0xB853L,0x0C15L},{6UL,1UL,65531UL,0x9E89L},{7UL,65527UL,65535UL,0UL},{0UL,0xF306L,0UL,0x443AL},{0x6BA1L,0UL,0x0F29L,0UL}},{{0xF306L,0xA53EL,0x9E89L,0x0F29L},{1UL,6UL,65531UL,1UL},{65535UL,1UL,0UL,0x1B02L},{65535UL,0xF306L,65531UL,65535UL},{1UL,0x1B02L,0x9E89L,0UL},{0xF306L,0x89BEL,0x0F29L,0x0C15L}},{{0x6BA1L,1UL,0UL,1UL},{0UL,0xA53EL,65535UL,0UL},{1UL,0x443AL,0x443AL,1UL},{0x1B02L,65535UL,65526UL,65535UL},{0x443AL,0UL,65527UL,0x2B24L},{65531UL,0UL,1UL,0x2B24L}}};
static uint16_t g_538 = 9UL;
static int16_t g_557 = 0x3DB5L;
static uint8_t g_575 = 0xFBL;
static union U4 g_591[10][8] = {{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}},{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}},{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}},{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}},{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}},{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}},{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}},{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}},{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}},{{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L},{1L},{0x03B75086L}}};
static struct S0 g_623 = {0xFA23ED7BL,277,-1899,349,1L,2438,20296};
static int32_t *g_680[3][9] = {{&g_90,&g_90,&g_90,&g_90,&g_90,&g_90,&g_90,&g_90,&g_90},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{&g_90,&g_90,&g_90,&g_90,&g_90,&g_90,&g_90,&g_90,&g_90}};
static struct S0 *g_689 = (void*)0;
static struct S0 **g_688 = &g_689;
static int32_t *g_692 = &g_465;
static int8_t g_815[4][3] = {{(-10L),(-10L),(-10L)},{(-10L),(-10L),(-10L)},{(-10L),(-10L),(-10L)},{(-10L),(-10L),(-10L)}};
static struct S2 g_901 = {9};
static struct S3 * const g_966 = (void*)0;
static struct S3 * const *g_965 = &g_966;
static int8_t g_1054 = 0xF3L;
static int32_t g_1055 = 0x97667764L;
static uint32_t g_1057[4][5] = {{1UL,0x21F81601L,0x21F81601L,1UL,1UL},{1UL,0x43F88B83L,0x43F88B83L,1UL,2UL},{1UL,0x21F81601L,0x21F81601L,1UL,1UL},{1UL,0x43F88B83L,0x43F88B83L,1UL,2UL}};
static struct S3 *g_1170 = (void*)0;
static int32_t ** const *g_1175 = (void*)0;
static int32_t **g_1183 = &g_680[2][7];
static int32_t ***g_1182 = &g_1183;
static int32_t ***g_1184 = &g_1183;


/* --- FORWARD DECLARATIONS --- */
static struct S3  func_1(void);
static int32_t  func_2(uint8_t  p_3, uint16_t  p_4);
static struct S0  func_10(uint8_t  p_11, uint32_t  p_12);
static int32_t * func_15(const int32_t * p_16, uint32_t  p_17, uint16_t  p_18);
static int32_t * func_19(int32_t * p_20, struct S3  p_21, const int32_t * p_22, int32_t * p_23);
static struct S3  func_26(int32_t  p_27, int32_t * p_28);
static uint8_t  func_31(int32_t * p_32);
static int32_t * func_34(int32_t * p_35, union U4  p_36, int32_t * p_37);
static int32_t * func_38(struct S3  p_39, uint32_t  p_40, int32_t * p_41, const struct S1  p_42);
static int32_t * func_45(int32_t * p_46, struct S3  p_47);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_5 g_25 g_52 g_96 g_99 g_103 g_108 g_109 g_110 g_109.f0 g_165 g_82 g_92 g_183.f0 g_191 g_218 g_90 g_183 g_49.f1 g_49.f0 g_258 g_49 g_332 g_345.f0 g_395 g_398 g_455 g_467 g_345 g_393 g_465 g_535 g_538 g_452 g_525.f1 g_575 g_532 g_623.f4 g_692 g_466 g_1057 g_404.f1 g_623.f0 g_454 g_815 g_623.f3 g_1175 g_404.f3 g_557 g_1055 g_525.f0 g_591
 * writes: g_5 g_49 g_52 g_96 g_103 g_110 g_99.f3 g_108.f4 g_99.f2 g_165 g_108.f0 g_191 g_92 g_108.f2 g_108.f1 g_108.f6 g_108 g_304 g_332 g_395 g_398 g_258 g_455 g_467 g_465 g_518 g_524 g_535 g_538 g_557 g_575 g_532 g_452 g_1057 g_25.f0 g_623.f0 g_466 g_1170 g_192 g_1182 g_1184 g_534 g_1055
 */
static struct S3  func_1(void)
{ /* block id: 0 */
    uint32_t l_6 = 0x41A9C213L;
    struct S3 l_1252 = {4294967295UL,0x7AFC605BL};
    (*g_692) = func_2(g_5, l_6);
    return l_1252;
}


/* ------------------------------------------ */
/* 
 * reads : g_25 g_5 g_52 g_96 g_99 g_103 g_108 g_109 g_110 g_109.f0 g_165 g_82 g_92 g_183.f0 g_191 g_218 g_90 g_183 g_49.f1 g_49.f0 g_258 g_49 g_332 g_345.f0 g_395 g_398 g_455 g_467 g_345 g_393 g_465 g_535 g_538 g_452 g_525.f1 g_575 g_532 g_623.f4 g_692 g_466 g_1057 g_404.f1 g_623.f0 g_454 g_815 g_623.f3 g_1175 g_404.f3 g_557 g_1055 g_525.f0 g_591
 * writes: g_5 g_49 g_52 g_96 g_103 g_110 g_99.f3 g_108.f4 g_99.f2 g_165 g_108.f0 g_191 g_92 g_108.f2 g_108.f1 g_108.f6 g_108 g_304 g_332 g_395 g_398 g_258 g_455 g_467 g_465 g_518 g_524 g_535 g_538 g_557 g_575 g_532 g_452 g_1057 g_25.f0 g_623.f0 g_466 g_1170 g_192 g_1182 g_1184 g_534 g_1055
 */
static int32_t  func_2(uint8_t  p_3, uint16_t  p_4)
{ /* block id: 1 */
    uint32_t l_13 = 4294967293UL;
    struct S1 l_1192 = {4294967295UL,9UL,255UL,1L};
    uint32_t l_1195 = 0xCB50686CL;
    union U4 *l_1201 = &g_345[6][0];
    union U4 **l_1200 = &l_1201;
    const struct S2 l_1216[6] = {{55},{55},{55},{55},{55},{55}};
    int32_t *l_1217 = &g_1055;
    int32_t **l_1218 = &l_1217;
    int32_t *l_1219 = &g_532;
    const int32_t *l_1225 = &g_90;
    const int32_t * const *l_1224 = &l_1225;
    const int32_t * const **l_1223 = &l_1224;
    const int32_t * const ***l_1222 = &l_1223;
    struct S0 l_1232 = {0L,896,3465,3852,0x4AL,3152,4727};
    uint32_t l_1235[3][7] = {{0x1A37F656L,1UL,0UL,2UL,1UL,2UL,0UL},{1UL,1UL,0UL,0x65068BF2L,18446744073709551613UL,0UL,18446744073709551613UL},{0x65068BF2L,0UL,0UL,0x65068BF2L,2UL,0x1A37F656L,0x65068BF2L}};
    const struct S2 **l_1242 = &g_192[3][4];
    const int32_t l_1244 = 0xB5670868L;
    struct S3 l_1247[10] = {{4294967295UL,4294967295UL},{4294967295UL,4294967295UL},{4294967295UL,4294967295UL},{4294967295UL,4294967295UL},{4294967295UL,4294967295UL},{4294967295UL,4294967295UL},{4294967295UL,4294967295UL},{4294967295UL,4294967295UL},{4294967295UL,4294967295UL},{4294967295UL,4294967295UL}};
    int32_t *l_1248 = &g_623.f0;
    int i, j;
    (*g_692) = (safe_mod_func_int32_t_s_s(((safe_unary_minus_func_int32_t_s((func_10(l_13, p_3) , (((+(safe_sub_func_uint16_t_u_u(p_3, (((l_1192 , (safe_mul_func_uint8_t_u_u(l_1195, (l_1192.f2 ^ (!(p_3 >= 1UL)))))) >= 0xB3L) , 0xD7AAL)))) ^ p_4) , p_3)))) && g_466), p_3));
    l_1219 = ((*l_1218) = ((safe_add_func_int32_t_s_s(((0x2BL & (l_1195 | (safe_mod_func_int16_t_s_s(p_3, ((l_1200 == &l_1201) , g_108.f2))))) < (0xD1L <= 0L)), (safe_lshift_func_int8_t_s_s((((safe_rshift_func_uint16_t_u_s((safe_mod_func_uint32_t_u_u((safe_sub_func_int32_t_s_s((safe_sub_func_int32_t_s_s(((safe_mul_func_uint8_t_u_u(((l_1216[1] , l_1192) , p_3), g_404[2][0][0].f3)) | 1L), g_96)), 4294967287UL)), l_1192.f0)), 11)) && l_1192.f1) <= 0x9DAECEF8L), l_1192.f3)))) , l_1217));
    if ((func_26(((*g_165) & ((safe_rshift_func_int8_t_s_s((((g_557 > (5UL == (g_557 , g_96))) <= (l_1222 == &g_1182)) == (safe_sub_func_uint16_t_u_u((safe_mod_func_int32_t_s_s((safe_sub_func_int32_t_s_s(((((((l_1232 , ((*l_1217) ^= (safe_mul_func_int8_t_s_s(((+((void*)0 == &l_13)) >= 0xEEL), 1UL)))) < p_4) != (*g_165)) || g_455[0]) , p_3) ^ l_1235[1][2]), 0x9CB65C83L)), g_99.f3)), g_1057[2][2]))), g_525.f1)) , 0x48F4L)), (*l_1218)) , (**l_1218)))
    { /* block id: 590 */
        struct S2 **l_1243 = (void*)0;
        union U4 *l_1245 = &g_591[3][4];
        int32_t l_1246 = (-1L);
        (*g_692) &= (safe_lshift_func_int8_t_s_s(((safe_mod_func_int8_t_s_s(((safe_div_func_uint16_t_u_u((((!(((l_1242 != l_1243) ^ (0x2DA6L || l_1244)) && ((*l_1219) = (l_1245 == l_1245)))) < (l_1246 , g_452)) == (((*g_165) = p_4) < 0x34C9L)), l_1246)) == g_108.f5), g_525.f0)) , p_4), 5));
        (*l_1218) = func_34(&g_465, (*l_1245), func_34(func_45((*l_1218), l_1247[3]), g_345[5][0], l_1248));
        (*l_1219) ^= (*l_1248);
    }
    else
    { /* block id: 596 */
        struct S3 l_1249 = {4294967295UL,1UL};
        struct S3 *l_1250 = (void*)0;
        struct S3 *l_1251[7][8][1] = {{{&g_25},{(void*)0},{&l_1249},{&g_25},{(void*)0},{(void*)0},{(void*)0},{&g_49[3]}},{{(void*)0},{(void*)0},{(void*)0},{&g_25},{&l_1249},{(void*)0},{&g_25},{(void*)0}},{{(void*)0},{&g_25},{(void*)0},{&l_1249},{&g_25},{(void*)0},{(void*)0},{(void*)0}},{{&g_49[3]},{(void*)0},{(void*)0},{(void*)0},{&g_25},{&l_1249},{(void*)0},{&g_25}},{{(void*)0},{(void*)0},{&g_25},{(void*)0},{&l_1249},{&g_25},{(void*)0},{(void*)0}},{{(void*)0},{&g_49[3]},{(void*)0},{(void*)0},{(void*)0},{&g_25},{&l_1249},{(void*)0}},{{&g_25},{(void*)0},{(void*)0},{&g_25},{(void*)0},{&l_1249},{&g_25},{(void*)0}}};
        int i, j, k;
        g_49[4] = l_1249;
    }
    return (*g_692);
}


/* ------------------------------------------ */
/* 
 * reads : g_25 g_5 g_52 g_96 g_99 g_103 g_108 g_109 g_110 g_109.f0 g_165 g_82 g_92 g_183.f0 g_191 g_218 g_90 g_183 g_49.f1 g_49.f0 g_258 g_49 g_332 g_345.f0 g_395 g_398 g_455 g_467 g_345 g_393 g_465 g_535 g_538 g_452 g_525.f1 g_575 g_532 g_623.f4 g_692 g_466 g_1057 g_404.f1 g_623.f0 g_454 g_815 g_623.f3 g_1175
 * writes: g_5 g_49 g_52 g_96 g_103 g_110 g_99.f3 g_108.f4 g_99.f2 g_165 g_108.f0 g_191 g_92 g_108.f2 g_108.f1 g_108.f6 g_108 g_304 g_332 g_395 g_398 g_258 g_455 g_467 g_465 g_518 g_524 g_535 g_538 g_557 g_575 g_532 g_452 g_1057 g_25.f0 g_623.f0 g_466 g_1170 g_192 g_1182 g_1184 g_534
 */
static struct S0  func_10(uint8_t  p_11, uint32_t  p_12)
{ /* block id: 2 */
    uint8_t l_14[2];
    struct S3 *l_1025 = &g_49[3];
    struct S3 **l_1024 = &l_1025;
    union U4 l_1026 = {-10L};
    int32_t *l_1037 = &g_108.f0;
    int32_t l_1049 = 0x9C024423L;
    int32_t l_1051 = 1L;
    int32_t l_1052 = 6L;
    int32_t l_1053 = 6L;
    int32_t l_1056 = (-10L);
    int32_t l_1080 = 5L;
    int16_t l_1149 = 0x2237L;
    int32_t ** const l_1152 = (void*)0;
    int32_t **l_1179 = (void*)0;
    int32_t ***l_1178 = &l_1179;
    int32_t ***l_1181 = &l_1179;
    int32_t ****l_1180[9] = {&l_1181,&l_1181,&l_1181,&l_1181,&l_1181,&l_1181,&l_1181,&l_1181,&l_1181};
    int8_t l_1187 = (-8L);
    int16_t *l_1188 = (void*)0;
    struct S0 l_1189 = {0xED4943ABL,-763,-734,4256,0xC4L,3227,1761};
    int i;
    for (i = 0; i < 2; i++)
        l_14[i] = 0UL;
    for (p_12 = 0; (p_12 <= 1); p_12 += 1)
    { /* block id: 5 */
        int32_t *l_24 = (void*)0;
        uint8_t *l_470 = &g_96;
        int32_t **l_1021 = &l_24;
        int i;
        for (g_5 = 0; g_5 < 2; g_5 += 1)
        {
            l_14[g_5] = 0UL;
        }
        l_24 = func_15(func_19(l_24, g_25, (func_26(l_14[p_12], (((((safe_sub_func_uint8_t_u_u(((*l_470) = func_31(l_24)), l_14[p_12])) && 0UL) ^ (safe_mul_func_int16_t_s_s(0x458AL, ((l_14[p_12] != l_14[1]) ^ 255UL)))) || p_11) , &g_465)) , &g_52), &g_532), g_623.f4, p_11);
        (*l_1021) = l_24;
        if (l_14[0])
            continue;
    }
    (*g_692) = (g_623.f4 < 0UL);
    if ((+(safe_mod_func_uint16_t_u_u((*g_165), (((l_1024 == &g_966) , (5UL <= l_14[0])) , (((l_1026 , p_11) ^ ((safe_mod_func_int16_t_s_s(((p_11 ^ (safe_add_func_int8_t_s_s((((**l_1024) = (**l_1024)) , g_466), 0xC0L))) , 0x5932L), p_11)) || l_1026.f0)) , (*g_165)))))))
    { /* block id: 537 */
        for (g_452 = 4; (g_452 <= (-10)); --g_452)
        { /* block id: 540 */
            struct S0 l_1033 = {1L,698,901,1235,0xECL,371,16979};
            return l_1033;
        }
    }
    else
    { /* block id: 543 */
        int32_t *l_1036 = &g_108.f0;
        int32_t l_1045 = 0xA4C54D33L;
        int32_t l_1046 = 0x85FF5E2CL;
        int32_t l_1047 = 0x9B98B598L;
        int32_t l_1048 = 0L;
        int32_t l_1050[4] = {0x17E2FF5BL,0x17E2FF5BL,0x17E2FF5BL,0x17E2FF5BL};
        struct S2 l_1075 = {83};
        int16_t l_1081 = 0x9246L;
        struct S1 l_1143 = {0x454ACDE8L,0UL,0xC1L,-1L};
        const int32_t **l_1150 = (void*)0;
        int i;
        for (g_108.f4 = (-8); (g_108.f4 == 1); g_108.f4 = safe_add_func_int16_t_s_s(g_108.f4, 4))
        { /* block id: 546 */
            l_1037 = func_34(l_1036, l_1026, l_1036);
        }
        if ((*l_1036))
        { /* block id: 549 */
            int32_t *l_1038 = &g_465;
            int32_t *l_1039 = &g_108.f0;
            int32_t *l_1040 = &g_623.f0;
            int32_t *l_1041 = &g_465;
            int32_t *l_1042 = &g_465;
            int32_t l_1043 = 0L;
            int32_t *l_1044[5] = {&g_465,&g_465,&g_465,&g_465,&g_465};
            int8_t *l_1074 = &g_258;
            uint32_t *l_1078 = &g_25.f0;
            uint32_t *l_1079 = &g_1057[2][1];
            int i;
            g_1057[2][2]++;
            (*l_1042) = ((*l_1040) &= (safe_add_func_int16_t_s_s(((((safe_rshift_func_int8_t_s_u((safe_sub_func_int8_t_s_s(((safe_rshift_func_int16_t_s_s(g_404[2][0][0].f1, (((safe_mod_func_int32_t_s_s((0xCCABL ^ (*g_165)), (safe_sub_func_int32_t_s_s(p_12, ((((((*g_692) , (((-1L) & ((*l_1079) &= ((*l_1078) = (safe_mul_func_int8_t_s_s((!((*l_1074) &= (*l_1041))), (l_1075 , (safe_mul_func_uint16_t_u_u(p_12, (*l_1036))))))))) > (*l_1036))) != p_11) , p_11) | 0x2FL) >= l_1080))))) < 0xDF08L) & 0x88C67591L))) < p_12), p_12)), 7)) >= 0x5AD2FD77L) >= l_1081) && 0x28L), p_12)));
        }
        else
        { /* block id: 556 */
            int8_t l_1082 = 0x86L;
            int32_t l_1084 = 0x272816E1L;
            int32_t l_1093 = (-1L);
            int32_t l_1096 = (-1L);
            int32_t l_1097 = 1L;
            struct S1 *l_1171 = &l_1143;
            if ((!l_1082))
            { /* block id: 557 */
                int32_t **l_1083 = &l_1036;
                int32_t l_1085 = 1L;
                int32_t *l_1086 = (void*)0;
                int32_t *l_1087 = &l_1047;
                int32_t *l_1088 = (void*)0;
                int32_t *l_1089 = &l_1050[1];
                int32_t *l_1090 = &g_465;
                int32_t *l_1091 = (void*)0;
                int32_t *l_1092 = &l_1050[1];
                int32_t *l_1094 = &g_465;
                int32_t *l_1095[4][6];
                uint32_t l_1098 = 4294967295UL;
                uint32_t *l_1134[9][1][3];
                int8_t *l_1135 = &g_466;
                int8_t *l_1136 = &g_258;
                struct S3 * const l_1148 = &g_49[5];
                int i, j, k;
                for (i = 0; i < 4; i++)
                {
                    for (j = 0; j < 6; j++)
                        l_1095[i][j] = (void*)0;
                }
                for (i = 0; i < 9; i++)
                {
                    for (j = 0; j < 1; j++)
                    {
                        for (k = 0; k < 3; k++)
                            l_1134[i][j][k] = (void*)0;
                    }
                }
                (*l_1083) = &l_1047;
                ++l_1098;
                (*g_692) = ((safe_div_func_int16_t_s_s(((safe_mod_func_int8_t_s_s(((safe_lshift_func_int16_t_s_s((-6L), (safe_lshift_func_uint16_t_u_u(((*l_1087) ^= (*l_1092)), (!(*l_1037)))))) <= ((*g_165) = (safe_mod_func_int8_t_s_s((safe_add_func_uint32_t_u_u((*l_1037), p_11)), (safe_unary_minus_func_uint32_t_u((((*l_1136) = ((*l_1135) = (safe_mod_func_int16_t_s_s((((safe_add_func_uint16_t_u_u((((g_455[0] , (safe_div_func_uint32_t_u_u((g_49[3].f0 |= ((safe_mul_func_int8_t_s_s((((*l_1037) > ((safe_lshift_func_int8_t_s_s((((safe_rshift_func_int16_t_s_s((l_1093 ^= (safe_mod_func_uint8_t_u_u((((safe_sub_func_uint8_t_u_u(((~((safe_mul_func_int16_t_s_s((safe_add_func_uint16_t_u_u((((p_11 , ((p_11 || 0x67L) & (*g_165))) > 4L) >= 0x8DB0432BL), p_11)), g_465)) && 0xA1L)) | 65535UL), 0L)) & l_1084) != p_12), p_11))), (*l_1037))) < 0x75L) == g_218.f0), g_108.f4)) <= (*g_692))) | g_454), g_1057[2][2])) >= 0xABL)), (*l_1037)))) | 3UL) && p_11), p_11)) ^ p_11) , g_404[2][0][0].f1), l_1096)))) > 0x6CL))))))), p_12)) ^ p_12), 0xF789L)) | 0xB5CD281EL);
                (*l_1094) = (!(safe_rshift_func_int8_t_s_u((safe_div_func_uint32_t_u_u(((((*g_165) = (p_11 || (safe_mod_func_int32_t_s_s(1L, 1UL)))) || (((((*l_1025) , ((((void*)0 == &l_1075) & (l_1143 , (safe_mul_func_int16_t_s_s((safe_div_func_uint32_t_u_u(0x48E9A67DL, ((l_1148 == (void*)0) && l_1084))), g_532)))) & p_12)) <= l_1149) & (*l_1037)) ^ (*g_692))) != l_1096), l_1096)), l_1097)));
            }
            else
            { /* block id: 569 */
                const int32_t ***l_1151[2][6] = {{(void*)0,&l_1150,(void*)0,&l_1150,(void*)0,&l_1150},{(void*)0,&l_1150,(void*)0,&l_1150,(void*)0,&l_1150}};
                int32_t *l_1165 = (void*)0;
                int32_t *l_1166 = (void*)0;
                int32_t *l_1167 = (void*)0;
                int32_t *l_1168[2];
                uint16_t l_1169[1][2];
                struct S1 **l_1172[3];
                int i, j;
                for (i = 0; i < 2; i++)
                    l_1168[i] = &l_1047;
                for (i = 0; i < 1; i++)
                {
                    for (j = 0; j < 2; j++)
                        l_1169[i][j] = 5UL;
                }
                for (i = 0; i < 3; i++)
                    l_1172[i] = &l_1171;
                l_1169[0][0] |= (((l_1150 = l_1150) != l_1152) ^ (safe_rshift_func_uint8_t_u_s((((*l_1037) , (safe_mod_func_int32_t_s_s((safe_rshift_func_uint8_t_u_s(((safe_mul_func_int16_t_s_s((3UL < (p_12 ^ ((safe_mod_func_int16_t_s_s(((safe_sub_func_uint32_t_u_u((func_26((l_1082 & ((-6L) >= p_11)), &g_465) , p_11), g_404[2][0][0].f1)) > (-1L)), g_815[0][0])) >= p_11))), g_92)) & g_1057[1][4]), 1)), (-1L)))) , 1UL), g_623.f3)));
                g_1170 = (void*)0;
                g_524[1][2][3] = l_1171;
            }
            (*g_191) = (void*)0;
        }
    }
    (*g_692) |= ((safe_add_func_int16_t_s_s((&l_1152 == g_1175), ((*l_1037) , (g_534 = (0xEFL <= ((*l_1037) |= (safe_mul_func_uint8_t_u_u((((g_1182 = (l_1178 = l_1178)) == (g_1184 = (void*)0)) , (l_1026 , (g_96 = (safe_sub_func_int16_t_s_s(0xCE65L, l_1187))))), p_11)))))))) >= p_11);
    return l_1189;
}


/* ------------------------------------------ */
/* 
 * reads : g_52 g_532 g_108.f3 g_575 g_165 g_110.f0 g_393 g_692 g_465
 * writes: g_52 g_532 g_103
 */
static int32_t * func_15(const int32_t * p_16, uint32_t  p_17, uint16_t  p_18)
{ /* block id: 387 */
    uint16_t l_766 = 1UL;
    struct S3 *l_771 = &g_49[3];
    int32_t l_774 = 0L;
    union U4 l_789[6] = {{0x9E74BDE0L},{0x3925C28AL},{0x9E74BDE0L},{0x9E74BDE0L},{0x3925C28AL},{0x9E74BDE0L}};
    const int16_t *l_794 = &g_404[2][0][0].f3;
    int32_t *l_795 = &g_532;
    int16_t l_803 = 0xBBA5L;
    int32_t l_812 = 0xEEA32322L;
    int32_t l_813 = 0xA6554D27L;
    int32_t l_814[8][1][4] = {{{(-6L),6L,0x6CA574B2L,1L}},{{(-6L),0x6CA574B2L,(-6L),0L}},{{6L,1L,0L,0L}},{{0x6CA574B2L,0x6CA574B2L,0x2134D653L,1L}},{{1L,6L,0x2134D653L,6L}},{{0x6CA574B2L,(-6L),0L,0x2134D653L}},{{6L,(-6L),(-6L),6L}},{{(-6L),6L,0x6CA574B2L,1L}}};
    uint16_t l_816 = 0UL;
    uint16_t ** const l_830[6] = {&g_165,&g_165,&g_165,&g_165,&g_165,&g_165};
    union U4 *l_920 = (void*)0;
    union U4 **l_919[4][5][5] = {{{&l_920,&l_920,&l_920,&l_920,(void*)0},{&l_920,(void*)0,(void*)0,&l_920,&l_920},{&l_920,&l_920,&l_920,&l_920,&l_920},{&l_920,&l_920,&l_920,&l_920,&l_920},{&l_920,&l_920,&l_920,&l_920,&l_920}},{{&l_920,(void*)0,(void*)0,&l_920,(void*)0},{&l_920,&l_920,&l_920,(void*)0,(void*)0},{&l_920,&l_920,&l_920,&l_920,&l_920},{&l_920,&l_920,&l_920,&l_920,&l_920},{&l_920,&l_920,&l_920,(void*)0,&l_920}},{{&l_920,&l_920,&l_920,&l_920,&l_920},{&l_920,&l_920,&l_920,(void*)0,(void*)0},{&l_920,&l_920,&l_920,&l_920,(void*)0},{&l_920,&l_920,&l_920,(void*)0,&l_920},{&l_920,&l_920,&l_920,&l_920,&l_920}},{{&l_920,&l_920,&l_920,&l_920,&l_920},{&l_920,&l_920,(void*)0,(void*)0,(void*)0},{&l_920,&l_920,&l_920,&l_920,&l_920},{&l_920,&l_920,&l_920,&l_920,&l_920},{&l_920,&l_920,&l_920,&l_920,&l_920}}};
    union U4 ** const *l_918 = &l_919[2][4][3];
    struct S1 l_963 = {8UL,0UL,248UL,1L};
    uint32_t l_1004 = 4294967295UL;
    struct S1 *l_1015 = &g_99;
    struct S1 **l_1014 = &l_1015;
    struct S1 ***l_1013[1][10][10] = {{{&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,(void*)0,&l_1014},{&l_1014,&l_1014,&l_1014,(void*)0,&l_1014,&l_1014,&l_1014,&l_1014,(void*)0,&l_1014},{&l_1014,(void*)0,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014},{(void*)0,(void*)0,&l_1014,(void*)0,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014},{&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014},{&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,(void*)0,&l_1014,(void*)0,&l_1014,&l_1014},{(void*)0,&l_1014,&l_1014,&l_1014,&l_1014,(void*)0,&l_1014,&l_1014,&l_1014,&l_1014},{&l_1014,(void*)0,&l_1014,&l_1014,(void*)0,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014},{&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014},{&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,&l_1014,(void*)0,&l_1014,&l_1014,&l_1014}}};
    uint32_t l_1020[5];
    int i, j, k;
    for (i = 0; i < 5; i++)
        l_1020[i] = 4294967292UL;
    for (g_52 = 0; (g_52 == (-15)); g_52 = safe_sub_func_int8_t_s_s(g_52, 5))
    { /* block id: 390 */
        int32_t *l_760 = &g_532;
        int32_t *l_761 = &g_532;
        int32_t *l_762 = &g_623.f0;
        int32_t *l_763 = (void*)0;
        int32_t *l_764 = (void*)0;
        int32_t *l_765[7] = {&g_465,&g_465,&g_532,&g_465,&g_465,&g_532,&g_465};
        struct S3 *l_772 = &g_49[3];
        uint8_t *l_773[10][2][1] = {{{(void*)0},{(void*)0}},{{(void*)0},{(void*)0}},{{&g_96},{(void*)0}},{{(void*)0},{(void*)0}},{{(void*)0},{&g_96}},{{(void*)0},{(void*)0}},{{(void*)0},{(void*)0}},{{&g_96},{(void*)0}},{{(void*)0},{(void*)0}},{{(void*)0},{&g_96}}};
        int16_t *l_793 = &g_534;
        struct S2 l_826 = {-115};
        uint16_t l_865 = 65534UL;
        struct S0 l_915 = {0x8466C6A7L,-203,3616,8093,0xFEL,2572,14412};
        int32_t l_927 = (-1L);
        struct S2 *l_941 = (void*)0;
        union U4 l_949 = {0xA27D6C43L};
        int i, j, k;
        --l_766;
    }
    (*l_795) &= l_1004;
    l_1020[1] = ((safe_rshift_func_uint16_t_u_s(((((g_108.f3 > ((safe_mul_func_int8_t_s_s((safe_lshift_func_uint8_t_u_u(p_17, (((safe_mul_func_int16_t_s_s(g_575, ((void*)0 == l_1013[0][9][3]))) | (safe_rshift_func_uint16_t_u_s((p_18 = (~((*g_165) = 65531UL))), 15))) | 0x251EB381L))), g_110.f0)) == ((safe_div_func_uint16_t_u_u((((6L > 7UL) , 0x3EF1C5FCL) & 0x28F2BA2DL), p_17)) != p_17))) <= p_17) | g_393[5]) && (*l_795)), p_17)) < (*g_692));
    return &g_532;
}


/* ------------------------------------------ */
/* 
 * reads : g_52 g_165 g_103 g_110 g_108.f2 g_532
 * writes: g_532 g_52
 */
static int32_t * func_19(int32_t * p_20, struct S3  p_21, const int32_t * p_22, int32_t * p_23)
{ /* block id: 301 */
    struct S1 *l_578 = (void*)0;
    struct S1 **l_579 = &l_578;
    union U4 *l_580 = &g_345[6][0];
    union U4 **l_581 = &l_580;
    int32_t *l_582 = &g_52;
    struct S0 l_603[2] = {{1L,-255,2999,2573,0L,1710,19812},{1L,-255,2999,2573,0L,1710,19812}};
    int32_t l_701 = (-1L);
    int32_t l_703 = 0x526C16DAL;
    int32_t l_705 = 0xE1B0524CL;
    int32_t l_706 = 0x31E2FC84L;
    int32_t l_707 = 0xDCA00973L;
    int i;
    (*l_579) = l_578;
    (*l_581) = l_580;
    (*l_582) ^= ((*p_23) = 1L);
    for (p_21.f0 = 2; (p_21.f0 <= 8); p_21.f0 += 1)
    { /* block id: 308 */
        union U4 * const **l_587 = (void*)0;
        union U4 * const l_590 = &g_591[6][0];
        union U4 * const *l_589 = &l_590;
        union U4 * const **l_588 = &l_589;
        struct S2 *l_595 = &g_110;
        struct S2 **l_594 = &l_595;
        uint16_t *l_598[4] = {&g_395,&g_395,&g_395,&g_395};
        int32_t l_605 = 1L;
        int32_t l_617[7][3] = {{1L,1L,(-1L)},{3L,2L,(-1L)},{2L,3L,(-1L)},{1L,1L,(-1L)},{3L,2L,(-1L)},{2L,3L,(-1L)},{1L,1L,1L}};
        struct S0 l_622 = {0x8FD8D455L,470,911,1284,1L,1845,10842};
        uint32_t l_651 = 18446744073709551612UL;
        uint32_t l_708 = 4294967286UL;
        int32_t *l_714[10];
        int8_t *l_721 = &g_108.f4;
        int i, j;
        for (i = 0; i < 10; i++)
            l_714[i] = &l_622.f0;
        (*p_23) &= ((0xB43ABAF6L < ((safe_lshift_func_int8_t_s_u(((((*l_588) = &l_580) != (void*)0) ^ 0L), (((*g_165) >= ((safe_lshift_func_int8_t_s_u((((&g_192[3][4] != l_594) , (**l_594)) , 0xC4L), p_21.f1)) ^ (*l_582))) <= 0L))) && (*l_582))) >= g_108.f2);
    }
    return &g_465;
}


/* ------------------------------------------ */
/* 
 * reads : g_395 g_258 g_165 g_103 g_49.f1 g_25.f1 g_92 g_455 g_52 g_5 g_25.f0 g_96 g_99 g_108 g_109 g_110 g_109.f0 g_345 g_332 g_393 g_398 g_465 g_49 g_535 g_538 g_452 g_467 g_525.f1 g_575 g_1055
 * writes: g_395 g_465 g_49.f1 g_258 g_455 g_52 g_96 g_103 g_110 g_99.f3 g_49 g_108.f4 g_99.f2 g_165 g_304 g_332 g_518 g_524 g_535 g_538 g_108.f0 g_557 g_575 g_1055
 */
static struct S3  func_26(int32_t  p_27, int32_t * p_28)
{ /* block id: 237 */
    uint8_t l_483 = 0xF7L;
    uint16_t *l_484 = &g_332;
    int32_t l_485 = 0x98DB7E6CL;
    union U4 l_486 = {0x92E9D8B5L};
    struct S1 l_488 = {0x97A67194L,0UL,246UL,0xC600L};
    struct S3 l_489 = {0xEF71F2B9L,0x3456D091L};
    int32_t l_504[8][3][4] = {{{0xA5103F6CL,(-1L),0x0FD3DB73L,(-1L)},{0xEC5AAA0EL,3L,0L,0xA5103F6CL},{0x194E9225L,0L,(-1L),0x75938D71L}},{{0L,0xEC5AAA0EL,4L,4L},{0L,0L,(-1L),0L},{0x194E9225L,4L,0L,0L}},{{0xEC5AAA0EL,0L,0x0FD3DB73L,0L},{0xA5103F6CL,0L,0xA5103F6CL,0L},{0L,4L,0x89CB0F28L,0L}},{{0L,0L,0xEC5AAA0EL,4L},{0x75938D71L,0xEC5AAA0EL,0xEC5AAA0EL,0x75938D71L},{0L,0L,0x89CB0F28L,0xA5103F6CL}},{{0L,3L,0xA5103F6CL,(-1L)},{0xA5103F6CL,(-1L),0x0FD3DB73L,(-1L)},{0xEC5AAA0EL,3L,0L,0xA5103F6CL}},{{0x194E9225L,0L,(-1L),0x75938D71L},{0L,0xEC5AAA0EL,4L,4L},{0L,0L,(-1L),0L}},{{0x194E9225L,4L,0L,0L},{0xEC5AAA0EL,0L,0x0FD3DB73L,0L},{0xA5103F6CL,0L,0xA5103F6CL,0L}},{{0L,4L,0x89CB0F28L,0L},{0L,0L,0xEC5AAA0EL,4L},{0x75938D71L,0xEC5AAA0EL,0xEC5AAA0EL,0x75938D71L}}};
    uint32_t l_507 = 0x647DD300L;
    struct S2 l_550 = {102};
    int32_t *l_558 = &g_52;
    int32_t *l_559 = &l_485;
    int32_t *l_560 = (void*)0;
    int32_t *l_561 = &g_532;
    int32_t *l_562 = &g_532;
    int32_t *l_563 = &g_465;
    int32_t *l_564 = &g_52;
    int32_t *l_565 = &g_52;
    int32_t *l_566 = &g_108.f0;
    int32_t *l_567 = &l_504[4][1][2];
    int32_t *l_568 = &g_52;
    int32_t *l_569 = &l_504[3][0][3];
    int32_t *l_570 = &g_532;
    int32_t *l_571 = &g_52;
    int32_t *l_572 = &l_485;
    int32_t *l_573 = &g_52;
    int32_t *l_574[2];
    int i, j, k;
    for (i = 0; i < 2; i++)
        l_574[i] = &l_504[4][1][2];
    for (g_395 = 0; (g_395 <= 8); g_395 += 1)
    { /* block id: 240 */
        uint16_t *l_477 = (void*)0;
        struct S2 l_478 = {134};
        int32_t *l_490 = &g_108.f0;
        int32_t l_529[9];
        struct S0 l_546[3][5][9] = {{{{9L,-558,2164,8024,-2L,1272,4805},{9L,-558,2164,8024,-2L,1272,4805},{0x98E31EE4L,524,3745,6533,0L,809,13078},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{-7L,-918,3174,3816,0x5CL,341,15849},{0x98E31EE4L,524,3745,6533,0L,809,13078},{-7L,-918,3174,3816,0x5CL,341,15849},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{0x98E31EE4L,524,3745,6533,0L,809,13078}},{{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{-1L,-324,671,6036,0x18L,743,22659},{6L,-198,-158,3699,0x19L,3763,2066},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{6L,-198,-158,3699,0x19L,3763,2066},{-1L,-324,671,6036,0x18L,743,22659},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619}},{{9L,-558,2164,8024,-2L,1272,4805},{9L,-558,2164,8024,-2L,1272,4805},{0x98E31EE4L,524,3745,6533,0L,809,13078},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{-7L,-918,3174,3816,0x5CL,341,15849},{0x98E31EE4L,524,3745,6533,0L,809,13078},{-7L,-918,3174,3816,0x5CL,341,15849},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{0x98E31EE4L,524,3745,6533,0L,809,13078}},{{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{-1L,-324,671,6036,0x18L,743,22659},{6L,-198,-158,3699,0x19L,3763,2066},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{6L,-198,-158,3699,0x19L,3763,2066},{-1L,-324,671,6036,0x18L,743,22659},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619}},{{9L,-558,2164,8024,-2L,1272,4805},{9L,-558,2164,8024,-2L,1272,4805},{0x98E31EE4L,524,3745,6533,0L,809,13078},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{-7L,-918,3174,3816,0x5CL,341,15849},{0x98E31EE4L,524,3745,6533,0L,809,13078},{-7L,-918,3174,3816,0x5CL,341,15849},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{0x98E31EE4L,524,3745,6533,0L,809,13078}}},{{{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{-1L,-324,671,6036,0x18L,743,22659},{6L,-198,-158,3699,0x19L,3763,2066},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{6L,-198,-158,3699,0x19L,3763,2066},{-1L,-324,671,6036,0x18L,743,22659},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619}},{{9L,-558,2164,8024,-2L,1272,4805},{9L,-558,2164,8024,-2L,1272,4805},{0x98E31EE4L,524,3745,6533,0L,809,13078},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{-7L,-918,3174,3816,0x5CL,341,15849},{0x98E31EE4L,524,3745,6533,0L,809,13078},{-7L,-918,3174,3816,0x5CL,341,15849},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{0x98E31EE4L,524,3745,6533,0L,809,13078}},{{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{-1L,-324,671,6036,0x18L,743,22659},{6L,-198,-158,3699,0x19L,3763,2066},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{6L,-198,-158,3699,0x19L,3763,2066},{-1L,-324,671,6036,0x18L,743,22659},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619}},{{9L,-558,2164,8024,-2L,1272,4805},{9L,-558,2164,8024,-2L,1272,4805},{0x98E31EE4L,524,3745,6533,0L,809,13078},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{-7L,-918,3174,3816,0x5CL,341,15849},{0x98E31EE4L,524,3745,6533,0L,809,13078},{-7L,-918,3174,3816,0x5CL,341,15849},{0x6D6BAD42L,108,-3812,5229,0x1EL,1650,3238},{0x98E31EE4L,524,3745,6533,0L,809,13078}},{{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{-1L,-324,671,6036,0x18L,743,22659},{6L,-198,-158,3699,0x19L,3763,2066},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619},{6L,-198,-158,3699,0x19L,3763,2066},{-1L,-324,671,6036,0x18L,743,22659},{0xB51E6FFAL,-615,2203,924,0x1CL,953,19619}}},{{{9L,-558,2164,8024,-2L,1272,4805},{0L,-867,-638,5318,0x30L,27,9582},{9L,-558,2164,8024,-2L,1272,4805},{0x3C8FBEA6L,-370,-2091,2733,0x6EL,3848,7328},{0xFA3EC8E2L,-191,-287,7473,0xE1L,3268,19310},{9L,-558,2164,8024,-2L,1272,4805},{0xFA3EC8E2L,-191,-287,7473,0xE1L,3268,19310},{0x3C8FBEA6L,-370,-2091,2733,0x6EL,3848,7328},{9L,-558,2164,8024,-2L,1272,4805}},{{1L,-463,3552,4737,9L,3388,5555},{1L,-463,3552,4737,9L,3388,5555},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0xB99A8D2DL,623,254,6652,0L,2740,6051},{0x6B0D55B9L,786,3393,3754,0x9BL,2318,16303},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0x6B0D55B9L,786,3393,3754,0x9BL,2318,16303},{0xB99A8D2DL,623,254,6652,0L,2740,6051},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070}},{{0L,-867,-638,5318,0x30L,27,9582},{0L,-867,-638,5318,0x30L,27,9582},{9L,-558,2164,8024,-2L,1272,4805},{0x3C8FBEA6L,-370,-2091,2733,0x6EL,3848,7328},{0xFA3EC8E2L,-191,-287,7473,0xE1L,3268,19310},{9L,-558,2164,8024,-2L,1272,4805},{0xFA3EC8E2L,-191,-287,7473,0xE1L,3268,19310},{0x3C8FBEA6L,-370,-2091,2733,0x6EL,3848,7328},{9L,-558,2164,8024,-2L,1272,4805}},{{1L,-463,3552,4737,9L,3388,5555},{1L,-463,3552,4737,9L,3388,5555},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0xB99A8D2DL,623,254,6652,0L,2740,6051},{0x6B0D55B9L,786,3393,3754,0x9BL,2318,16303},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070},{0x6B0D55B9L,786,3393,3754,0x9BL,2318,16303},{0xB99A8D2DL,623,254,6652,0L,2740,6051},{0x04F751E2L,-810,2427,5511,0x87L,1463,7070}},{{0L,-867,-638,5318,0x30L,27,9582},{0L,-867,-638,5318,0x30L,27,9582},{9L,-558,2164,8024,-2L,1272,4805},{0x3C8FBEA6L,-370,-2091,2733,0x6EL,3848,7328},{0xFA3EC8E2L,-191,-287,7473,0xE1L,3268,19310},{9L,-558,2164,8024,-2L,1272,4805},{0xFA3EC8E2L,-191,-287,7473,0xE1L,3268,19310},{0x3C8FBEA6L,-370,-2091,2733,0x6EL,3848,7328},{9L,-558,2164,8024,-2L,1272,4805}}}};
        int i, j, k;
        for (i = 0; i < 9; i++)
            l_529[i] = (-6L);
        if (((safe_sub_func_int32_t_s_s((l_485 = (safe_rshift_func_int16_t_s_s((((((l_477 != l_477) == (l_478 , (safe_sub_func_int32_t_s_s(((safe_sub_func_uint32_t_u_u((((((*p_28) = l_483) ^ ((l_484 != (void*)0) ^ 1L)) >= ((((g_258 == (*g_165)) <= p_27) , p_27) >= 0x86E9F35BL)) & 0xC2L), l_483)) || l_478.f0), p_27)))) != p_27) | p_27) , l_483), l_478.f0))), l_478.f0)) == l_483))
        { /* block id: 243 */
            uint32_t l_487 = 0xCA921D1AL;
            int32_t **l_491[4][3] = {{&g_304,&g_304,&l_490},{&g_304,&g_304,&l_490},{&g_304,&g_304,&l_490},{&g_304,&g_304,&l_490}};
            int i, j;
            g_304 = func_34(func_45(func_34(&g_465, l_486, &g_465), ((l_487 , l_488) , l_489)), g_345[7][0], l_490);
        }
        else
        { /* block id: 245 */
            int8_t l_492 = (-10L);
            int32_t l_493 = 0x8EFF5816L;
            int32_t l_502 = 0xC3A4854FL;
            int32_t l_503 = 0L;
            int32_t l_505 = (-2L);
            int32_t l_506 = 0x9317DCD3L;
            int32_t l_530 = 0x3BEC1AE2L;
            int32_t l_533 = 0xC6DC5D19L;
            struct S2 l_545 = {59};
            struct S1 l_555 = {0UL,0x16F39D5EL,1UL,6L};
            struct S2 l_556 = {-140};
            for (g_103 = 0; (g_103 <= 8); g_103 += 1)
            { /* block id: 248 */
                int32_t *l_494 = &l_485;
                int32_t *l_495 = &l_485;
                int32_t l_496 = (-9L);
                int32_t *l_497 = &g_52;
                int32_t *l_498 = &l_493;
                int32_t *l_499 = &g_108.f0;
                int32_t l_500 = 0x705D0817L;
                int32_t *l_501[9][7] = {{&l_500,&l_500,&l_496,(void*)0,(void*)0,(void*)0,(void*)0},{&g_465,&l_500,&g_465,(void*)0,&g_465,&l_500,&g_465},{&l_500,(void*)0,(void*)0,&l_500,(void*)0,&l_496,&l_496},{&l_493,&l_500,&g_465,&l_500,&l_493,&l_500,&g_465},{(void*)0,&l_500,(void*)0,(void*)0,&l_500,(void*)0,&l_496},{&g_465,(void*)0,&g_465,&l_500,&g_465,(void*)0,&g_465},{(void*)0,(void*)0,&l_496,&l_500,&l_500,&l_496,(void*)0},{&l_493,(void*)0,&g_465,(void*)0,&l_493,(void*)0,&g_465},{&l_500,&l_500,&l_496,(void*)0,(void*)0,(void*)0,(void*)0}};
                const struct S1 **l_523 = (void*)0;
                int i, j;
                --l_507;
                for (l_485 = 1; (l_485 <= 5); l_485 += 1)
                { /* block id: 252 */
                    uint32_t *l_514 = &g_49[3].f0;
                    uint16_t *l_517 = &g_518;
                    int16_t l_519[3][8][7] = {{{1L,0x7436L,0x0B36L,(-1L),0x1325L,(-1L),0x186EL},{0L,(-1L),0x53B9L,0x97DDL,0xD97BL,(-6L),0L},{0xBB5AL,(-5L),0x0B36L,0x9816L,(-4L),(-1L),0x0D60L},{0xEF7CL,0xB31EL,(-1L),0xD0F5L,0xA256L,0x186EL,0L},{0xD10FL,0L,0x97DDL,0xD338L,0x53B9L,9L,0xB38CL},{0L,9L,1L,0L,0L,(-1L),1L},{0x0B36L,0x6756L,0xB31EL,9L,0L,1L,0xD97BL},{0x383CL,6L,0L,0xF1EEL,4L,1L,0xBB51L}},{{(-6L),0x7197L,0x1325L,1L,0xB707L,(-1L),0x66F8L},{(-4L),(-1L),0L,1L,(-5L),9L,(-1L)},{1L,0L,0x087EL,(-1L),(-4L),0xB471L,9L},{0L,(-5L),0xA8BCL,0xA8BCL,(-5L),0L,0x1608L},{0x97DDL,0xDEE0L,9L,0xD97BL,0x087EL,(-5L),0L},{(-1L),(-1L),(-6L),1L,0x0D60L,0x2F34L,(-1L)},{6L,0xDEE0L,0xBB51L,(-3L),(-7L),9L,(-5L)},{0xF1EEL,(-5L),0L,0x186EL,(-1L),4L,0xBB5AL}},{{(-1L),0xA8BCL,(-7L),0x383CL,(-1L),0xF1EEL,1L},{0x843AL,0x2F34L,0xEF7CL,1L,0xB27FL,0xDEE0L,0L},{0L,(-1L),1L,(-3L),0xBB95L,1L,0x8043L},{(-1L),6L,(-3L),0x8043L,0xBB95L,0L,0L},{1L,(-1L),0x66F8L,0xA256L,0xB27FL,0x087EL,(-1L)},{0L,0xF1EEL,1L,(-7L),(-1L),1L,0L},{0L,0L,1L,0xB27FL,(-1L),0xD338L,0xD338L},{(-7L),0x8AC8L,0x0D60L,0x8AC8L,(-7L),0xED5EL,0x66F8L}}};
                    struct S1 l_522 = {0x646DAE79L,4294967288UL,1UL,0x99F1L};
                    int i, j, k;
                    (*p_28) &= (safe_rshift_func_int8_t_s_u(((safe_add_func_uint8_t_u_u((((((+9L) || ((*l_498) , (((*l_514) = 1UL) <= (safe_add_func_uint16_t_u_u(((*l_517) = (g_455[0] = ((*l_484) &= (0xB114L <= p_27)))), (l_505 > (((~l_519[1][0][5]) || (((0xA658L & (safe_mod_func_int8_t_s_s((l_522 , g_393[3]), p_27))) != l_522.f3) >= l_505)) <= l_519[0][7][1]))))))) <= (*g_165)) , p_27) > l_504[4][1][2]), 0xEAL)) || g_398), p_27));
                    return g_49[g_395];
                }
                g_524[1][2][3] = &g_404[2][0][0];
            }
            for (g_99.f2 = 0; (g_99.f2 <= 8); g_99.f2 += 1)
            { /* block id: 264 */
                int32_t *l_526 = (void*)0;
                int32_t *l_527 = &l_505;
                int32_t *l_528[6][3];
                struct S1 *l_554 = &l_488;
                struct S1 **l_553 = &l_554;
                int i, j;
                for (i = 0; i < 6; i++)
                {
                    for (j = 0; j < 3; j++)
                        l_528[i][j] = &g_52;
                }
                ++g_535[1][4][2];
                g_538++;
                for (l_506 = 6; (l_506 >= 0); l_506 -= 1)
                { /* block id: 269 */
                    uint16_t l_548[5] = {0xF940L,0xF940L,0xF940L,0xF940L,0xF940L};
                    struct S2 *l_549 = (void*)0;
                    int i;
                    if ((safe_sub_func_int32_t_s_s((*p_28), (!((*p_28) || (*l_490))))))
                    { /* block id: 270 */
                        (*l_527) ^= (*p_28);
                        if ((*p_28))
                            continue;
                    }
                    else
                    { /* block id: 273 */
                        struct S2 l_543 = {91};
                        struct S2 *l_544[1];
                        int16_t *l_547 = &g_99.f3;
                        int i;
                        for (i = 0; i < 1; i++)
                            l_544[i] = &g_110;
                        l_545 = l_543;
                        (*l_527) = ((l_546[2][3][0] = g_108) , (((*l_547) = g_452) == ((*l_484) = l_548[4])));
                        if (g_467)
                            continue;
                    }
                    (*l_490) = (((l_550 = l_478) , (g_108 , &l_486)) == &l_486);
                    for (l_492 = 7; (l_492 >= 1); l_492 -= 1)
                    { /* block id: 285 */
                        (*l_490) |= l_486.f0;
                        return g_49[0];
                    }
                }
                g_557 = (safe_mul_func_int16_t_s_s(((g_525.f1 & (&g_524[1][5][1] != l_553)) ^ (p_27 && ((l_555 , (l_556 , (-1L))) > g_25.f0))), 0x7A39L));
            }
        }
        for (g_96 = 1; (g_96 <= 8); g_96 += 1)
        { /* block id: 295 */
            int i;
            return g_49[g_96];
        }
    }
    g_575--;
    return l_489;
}


/* ------------------------------------------ */
/* 
 * reads : g_5 g_25 g_52 g_96 g_99 g_103 g_108 g_109 g_110 g_109.f0 g_165 g_82 g_92 g_183.f0 g_191 g_218 g_90 g_183 g_49.f1 g_49.f0 g_258 g_49 g_332 g_345.f0 g_395 g_398 g_455 g_467
 * writes: g_5 g_49 g_52 g_96 g_103 g_110 g_99.f3 g_108.f4 g_99.f2 g_165 g_108.f0 g_191 g_92 g_108.f2 g_108.f1 g_108.f6 g_108 g_304 g_332 g_395 g_398 g_258 g_455 g_467
 */
static uint8_t  func_31(int32_t * p_32)
{ /* block id: 7 */
    uint32_t l_33[2];
    struct S3 l_43 = {0x4F6F4846L,1UL};
    struct S3 l_50 = {4UL,4294967289UL};
    union U4 l_406[7] = {{-3L},{0xB7779B28L},{-3L},{-3L},{0xB7779B28L},{-3L},{-3L}};
    int32_t l_462 = (-1L);
    int32_t *l_463 = &l_462;
    int32_t *l_464[3];
    int i;
    for (i = 0; i < 2; i++)
        l_33[i] = 4294967286UL;
    for (i = 0; i < 3; i++)
        l_464[i] = &l_462;
    for (g_5 = 1; (g_5 >= 0); g_5 -= 1)
    { /* block id: 10 */
        struct S3 *l_44 = &l_43;
        struct S3 *l_48 = &g_49[3];
        const struct S1 l_167 = {0x3CA78DFFL,0x8E3CAE63L,1UL,0L};
        int32_t **l_458 = &g_304;
        struct S0 *l_461 = &g_108;
        int i;
        (*l_458) = func_34(func_38(((*l_44) = l_43), l_33[g_5], func_45(p_32, (l_50 = ((*l_48) = g_25))), l_167), l_406[3], p_32);
        for (g_99.f2 = 0; (g_99.f2 <= 1); g_99.f2 += 1)
        { /* block id: 230 */
            struct S0 *l_459 = &g_108;
            struct S0 **l_460[6] = {&l_459,&l_459,(void*)0,&l_459,&l_459,(void*)0};
            int i;
            l_461 = l_459;
        }
    }
    g_467++;
    return g_467;
}


/* ------------------------------------------ */
/* 
 * reads : g_49.f1 g_165 g_103 g_25.f1 g_258 g_92 g_455
 * writes: g_49.f1 g_258 g_455
 */
static int32_t * func_34(int32_t * p_35, union U4  p_36, int32_t * p_37)
{ /* block id: 221 */
    struct S2 l_409 = {-163};
    uint32_t *l_416 = (void*)0;
    uint32_t *l_417[2];
    int32_t l_418 = 0L;
    int32_t l_419 = 0x825E3BEFL;
    int32_t l_420 = 0x051A042DL;
    int32_t l_443 = (-1L);
    int32_t *l_444 = &l_418;
    int32_t *l_445 = (void*)0;
    int32_t *l_446 = (void*)0;
    int32_t *l_447 = (void*)0;
    int32_t *l_448 = &l_420;
    int32_t *l_449 = &g_108.f0;
    int32_t *l_450 = &l_418;
    int32_t *l_451[2][10] = {{&g_52,&g_52,&l_419,&g_52,&g_52,&l_419,&g_52,&g_52,&l_419,&g_52},{&g_52,&l_420,&l_420,&g_52,&l_420,&l_420,&g_52,&l_420,&l_420,&g_52}};
    int8_t l_453 = (-6L);
    int i, j;
    for (i = 0; i < 2; i++)
        l_417[i] = &g_49[3].f0;
    l_443 &= ((safe_rshift_func_int8_t_s_u((l_409 , (((p_36.f0 && ((safe_rshift_func_int16_t_s_u(((safe_mod_func_uint8_t_u_u(((safe_sub_func_uint32_t_u_u(0UL, (g_49[3].f1--))) & (safe_mul_func_int8_t_s_s((g_258 ^= (safe_lshift_func_uint8_t_u_u((safe_mul_func_int16_t_s_s(0xC9E3L, (((safe_add_func_int16_t_s_s((l_409.f0 == p_36.f0), (safe_mod_func_uint16_t_u_u(l_419, (+((safe_div_func_int8_t_s_s((safe_div_func_int32_t_s_s((((safe_lshift_func_uint16_t_u_u((*g_165), 9)) , ((safe_add_func_uint16_t_u_u(((safe_sub_func_int8_t_s_s((-3L), 0x98L)) , p_36.f0), (*g_165))) & 0x6D1BCE73L)) < l_409.f0), p_36.f0)), g_25.f1)) , p_36.f0)))))) , l_418) != 0xE3B4E678L))), l_418))), l_409.f0))), l_420)) < l_420), p_36.f0)) >= l_409.f0)) < g_92) , 0x95L)), l_418)) > (*g_165));
    ++g_455[0];
    return p_37;
}


/* ------------------------------------------ */
/* 
 * reads : g_108 g_52 g_165 g_103 g_82 g_25.f1 g_5 g_92 g_183.f0 g_191 g_109.f0 g_25.f0 g_218 g_90 g_109 g_183 g_49.f1 g_49.f0 g_258 g_49 g_110.f0 g_99.f2 g_332 g_25 g_96 g_99.f3 g_345.f0 g_395 g_398
 * writes: g_108.f0 g_99.f2 g_52 g_103 g_191 g_92 g_108.f2 g_108.f1 g_108.f6 g_99.f3 g_108 g_49.f0 g_304 g_332 g_395 g_398 g_49
 */
static int32_t * func_38(struct S3  p_39, uint32_t  p_40, int32_t * p_41, const struct S1  p_42)
{ /* block id: 71 */
    int8_t l_172 = (-1L);
    int32_t *l_175 = (void*)0;
    int32_t **l_174[3];
    int32_t ***l_173 = &l_174[0];
    struct S2 l_176 = {-169};
    uint8_t *l_177 = &g_99.f2;
    union U4 *l_182 = &g_183;
    struct S2 *l_195 = (void*)0;
    struct S2 **l_194 = &l_195;
    int32_t l_254 = 0x048F6AE0L;
    int8_t l_255 = 0L;
    struct S0 l_262 = {0xC1C6760BL,-54,2234,3520,0L,2794,348};
    struct S3 l_293 = {0xF50D0A37L,4294967291UL};
    uint16_t l_350 = 0xC4BAL;
    int32_t l_365 = 0x2489EBF2L;
    uint32_t l_378[4] = {0x9D96597DL,0x9D96597DL,0x9D96597DL,0x9D96597DL};
    const struct S1 *l_403 = &g_404[2][0][0];
    int i;
    for (i = 0; i < 3; i++)
        l_174[i] = &l_175;
    l_172 |= (g_108.f0 = (((p_39 , g_108) , (safe_rshift_func_int8_t_s_u((safe_add_func_uint16_t_u_u(p_39.f0, (g_52 <= g_108.f2))), 5))) || (*g_165)));
    if ((((*l_173) = &p_41) != (((g_103 <= (((((l_176 , ((&g_52 != (p_42 , p_41)) , g_82)) <= (((*l_177) = p_42.f0) | (((((l_176 , g_25.f1) && g_5) & g_92) ^ g_108.f3) && 0x9DDE6059L))) , p_42.f1) , (void*)0) == (void*)0)) != 0x06L) , &l_175)))
    { /* block id: 76 */
        uint32_t l_178 = 0x40F41BBAL;
        int32_t l_179 = 8L;
        uint32_t *l_186 = &g_49[3].f0;
        struct S0 l_217 = {0x9CC95D81L,-985,-1516,7140,0xA9L,2285,11191};
        uint32_t l_259[5][5][8] = {{{0x404513ECL,1UL,0x0D50F805L,18446744073709551613UL,0x0D50F805L,1UL,0x404513ECL,0x657FA000L},{18446744073709551615UL,18446744073709551608UL,1UL,0xBD5D16FAL,0xEBC21351L,0x0D50F805L,0xDC2B5266L,0xFA0CCB0CL},{1UL,0UL,0x9FFD4D6FL,18446744073709551614UL,0xEBC21351L,0x404513ECL,0x66F2389CL,18446744073709551613UL},{18446744073709551615UL,7UL,0UL,0xFA0CCB0CL,0x0D50F805L,0x1AC60CB9L,1UL,1UL},{0x404513ECL,1UL,18446744073709551608UL,0xEBC21351L,4UL,1UL,0x96F26880L,0x1AC60CB9L}},{{0x233A39EEL,0xA609B5DDL,0xFA0CCB0CL,0xD9F72379L,0xAF2F1A97L,6UL,7UL,18446744073709551615UL},{18446744073709551608UL,18446744073709551608UL,1UL,0UL,18446744073709551615UL,18446744073709551612UL,18446744073709551612UL,18446744073709551614UL},{18446744073709551612UL,18446744073709551608UL,18446744073709551608UL,18446744073709551612UL,0x1AC60CB9L,0xBD5D16FAL,0x96F26880L,0x6981C5EEL},{1UL,0x9FFD4D6FL,18446744073709551615UL,0xFA0CCB0CL,18446744073709551615UL,0x984A7A52L,0x20E4E1FBL,1UL},{18446744073709551615UL,0x9FFD4D6FL,1UL,0xA609B5DDL,18446744073709551608UL,0xBD5D16FAL,1UL,0xF087EB8CL}},{{18446744073709551613UL,18446744073709551608UL,6UL,18446744073709551615UL,18446744073709551615UL,18446744073709551612UL,0xAF2F1A97L,0UL},{0xDC2B5266L,0x47E5CDF2L,4UL,1UL,1UL,0x4B447F4BL,18446744073709551608UL,0x0D50F805L},{0xDF4C687CL,18446744073709551612UL,0x9FFD4D6FL,18446744073709551613UL,0x47E5CDF2L,0UL,18446744073709551615UL,0xFA0CCB0CL},{18446744073709551608UL,0xD9F72379L,0x233A39EEL,0xB0982D63L,0UL,0xB0982D63L,0x233A39EEL,0xD9F72379L},{0x657FA000L,0xC65D9BC6L,0x782E8E32L,0x4B447F4BL,18446744073709551615UL,18446744073709551615UL,0x6981C5EEL,18446744073709551608UL}},{{0x2A31B2FEL,0x66F2389CL,18446744073709551615UL,0x0D50F805L,0x657FA000L,0UL,0x6981C5EEL,0x782E8E32L},{0UL,0x0D50F805L,0x782E8E32L,18446744073709551615UL,0x9FFD4D6FL,1UL,0x233A39EEL,0xDF4C687CL},{0x9FFD4D6FL,1UL,0x233A39EEL,0xDF4C687CL,0xC65D9BC6L,18446744073709551615UL,18446744073709551615UL,0x657FA000L},{0x6DAE4665L,0xFA0CCB0CL,0x9FFD4D6FL,1UL,0xBD5D16FAL,18446744073709551608UL,18446744073709551608UL,1UL},{0xA609B5DDL,0UL,4UL,0xD9F72379L,0x404513ECL,1UL,0xAF2F1A97L,0xAF2F1A97L}},{{0x6981C5EEL,1UL,6UL,6UL,1UL,0x6981C5EEL,1UL,8UL},{0xC65D9BC6L,0x2A31B2FEL,1UL,1UL,0xA609B5DDL,1UL,0x20E4E1FBL,0xBD5D16FAL},{6UL,1UL,18446744073709551615UL,1UL,18446744073709551613UL,0x782E8E32L,0x96F26880L,8UL},{0UL,18446744073709551613UL,18446744073709551608UL,6UL,18446744073709551615UL,18446744073709551615UL,18446744073709551612UL,0xAF2F1A97L},{0xF087EB8CL,0UL,1UL,0xD9F72379L,0x6DAE4665L,18446744073709551615UL,0xC65D9BC6L,1UL}}};
        int i, j, k;
lbl_185:
        l_178 ^= p_42.f0;
lbl_221:
        l_179 ^= (g_108.f3 , (-1L));
        for (g_52 = 0; (g_52 <= (-8)); --g_52)
        { /* block id: 81 */
            struct S2 **l_193 = (void*)0;
            int32_t l_220 = (-2L);
            uint8_t *l_247 = &g_99.f2;
            struct S3 *l_294 = &l_293;
            int32_t l_295[1];
            int i;
            for (i = 0; i < 1; i++)
                l_295[i] = 1L;
            for (g_103 = 1; (g_103 <= 8); g_103 += 1)
            { /* block id: 84 */
                union U4 **l_184 = &l_182;
                (**l_173) = &g_52;
                (*l_184) = l_182;
                if (g_108.f6)
                    goto lbl_185;
            }
            if (((l_186 != l_186) >= ((((safe_mul_func_int8_t_s_s((p_42.f0 ^ ((safe_mod_func_int32_t_s_s(g_183.f0, (((g_191 = g_191) == (l_178 , (l_194 = l_193))) & p_42.f0))) , (safe_div_func_uint16_t_u_u(((safe_div_func_int8_t_s_s((safe_mod_func_int16_t_s_s(g_108.f1, g_109.f0)), g_108.f1)) , p_40), l_178)))), l_179)) , (void*)0) != (void*)0) < 0UL)))
            { /* block id: 91 */
                uint8_t l_210 = 1UL;
                int8_t *l_219 = &g_92;
                l_179 ^= (safe_add_func_int8_t_s_s(((safe_mod_func_uint32_t_u_u(g_109.f0, ((p_42.f2 == (safe_add_func_uint16_t_u_u((safe_add_func_int8_t_s_s(l_210, ((0x20L | (safe_rshift_func_int8_t_s_s((safe_sub_func_int32_t_s_s((g_108.f2 = (((*l_219) ^= ((g_25.f0 | (safe_mod_func_uint16_t_u_u((0x9049C42DL == g_108.f6), p_39.f0))) & ((l_217 , g_218) , 0xFFL))) > (-1L))), 1UL)), g_108.f4))) < l_220))), p_42.f2))) | l_210))) , g_108.f5), p_39.f0));
                g_108.f1 = (g_108.f0 = l_210);
            }
            else
            { /* block id: 97 */
                int16_t *l_234 = &g_99.f3;
                struct S2 l_235 = {-27};
                const int32_t l_242 = 0L;
                int32_t l_256 = 0xA933B74FL;
                uint32_t l_289 = 0x25A83FB6L;
                if (g_108.f5)
                    goto lbl_221;
                if ((((safe_sub_func_uint32_t_u_u(0UL, g_90)) > ((safe_rshift_func_int16_t_s_s(((safe_mul_func_int16_t_s_s(((*l_234) = (safe_mod_func_int32_t_s_s(4L, (safe_lshift_func_int8_t_s_s((g_92 >= (g_108.f6 &= 0x5E2D9ED2L)), 2))))), g_92)) >= (l_235 , g_5)), l_220)) >= g_103)) | p_40))
                { /* block id: 101 */
                    int16_t l_248 = 1L;
                    int32_t l_249 = 0xF2B5DE02L;
                    uint16_t l_250 = 65535UL;
                    if ((l_217.f5 , (g_109 , (+((safe_lshift_func_int16_t_s_s((safe_mod_func_int16_t_s_s((p_42.f3 <= ((((*l_182) , (((safe_add_func_int8_t_s_s(8L, l_242)) >= (((((!((safe_mod_func_int32_t_s_s((0L > (((safe_div_func_uint8_t_u_u((g_49[3].f1 >= ((((l_177 != l_247) ^ 0xA5L) & 0x5FE0L) == l_220)), l_217.f3)) >= p_42.f2) == l_179)), l_242)) && p_42.f2)) ^ l_235.f0) , l_242) & g_218.f0) >= 0xBCL)) >= p_42.f2)) <= 1L) | l_220)), l_248)), 12)) , 0x01166651L)))))
                    { /* block id: 102 */
                        union U4 **l_253 = &l_182;
                        l_250++;
                        (*l_253) = &g_183;
                        if (l_217.f3)
                            break;
                    }
                    else
                    { /* block id: 106 */
                        int32_t l_257 = (-1L);
                        l_259[3][4][1]--;
                        if (g_183.f0)
                            goto lbl_185;
                    }
                    for (l_217.f4 = 5; (l_217.f4 >= 0); l_217.f4 -= 1)
                    { /* block id: 112 */
                        if (g_25.f0)
                            break;
                        (**l_173) = &g_52;
                    }
                }
                else
                { /* block id: 116 */
                    struct S0 *l_263 = (void*)0;
                    struct S0 **l_276 = &l_263;
                    g_108 = l_262;
                    l_256 = (0L > (safe_div_func_uint32_t_u_u(((*l_186) &= ((*g_165) | (0x9EL <= l_178))), (safe_div_func_uint8_t_u_u(((safe_div_func_int8_t_s_s(((safe_sub_func_int16_t_s_s((l_179 ^= 2L), p_39.f1)) == (~(safe_sub_func_uint16_t_u_u((g_108.f2 & p_40), ((safe_lshift_func_int16_t_s_s((!(-1L)), g_108.f6)) , 7UL))))), l_217.f6)) || (*g_165)), g_82)))));
                    (*l_276) = &g_108;
                }
                l_220 = (((((((255UL ^ l_220) <= (l_259[0][4][0] == ((safe_rshift_func_int16_t_s_s(((*l_234) = ((safe_rshift_func_uint8_t_u_s(((safe_add_func_uint32_t_u_u((0L ^ 0x06EA03D3L), 0x130C64E2L)) || 7L), 0)) || ((safe_lshift_func_uint8_t_u_u((safe_rshift_func_int16_t_s_u(((safe_lshift_func_uint8_t_u_s((l_242 , (p_42.f3 , l_220)), 4)) <= (*g_165)), p_42.f1)), 4)) ^ p_39.f1))), l_289)) > l_242))) > 0UL) != l_220) ^ g_108.f6) > g_258) , l_242);
            }
            for (l_220 = 0; (l_220 == (-6)); l_220--)
            { /* block id: 128 */
                struct S3 *l_292[2][4] = {{&g_49[3],&g_49[3],&g_49[3],&g_49[3]},{&g_49[3],&g_49[3],&g_49[3],&g_49[3]}};
                int32_t *l_297 = (void*)0;
                int i, j;
                l_293 = g_49[3];
                for (p_39.f1 = 0; (p_39.f1 <= 1); p_39.f1 += 1)
                { /* block id: 132 */
                    int32_t *l_296 = &l_179;
                    for (l_255 = 0; (l_255 <= 5); l_255 += 1)
                    { /* block id: 135 */
                        int i, j;
                        l_294 = l_292[p_39.f1][(p_39.f1 + 1)];
                        l_295[0] = 0x1705E1A6L;
                    }
                    return l_297;
                }
            }
        }
        if (g_183.f0)
            goto lbl_185;
    }
    else
    { /* block id: 144 */
        int16_t l_311 = (-9L);
        int32_t l_330[5];
        union U4 *l_344 = &g_345[6][0];
        int8_t *l_348 = &g_108.f4;
        int32_t **l_349[3][6] = {{&g_304,&g_304,&g_304,&g_304,&g_304,&g_304},{&g_304,&g_304,&g_304,&g_304,&g_304,&g_304},{&g_304,&g_304,&g_304,&g_304,&g_304,&g_304}};
        struct S0 *l_385 = (void*)0;
        int i, j;
        for (i = 0; i < 5; i++)
            l_330[i] = 1L;
lbl_312:
        for (p_39.f0 = (-9); (p_39.f0 > 18); ++p_39.f0)
        { /* block id: 147 */
            uint32_t l_300 = 4294967294UL;
            int32_t l_301 = 0xD9208B22L;
            if (l_300)
                break;
            l_301 = 0xA4C65C70L;
            for (l_262.f4 = (-17); (l_262.f4 <= 4); l_262.f4 = safe_add_func_int16_t_s_s(l_262.f4, 8))
            { /* block id: 152 */
                for (l_301 = 3; (l_301 <= 8); l_301 += 1)
                { /* block id: 155 */
                    struct S0 *l_305 = &g_108;
                    for (l_300 = 0; (l_300 <= 8); l_300 += 1)
                    { /* block id: 158 */
                        return p_41;
                    }
                    for (g_99.f3 = 2; (g_99.f3 <= 8); g_99.f3 += 1)
                    { /* block id: 163 */
                        g_304 = p_41;
                    }
                    l_305 = (void*)0;
                }
                if (p_42.f1)
                    continue;
            }
        }
        for (p_39.f0 = (-15); (p_39.f0 != 21); p_39.f0 = safe_add_func_uint32_t_u_u(p_39.f0, 9))
        { /* block id: 173 */
            for (g_52 = (-16); (g_52 != 2); g_52++)
            { /* block id: 176 */
                uint8_t l_310 = 0x9BL;
                g_108.f2 &= (l_311 = (l_310 ^= g_110.f0));
                for (p_39.f1 = 0; (p_39.f1 <= 5); p_39.f1 += 1)
                { /* block id: 182 */
                    if (p_42.f2)
                        goto lbl_312;
                }
                if (g_5)
                    break;
            }
        }
        if ((safe_add_func_uint16_t_u_u((l_293 , 0x3EC2L), g_99.f2)))
        { /* block id: 188 */
            int32_t l_321[6][7] = {{(-5L),(-5L),0xD6B91F25L,4L,(-1L),4L,0xD6B91F25L},{0xACB8014FL,0xACB8014FL,0x3ED75555L,0xBE7ED0B2L,1L,0xBE7ED0B2L,0x3ED75555L},{(-5L),(-5L),0xD6B91F25L,0xEA670ACDL,(-3L),0xEA670ACDL,(-5L)},{1L,1L,0xACB8014FL,0L,0x94A37624L,0L,0xACB8014FL},{(-1L),(-1L),(-5L),0xEA670ACDL,(-3L),0xEA670ACDL,(-5L)},{1L,1L,0xACB8014FL,0L,0x94A37624L,0L,0xACB8014FL}};
            uint16_t *l_331 = &g_332;
            union U4 *l_341 = &g_183;
            union U4 **l_342 = &l_182;
            union U4 **l_343 = (void*)0;
            union U4 *l_347 = &g_345[6][0];
            union U4 **l_346 = &l_347;
            uint32_t l_351 = 3UL;
            struct S2 * const *l_356 = &l_195;
            int32_t l_387 = 0L;
            int32_t l_392[1][2][8] = {{{0x972F012CL,0L,0L,0x972F012CL,0L,0L,0x972F012CL,0L},{0x972F012CL,0x972F012CL,(-8L),0x972F012CL,0x972F012CL,(-8L),0x972F012CL,0x972F012CL}}};
            int i, j, k;
            if ((((safe_mul_func_int16_t_s_s((safe_rshift_func_int8_t_s_u(((*l_348) &= ((safe_add_func_int8_t_s_s((0x8DL > l_321[0][1]), (((safe_div_func_uint8_t_u_u((safe_add_func_int32_t_s_s((l_351 &= (safe_div_func_int16_t_s_s(g_99.f2, ((safe_lshift_func_uint16_t_u_u((*g_165), ((*l_331)++))) | (((g_25 , (safe_rshift_func_int16_t_s_s((safe_div_func_int16_t_s_s((safe_rshift_func_int8_t_s_u(((l_344 = ((*l_342) = l_341)) != ((*l_346) = &g_345[4][0])), 7)), ((((*l_173) = ((((&g_92 != l_348) && 1UL) && 0L) , l_349[0][5])) == (void*)0) | 0L))), 10))) <= l_350) | 0x5D11L))))), g_258)), 0xB7L)) && g_82) <= p_42.f1))) | p_40)), p_42.f1)), l_321[4][2])) < g_96) <= 0x9CL))
            { /* block id: 196 */
                g_108.f1 = (+(((void*)0 == &g_108) & (3UL <= (p_42 , ((((0x76BACE53L ^ g_99.f3) & ((p_42.f1 | (safe_mul_func_uint8_t_u_u((&g_192[3][4] != (((*l_348) ^= (safe_div_func_int16_t_s_s((-1L), 0x3769L))) , l_356)), g_108.f3))) && g_108.f5)) >= g_49[3].f0) >= 5UL)))));
            }
            else
            { /* block id: 199 */
                const int32_t l_374 = 0x1727C7D6L;
                int32_t l_375 = 0xA28F6C8BL;
                int16_t *l_376 = (void*)0;
                int16_t *l_377[3];
                int32_t l_379 = 0L;
                int i;
                for (i = 0; i < 3; i++)
                    l_377[i] = &l_311;
                l_379 = (safe_add_func_uint8_t_u_u((safe_mul_func_uint16_t_u_u(((safe_div_func_int8_t_s_s((-2L), p_42.f1)) > 0UL), (((safe_add_func_int32_t_s_s(l_365, g_258)) && (((g_99.f3 = (safe_mod_func_int8_t_s_s(g_108.f0, ((*l_348) = (l_375 = ((g_345[6][0].f0 > ((safe_sub_func_uint32_t_u_u((g_108.f3 &= ((safe_rshift_func_uint16_t_u_u((*g_165), ((safe_mod_func_uint32_t_u_u(l_351, l_374)) <= p_42.f3))) , 4294967295UL)), l_374)) != l_374)) && l_374)))))) && l_378[1]) , p_40)) < (-5L)))), p_42.f3));
            }
            for (l_311 = 4; (l_311 >= 25); l_311++)
            { /* block id: 208 */
                struct S0 *l_382 = &l_262;
                struct S0 **l_383[9][10][1] = {{{&l_382},{&l_382},{&l_382},{&l_382},{(void*)0},{&l_382},{&l_382},{&l_382},{(void*)0},{&l_382}},{{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{(void*)0},{&l_382},{(void*)0},{&l_382},{(void*)0}},{{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{(void*)0},{&l_382},{(void*)0},{&l_382}},{{(void*)0},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{(void*)0},{&l_382},{&l_382}},{{&l_382},{(void*)0},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{(void*)0},{&l_382}},{{(void*)0},{&l_382},{(void*)0},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{(void*)0}},{{&l_382},{(void*)0},{&l_382},{(void*)0},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382}},{{(void*)0},{&l_382},{&l_382},{&l_382},{(void*)0},{&l_382},{&l_382},{&l_382},{&l_382},{&l_382}},{{&l_382},{(void*)0},{&l_382},{(void*)0},{&l_382},{(void*)0},{&l_382},{&l_382},{&l_382},{&l_382}}};
                struct S0 *l_384 = &g_108;
                int32_t l_386 = (-1L);
                int32_t l_388 = 1L;
                int32_t l_389 = 0xE1A9D191L;
                int32_t l_390 = 0xC7A0417FL;
                int32_t l_391 = 1L;
                int32_t l_394 = (-8L);
                int i, j, k;
                l_385 = (l_384 = l_382);
                g_395++;
            }
            --g_398;
        }
        else
        { /* block id: 214 */
            const struct S1 *l_402 = (void*)0;
            const struct S1 **l_401[7][3][9] = {{{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402},{&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402},{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402}},{{&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402},{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402},{&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402}},{{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402},{&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402},{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402}},{{&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402},{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402},{&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402}},{{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402},{&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402},{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402}},{{&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402},{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402},{&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402}},{{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402},{&l_402,(void*)0,(void*)0,&l_402,&l_402,(void*)0,(void*)0,&l_402,&l_402},{&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402,(void*)0,&l_402}}};
            int32_t *l_405 = &g_52;
            int i, j, k;
            l_403 = &p_42;
            g_49[3] = g_49[6];
            l_405 = (void*)0;
        }
    }
    return &g_52;
}


/* ------------------------------------------ */
/* 
 * reads : g_52 g_5 g_25.f0 g_96 g_99 g_103 g_108 g_109 g_110 g_25.f1 g_109.f0
 * writes: g_52 g_96 g_103 g_110 g_99.f3 g_49 g_108.f4 g_99.f2 g_165
 */
static int32_t * func_45(int32_t * p_46, struct S3  p_47)
{ /* block id: 14 */
    int32_t *l_51 = &g_52;
    int32_t *l_53 = &g_52;
    int32_t *l_54 = &g_52;
    int32_t *l_55 = &g_52;
    int32_t *l_56 = &g_52;
    int32_t *l_57 = &g_52;
    int32_t *l_58 = &g_52;
    int32_t *l_59 = &g_52;
    int32_t l_60 = 0x722525A5L;
    int32_t *l_61 = (void*)0;
    int32_t *l_62 = &g_52;
    int32_t *l_63 = (void*)0;
    int32_t *l_64 = &l_60;
    int32_t *l_65 = &g_52;
    uint8_t l_66 = 0x5DL;
    struct S3 l_76 = {0x937BBCECL,0x3F78CAFAL};
    int32_t l_93 = 0L;
    int32_t l_95 = 0xCC66F1EAL;
    uint16_t *l_123 = &g_103;
    struct S2 l_152[7] = {{137},{137},{137},{137},{137},{137},{137}};
    struct S0 l_154 = {0x4F983824L,-543,3055,3523,8L,612,3345};
    int i;
    ++l_66;
lbl_113:
    if (((*l_64) |= (+(safe_unary_minus_func_int32_t_s((*l_55))))))
    { /* block id: 17 */
        uint8_t l_75 = 3UL;
        int32_t l_81[8][5] = {{(-7L),0xABB25A59L,0xDA4CDC86L,(-10L),(-10L)},{(-10L),0x9E1B0F05L,(-10L),(-8L),0x4CABBE7FL},{0xDA4CDC86L,0xABB25A59L,(-7L),0L,0x4CABBE7FL},{0xA845DB39L,4L,4L,0xA845DB39L,(-10L)},{0x58DE384CL,0xA845DB39L,(-7L),0x4CABBE7FL,0xABB25A59L},{0x58DE384CL,(-7L),(-10L),(-7L),0x58DE384CL},{0xA845DB39L,0L,0xDA4CDC86L,0x4CABBE7FL,4L},{0xDA4CDC86L,0L,0xA845DB39L,0xA845DB39L,0L}};
        int32_t l_94 = (-1L);
        int i, j;
        for (l_66 = 0; (l_66 >= 10); ++l_66)
        { /* block id: 20 */
            int8_t l_74[9] = {0x4BL,0xC8L,0xC8L,0x4BL,0xC8L,0xC8L,0x4BL,0xC8L,0xC8L};
            int32_t l_83 = 1L;
            int32_t *l_84 = &l_81[1][3];
            int32_t *l_85 = (void*)0;
            int32_t *l_86 = &l_60;
            int32_t *l_87 = (void*)0;
            int32_t *l_88 = &g_52;
            int32_t *l_89 = (void*)0;
            int32_t *l_91[10] = {&l_81[0][3],&l_81[0][3],&l_81[0][3],&l_81[0][3],&l_81[0][3],&l_81[0][3],&l_81[0][3],&l_81[0][3],&l_81[0][3],&l_81[0][3]};
            int i;
            (*l_53) = (((safe_add_func_uint8_t_u_u(l_74[0], ((&g_49[3] == &p_47) , l_75))) == (l_76 , g_5)) , ((((255UL | g_25.f0) , (safe_add_func_int16_t_s_s(((safe_mul_func_int8_t_s_s(0x15L, g_5)) ^ 4294967294UL), (*l_58)))) , l_74[7]) && 0x05855809L));
            --g_96;
        }
    }
    else
    { /* block id: 24 */
        uint16_t *l_102 = &g_103;
        struct S2 *l_111 = (void*)0;
        struct S2 *l_112 = &g_110;
        (*l_58) ^= (g_99 , (safe_lshift_func_uint16_t_u_s((((*l_102)++) < ((safe_rshift_func_uint16_t_u_u(p_47.f1, p_47.f1)) < ((0UL & (g_108 , ((void*)0 != p_46))) >= (0L | (+((((*l_112) = ((g_109 , p_47.f0) , g_110)) , (-1L)) , g_108.f2)))))), 4)));
        if (l_76.f0)
            goto lbl_113;
    }
    for (g_99.f3 = (-30); (g_99.f3 != 13); g_99.f3++)
    { /* block id: 32 */
        int32_t **l_116 = &l_56;
        struct S0 l_126 = {-10L,818,-153,1691,1L,3770,19024};
        (*l_116) = &l_60;
        (*l_64) |= 0xA61E07D3L;
        for (l_76.f0 = 19; (l_76.f0 < 18); l_76.f0--)
        { /* block id: 37 */
            uint32_t l_129 = 0x97477C28L;
            uint32_t l_143 = 18446744073709551615UL;
            if ((((safe_lshift_func_uint8_t_u_s((+g_99.f2), (safe_rshift_func_int8_t_s_s((1L & (l_123 != &g_103)), (safe_mod_func_int16_t_s_s(1L, (l_126 , 65535UL))))))) < (65530UL | (safe_div_func_int32_t_s_s(5L, l_129)))) & (-2L)))
            { /* block id: 38 */
                struct S3 l_130 = {0UL,4294967295UL};
                struct S3 *l_131 = &g_49[3];
                struct S3 *l_132 = &l_130;
                struct S2 *l_134 = &g_110;
                struct S2 **l_133 = &l_134;
                (*l_132) = ((*l_131) = l_130);
                (*l_133) = &g_110;
                (*l_53) = (safe_mul_func_int8_t_s_s(0xEFL, 252UL));
            }
            else
            { /* block id: 43 */
                uint32_t l_137 = 1UL;
                int32_t l_138[2];
                struct S0 l_149 = {0x4E9E4B14L,423,871,982,0x3CL,988,6284};
                int i;
                for (i = 0; i < 2; i++)
                    l_138[i] = (-5L);
                (*l_62) ^= 7L;
                l_138[0] = (0xB4L < l_137);
                if (l_129)
                { /* block id: 46 */
                    struct S3 *l_140 = &l_76;
                    struct S3 **l_139 = &l_140;
                    (*l_139) = &g_49[3];
                    for (g_108.f4 = 0; (g_108.f4 == (-18)); g_108.f4 = safe_sub_func_int32_t_s_s(g_108.f4, 2))
                    { /* block id: 50 */
                        return &g_52;
                    }
                    l_143 &= g_103;
                }
                else
                { /* block id: 54 */
                    uint8_t *l_148 = &l_66;
                    uint8_t *l_153 = &g_99.f2;
                    if ((((safe_add_func_uint8_t_u_u((((*l_148) &= (safe_sub_func_int8_t_s_s(p_47.f1, (0xF9L < (-9L))))) == g_99.f1), (l_149 , ((*l_153) = (safe_mod_func_uint32_t_u_u((l_152[0] , p_47.f1), g_108.f6)))))) && (((l_154 , p_47.f1) , (-1L)) < g_25.f1)) | g_108.f6))
                    { /* block id: 57 */
                        return &g_52;
                    }
                    else
                    { /* block id: 59 */
                        uint32_t *l_166 = &g_49[3].f0;
                        (*l_57) ^= g_108.f6;
                        (*l_51) ^= (((*l_166) = (safe_add_func_int16_t_s_s(g_108.f1, ((*l_123) = (p_47.f0 < (safe_div_func_int8_t_s_s(0xA3L, (safe_rshift_func_uint16_t_u_s((safe_rshift_func_uint16_t_u_u(65535UL, 5)), (safe_sub_func_uint32_t_u_u(l_143, ((((p_47.f0 ^ ((&g_96 != (void*)0) == (+(+((g_165 = &g_103) == &g_103))))) | l_129) , 0x08092664L) ^ g_109.f0)))))))))))) || l_149.f1);
                    }
                }
            }
        }
    }
    return p_46;
}




/* ---------------------------------------- */
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_5, "g_5", print_hash_value);
    transparent_crc(g_25.f0, "g_25.f0", print_hash_value);
    transparent_crc(g_25.f1, "g_25.f1", print_hash_value);
    for (i = 0; i < 9; i++)
    {
        transparent_crc(g_49[i].f0, "g_49[i].f0", print_hash_value);
        transparent_crc(g_49[i].f1, "g_49[i].f1", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_52, "g_52", print_hash_value);
    transparent_crc(g_82, "g_82", print_hash_value);
    transparent_crc(g_90, "g_90", print_hash_value);
    transparent_crc(g_92, "g_92", print_hash_value);
    transparent_crc(g_96, "g_96", print_hash_value);
    transparent_crc(g_99.f0, "g_99.f0", print_hash_value);
    transparent_crc(g_99.f1, "g_99.f1", print_hash_value);
    transparent_crc(g_99.f2, "g_99.f2", print_hash_value);
    transparent_crc(g_99.f3, "g_99.f3", print_hash_value);
    transparent_crc(g_103, "g_103", print_hash_value);
    transparent_crc(g_108.f0, "g_108.f0", print_hash_value);
    transparent_crc(g_108.f1, "g_108.f1", print_hash_value);
    transparent_crc(g_108.f2, "g_108.f2", print_hash_value);
    transparent_crc(g_108.f3, "g_108.f3", print_hash_value);
    transparent_crc(g_108.f4, "g_108.f4", print_hash_value);
    transparent_crc(g_108.f5, "g_108.f5", print_hash_value);
    transparent_crc(g_108.f6, "g_108.f6", print_hash_value);
    transparent_crc(g_109.f0, "g_109.f0", print_hash_value);
    transparent_crc(g_110.f0, "g_110.f0", print_hash_value);
    transparent_crc(g_183.f0, "g_183.f0", print_hash_value);
    transparent_crc(g_218.f0, "g_218.f0", print_hash_value);
    transparent_crc(g_258, "g_258", print_hash_value);
    transparent_crc(g_332, "g_332", print_hash_value);
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 1; j++)
        {
            transparent_crc(g_345[i][j].f0, "g_345[i][j].f0", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

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

    }
    transparent_crc(g_395, "g_395", print_hash_value);
    transparent_crc(g_398, "g_398", print_hash_value);
    for (i = 0; i < 9; i++)
    {
        for (j = 0; j < 3; j++)
        {
            for (k = 0; k < 7; k++)
            {
                transparent_crc(g_404[i][j][k].f0, "g_404[i][j][k].f0", print_hash_value);
                transparent_crc(g_404[i][j][k].f1, "g_404[i][j][k].f1", print_hash_value);
                transparent_crc(g_404[i][j][k].f2, "g_404[i][j][k].f2", print_hash_value);
                transparent_crc(g_404[i][j][k].f3, "g_404[i][j][k].f3", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

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

    }
    transparent_crc(g_465, "g_465", print_hash_value);
    transparent_crc(g_466, "g_466", print_hash_value);
    transparent_crc(g_467, "g_467", print_hash_value);
    transparent_crc(g_518, "g_518", print_hash_value);
    transparent_crc(g_525.f0, "g_525.f0", print_hash_value);
    transparent_crc(g_525.f1, "g_525.f1", print_hash_value);
    transparent_crc(g_525.f2, "g_525.f2", print_hash_value);
    transparent_crc(g_525.f3, "g_525.f3", print_hash_value);
    transparent_crc(g_531, "g_531", print_hash_value);
    transparent_crc(g_532, "g_532", print_hash_value);
    transparent_crc(g_534, "g_534", print_hash_value);
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 6; j++)
        {
            for (k = 0; k < 4; k++)
            {
                transparent_crc(g_535[i][j][k], "g_535[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    transparent_crc(g_538, "g_538", print_hash_value);
    transparent_crc(g_557, "g_557", print_hash_value);
    transparent_crc(g_575, "g_575", print_hash_value);
    for (i = 0; i < 10; i++)
    {
        for (j = 0; j < 8; j++)
        {
            transparent_crc(g_591[i][j].f0, "g_591[i][j].f0", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_623.f0, "g_623.f0", print_hash_value);
    transparent_crc(g_623.f1, "g_623.f1", print_hash_value);
    transparent_crc(g_623.f2, "g_623.f2", print_hash_value);
    transparent_crc(g_623.f3, "g_623.f3", print_hash_value);
    transparent_crc(g_623.f4, "g_623.f4", print_hash_value);
    transparent_crc(g_623.f5, "g_623.f5", print_hash_value);
    transparent_crc(g_623.f6, "g_623.f6", print_hash_value);
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 3; j++)
        {
            transparent_crc(g_815[i][j], "g_815[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_901.f0, "g_901.f0", print_hash_value);
    transparent_crc(g_1054, "g_1054", print_hash_value);
    transparent_crc(g_1055, "g_1055", print_hash_value);
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 5; j++)
        {
            transparent_crc(g_1057[i][j], "g_1057[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
    return 0;
}

/************************ statistics *************************
XXX max struct depth: 1
breakdown:
   depth: 0, occurrence: 269
   depth: 1, occurrence: 55
XXX total union variables: 9

XXX non-zero bitfields defined in structs: 8
XXX zero bitfields defined in structs: 2
XXX const bitfields defined in structs: 0
XXX volatile bitfields defined in structs: 0
XXX structs with bitfields in the program: 52
breakdown:
   indirect level: 0, occurrence: 35
   indirect level: 1, occurrence: 7
   indirect level: 2, occurrence: 10
XXX full-bitfields structs in the program: 17
breakdown:
   indirect level: 0, occurrence: 17
XXX times a bitfields struct's address is taken: 36
XXX times a bitfields struct on LHS: 8
XXX times a bitfields struct on RHS: 43
XXX times a single bitfield on LHS: 10
XXX times a single bitfield on RHS: 51

XXX max expression depth: 47
breakdown:
   depth: 1, occurrence: 181
   depth: 2, occurrence: 42
   depth: 3, occurrence: 4
   depth: 4, occurrence: 1
   depth: 5, occurrence: 1
   depth: 6, occurrence: 1
   depth: 8, occurrence: 1
   depth: 9, occurrence: 2
   depth: 11, occurrence: 2
   depth: 13, occurrence: 1
   depth: 14, occurrence: 2
   depth: 15, occurrence: 3
   depth: 16, occurrence: 3
   depth: 17, occurrence: 3
   depth: 18, occurrence: 1
   depth: 19, occurrence: 1
   depth: 20, occurrence: 1
   depth: 21, occurrence: 3
   depth: 22, occurrence: 3
   depth: 23, occurrence: 1
   depth: 24, occurrence: 3
   depth: 26, occurrence: 1
   depth: 28, occurrence: 2
   depth: 33, occurrence: 1
   depth: 35, occurrence: 1
   depth: 47, occurrence: 1

XXX total number of pointers: 302

XXX times a variable address is taken: 479
XXX times a pointer is dereferenced on RHS: 115
breakdown:
   depth: 1, occurrence: 111
   depth: 2, occurrence: 4
XXX times a pointer is dereferenced on LHS: 145
breakdown:
   depth: 1, occurrence: 142
   depth: 2, occurrence: 3
XXX times a pointer is compared with null: 16
XXX times a pointer is compared with address of another variable: 8
XXX times a pointer is compared with another pointer: 7
XXX times a pointer is qualified to be dereferenced: 2276

XXX max dereference level: 3
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 957
   level: 2, occurrence: 39
   level: 3, occurrence: 11
XXX number of pointers point to pointers: 74
XXX number of pointers point to scalars: 173
XXX number of pointers point to structs: 46
XXX percent of pointers has null in alias set: 32.1
XXX average alias set size: 1.41

XXX times a non-volatile is read: 962
XXX times a non-volatile is write: 470
XXX times a volatile is read: 0
XXX    times read thru a pointer: 0
XXX times a volatile is write: 0
XXX    times written thru a pointer: 0
XXX times a volatile is available for access: 0
XXX percentage of non-volatile access: 100

XXX forward jumps: 1
XXX backward jumps: 5

XXX stmts: 174
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 36
   depth: 1, occurrence: 30
   depth: 2, occurrence: 27
   depth: 3, occurrence: 39
   depth: 4, occurrence: 20
   depth: 5, occurrence: 22

XXX percentage a fresh-made variable is used: 22
XXX percentage an existing variable is used: 78
FYI: the random generator makes assumptions about the integer size. See platform.info for more details.
********************* end of statistics **********************/

