//-------------------------------------------------------------------------------------------------------
// 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 = 15831;
b = 29240;
c = -54213;
d = 39311;
e = -30630;
f = 7446;
g = 34731;
h = -24183;
obj0.a = -54995;
obj0.b = 44514;
obj0.c = 37401;
obj0.d = -50256;
obj0.e = 30818;
ary[0] = 35001;
ary[1] = -23744;
ary[100] = 11913;
if((((+ h) ^ ((d ^ -53103) ^ f)) == (h | ((g - -41204) * (16341 & 10446))))) {
} else {
}
obj0.a = obj0.a;
if((((+ obj0.d) + ((-51005 ? 11975 : h) - (61992 ^ e))) > (((37076 ^ 22741) ^ (obj0.a - -48191)) - obj0.c))) {
  if((((obj0.b * (obj0.c ^ c)) | (obj0.a - (53205 + obj0.c))) == (((56772 + c) > -21782) ^ ((++ g) - (d > 32408))))) {
    if(((((obj0.a <= 45780) ? (e++ ) : (13552 * b)) ^ (++ obj0.d)) > (d & a))) {
      obj0.e = (((obj0.d ^ a) * 24622) ^ ((g <= (obj0.a ? 25601 : obj0.e)) ^ b));
      d = (((! c) ^ ((b >= obj0.a) ? a : (32706 | g))) <= (((-65138 + c) & obj0.b) & ((-283 != c) == 39978)));
    } else {
    }
    if(((((obj0.a | f) * (-31989 ? -34536 : obj0.b)) - -2184) != (((16643 != -36751) ? 20961 : (obj0.a ^ 41251)) | (a > g)))) {
      obj0.c = 58290;
    } else {
      e = g;
      obj0.d = c;
    }
  } else {
  }
} else {
  if(((((23206 - d) ^ (g + -53636)) * ((296 & obj0.b) >= (f ? obj0.d : 1543))) != ((g + (g & -20169)) - 57885))) {
    if(((((29209 <= e) ? (obj0.a - d) : (e ^ g)) ^ a) != ((d + (64767 + -48205)) + ((-17860 + 39566) + (! -58239))))) {
      c = a;
    } else {
      obj0.c = 7144;
    }
    b = obj0.c;
    if(((59900 * -58310) <= (obj0.c * (obj0.e ^ obj0.c)))) {
      c = ((obj0.a + (+ (g | -39954))) ? (((45301 ? b : -40640) | (c | 38804)) | obj0.d) : (((-24762 + -25715) > d) ^ obj0.d));
    } else {
    }
  } else {
  }
  b = f;
  if((((+ (! 23921)) | ((+ obj0.c) - (obj0.c ? -52178 : obj0.e))) < (b * obj0.a))) {
  } else {
    obj0.c = ((c ^ (- f)) ^ (obj0.e ^ -25963));
  }
}
if(((d + f) >= (f ^ (e | obj0.a)))) {
  if(((obj0.d - d) != ((! obj0.d) ^ 37827))) {
    h = ((obj0.e - (9511 & obj0.c)) - (((-26889 != 4987) ? (12937 ? 36480 : g) : (21116 ^ obj0.d)) & -14922));
    a = ((h * ((53346 | e) + (a == 3191))) ? (c + (g | h)) : (((obj0.c ? 47218 : -45104) + h) * h));
    if(((((-38794 & d) | (-47663 | 1877)) | (h & -4652)) > ((obj0.b * c) | (e * (a - -7261))))) {
      obj0.e = ((obj0.d | g) ^ (((-34828 < -14044) ? (51173 * 29499) : (obj0.b * h)) | 50580));
      b = 49460;
      obj0.c = ((f + obj0.c) * ((h * obj0.c) * ((21593 <= g) ? b : (h | a))));
    } else {
      d = obj0.d;
      obj0.a = f;
      h = ((((29124 <= e) - (obj0.b ^ -53330)) * (g >= 44179)) * (-14674 & ((65282 >= -37931) ? (f + obj0.b) : (obj0.a & f))));
    }
  } else {
    d = obj0.c;
    obj0.c = ((obj0.a + obj0.c) & (((c + obj0.e) - (25631 != 58419)) * e));
  }
  obj0.e = c;
  obj0.b = ((obj0.a * ((-50310 == obj0.c) ? obj0.d : (h | obj0.a))) ^ (obj0.b * ((obj0.a >= c) ? a : (49638 | 7446))));
} else {
  h = ((obj0.d & (a - 30092)) == (c + 32060));
  obj0.c = ((a ^ (f - (f | 26750))) * (d + (c & (41286 + 3338))));
  if(((((f ? c : h) ^ (g ^ e)) ^ (obj0.c + (obj0.e & obj0.c))) >= (-44269 | 54382))) {
    if((((obj0.e | (obj0.d ^ h)) ^ ((e + a) == obj0.e)) > (((obj0.e ^ 34249) + (-52130 * b)) - e))) {
      obj0.c = -15379;
      obj0.e = (((obj0.a + b) ^ ((b | d) - (-10759 | obj0.d))) | (f - ((! 9220) < (e + -16624))));
      obj0.e = a;
    } else {
      c = ((((a + -56125) * h) * 14442) <= (obj0.d + a));
      obj0.a = (++ b);
      b = obj0.e;
    }
  } else {
    if((((+ obj0.d) | obj0.c) > ((! (-37250 + obj0.e)) ^ obj0.c))) {
      g = obj0.c;
      g = ((((13551 != e) ? (45140 + -32547) : e) ^ ((obj0.d & b) - (! d))) ^ (((! -38588) | obj0.d) + d));
      obj0.e = h;
    } else {
    }
    if(((((b <= obj0.a) ? (a ^ -25112) : (obj0.b++ )) ^ (h | g)) >= (((3320 * 29892) ^ b) + e))) {
      d = -41401;
      obj0.a = ((-62925 * (a - c)) - ((6586 - (e ^ 4985)) ^ ((f - -22296) - (! obj0.c))));
      e = obj0.d;
    } else {
      obj0.a = ((g ^ ((+ a) | (-25697 ? obj0.b : e))) + ((+ (e ^ h)) - obj0.d));
      obj0.b = h;
      b = a;
    }
  }
}
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');
})();
