//-------------------------------------------------------------------------------------------------------
// 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 = 22867;
b = -10376;
c = 62796;
d = 12428;
e = -61105;
f = 40485;
g = -59267;
h = -45317;
obj0.a = 30876;
obj0.b = 60217;
obj0.c = -63656;
obj0.d = 58014;
obj0.e = -11565;
ary[0] = 23150;
ary[1] = 11053;
ary[100] = 34639;
obj0.a = e;
a = ((-58887 * obj0.c) * (((+ obj0.e) & (a > b)) ^ (obj0.e > (52927 - 35717))));
if(((obj0.d | obj0.a) < (obj0.e * d))) {
  if(((g | (obj0.c * h)) < ((obj0.d | (-60567 * c)) * g))) {
  } else {
    if(((((e ? 25940 : f) | a) ^ obj0.d) <= (((-39693 & -2694) | d) + ((- d) | obj0.a)))) {
    } else {
    }
    if((((obj0.d ^ 30245) | obj0.d) < (39509 & ((obj0.e * 49331) & c)))) {
      obj0.a = ((obj0.a - (! (63388 == h))) | (((-37094 - b) & (27397 * 26291)) ^ (c > a)));
      f = ((((- obj0.a) ^ (obj0.e | -21136)) - ((obj0.c != obj0.a) ^ (28646 - -36524))) * (((1954 < f) | b) * (d++ )));
    } else {
      f = obj0.e;
      obj0.b = ((((obj0.c ^ c) & (10132 ? obj0.e : obj0.b)) - obj0.e) ^ (((e == -5683) | d) | (g * h)));
      f = ((obj0.a | (obj0.a * d)) >= (((-61643 - 24791) & a) * (f != (33203 * h))));
    }
  }
} else {
}
if(((d + obj0.a) <= (obj0.b + (f > (! 48096))))) {
  obj0.c = ((((obj0.c | b) <= (2586 ? -35137 : g)) + obj0.a) | ((a | d) * (12699 | -13098)));
  obj0.d = (- (d * (g + (-54405 < -64144))));
} else {
  d = f;
  if((((-24371 | (obj0.b - 45585)) & ((h ^ c) | (-64996 & obj0.b))) <= (c + a))) {
    if((((-16877 > obj0.e) + obj0.a) < (((-57988 <= d) + (-35349 ^ 31984)) - ((b < -59951) ? (-43545 + 7727) : 33986)))) {
      g = ((c & ((e <= 63573) ? obj0.a : e)) * (((h ^ 5213) | (obj0.a <= 44252)) * (obj0.d + b)));
    } else {
      obj0.d = ((c - ((-27305 >= g) ? (obj0.d | 14292) : (e ? b : 11339))) != ((+ c) + b));
      b = ((a + (c >= obj0.d)) | (48065 + ((a <= d) ? e : h)));
      obj0.b = (((17225 + (! -37645)) & ((g & f) & obj0.e)) - (((obj0.c ? -61449 : 26359) * f) + obj0.e));
    }
  } else {
    obj0.a = ((g * c) + (((g - b) ^ a) | obj0.e));
    g = -20388;
    if(((g ^ d) <= ((obj0.d | (-50133 | -35238)) + ((20201 | obj0.a) & c)))) {
      e = -60641;
    } else {
      obj0.b = e;
    }
  }
  if(((obj0.e & ((32721 ? d : obj0.b) ^ (h | e))) <= (-62852 | ((obj0.e > obj0.b) * (obj0.b >= -50518))))) {
    e = obj0.b;
  } 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');
})();
