//-------------------------------------------------------------------------------------------------------
// 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 = -27935;
b = 45349;
c = -3234;
d = 60182;
e = 40951;
f = -3328;
g = -10172;
h = 29060;
obj0.a = -9790;
obj0.b = 30050;
obj0.c = -48366;
obj0.d = -55970;
obj0.e = 14018;
ary[0] = -2451;
ary[1] = -60990;
ary[100] = 63088;
if(((e + ((c < a) - (obj0.b ^ a))) == (((h + d) * (62850 - obj0.d)) + obj0.b))) {
  if(((h + obj0.c) != (c ^ b))) {
    if(((((-23330 | obj0.a) == f) ^ a) >= ((g - (-2416 * -64117)) * (-3382 - (obj0.b <= 61693))))) {
    } else {
      f = (((- f) + ((37487 ? -58558 : -61122) * h)) ^ (f | (+ (obj0.e < c))));
      a = obj0.d;
    }
    h = ((obj0.c - ((45482 - a) + c)) ^ (15433 * obj0.b));
    if(((-41427 & e) >= ((! (obj0.a | -11697)) + 33349))) {
      d = ((((-26424 * 45278) * obj0.d) - obj0.b) <= (((b > a) * (++ f)) - (c - (f * d))));
      obj0.b = 17820;
      c = ((((12498 ^ d) & (obj0.a * f)) - ((- -15537) - (63774 ^ h))) ^ ((b | (-59559 - g)) | obj0.b));
    } else {
      d = e;
      obj0.b = f;
    }
  } else {
    if(((g | f) < (d * d))) {
      obj0.d = ((d + -18333) * ((-48587 * (a + -60728)) ^ obj0.c));
    } else {
      obj0.e = ((b | ((obj0.d != c) ? obj0.c : (-11914 == -26748))) | (((obj0.d <= d) + (- b)) - 14572));
    }
  }
  b = obj0.b;
  if((((b | (8671 <= 51426)) - ((-27679 ? -35512 : e) - e)) < (obj0.e * ((obj0.e < -36226) ? (obj0.c - -4161) : obj0.e)))) {
  } else {
    g = obj0.b;
    b = ((obj0.c - obj0.a) + (c - ((obj0.e - -44468) >= d)));
  }
} else {
  obj0.b = ((obj0.c + (- (++ b))) ? (e | e) : (obj0.d ^ ((-56545 ? 9457 : e) ^ (23582 > e))));
  if(((((-4333 - 8762) & f) & a) <= (f + (b < (obj0.c ? obj0.d : 52927))))) {
    d = b;
  } else {
    obj0.d = ((((c <= 28863) ? 54875 : f) + a) > (((47052 - a) + b) * (obj0.a & -23757)));
  }
  if(((((b | h) * obj0.a) & (e * (obj0.a & e))) > ((+ obj0.d) | g))) {
  } else {
    if(((obj0.d | 42365) >= ((h * (b & -34712)) | (-65333 - g)))) {
      obj0.c = e;
      a = 20742;
      d = obj0.a;
    } else {
      f = ((((f & f) & (-59417 | 12026)) ^ (f * (1073 | -4628))) ^ (d & obj0.c));
    }
    f = (((b + (e & 25323)) ^ ((+ h) ^ -7223)) ? ((obj0.a + (h + c)) | (34099 | e)) : ((obj0.c | (37353 ^ obj0.c)) & (obj0.c + (- -31599))));
    b = (((d - (+ f)) | obj0.b) & (e * (-18569 - obj0.d)));
  }
}
c = c;
g = (obj0.a++ );
if(((((+ -40738) * d) + ((-28283 <= -16463) & obj0.d)) >= (((-57713 - 15316) < g) - ((-4492 & obj0.e) * (e ? 62291 : d))))) {
  obj0.e = ((obj0.a * ((obj0.a >= h) ? obj0.c : (obj0.d + c))) - (((d == obj0.c) ? d : (obj0.a | obj0.a)) ^ d));
} 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');
})();
