//-------------------------------------------------------------------------------------------------------
// 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 = 20701;
b = -41899;
c = 37977;
d = 37465;
e = 14074;
f = -10353;
g = -54007;
h = 50722;
obj0.a = -16631;
obj0.b = 16527;
obj0.c = 14913;
obj0.d = 15426;
obj0.e = -43896;
ary[0] = 53719;
ary[1] = 51346;
ary[100] = 29932;
if((((c - (d + obj0.c)) & (obj0.e < f)) <= ((d * (5729 - b)) - (b - (d ^ -24317))))) {
  c = g;
  f = ((((c == b) ? obj0.b : obj0.d) & e) | (b & (-62703 ^ (b - b))));
} else {
  if(((f - (obj0.e - (-42639 ? 47752 : 21976))) != (e & d))) {
  } else {
    if(((-5852 ^ ((-52160 & 59872) ^ obj0.e)) <= (-31259 | (obj0.d <= obj0.a)))) {
    } else {
    }
    if(((((-11117 + f) & d) * h) > (c + ((6646 & obj0.d) * (f ? 3162 : 8578))))) {
    } else {
      obj0.c = ((((b <= 62411) ? obj0.a : obj0.a) & obj0.a) + (obj0.a ^ 47839));
    }
  }
  if(((21716 & (e ^ obj0.d)) > (26624 & (f > (b++ ))))) {
    if((((obj0.b + obj0.e) & ((21337 ? obj0.b : g) - d)) != (obj0.e + -3140))) {
      obj0.e = g;
      g = ((((e ^ 49941) > (-52321 + c)) - -18217) ^ ((f + (g * e)) - d));
      obj0.b = c;
    } else {
    }
    b = (+ ((obj0.b | -63555) | (e * (61956 ^ 16652))));
  } else {
    if(((d - (a - obj0.b)) < (f | e))) {
      h = (((obj0.a - b) | (obj0.a | -7981)) ? (((f > -5100) ? (+ 45101) : (- obj0.e)) & obj0.b) : (41621 - (c * (56033 < -16297))));
      obj0.a = e;
      obj0.a = (((obj0.b & e) - ((+ obj0.b) <= (d >= g))) * ((obj0.d + obj0.d) * g));
    } else {
      b = (((obj0.a ^ (54508 * -50279)) * -61946) ? (obj0.b | (-65213 <= e)) : (((obj0.c | f) ^ b) & b));
      g = obj0.a;
    }
  }
  if(((((49707 * b) & g) & e) != (obj0.d | ((17157 & f) | c)))) {
  } else {
    h = (((obj0.c + (40058 * c)) ^ (++ b)) ? (((b != -33248) ? (2787 - obj0.a) : obj0.a) & obj0.e) : (f * obj0.b));
    c = obj0.a;
  }
}
if(((h * ((-2718 ? -44368 : -4399) - 59797)) != (((f + obj0.d) | (-41737 - obj0.a)) * (- obj0.e)))) {
  if((((-31594 | (57 > b)) & -57796) >= (((h ^ 35980) >= (36106 | 51330)) + ((obj0.b & 37686) ^ c)))) {
    if(((e - ((-56468 != obj0.e) ? obj0.e : (33907 | e))) > (((4162 == d) ? c : (31266 & -59124)) | f))) {
      h = ((obj0.a ^ (7707 != (19754 & c))) & ((e * d) ^ ((obj0.c <= 38161) ? (c | -39740) : (obj0.e ? -24998 : 57585))));
    } else {
      obj0.b = ((e * (obj0.a > b)) & (((obj0.e - h) < obj0.e) ^ -19701));
      a = obj0.e;
    }
    e = obj0.d;
  } else {
    obj0.b = ((h + c) >= (c + obj0.c));
    obj0.d = ((obj0.b | ((f > -16964) ? (d + -56659) : (b < f))) ^ ((58317 & 26822) + f));
  }
  h = f;
} else {
}
g = obj0.e;
if(((((26831 ? obj0.e : -57441) * (c ^ f)) | ((d & 17870) + (obj0.a++ ))) != ((-1131 * d) ^ (57047 >= b)))) {
  h = ((e * obj0.a) & (((g == 47092) ? (50082 - 32048) : (obj0.b | e)) | (obj0.b <= f)));
  if(((40617 | 14816) != (h | ((g < c) ? (- f) : (e ? -21208 : obj0.b))))) {
    f = ((d - ((g <= 9919) ? h : (d | -36975))) > (obj0.e - ((a <= -57475) ? d : obj0.c)));
  } else {
  }
} else {
  if(((obj0.d ^ obj0.b) == (g & b))) {
    if((((c - (c ? d : h)) * 2135) > (-46368 - ((e++ ) & (obj0.a | d))))) {
      obj0.a = ((c & ((-33329 & -36483) | (-41772 & c))) - (((40848 ^ -28391) | c) * ((f + -13324) | (24257 - obj0.e))));
      obj0.d = obj0.d;
      b = (((b ^ (-12136 != -8010)) & -13635) & (c - f));
    } else {
    }
  } else {
    f = b;
    h = obj0.d;
    a = ((-11600 + obj0.d) & (-26174 ^ ((34341 ? 4332 : 27918) != (g >= a))));
  }
  if(((obj0.b * (+ (-49616 ^ obj0.b))) >= (e | -16388))) {
    if((((obj0.e & d) | (-21799 + c)) <= (((b > g) ? c : (a + a)) - ((-8283 ^ obj0.e) | obj0.b)))) {
    } else {
    }
    if(((((obj0.d ^ -61794) ^ (obj0.d - f)) * (b + (27280 - c))) == (f | ((-20712 | -4521) + (b != b))))) {
    } else {
      obj0.c = (! (e ^ (c >= g)));
      h = ((a + obj0.b) ^ ((obj0.d | obj0.e) + (! g)));
    }
    if(((obj0.b & ((c ^ d) - g)) == (((a + 13069) & (b | obj0.b)) - ((40823 * 8943) & h)))) {
      f = c;
    } else {
      obj0.d = ((((obj0.e > obj0.e) ? (obj0.c * obj0.d) : d) + d) & (((d & h) + (-24925 | obj0.c)) ^ ((-30006 <= obj0.a) ? (39960 ? e : -41717) : -20068)));
      b = obj0.c;
    }
  } else {
    h = (obj0.b++ );
    if(((obj0.c & obj0.a) != ((e - (h * 29852)) ^ ((-53831 ^ 63667) - (d ^ -5281))))) {
      b = obj0.a;
      h = ((((61502 - -65154) + (-1028 + 1884)) ^ g) + (obj0.c + ((f != obj0.c) ? (-40838 & f) : obj0.d)));
    } else {
    }
  }
  c = f;
}
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');
})();
