//-------------------------------------------------------------------------------------------------------
// 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 = -50967;
b = 54674;
c = 29974;
d = 9892;
e = -8497;
f = -49120;
g = -20853;
h = 42972;
obj0.a = -11494;
obj0.b = 16155;
obj0.c = -31774;
obj0.d = 37220;
obj0.e = 15934;
ary[0] = 1681;
ary[1] = 44017;
ary[100] = -18468;
g = ((obj0.c + (d * obj0.e)) * (obj0.c - ((obj0.e | obj0.a) + (! b))));
if(((obj0.a * b) >= (obj0.c & obj0.b))) {
  c = ((((! -7965) ^ b) ^ h) ? (d + ((-23873 ? 46998 : -32329) * b)) : (-15157 | 23400));
} else {
  if(((obj0.b + obj0.b) > ((obj0.b ^ f) ^ (a * c)))) {
  } else {
    c = obj0.c;
    f = (((e | (- a)) & ((36556 > d) ? b : obj0.e)) | (((38311 ^ obj0.e) ^ (d * 29767)) - ((41648 - obj0.b) & (-52328 ^ obj0.d))));
  }
}
if(((((24663 ^ obj0.a) + obj0.a) ^ (g & d)) <= ((++ obj0.e) ^ (obj0.a ^ h)))) {
} else {
  if(((obj0.e & d) != (b ^ (obj0.e ^ (47455 - obj0.e))))) {
    obj0.a = obj0.b;
    if(((((c >= a) ? obj0.d : (b * -12590)) & 22402) > (obj0.a + (e ^ (! -65325))))) {
      obj0.b = ((((-32981 & c) + obj0.c) & ((-47465 * 31557) * (h ^ -38045))) ? (obj0.b | d) : (c | obj0.d));
    } else {
      a = ((((-45646 - obj0.b) * (-44690 * e)) | ((2049 | 42623) - 34028)) ^ (((g + 57507) | (32487 & obj0.c)) ^ ((6485 & d) * c)));
    }
    if(((obj0.e * ((-57423 > 3260) ? (f == obj0.b) : g)) == (((obj0.e > -34128) & d) ^ (28447 ^ (b + b))))) {
    } else {
      obj0.c = ((obj0.e & obj0.c) ? (((obj0.b | -10513) ^ (-32157 * a)) - ((43925 + 20425) ^ (g | obj0.d))) : (((15044 * 57943) ^ (obj0.a & f)) & ((-3481 != 63225) | (-34143 + -39127))));
      obj0.d = ((g * obj0.e) ? (((- c) | d) & b) : (f - (-2063 < h)));
    }
  } else {
  }
  obj0.b = f;
}
obj0.c = ((obj0.a ^ ((-5561 <= obj0.a) ? e : (c - obj0.d))) > (b & (21697 - 43209)));
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');
})();
