//-------------------------------------------------------------------------------------------------------
// 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 = -24285;
b = 25753;
c = 42106;
d = -10425;
e = 58067;
f = 39376;
g = 34908;
h = 35679;
obj0.a = -24275;
obj0.b = 6263;
obj0.c = 43647;
obj0.d = -6179;
obj0.e = 34455;
ary[0] = 52988;
ary[1] = 17286;
ary[100] = -50303;
if((((f & (e * obj0.e)) | obj0.c) == ((obj0.a | (-37119 ? h : obj0.e)) | a))) {
  if((((- e) ^ g) != (f ^ a))) {
    g = ((((-59997 ? obj0.a : 46712) * (-28681 + 41953)) ^ (+ (obj0.b++ ))) < (((-38762 == -52874) ? (14961 != f) : (52992 != c)) - ((obj0.b & 38463) & (-61404 == -48788))));
    if(((((e != 54532) ^ a) * (f - b)) == (((33216 ^ obj0.e) * (58593 | obj0.a)) * (- a)))) {
    } else {
      obj0.a = (((++ a) * obj0.d) | (h + obj0.d));
      d = (+ ((! (629 - 39176)) & ((-5789 ? a : -7866) - (e | e))));
      c = obj0.a;
    }
  } else {
  }
  if(((-7645 + -22413) > (b - ((-15815 >= f) ? (33822 ^ d) : (-53332 ? 51817 : obj0.d))))) {
    if(((e & ((-29506 <= 2711) ? (f ? obj0.e : e) : obj0.e)) > (obj0.b | obj0.e))) {
      c = ((g | ((53762 > f) ? obj0.e : (42410 < c))) | (((-14868 ^ e) * obj0.d) ^ obj0.b));
      obj0.a = c;
    } else {
    }
    a = g;
  } else {
    if(((b - ((a & a) ^ obj0.c)) > (c | d))) {
    } else {
      obj0.b = ((((++ obj0.d) + (29760 ? -38334 : 47707)) ^ (44596 * (55607 <= a))) & (b & (! (+ -61488))));
      h = -24686;
      e = ((c + b) - (28651 * (9042 - (11540 + 23477))));
    }
    obj0.e = a;
  }
} else {
  obj0.d = ((d - (+ (-42593 & d))) & ((36393 ^ (g + obj0.c)) + obj0.b));
}
if(((d + ((-56259 != -56552) ? (-49165 - 10380) : (11022 > 47097))) != (obj0.b ^ obj0.c))) {
  obj0.c = obj0.d;
  if(((((d | 64338) & (27717 > b)) & ((obj0.c ? obj0.c : 35300) + (obj0.d > g))) >= (41741 ^ (+ obj0.a)))) {
    obj0.d = 15060;
    if(((((g & -3373) & (-37085 ? obj0.d : g)) - b) > (obj0.c & 17331))) {
      obj0.d = ((obj0.e & ((d != -40212) ^ c)) != (obj0.b - (b & d)));
    } else {
      c = ((((34824 | -58045) != (56460 ^ d)) + a) < (((obj0.d ? 49622 : -5847) * (+ c)) * 61812));
      c = obj0.b;
      obj0.d = c;
    }
  } else {
    if(((((36061 - f) | e) - f) != ((a | (9495 - obj0.c)) & b))) {
    } else {
      c = 2924;
      h = ((e - -62162) | ((+ 32969) + e));
    }
  }
  if(((((-63442 & c) * (obj0.a ? 17948 : -30380)) ^ (-62276 >= (+ 40646))) > ((obj0.e & b) ^ a))) {
  } else {
  }
} else {
  a = (((- (-25196 & 44576)) + obj0.d) - ((a <= (-23744 & g)) & 61728));
  obj0.d = 55386;
}
c = ((((-33064 ? -5851 : -51542) <= (obj0.d | -44235)) - ((obj0.c | -11721) ^ (obj0.b ^ e))) & (obj0.a * ((-31384 ? obj0.d : a) & c)));
if(((f + ((g - -50591) | (f >= f))) == ((- (38123 | -33494)) + ((e <= obj0.e) ? (obj0.a ^ e) : (+ -8934))))) {
  h = obj0.c;
} else {
  obj0.b = 46732;
}
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');
})();
