extern short var_1;
extern const short var_3;
extern unsigned long int var_9;
extern short var_13;
extern const unsigned long int var_15;
extern const unsigned long int var_37;
extern unsigned long int var_40;
extern long long int var_47;
extern short var_48;
extern const short var_54;
extern long long int var_79;
extern long long int var_81;
extern long long int var_94;
extern long long int var_95;
extern long long int var_701;
extern unsigned long int var_786;
extern short var_788;
extern long long int var_844;

struct struct_1 {
  short member_1_2 : 15;
  static long long int member_1_3;
};

extern struct_1 struct_obj_6;
extern struct_1 struct_obj_8;

void foo() {
  int a = var_3 <= 602154393864UL;
  if (var_81 ? 0 : var_3 && var_9)
    ;
  else {
    var_94 = 0;
    if (var_3 && var_48 || var_13) {
      if (var_48)
	var_95 = 0;
      short b((2364461588881776511UL + var_3) * (2 ? var_13 : 0) || var_1);
      struct_obj_8.member_1_2 = b;
      if (var_15) {
	if (var_81)
	  if (var_47)
	    ;
	  else if (var_40)
	    var_701 = 0;
      } else {
	if (var_40)
	  var_79 = 0;
	if (var_54) {
	  if (var_37)
	    var_786 = 0;
	  else
	    var_788 = 0;
	            struct_obj_6.member_1_3 =
		      (2364461588881776511UL + var_3) * (2 ? var_13 : 0);
	}
      }
      if ((2364461588881776511UL + var_3) * (2 ? var_13 : 0))
	var_844 = 0;
    }
  }
}
