//-------------------------------------------------------------------------------------------------------
// 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 = -17275;
b = 28147;
c = 34720;
d = 59991;
e = 40394;
f = 26324;
g = -46657;
h = 16180;
obj0.a = 11417;
obj0.b = 28952;
obj0.c = -64354;
obj0.d = 47147;
obj0.e = 6229;
ary[0] = -48304;
ary[1] = 49284;
ary[100] = -18923;
e = ((((7337 & -34928) | (-19544 * -13562)) + obj0.a) | (e ^ (++ c)));
if(((((e < c) + -12584) ^ ((-12027 | -30554) - (2432 + 40679))) <= (h * obj0.d))) {
  c = ((obj0.d | (-36129 * (36525 < -52816))) >= (b + f));
} else {
  if(((((-9548 * e) ^ obj0.a) | e) >= (e - ((+ 42271) + g)))) {
    if(((a - g) < (a + ((g | 62319) + -930)))) {
      a = d;
      obj0.a = (+ ((b - (g ^ a)) * d));
    } else {
      f = ((-18127 | ((a++ ) | obj0.c)) > ((b & e) & (-12363 ^ (-14897 + -4017))));
      h = d;
    }
    if(((((obj0.b <= g) | (-42154 - obj0.e)) & (obj0.c & c)) < ((obj0.c & (g & e)) * (-34008 < b)))) {
      obj0.d = ((obj0.c + (h & (h & -11558))) ^ (obj0.e | (obj0.d - (f * -45524))));
      a = (((obj0.a & (20211 | obj0.e)) & ((-31569 ^ 34857) * (b | h))) != ((obj0.c + (obj0.c ? 63547 : h)) - (f & c)));
    } else {
    }
    if((((h - (35692 ? b : 40476)) & ((56516 + 59588) * d)) < ((b ^ (obj0.a - -17486)) + ((h - h) | (obj0.a - 53104))))) {
      a = (((- obj0.a) ^ ((d ^ 41257) ^ (g - obj0.d))) & (((27393 ^ b) ^ (b ? b : e)) + ((-34921 & -28846) - e)));
      g = ((obj0.b * ((-19316 <= obj0.c) ^ (56185 | e))) + (((b - obj0.c) > (52994 <= 21732)) & -44201));
    } else {
      obj0.a = ((obj0.c * ((9446 < 62683) != obj0.c)) > (((h < 33795) ? (-12168 > c) : (63265 & 18935)) - ((47956 ^ -32265) * (obj0.c * g))));
      e = f;
    }
  } else {
    obj0.a = ((31871 + ((-38709 | f) - (h - -63557))) ^ (((11217 * obj0.b) ^ -42422) * ((-35882 <= obj0.e) ? (g * f) : (h <= 34741))));
  }
}
e = (((! (-21232 | c)) * obj0.a) * (obj0.d ^ obj0.d));
if(((((-53081 < obj0.c) ^ (-33923 - 22367)) + obj0.b) != (a ^ ((64238 <= obj0.c) | (-49406 & -62064))))) {
  obj0.d = obj0.c;
  if(((((! -1381) + obj0.c) & ((32354 ? -53028 : -37073) + (c++ ))) > (obj0.b * c))) {
    if((((+ (obj0.a ? 40172 : g)) & d) >= (h | ((56066 + d) * obj0.e)))) {
      obj0.c = ((((b < -39042) ? a : (23017 <= obj0.a)) ^ (f + (+ obj0.e))) ? (((c == g) ? (h * b) : (obj0.d ? e : -64597)) + ((h <= obj0.d) ? (49751 + f) : (a++ ))) : (obj0.c + (b >= obj0.d)));
      obj0.c = (((h == 33032) * f) ? ((h ^ obj0.d) - (- -55774)) : ((d * (62815 + 32532)) | (++ d)));
    } else {
    }
  } else {
    if((((b <= c) * obj0.c) != (-50375 ^ ((-37364 | obj0.a) & b)))) {
    } else {
    }
    obj0.d = b;
    c = (((obj0.b & e) * ((obj0.d < g) ? (43475 * obj0.b) : (e | g))) | (((56631 < obj0.a) * obj0.a) ^ -17001));
  }
  c = (((a > 8965) - e) ? (((h + obj0.d) | obj0.c) | (-21923 > d)) : (obj0.e | ((63088 != -48773) ? d : (7808 & 43278))));
} 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');
})();
