//-------------------------------------------------------------------------------------------------------
// 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 = -47843;
b = 16739;
c = -14850;
d = -11809;
e = 18603;
f = -18860;
g = -44531;
h = 23840;
obj0.a = 45202;
obj0.b = 53839;
obj0.c = 43727;
obj0.d = 65433;
obj0.e = 28700;
ary[0] = 1567;
ary[1] = 13822;
ary[100] = 38781;
b = g;
if(((-64771 | (obj0.a | (46499 + -31131))) > (obj0.b | ((obj0.e | 46301) + (-40224 ? obj0.b : c))))) {
} else {
}
if(((((-17956 & -21294) - (-56443 + obj0.e)) ^ ((h - c) * (65140 + obj0.e))) >= ((c < f) | ((d ? -63344 : a) ^ b)))) {
} else {
  b = ((e ^ (43575 * (+ -44319))) ^ (e + ((-52196 & g) - obj0.a)));
  if(((((36189 * -23727) ^ -38432) * 16840) == (obj0.c ^ (obj0.d * (-23567 - -14158))))) {
    if(((((21628 * 22587) * (obj0.e ^ g)) * obj0.b) == ((! (f * -22389)) - (e - 32485)))) {
    } else {
    }
    obj0.c = ((f ^ ((f - -25595) ^ (-62255 ^ 30054))) & ((h | b) ^ (! 10587)));
    f = (+ (((-20510 * obj0.c) & e) | ((g >= -17991) ? (-3850 | obj0.c) : h)));
  } else {
    a = obj0.a;
    if(((((43527 - -17320) * (d - obj0.e)) ^ obj0.c) < (b * -51725))) {
      obj0.b = ((((c == b) ? (e ^ -15289) : a) + ((obj0.c ? c : -9093) != (g & 24416))) ^ ((obj0.d + obj0.d) - (c != (f | obj0.d))));
    } else {
    }
    if(((((obj0.b ^ 53422) * obj0.d) + ((obj0.a | obj0.a) <= obj0.d)) <= (g * f))) {
      b = obj0.b;
      g = b;
    } else {
      e = 34146;
      f = ((((b + -52466) == h) + ((31796 * 58482) | (-55264 ? 2966 : -38990))) ^ (((-25384 ^ 51632) - g) - 64546));
      obj0.c = (a++ );
    }
  }
}
if(((a | g) != (g - (b > (-456 * -39980))))) {
  if(((((-40158 - obj0.d) - obj0.c) + e) != (-29327 + ((! e) & (obj0.e ^ obj0.c))))) {
    b = obj0.b;
    if(((c ^ c) <= ((g++ ) ^ obj0.b))) {
      obj0.a = ((a | obj0.c) > (((53297 != 60201) ? d : 51940) ^ ((23304 ? obj0.d : g) * f)));
    } else {
      g = c;
      e = obj0.b;
      g = ((((1827 - -25507) ^ (50351 ^ 16154)) + (31401 | c)) | (((-58953 >= obj0.e) ? a : e) * (h + (-43516 ^ -18106))));
    }
    obj0.e = obj0.a;
  } else {
    obj0.c = (((c * obj0.e) & e) + (-4427 | obj0.a));
    if(((h - ((e >= 29134) ? (26737 ? d : 54250) : (obj0.b < obj0.a))) < ((obj0.d | h) ^ (! d)))) {
      f = (((+ b) | -10606) - (e + (h & a)));
      g = c;
      a = b;
    } else {
      d = ((((-64263 != obj0.a) ? (obj0.b | -57069) : obj0.d) + (+ obj0.e)) & (-41728 * ((3028 * obj0.b) - obj0.d)));
    }
    if((((+ obj0.c) | (obj0.c <= (obj0.e ^ 13556))) >= (d | ((7245 < 39144) - obj0.e)))) {
      h = d;
      f = g;
      obj0.c = ((((-38224 + obj0.e) & obj0.e) | ((f * -19208) - 58978)) ^ ((obj0.c * (c | obj0.c)) + e));
    } else {
    }
  }
  if(((((33042 < -61254) ? (-5263 - 40368) : (11653 ^ g)) * (obj0.d & (obj0.c - -44037))) != (35863 * obj0.b))) {
    if(((g - (f | obj0.b)) < (((-52082 | g) - f) | (obj0.e | (4994 + obj0.a))))) {
      obj0.b = d;
      b = (d++ );
    } else {
    }
  } else {
    f = (((obj0.c ^ (obj0.b < b)) * (! (obj0.c ? -58390 : -17571))) * (((-44286 * 9173) <= a) * ((++ f) ^ e)));
  }
} 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');
})();
