//-------------------------------------------------------------------------------------------------------
// 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 = -31346;
b = 3166;
c = -40099;
d = -45806;
e = -62808;
f = 48357;
g = -48048;
h = -64604;
obj0.a = -33984;
obj0.b = -24512;
obj0.c = 14207;
obj0.d = -16190;
obj0.e = -42787;
ary[0] = 46835;
ary[1] = 31231;
ary[100] = 64863;
if(((f & (obj0.e != (56947 ? obj0.b : obj0.e))) <= (((b ? b : -34974) | (a > 28925)) + d))) {
  if(((((h - -36872) * (48755 | 55330)) & d) >= ((b & (++ f)) & (e * obj0.c)))) {
    g = (((1641 < (-26341 ^ a)) & -46627) & (obj0.d ^ a));
    if((((obj0.c + (-3363 & -45034)) + (++ obj0.d)) > (f | ((obj0.d >= -55864) ? f : d)))) {
      obj0.e = ((obj0.c * a) < ((b * (e ^ 39995)) ^ (f ^ 37911)));
    } else {
      g = ((52366 * (! f)) == (((obj0.e * 48654) * 25590) & (c ^ (-60973 + obj0.d))));
    }
  } else {
  }
  e = g;
  obj0.d = b;
} else {
  a = ((((-30865 + obj0.a) - (46950 ^ h)) + h) ^ (c + (obj0.d | f)));
  e = ((14378 * obj0.c) - ((g ^ (c & 31997)) + c));
  obj0.a = ((obj0.b * (obj0.e - (49806 & 34192))) ? ((g >= (f & c)) & (obj0.c >= obj0.d)) : (obj0.c * f));
}
d = a;
if(((((++ a) * (g - obj0.d)) + ((obj0.a ^ 42380) + a)) < (a + g))) {
  g = ((((f + -38784) | (obj0.c * obj0.e)) * obj0.d) + (b & c));
  obj0.a = a;
  if(((g * (- c)) != (b ^ ((-9558 & 7030) + (c & -16883))))) {
    if(((-62805 - e) <= (((b ? b : obj0.e) == -57764) - g))) {
      a = ((g & -48828) < (b + h));
    } else {
      obj0.d = ((54396 - ((-35901 | 58324) | c)) & (obj0.b & (obj0.e & obj0.a)));
      obj0.a = obj0.b;
      obj0.e = 39359;
    }
  } else {
    h = obj0.c;
  }
} else {
}
obj0.c = ((b | a) * (((6841 == -64688) ? (-46821 - 28331) : (c ^ 33030)) - ((e - e) & c)));
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');
})();
