//-------------------------------------------------------------------------------------------------------
// 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 = 58299;
b = -46227;
c = -59962;
d = -40548;
e = -28164;
f = -27109;
g = 28864;
h = 47081;
obj0.a = 5229;
obj0.b = -10808;
obj0.c = -29323;
obj0.d = 7386;
obj0.e = 42394;
ary[0] = 30166;
ary[1] = 36759;
ary[100] = -24080;
if(((obj0.c - d) != (30097 & f))) {
  a = c;
} else {
  obj0.a = -23093;
  c = ((h ^ ((c ? 11976 : obj0.a) <= (-45223 == -6174))) + (obj0.b + ((g < d) ? f : g)));
  if((((-59329 > (e ^ -1474)) ^ obj0.a) > (obj0.b | ((obj0.c & -42186) >= (-45056 ? -64251 : obj0.a))))) {
  } else {
    if(((((h + obj0.d) - (-26310 ? a : obj0.e)) - ((-39699 ? obj0.d : obj0.b) <= -11103)) >= ((b * obj0.a) + obj0.d))) {
      obj0.a = obj0.b;
    } else {
      d = obj0.a;
      obj0.a = (! (f | e));
      d = g;
    }
    if(((a & d) == (((obj0.b + e) ^ (f - -6569)) | (-60298 + 48682)))) {
      obj0.a = (((87 + (obj0.b + obj0.d)) ^ ((d ^ 48077) - obj0.c)) ? ((obj0.b + 58116) & (c & (+ -62439))) : (((obj0.c * obj0.b) * (++ h)) | obj0.e));
    } else {
      b = (((obj0.c | (-12560 >= 51556)) ^ ((-35160 * -28236) > (12534 >= 64745))) * (h | a));
    }
  }
}
obj0.e = (! ((-61369 + (h ? -18012 : -28755)) & b));
if(((4831 & ((obj0.e | -60196) + (a + e))) != (obj0.a | g))) {
  if(((d + (b | obj0.e)) > (a & obj0.e))) {
  } else {
  }
  if(((d * ((obj0.b > 33105) ? (obj0.b != a) : a)) >= (a | (a - (-33073 ^ obj0.c))))) {
    if((((h + obj0.c) | (obj0.e | (d & b))) <= (((b + h) + obj0.d) * obj0.e))) {
    } else {
    }
  } else {
    obj0.c = (++ obj0.b);
    if(((((obj0.d ? obj0.b : g) & e) & ((obj0.e > f) ? (18632 & -13708) : (obj0.b ? -50169 : 17338))) != (e & ((5425 ? d : 48965) * (obj0.a + 24954))))) {
      obj0.e = (((g + (g++ )) * b) ? ((obj0.c - (-31774 ^ 10845)) * obj0.e) : ((obj0.b ^ (-51949 - b)) ^ ((c * 41521) * (obj0.e + f))));
      e = ((((20779 ? 42938 : 9732) | e) - g) - (55792 & -9074));
    } else {
      b = ((obj0.e & ((-60717 != -53629) ? (25308 != -34175) : obj0.b)) - (((b < d) ? obj0.d : (-13893 != 2435)) | ((h != 53289) - (a >= b))));
      h = (+ (d - e));
    }
    if((((a - f) | g) != (((obj0.a > 41756) ? (13545 + 3376) : obj0.d) - 28268))) {
      obj0.b = ((((62111 ^ -9029) & (-29236 & 22516)) - h) & (c * ((b != e) ? e : g)));
    } else {
      obj0.a = ((((a * h) - c) & ((obj0.e ^ h) ^ (f & obj0.a))) + (h * h));
    }
  }
  if(((((-32131 != obj0.c) ? obj0.b : obj0.b) | a) > (((obj0.d < obj0.e) ? e : (obj0.e - b)) + obj0.a))) {
    obj0.e = obj0.b;
    h = a;
    e = ((((17172 <= -1576) - (g - -55902)) - (+ g)) - (g - ((! 42090) + c)));
  } else {
    if((((+ (10401 ? d : obj0.d)) - (h - (c > obj0.b))) == (9207 + (h & 44037)))) {
    } else {
      a = obj0.e;
      b = b;
      g = ((obj0.d * ((obj0.d >= obj0.a) & (-30841 & 43204))) | (((b ^ -50535) | (g <= -24772)) - obj0.a));
    }
    obj0.d = ((((e > -44686) ? (b - b) : obj0.e) - ((57505 + obj0.c) > (! -18156))) ? (obj0.d | h) : ((obj0.b | (-25834 ^ -39989)) ^ e));
    if(((((++ b) >= (56 - 41203)) & h) != (b & 34557))) {
      d = ((-6831 | ((obj0.d | 47003) * (g * -22978))) * (((13316 ? -13466 : g) * (- -59670)) & (obj0.e ^ (-22653 > obj0.d))));
    } else {
      b = ((((e ? b : 6112) | g) * ((h++ ) + b)) | ((10437 + obj0.c) + h));
      a = ((((f > -60411) ? b : -28676) & b) * (e * ((e >= b) ? c : (-47973 ? -28350 : 47989))));
      e = (((! c) - h) ^ ((obj0.c * -60946) ^ e));
    }
  }
} else {
  if(((((+ g) - b) ^ obj0.d) != (((-43751 | -64125) ^ 4378) - -44230))) {
  } else {
    c = ((obj0.e + obj0.c) * (b * 29961));
    f = ((obj0.e | obj0.a) * (((51074 >= -61659) ^ (47393 ? a : obj0.e)) | (-3367 ^ -45094)));
    g = ((obj0.e & (e != obj0.e)) | (28714 | (h - (++ obj0.c))));
  }
  if((((e + -64427) * -49651) < (-16351 + ((e == 40905) ? obj0.b : obj0.d)))) {
    d = obj0.c;
  } else {
    if(((((-1200 * -47020) * obj0.c) | (obj0.d | g)) < (-54220 ^ -59282))) {
      h = ((obj0.c - -11368) + (((h + obj0.a) + e) - f));
      g = a;
    } else {
      obj0.a = ((((-33602 > h) ? (-8351 ^ c) : f) ^ d) - (((obj0.c > -17867) & -16088) & c));
    }
    obj0.c = (- (37018 & (g & (-3431 ? obj0.a : h))));
    if(((obj0.d - ((obj0.b++ ) + e)) <= (-20825 * (g <= (f ? 47199 : 34990))))) {
      obj0.b = ((((e | -53809) > (f * -62199)) | g) != (g - a));
      a = (++ g);
      obj0.d = (((-11750 ^ -12685) - (obj0.d * e)) ? (obj0.a + obj0.c) : (obj0.e - (f != (obj0.b ^ h))));
    } else {
    }
  }
  g = h;
}
obj0.c = -17251;
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');
})();
