//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------

(function() {
var ary = new Array(10);
var obj0 = new Object();
var a;
var b;
var c;
var d;
var e;
var f;
var g;
var h;
a = -43681;
b = -2156;
c = -3636;
d = 46151;
e = 10301;
f = -35555;
g = 42581;
h = -29385;
obj0.a = -906;
obj0.b = -34331;
obj0.c = 26684;
obj0.d = 51386;
obj0.e = -13440;
ary[0] = -35255;
ary[1] = 16153;
ary[100] = -35445;
if(((c | c) != ((-25085 + (-2262 ? b : obj0.d)) * ((a < obj0.e) ? obj0.a : obj0.a)))) {
  if((((+ g) * g) < ((f - (obj0.c ? obj0.c : 50171)) + ((obj0.b > e) ? -17568 : d)))) {
    if(((((obj0.e < 4863) ? (26563 + -26116) : (39167 * obj0.a)) + obj0.c) > (obj0.c & ((-7971 <= obj0.a) & (b & 44400))))) {
      b = b;
      f = ((((54952 == -52794) - (d | -4496)) - ((23667 - obj0.a) ^ obj0.a)) * ((c ^ (-23663 <= g)) * (obj0.a * obj0.e)));
    } else {
    }
    f = ((d * (- obj0.a)) + (((65360 ^ 7252) != (++ g)) * ((obj0.b++ ) - (-23173 & -47883))));
    obj0.e = ((((20019 <= 26174) ? e : (f * -15071)) & ((obj0.d + b) | (19135 ? -21580 : d))) & (obj0.b | e));
  } else {
    if(((obj0.c & ((6321 + e) & h)) <= (((d <= b) ? (obj0.d | e) : -61241) | (b + obj0.c)))) {
      a = obj0.e;
      obj0.c = ((c ^ (+ obj0.d)) | ((- (-34841 >= -40756)) & ((-6501 + 42439) + (a & 42874))));
    } else {
      a = (- (((c - 4426) * (d < e)) | (obj0.d + (obj0.c * -41827))));
    }
  }
} else {
  g = ((((-51208 != 63248) <= (obj0.b ^ obj0.b)) - (c ^ f)) | (-25134 & 36355));
  e = (! ((a ^ f) - (e++ )));
}
g = ((obj0.b - ((f * -48503) * obj0.b)) & (h & c));
d = ((d * obj0.a) - (b & ((f < obj0.c) ? (+ c) : (++ obj0.c))));
if((((+ obj0.a) | ((38490 ^ -23463) & 63577)) > (obj0.c & ((43658 | f) & (-23818 | -57119))))) {
  if(((((obj0.e != -15545) ? obj0.e : (b ? -60075 : 45340)) | ((g >= -35730) ? (obj0.e * a) : (28834 == obj0.c))) < (((11560 + obj0.b) <= (e ^ -42639)) | (g ^ (c + a))))) {
    if(((f & f) >= (((4553 ? b : d) <= (-48027 - h)) | obj0.b))) {
      f = ((((52962 | 17511) - (++ e)) | 25301) < ((obj0.c++ ) ^ c));
    } else {
    }
  } else {
    if(((obj0.b * (f - d)) == ((a & (42526 ^ a)) ^ obj0.a))) {
      obj0.b = (+ ((obj0.b - f) - b));
      g = -22671;
    } else {
      b = h;
      c = g;
      f = obj0.d;
    }
    if(((((57321 | a) ^ g) + (- (obj0.b + obj0.b))) < (obj0.c + obj0.e))) {
      e = (((obj0.e++ ) * g) | (((15942 != b) ? (40946 - -36105) : (obj0.d != f)) - (+ (-47540 ? -23673 : h))));
      e = ((obj0.d ^ ((5014 ^ -29284) + (obj0.b != f))) ? (obj0.c ^ h) : ((c > (! 25730)) & obj0.a));
    } else {
      obj0.d = ((((obj0.a ? -24257 : 1628) & (e * 4579)) | ((56946 <= obj0.d) ? (-43876 != g) : (34971 - -13657))) & (((e >= obj0.e) ? (obj0.c & h) : (37601 - a)) * (a++ )));
      e = (((b | g) - 49516) + (((13743 != 38873) ? (43216 + 15212) : -47579) - c));
    }
    f = b;
  }
  b = (- (obj0.e & ((-60462 >= -21011) ? (! 44942) : d)));
  f = a;
} else {
}
WScript.Echo("a = " + (a>>3));
WScript.Echo("b = " + (b>>3));
WScript.Echo("c = " + (c>>3));
WScript.Echo("d = " + (d>>3));
WScript.Echo("e = " + (e>>3));
WScript.Echo("f = " + (f>>3));
WScript.Echo("g = " + (g>>3));
WScript.Echo("h = " + (h>>3));
WScript.Echo("obj0.a = " + (obj0.a>>3));
WScript.Echo("obj0.b = " + (obj0.b>>3));
WScript.Echo("obj0.c = " + (obj0.c>>3));
WScript.Echo("obj0.d = " + (obj0.d>>3));
WScript.Echo("obj0.e = " + (obj0.e>>3));
WScript.Echo("ary[0] = " + (ary[0]>>3));
WScript.Echo("ary[1] = " + (ary[1]>>3));
WScript.Echo("ary[100] = " + (ary[100]>>3));
WScript.Echo('done');
})();
