//-------------------------------------------------------------------------------------------------------
// 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 = 6325;
b = 9241;
c = 45021;
d = 53854;
e = 12710;
f = -37472;
g = 10721;
h = -53333;
obj0.a = 51262;
obj0.b = -1209;
obj0.c = -60170;
obj0.d = 65501;
obj0.e = -20019;
ary[0] = -15329;
ary[1] = -50956;
ary[100] = 15196;
obj0.c = (+ ((+ obj0.e) & (h * f)));
if(((((obj0.b & -48257) + (-8749 > a)) + ((45444 ? b : obj0.d) * (63495 - 40949))) < ((g++ ) * ((-44219 + -26451) + d)))) {
  h = ((obj0.c * h) & ((g++ ) - ((obj0.d - 49905) + d)));
  if(((h ^ obj0.a) >= (c * (g + (-4733 & b))))) {
    b = c;
    f = ((((obj0.e < a) ? (-9994 | -12036) : 36339) ^ f) & (((h ? obj0.c : obj0.e) + (-44396 & obj0.c)) ^ d));
  } else {
  }
  d = d;
} else {
  if(((h ^ ((h * obj0.a) - obj0.c)) > (((b * 28253) & (obj0.d + 10724)) & ((obj0.d * -6282) - (++ b))))) {
    c = ((e + ((e + -46795) > (obj0.a & e))) + (((+ 436) ^ (b ^ b)) * obj0.d));
  } else {
    if(((-19248 + (! (++ obj0.e))) > (b - ((-55141 < c) | g)))) {
      c = ((((-29045 + -36755) * (obj0.d <= f)) * b) - (obj0.c * b));
    } else {
      obj0.c = ((((obj0.a + d) ^ b) + obj0.c) == (f ^ ((obj0.d * f) | (c + g))));
    }
    if(((((-63096 ? -24071 : 49886) & (26668 * 31921)) * ((-59898 ^ 62332) & g)) < ((e + (+ -50422)) | a))) {
      e = ((((obj0.a >= 12295) ? (a * -50795) : obj0.c) - ((50231 - a) | obj0.a)) ? (obj0.e & (h & obj0.c)) : ((b >= (f ? c : obj0.b)) - g));
      obj0.c = (! ((obj0.a | f) ^ obj0.a));
      h = ((7449 - ((-58004 ? a : 17884) & (-60210 & g))) ^ ((+ d) + obj0.e));
    } else {
      obj0.b = ((((obj0.b > g) + g) ^ (b ^ (40691 + e))) | (((f++ ) | 50043) & g));
    }
  }
  obj0.e = a;
}
obj0.d = d;
if(((((h > -4172) ? (35970 ? obj0.c : obj0.c) : (b & h)) | (obj0.e + (c ^ -34487))) < ((! (b - b)) + ((+ c) | obj0.d)))) {
} else {
  obj0.b = 39152;
  c = ((((g++ ) > (30247 + obj0.e)) | ((g ? obj0.d : obj0.e) & (d & c))) | (obj0.e & ((obj0.c & g) + obj0.c)));
}
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');
})();
