diff options
Diffstat (limited to 'lib/js/urweb.js')
-rw-r--r-- | lib/js/urweb.js | 1223 |
1 files changed, 1168 insertions, 55 deletions
diff --git a/lib/js/urweb.js b/lib/js/urweb.js index 99b45ec9..cb582788 100644 --- a/lib/js/urweb.js +++ b/lib/js/urweb.js @@ -7,6 +7,61 @@ function needsDynPrefix() { return scripts.length == 0; } +// Codepoint implementations brought from https://norbertlindenberg.com/2012/05/ecmascript-supplementary-characters/#String +if (!String.fromCodePoint) { + String.fromCodePoint = function () { + var chars = [], i; + for(i = 0; i < arguments.length; ++i) { + var c = Number(arguments[i]); + if (!isFinite(c) || c < 0 || c > 0x10FFFF || Math.floor(c) !== c) { + throw new RangeError("Invalid code point " + c); + } + if (c < 0x10000) { + chars.push(c); + } else { + c -= 0x10000; + chars.push((c >> 10) + 0xD800); + chars.push((c % 0x400) + 0xDC00); + } + } + return String.fromCharCode.apply(undefined, chars); + }; + + String.prototype.codePointAt = function (index) { + var str = String(this); + if (index < 0 || index >= str.length) { + return undefined; + } + var first = str.charCodeAt(index); + if (first >= 0xD800 && first <= 0xDBFF && str.length > index + 1) { + var second = str.charCodeAt(index + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + return ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000; + } + } + return first; + }; +} + +function iterateString(s, fn) { + var strIdx = 0, idx = 0, res, cp; + for (; strIdx < s.length ;) { + cp = s.codePointAt(strIdx); + if (fn) { + res = fn(String.fromCodePoint(cp), idx, strIdx); + if (res === false) return; + } + strIdx += cp > 0xFFFF ? 2 : 1; + ++idx; + } +} + +function strSplit(s) { + var chars = []; + iterateString(s, function(c) { chars.push(c); }); + return chars; +} + var dynPrefix = needsDynPrefix() ? "<span style=\"display:none\">A</span>" : ""; // Function versions of operators @@ -27,18 +82,999 @@ function le(x, y) { return x <= y; } // Characters -function isLower(c) { return c >= 'a' && c <= 'z'; } -function isUpper(c) { return c >= 'A' && c <= 'Z'; } -function isAlpha(c) { return isLower(c) || isUpper(c); } -function isDigit(c) { return c >= '0' && c <= '9'; } +function ord(c) { return c.codePointAt(0); } + +var isLowerBitm = []; +var a = isLowerBitm; +a[3] = 0x7FFFFFE; a[5] = 0x4200400; a[6] = 0x80000000; a[7] = 0xFF7FFFFF; a[8] = 0xAAAAAAAA; +a[9] = 0x55AAAAAA; a[10] = 0xAAAAAB55; a[11] = 0xD4AAAAAA; a[12] = 0x4E243129; a[13] = 0xE6512D2A; +a[14] = 0xB5555240; a[15] = 0xAA29AAAA; a[16] = 0xAAAAAAAA; a[17] = 0x93FAAAAA; a[18] = 0xFFFFAA85; +a[19] = 0xFFFFFFFF; a[20] = 0xFFEFFFFF; a[21] = 0x1FFFFFF; a[22] = 0x3; a[23] = 0x1F; +a[26] = 0x20; a[27] = 0x3C8A0000; a[28] = 0x10000; a[29] = 0xFFFFF000; a[30] = 0xAAE37FFF; +a[31] = 0x192FAAAA; a[33] = 0xFFFF0000; a[34] = 0xFFFFFFFF; a[35] = 0xAAAAAAAA; a[36] = 0xAAAAA802; +a[37] = 0xAAAAAAAA; a[38] = 0xAAAAD554; a[39] = 0xAAAAAAAA; a[40] = 0xAAAAAAAA; a[41] = 0xAAAA; +a[43] = 0xFFFFFFFE; a[44] = 0xFF; a[159] = 0x3F000000; a[228] = 0x1FF; a[232] = 0xFFFFFFFF; +a[233] = 0xFFFFFFFF; a[234] = 0xFFFFFFFF; a[235] = 0xFFFFFFFF; a[236] = 0xFFFFFFFF; a[237] = 0xFFFFFFFF; +a[240] = 0xAAAAAAAA; a[241] = 0xAAAAAAAA; a[242] = 0xAAAAAAAA; a[243] = 0xAAAAAAAA; a[244] = 0xBFEAAAAA; +a[245] = 0xAAAAAAAA; a[246] = 0xAAAAAAAA; a[247] = 0xAAAAAAAA; a[248] = 0x3F00FF; a[249] = 0xFF00FF; +a[250] = 0xFF003F; a[251] = 0x3FFF00FF; a[252] = 0xFF00FF; a[253] = 0x40DF00FF; a[254] = 0xCF00DC; +a[255] = 0xDC00FF; a[259] = 0x80020000; a[260] = 0x1FFF0000; a[264] = 0x8C400; a[265] = 0x32108000; +a[266] = 0x43C0; a[267] = 0xFFFF0000; a[268] = 0x10; a[294] = 0xFFFF0000; a[295] = 0x3FF; +a[353] = 0xFFFF0000; a[354] = 0x7FFFFFFF; a[355] = 0x3FDA1562; a[356] = 0xAAAAAAAA; a[357] = 0xAAAAAAAA; +a[358] = 0xAAAAAAAA; a[359] = 0x8501A; a[360] = 0xFFFFFFFF; a[361] = 0x20BF; a[1330] = 0xAAAAAAAA; +a[1331] = 0x2AAA; a[1332] = 0x3AAAAAAA; a[1337] = 0xAAABAAA8; a[1338] = 0xAAAAAAAA; a[1339] = 0x95FFAAAA; +a[1340] = 0xAABA50AA; a[1341] = 0xA002AA; a[1343] = 0x7000000; a[1369] = 0xFFFF0000; a[1370] = 0xF7FFFFFF; +a[1371] = 0xFFFF003F; a[1372] = 0xFFFFFFFF; a[1373] = 0xFFFFFFFF; a[2008] = 0xF8007F; a[2042] = 0x7FFFFFE; +a[2081] = 0xFFFFFF00; a[2082] = 0xFFFF; a[2086] = 0xFF000000; a[2087] = 0xFFFFFFF; a[2150] = 0xFFFFFFFF; +a[2151] = 0x7FFFF; a[2246] = 0xFFFFFFFF; a[3744] = 0xFC000000; a[3745] = 0xFFFFF; a[3746] = 0xFFDFC000; +a[3747] = 0xFF; a[3748] = 0xFFFFFFC; a[3749] = 0xEBC00000; a[3750] = 0xFFEF; a[3751] = 0xFFFFFC00; +a[3752] = 0xC000000F; a[3753] = 0xFFFFFF; a[3754] = 0xFFFC0000; a[3755] = 0xFFF; a[3756] = 0xFFFFFFC0; +a[3757] = 0xFC000000; a[3758] = 0xFFFFF; a[3759] = 0xFFFFC000; a[3760] = 0xFF; a[3761] = 0xFFFFFFC; +a[3762] = 0xFFC00000; a[3763] = 0xFFFF; a[3764] = 0xFFFFFC00; a[3765] = 0x3F; a[3766] = 0xF7FFFFFC; +a[3767] = 0xF0000003; a[3768] = 0xFDFFFFF; a[3769] = 0xFFC00000; a[3770] = 0x3F7FFF; a[3771] = 0xFFFF0000; +a[3772] = 0xFDFF; a[3773] = 0xFFFFFC00; a[3774] = 0xBF7; a[3913] = 0xFFFFFFFC; a[3914] = 0xF; + +delete a; + +function isLower(c) { + var cp = ord(c); + var idx = Math.floor(cp / 32); + var byt = isLowerBitm[idx]; + if (byt) + { + var mask = Math.pow(2, cp - idx * 32); + return (byt & mask) != 0; + } + return false; +} + +var isUpperBitm = []; +var a = isUpperBitm; +a[2] = 0x7FFFFFE; a[6] = 0x7F7FFFFF; a[8] = 0x55555555; a[9] = 0xAA555555; a[10] = 0x555554AA; +a[11] = 0x2B555555; a[12] = 0xB1DBCED6; a[13] = 0x11AED2D5; a[14] = 0x4AAAA490; a[15] = 0x55D25555; +a[16] = 0x55555555; a[17] = 0x6C055555; a[18] = 0x557A; a[27] = 0x80450000; a[28] = 0xFFFED740; +a[29] = 0xFFB; a[30] = 0x551C8000; a[31] = 0xE6905555; a[32] = 0xFFFFFFFF; a[33] = 0xFFFF; +a[35] = 0x55555555; a[36] = 0x55555401; a[37] = 0x55555555; a[38] = 0x55552AAB; a[39] = 0x55555555; +a[40] = 0x55555555; a[41] = 0xFFFE5555; a[42] = 0x7FFFFF; a[133] = 0xFFFFFFFF; a[134] = 0x20BF; +a[157] = 0xFFFFFFFF; a[158] = 0xFFFFFFFF; a[159] = 0x3FFFFF; a[240] = 0x55555555; a[241] = 0x55555555; +a[242] = 0x55555555; a[243] = 0x55555555; a[244] = 0x40155555; a[245] = 0x55555555; a[246] = 0x55555555; +a[247] = 0x55555555; a[248] = 0x3F00FF00; a[249] = 0xFF00FF00; a[250] = 0xAA003F00; a[251] = 0xFF00; +a[253] = 0xF000000; a[254] = 0xF000F00; a[255] = 0xF001F00; a[264] = 0x3E273884; a[265] = 0xC00F3D50; +a[266] = 0x20; a[267] = 0xFFFF; a[268] = 0x8; a[293] = 0xFFC00000; a[294] = 0xFFFF; +a[352] = 0xFFFFFFFF; a[353] = 0x7FFF; a[355] = 0xC025EA9D; a[356] = 0x55555555; a[357] = 0x55555555; +a[358] = 0x55555555; a[359] = 0x42805; a[1330] = 0x55555555; a[1331] = 0x1555; a[1332] = 0x5555555; +a[1337] = 0x55545554; a[1338] = 0x55555555; a[1339] = 0x6A005555; a[1340] = 0x55452855; a[1341] = 0x5F7D55; +a[2041] = 0x7FFFFFE; a[2080] = 0xFFFFFFFF; a[2081] = 0xFF; a[2085] = 0xFFFF0000; a[2086] = 0xFFFFF; +a[2148] = 0xFFFFFFFF; a[2149] = 0x7FFFF; a[2245] = 0xFFFFFFFF; a[3744] = 0x3FFFFFF; a[3745] = 0xFFF00000; +a[3746] = 0x3FFF; a[3747] = 0xFFFFFF00; a[3748] = 0xD0000003; a[3749] = 0x3FDE64; a[3750] = 0xFFFF0000; +a[3751] = 0x3FF; a[3752] = 0x1FDFE7B0; a[3753] = 0x7B000000; a[3754] = 0x1FC5F; a[3755] = 0xFFFFF000; +a[3756] = 0x3F; a[3757] = 0x3FFFFFF; a[3758] = 0xFFF00000; a[3759] = 0x3FFF; a[3760] = 0xFFFFFF00; +a[3761] = 0xF0000003; a[3762] = 0x3FFFFF; a[3763] = 0xFFFF0000; a[3764] = 0x3FF; a[3765] = 0xFFFFFF00; +a[3766] = 0x1; a[3767] = 0x7FFFFFC; a[3768] = 0xF0000000; a[3769] = 0x1FFFFF; a[3770] = 0xFFC00000; +a[3771] = 0x7FFF; a[3772] = 0xFFFF0000; a[3773] = 0x1FF; a[3774] = 0x400; a[3912] = 0xFFFFFFFF; +a[3913] = 0x3; a[3977] = 0xFFFF0000; a[3978] = 0xFFFF03FF; a[3979] = 0xFFFF03FF; a[3980] = 0x3FF; + +delete a; + +function isUpper(c) { + var cp = ord(c); + var idx = Math.floor(cp / 32); + var byt = isUpperBitm[idx]; + if (byt) { + var mask = Math.pow(2, cp - idx * 32); + return (byt & mask) != 0; + } + return false; +} + +var isAlphaBitm = (function(){ + var a = 0xFFFFFFFF; + var b = 0xFFFF0000; + var c = 0x7FFFFFFF; + var d = 0x3FFFFF; + var e = 0x3FFFFFFF; + var f = 0x1FFFFFFF; + var g = 0x7FFFFF; + var h = 0x7FFFF; + var i = 0x7FFFFFE; + var j = 0xFFFFFFFE; + var k = 0x1FFFFFF; + var l = 0x7FFFFFF; + var m = 0xF7FFFFFF; + var n = 0xFFFFF; + var o = 0xFFFFFFF; + var p = 0x3FFFF; + var q = 0xE3EDFDFF; + var r = 0xFFFDDFEF; + var s = 0xFFFF07FF; + var t = 0xFFFF7FFF; + var u = 0x3FFFFFF; + var v = 0xFFFFFDFF; + var w = 0xFFDFFFFF; + var x = 0xFF7FFFFF; + var y = 0xFFFFE000; + var z = 0xFFFFFC00; + var a0 = 0xFFF99FEF; + var a1 = 0xFFFFFEFF; + var a2 = 0xFFFF20BF; + var a3 = 0x3F3FFFFF; + var a4 = 0x7F7F7F7F; + var a5 = 0xFF800000; + var a6 = 0xFFFFFFFC; + var a7 = 0xFFF80000; + var a8 = 0xFFFCFFFF; + var a9 = 0x1FFFFF; + var b0 = 0xFFFFFFEF; + var b1 = 0xFFFF03FF; + return [ + 0, 0, i, i, 0, 0x4200400, x, x, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, 0x3FFC3, 0x501F, 0, 0, 0x20, 0xBCDF0000, 0xFFFFD740, 0xFFFFFFFB, a, 0xFFBFFFFF, a, a, a, a, 0xFFFFFC03, a, a, a, + a, 0xFFFEFFFF, 0x27FFFFF, j, 0xFF, 0xBFFF0000, 0xFFFF00B6, 0x707FF, 0x7FF0000, a, 0xFEFFFFFF, 0xFFFFC000, a, a, 0x1FEFFFFF, 0x9C00E1FE, b, a, y, a, + a, p, z, 0x43007FF, 0xFCFFFFFF, 0x1FFF, k, 0x7FF, 0, 0x3FDFFFFF, 0xFFF00000, 0xFFFF03F8, a, 0xEFFFFFFF, 0xFFE1DFFF, 0xFFFE000F, a0, 0xE3C5FDFF, 0xB080599F, 0x1003000F, + 0xFFF987EE, 0xC36DFDFF, 0x5E021987, 0x3F0000, 0xFFFBBFEE, q, 0x11BBF, 0x1E00000F, 0xFFF99FEE, q, 0xB0C0199F, 0x2000F, 0xD63DC7EC, 0xC3FFC718, 0x811DC7, 0, r, 0xE3FFFDFF, 0x7601DDF, 0xF, + r, 0xE3EFFDFF, 0x40601DDF, 0x6000F, r, 0xE7FFFFFF, 0x80F05DDF, 0xFC00000F, 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F807F, 0xC0000, j, l, 0x207F, 0, 0xFEF02596, 0x3BFFECAE, 0xF000205F, 0, + 0x1, 0, a1, 0xFFFE1FFF, 0xFEFFFF03, f, 0, 0, a, 0xF97FFFFF, b, 0xFFFFC1E7, 0x3000407F, a, a2, m, a, a, a, a, + a, a, a, a, a, a, 0x3D7F3DFF, a, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, a, 0xFF3DFFFF, a, 0x87FFFFFF, 0, 0xFFFF, a, a, a3, + j, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, 0xFFFF9FFF, + i, a, a, 0x1FFC7FF, 0xFDFFF, n, n, 0xDDFFF, a, 0xFFCFFFFF, 0x108001FF, 0, 0, a, a, 0xFFFFFF, a, s, a, d, + c, 0x1FF0FFF, b, 0x1F3FFF, a, 0xFFFF0FFF, 0x3FF, 0, o, a, c, 0x1FFFFE, 0, 0x80, 0, 0, a, 0xFFEFFFFF, 0xFEF, 0, + a, 0xFC00F3FF, a, 0x3FFBF, a, d, 0xFC00E000, e, 0x1FF, 0, 0, 0x6FDE00, a, a, a, a, a, a, 0, 0x1FFF80, + a, a, a, a, a, a, a, a, a3, a, 0xAAFF3F3F, e, a, 0x5FDFFFFF, 0xFCF1FDC, 0x1FDC1FFF, 0, 0, 0, 0x80020000, + 0x1FFF0000, 0, 0, 0, 0x3E2FFC84, 0xF3FFBD50, 0x43E0, a, 0x1FF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFFC00000, a, 0x3FF, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, t, c, a, a, a, a, 0xC781F, + a, a2, a, 0x80FF, g, a4, a4, a, 0, 0x8000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0xE0, 0x1F3E03FE, j, a, 0xE07FFFFF, j, a, m, 0xFFFFFFE0, 0xFFFE7FFF, a, a, 0x7FFF, l, 0, b, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, d, 0, 0, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, 0x7FF, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, 0x1FFF, 0, b, e, + a, a, a, a, a, a, a, a, 0xFFFF1FFF, 0xC00, a, 0x8FF07FFF, a, a, a, 0xFFFF, a5, a6, a, a, + 0xFFFFF9FF, 0xFF7FFF, 0, a5, 0xFFFFF7BB, 0xFF, a, n, a, a, 0x2F, 0x28FC0000, z, s, h, f, a, 0xFFF7FFFF, 0x8000, 0x7C00FFDF, + a, g, 0x3FFF, 0xC47FFFFF, a, c, 0x38000005, 0x3CFFFF, 0x7E7E7E, 0xFFFF7F7F, m, 0xFFFF003F, a, a, a, 0x7FF, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, 0xFFFF000F, 0xFFFFF87F, o, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, a, a, a, a, + a, a, a, 0xFFFF3FFF, a, a, u, 0, 0xE0F8007F, 0x5F7FFDFF, 0xFFFFFFDB, a, a, p, a7, a, a, a, a, a, + a, a, a, a, a, e, b, a, a8, a, 0xFF, 0xFFF0000, 0, 0, 0, 0xFFDF0000, a, a, a, f, + 0, i, i, 0xFFFFFFC0, a, c, 0x1CFCFCFC, 0, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0, a, a, a, l, 0, 0, a, a9, + 0, 0, 0, 0, 0, 0, 0, 0, f, a, 0x1FFFF, 0, a, y, s, l, e, a, 0x3EFF0F, 0, + a, a, a, a, e, b, 0xFF0FFFFF, o, a, 0xFFFF00FF, a, 0xF, 0, 0, 0, 0, a, a, a, a, + a, a, a, a, a, g, d, 0xFF, 0, 0, 0, 0, 0xFFFFFD3F, 0x91BFFFFF, d, g, c, 0, 0, 0x37FFFF, + d, u, 0, 0, a, 0xC0FFFFFF, 0, 0, 0xFEEFF06F, n, 0, f, f, 0, a1, 0x1F, a, d, d, h, + p, 0, 0, 0, a, a, 0x1FF, 0, a, h, a, h, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, 0x3F, 0, + a6, k, b, 0x1FF, a, h, b, 0x47FFFF, a, a, 0x1400001E, 0, 0xFFFBFFFF, 0x409FFFFF, 0, 0, 0xBFFFBD7F, 0xFFFF01FF, a, 0x1FF, + a0, q, 0xE081199F, 0xF, 0, 0, 0, 0, a, a, 0x7BB, 0, a, a, 0xB3, 0, 0, 0, 0, 0, + a, 0x7F3FFFFF, 0x3F000000, 0, a, c, 0x11, 0, a, d, 0, 0, 0xE3FFFFFF, 0x7FF, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, a, a, 0x80000000, 0, 0, 0, 0, 0, 0, 0, 0, a, 0x7FE7FFFF, b, a, + 0xFFFFCF, 0, a, k, 0, 0, 0, 0, 0, 0, 0, 0, v, 0x7F7FFFFF, 0x1, 0xFFFC0000, a8, 0x7FFEFF, 0, 0, + 0xFFFFFB7F, 0xB47FFFFF, 0xCB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, u, 0, 0, 0, a, a, a, 0x7FFF, + a, a, a, a, a, a, 0xF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, 0x7FFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, 0x7F, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, k, c, 0, + 0, 0, b, 0x3FFF, a, g, 0xF, 0xE0FFFFF8, 0xFFFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, 0xFFFF001F, c, + a7, 0, 0, 0x3, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, 0x1FFF, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, h, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, + a, a, a, a, c, 0, 0, b, a, a, a, a, a, a, a, a, a, a, a, o, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, 0x1FFF07FF, 0x43FF01FF, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, a, a, w, a, 0xDFFFFFFF, 0xEBFFDE64, b0, a, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, a, a, a, a, a, + a, a, a, a, a, 0xFFFFFF3F, 0xF7FFFFFD, m, w, w, t, t, v, v, 0xFF7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xF9FFFF7F, 0x7DB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, a, a, a, a, a, a, 0x1F, 0, a, a, 0x8F, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, b0, 0xAF7FE96, 0xAA96EA84, 0x5EF7F796, 0xFFFFBFF, 0xFFFFBEE, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, b, b1, b1, + 0x3FF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, g, 0, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a9, a, a, a, a, a, a, e, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, 0xFFFF0003, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, 0x1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, e + ];})(); + +function isAlpha(c) { + var cp = ord(c); + var idx = Math.floor(cp / 32); + var byt = isAlphaBitm[idx]; + if (byt) { + var mask = Math.pow(2, cp - idx * 32); + return (byt & mask) != 0; + } + return false; +} + +var isDigitBitm = []; +var a = isDigitBitm; +a[1] = 0x3FF0000; a[51] = 0x3FF; a[55] = 0x3FF0000; a[62] = 0x3FF; +a[75] = 0xFFC0; a[79] = 0xFFC0; a[83] = 0xFFC0; a[87] = 0xFFC0; +a[91] = 0xFFC0; a[95] = 0xFFC0; a[99] = 0xFFC0; a[103] = 0xFFC0; +a[107] = 0xFFC0; a[111] = 0xFFC0; a[114] = 0x3FF0000; a[118] = 0x3FF0000; +a[121] = 0x3FF; a[130] = 0x3FF; a[132] = 0x3FF0000; a[191] = 0x3FF; +a[192] = 0x3FF0000; a[202] = 0xFFC0; a[206] = 0x3FF0000; a[212] = 0x3FF03FF; +a[218] = 0x3FF0000; a[221] = 0x3FF0000; a[226] = 0x3FF03FF; a[1329] = 0x3FF; +a[1350] = 0x3FF0000; a[1352] = 0x3FF; a[1358] = 0x3FF0000; a[1359] = 0x3FF0000; +a[1362] = 0x3FF0000; a[1375] = 0x3FF0000; a[2040] = 0x3FF0000; a[2085] = 0x3FF; +a[2179] = 0xFFC0; a[2183] = 0x3FF0000; a[2185] = 0xFFC00000; a[2190] = 0x3FF0000; +a[2199] = 0x3FF0000; a[2210] = 0x3FF0000; a[2214] = 0x3FF0000; a[2226] = 0x3FF0000; +a[2230] = 0x3FF; a[2233] = 0x3FF0000; a[2247] = 0x3FF; a[2274] = 0x3FF0000; +a[2282] = 0x3FF0000; a[2899] = 0x3FF; a[2906] = 0x3FF0000; a[3774] = 0xFFFFC000; +a[3775] = 0xFFFFFFFF; a[3914] = 0x3FF0000; +delete a; + +function isDigit(c) { + var cp = ord(c); + var idx = Math.floor(cp / 32); + var byt = isDigitBitm[idx]; + if (byt) { + var mask = Math.pow(2, cp - idx * 32); + return (byt & mask) != 0; + } + return false; +} + function isAlnum(c) { return isAlpha(c) || isDigit(c); } -function isBlank(c) { return c == ' ' || c == '\t'; } -function isSpace(c) { return isBlank(c) || c == '\r' || c == '\n'; } -function isXdigit(c) { return isDigit(c) || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); } -function ord(c) { return c.charCodeAt(0); } -function isPrint(c) { return ord(c) > 31 && ord(c) < 127; } -function toLower(c) { return c.toLowerCase(); } -function toUpper(c) { return c.toUpperCase(); } +function isBlank(c) { + var cp = ord(c); + if (cp == 9) + return true; + if (cp == 32) + return true; + if (cp == 160) + return true; + if (cp == 5760) + return true; + if (cp >= 8192 && cp <= 8202) + return true; + if (cp == 8239) + return true; + if (cp == 8287) + return true; + if (cp == 12288) + return true; + + return false; +} +function isSpace(c) { + var cp = ord(c); + if (cp >= 10 && cp <= 13) + return true; + if (cp == 133) + return true; + if (cp == 8232) + return true; + if (cp == 8233) + return true; + + return isBlank(c); +} +function isXdigit(c) { return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); } + +var isPrintBitm = (function(){ + var a = 0xFFFFFFFF; + var b = 0x7FFFFFFF; + var c = 0x7FFFFF; + var d = 0x3FFFFFFF; + var e = 0xFFFF0FFF; + var f = 0xFFFFFFF; + var g = 0x3FFFFF; + var h = 0xFFFF00FF; + var i = 0x1FFFFFFF; + var j = 0x3FFFFFF; + var k = 0xFFFFFF; + var l = 0xFFFF0000; + var m = 0xFFFFFFFE; + var n = 0x7FFFFFF; + var o = 0xFFFFF; + var p = 0xFFFF1FFF; + var q = 0xDFFFFFFF; + var r = 0xF3EDFDFF; + var s = 0xFFFDDFEF; + var t = 0x1FFFFFF; + var u = 0xFFDFFFFF; + var v = 0xFF3FFFFF; + var w = 0xFFFF7FFF; + var x = 0xFFFF000F; + var y = 0xFFFCFFFF; + var z = 0x3FF00FF; + var a0 = 0x1FFFFF; + var a1 = 0xFE7FFFFF; + var a2 = 0x3FFFF; + var a3 = 0x7FFF3FFF; + var a4 = 0xFFF99FEF; + var a5 = 0xFFFF20BF; + var a6 = 0x3F3FFFFF; + var a7 = 0x3FF03FF; + var a8 = 0xFFFF07FF; + var a9 = 0x9FFFFFFF; + var b0 = 0xFBFFFFFF; + var b1 = 0x1FFFF; + var b2 = 0xE3FFFFFF; + var b3 = 0x7F7F7F7F; + var b4 = 0xFFFE7FFF; + var b5 = 0xFFFF003F; + var b6 = 0xFFFF3FFF; + var b7 = 0xFFFF03FF; + var b8 = 0x7FFFF; + var b9 = 0xFFFF0003; + var c0 = 0xFFFFFFEF; + return [ + 0, a, a, b, 0, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, 0xFCFFFFFF, 0xFFFFD7F0, 0xFFFFFFFB, a, a, a, a, a, a, a, a, a, a, + a, 0xFFFEFFFF, a1, m, 0xFFFEE6FF, a, h, 0x1F07FF, q, a, a, a, a, a, a, a, 0xFFFFBFFF, a, 0xFFFFE7FF, a, + a, a2, a, n, a, a3, 0x4FFFFFFF, 0x7FF, 0, 0x3FDFFFFF, 0xFFF00000, a, a, a, a, a, a4, 0xF3C5FDFF, 0xB080799F, 0x3FFFFFCF, + 0xFFF987EE, 0xD36DFDFF, 0x5E023987, 0x3FFFC0, 0xFFFBBFEE, r, 0x13BBF, 0xFE03FFCF, 0xFFF99FEE, r, 0xB0C0399F, 0xFFFFCF, 0xD63DC7EC, 0xC3FFC718, 0x813DC7, 0x7FFFFC0, s, 0xE3FFFDFF, 0x7603DDF, 0xFF00FFCF, + s, 0xF3EFFDFF, 0x40603DDF, 0x6FFCF, s, a, 0xFFF0FDDF, 0xFFFFFFCF, 0xFC7FFFEC, 0x2FFBFFFF, 0xFF5F847F, 0x1CFFC0, m, 0x87FFFFFF, f, 0, 0xFEF02596, 0x3BFFECAE, 0xF3FF3F5F, 0, + a, a, 0xFFFFFEFF, 0xFFFE1FFF, 0xFEFFFFFF, q, 0x7FFDFFF, 0, a, a, a, a, a, a, a5, a, a, a, a, a, + a, a, a, a, a, a, 0x3D7F3DFF, a, 0xFFFF3DFF, 0x7F3DFFFF, 0xFF7FFF3D, a, 0xFF3DFFFF, a, 0xE7FFFFFF, i, j, a, a, a6, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + i, a, a, t, 0x1FDFFF, c, o, 0xDDFFF, a, a, d, a7, 0x3FF7FFF, a, a, k, a, a8, a, g, + b, 0xFFF0FFF, 0xFFFFFFF1, 0x1F3FFF, a, e, 0xC7FF03FF, a, 0xCFFFFFFF, a, b, a9, a7, a3, 0, 0, a, a, e, i, + a, a, a, 0xF00FFFFF, a, 0xF8FFFFFF, 0xFFFFE3FF, a, 0x1FF, 0, h, j, a, a, a, a, a, a, a, b0, + a, a, a, a, a, a, a, a, a6, a, 0xAAFF3F3F, d, a, u, 0xEFCFFFDF, 0x7FDCFFFF, a, 0xFFFFFCFF, a, 0xFFF3FFDF, + 0x1FFF7FFF, a, l, b1, a, a, a, a, e, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, 0x7F, 0x7FF, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, 0xFFCFFFFF, v, b2, 0x7FDFF, 0xF000, a, w, b, a, a, a, a, 0xFE0FFFFF, + a, a5, a, 0x800180FF, c, b3, b3, a, a, a, 0x3FF, 0, b0, a, a, o, a, a, a, a, + a, a, g, 0xFFF0000, a, a, m, a, a1, a, a, a, 0xFFFFFFE0, b4, a, a, w, n, a, x, + b, a, a, a, a, a, a, b, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, g, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, 0x7FF, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, p, a, 0xFFFF007F, a, + a, a, a, a, a, a, a, a, a, 0xFFF, a, a, a, a, a, k, a, a, a, a, + a, 0xFF7FFF, 0, 0xFF800000, a, 0x3FF0FFF, a, k, a, a, 0x3FFC03F, d, a, a, 0x800FFFFF, i, a, a, 0xC3FFBFFF, b, + a, c, 0xF3FF3FFF, a, a, a, 0xF8000007, c, 0x7E7E7E, 0xFFFF7F7F, a, b5, a, a, a, 0x3FF3FFF, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, x, 0xFFFFF87F, f, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, b6, a, a, j, 0, 0xE0F8007F, 0x5F7FFFFF, 0xFFFFFFDB, a, a, a, 0xFFF80003, a, a, a, a, a, + a, a, a, a, a, a, l, a, y, a, 0xFF, 0x3FFF0000, j, a, 0xFFF7FFFF, 0xFFDF0F7F, a, a, a, a9, + m, a, a, a, a, b, 0x1CFCFCFC, 0x3E007F7F, 0xFFFFEFFF, 0xB7FFFF7F, 0x3FFF3FFF, 0, a, a, a, n, 0xFFFFFF87, 0xFF8FFFFF, a, a, + 0xFFF7FFF, 0x1, l, d, 0, 0, 0, 0, i, a, b1, f, a, 0xFFFFE00F, a8, n, 0xBFFFFFFF, a, 0x3FFF0F, 0, + a, a, a, a, d, b7, 0xFF0FFFFF, f, a, h, a, 0x800F, 0, 0, 0, 0, a, a, a, a, + a, a, a, a, a, c, g, 0xFF, 0, 0, 0, 0, 0xFFFFFD3F, 0x91BFFFFF, 0xFFBFFFFF, a, b, 0xFF80, 0, 0xF837FFFF, + 0x8FFFFFFF, 0x83FFFFFF, 0, 0, a, 0xF0FFFFFF, y, a, 0xFEEFF06F, 0x870FFFFF, 0x1FF00FF, a, a, 0, a, 0x7FF87F, a, 0xFE3FFFFF, v, 0xFF07FFFF, + 0x1E03FFFF, 0xFE00, 0, 0, a, a, 0x1FF, 0, a, b8, a, 0xFC07FFFF, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, b, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, 0xFFFC3FFF, 0x8000FFFF, + a, a, b9, 0x3FF01FF, a, u, x, c, a, a, b6, 0x1FFFFE, 0xFFFBFFFF, b, 0, 0, 0xBFFFBD7F, b7, a, 0x3FF07FF, + a4, r, 0xE081399F, 0x1F1FCF, 0, 0, 0, 0, a, a, 0x2BFFFFFF, 0, a, a, z, 0, 0, 0, 0, 0, + a, v, d, 0, a, a, 0x3FF001F, 0x1FFF, a, k, 0x3FF, 0, b2, e, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, a, a, 0x8007FFFF, 0, 0, 0, 0, 0, 0, 0, 0, a, a, h, a, + 0xDFFFFFCF, 0x7, a, t, 0, 0, 0, 0, 0, 0, 0, 0, 0xFFFFFDFF, 0xFF7FFFFF, b5, p, y, 0x7FFEFF, 0, 0, + 0xFFFFFB7F, 0xB47FFFFF, z, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, j, 0, 0, 0, a, a, a, 0x1F7FFF, + a, a, a, a, a, a, 0xF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, 0x7FFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, 0x7F, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, t, b, 0xC3FF, + 0, 0, l, 0x3F3FFF, a, a, 0xFBFF003F, 0xE0FFFFFB, 0xFFFF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, 0xFFFF001F, b, + 0xFFFF8000, 0, 0, 0x3, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, 0x1FFF, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, b8, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, + a, a, a, a, b, 0, 0, l, a, a, a, a, a, a, a, a, a, a, a, f, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, 0x1FFF07FF, 0xF3FF01FF, 0xF, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, a, a, a, g, + a, 0xFFFFFE7F, a, a, a, a, a, 0x1FF, a, a, 0x3F, 0, 0, 0, 0, 0, a, a, c, a2, + 0, 0, 0, 0, a, a, u, a, q, 0xEBFFDE64, c0, a, 0xDFDFE7BF, 0x7BFFFFFF, 0xFFFDFC5F, a, a, a, a, a, + a, a, a, a, a, 0xFFFFFF3F, a, a, a, a, a, a, a, a, 0xFFFFCFFF, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, 0xF8000FFF, 0xFFFE, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0xF9FFFF7F, 0x7DB, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, a, a, a, a, a, a, 0x7FFF9F, 0, a, a, 0xC3FF07FF, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, c0, 0xAF7FE96, 0xAA96EA84, 0x5EF7F796, 0xFFFFBFF, 0xFFFFBEE, 0, 0x30000, + 0, 0, 0, 0, 0, 0, 0, 0, a, e, a, a, o, b4, 0xFFFEFFFE, g, p, w, a, e, + a, 0x1FFF, 0, 0xFFFFFFC0, 0xFFFF0007, f, 0x301FF, 0x3F, 0, 0, 0, 0, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a0, 0x1FF1FFF, a, a, a, o, a, a, a0, 0, e, a, z, a, h, 0x3FFF, 0, 0, + e, b, p, 0xFFF, k, 0, 0xFFFF0001, 0x7F, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, c, 0, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a0, a, a, a, a, a, a, d, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, b9, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, + a, a, a, 0x1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, d + ];})(); + +function isPrint(c) { + var cp = ord(c); + var idx = Math.floor(cp / 32); + var byt = isPrintBitm[idx]; + if (byt) { + var mask = Math.pow(2, cp - idx * 32); + return (byt & mask) != 0; + } + return false; +} + +function toLower(c) { + var cp = ord(c); + + if (cp == 304) + return chr(105); + else if (cp >= 7312 && cp <= 7354) + return c; + else if (cp >= 7357 && cp <= 7359) + return c; + else if (cp == 42936) + return c; + else if (cp >= 93760 && cp <= 93791) + return c; + return c.toLowerCase(); +} + +function toUpper(c) { + var cp = ord(c); + if (cp == 223) + return c; + else if (cp == 329) + return c; + else if (cp == 496) + return c; + else if (cp == 912) + return c; + else if (cp == 944) + return c; + else if (cp == 1415) + return c; + else if (cp >= 4304 && cp <= 4346) + return c; + else if (cp >= 4349 && cp <= 4351) + return c; + else if (cp >= 7830 && cp <= 7834) + return c; + else if (cp == 8016) + return c; + else if (cp == 8018) + return c; + else if (cp == 8020) + return c; + else if (cp == 8022) + return c; + else if (cp >= 8064 && cp <= 8071) + return chr(cp + 8) + else if (cp >= 8072 && cp <= 8079) + return c; + else if (cp >= 8080 && cp <= 8087) + return chr(cp + 8); + else if (cp >= 8088 && cp <= 8095) + return c; + else if (cp >= 8096 && cp <= 8103) + return chr(cp + 8) + else if (cp >= 8104 && cp <= 8111) + return c; + else if (cp == 8114) + return c; + else if (cp == 8115) + return chr(8124); + else if (cp == 8116) + return c; + else if (cp == 8118) + return c; + else if (cp == 8119) + return c; + else if (cp == 8124) + return c; + else if (cp == 8130) + return c; + else if (cp == 8131) + return chr(8140); + else if (cp == 8132) + return c; + else if (cp == 8134) + return c; + else if (cp == 8135) + return c; + else if (cp == 8140) + return c; + else if (cp == 8146) + return c; + else if (cp == 8147) + return c; + else if (cp == 8150) + return c; + else if (cp == 8151) + return c; + else if (cp >= 8162 && cp <= 8164) + return c; + else if (cp == 8166) + return c; + else if (cp == 8167) + return c; + else if (cp == 8178) + return c; + else if (cp == 8179) + return chr(8188); + else if (cp == 8180) + return c; + else if (cp == 8182) + return c; + else if (cp == 8183) + return c; + else if (cp == 8188) + return c; + else if (cp == 42937) + return c; + else if (cp >= 64256 && cp <= 64262) + return c; + else if (cp >= 64275 && cp <= 64279) + return c; + else if (cp >= 93792 && cp <= 93823) + return c; + else + return c.toUpperCase(); +} // Lists @@ -48,7 +1084,7 @@ function cons(v, ls) { function rev(ls) { var acc = null; for (; ls; ls = ls.next) - acc = cons(ls.data, acc); + acc = cons(ls.data, acc); return acc; } function concat(ls1, ls2) { @@ -70,8 +1106,8 @@ function remove(x, ls) { for (; ls; ls = ls.next) if (ls.data == x) return concat(acc, ls.next); - else - acc = cons(ls.data, acc); + else + acc = cons(ls.data, acc); return ls; } @@ -220,11 +1256,11 @@ function stringToTime(string) { } /* -strftime() implementation from: -YUI 3.4.1 (build 4118) -Copyright 2011 Yahoo! Inc. All rights reserved. -Licensed under the BSD License. -http://yuilibrary.com/license/ + strftime() implementation from: + YUI 3.4.1 (build 4118) + Copyright 2011 Yahoo! Inc. All rights reserved. + Licensed under the BSD License. + http://yuilibrary.com/license/ */ var xPad=function (x, pad, r) @@ -553,6 +1589,8 @@ function uw_mouseEvent() { _ScreenY : firstGood(ev.screenY, 0), _ClientX : firstGood(ev.clientX, 0), _ClientY : firstGood(ev.clientY, 0), + _OffsetX : firstGood(ev.offsetX, 0), + _OffsetY : firstGood(ev.offsetY, 0), _CtrlKey : firstGood(ev.ctrlKey, false), _ShiftKey : firstGood(ev.shiftKey, false), _AltKey : firstGood(ev.altKey, false), @@ -1097,6 +2135,16 @@ function active(s) { } } +function listen(s, onchange) { + var x = document.createElement("script"); + x.dead = false; + x.signal = s; + x.sources = null; + x.closures = null; + x.recreate = onchange; + populate(x); +} + function input(x, s, recreate, type, name) { if (name) x.name = name; if (type) x.type = type; @@ -1228,7 +2276,7 @@ function selectValue(x) { function setSelectValue(x, v) { for (var i = 0; i < x.options.length; ++i) { - if(x.options[i].value == v) { + if (x.options[i].value == v) { x.selectedIndex = i; return; } @@ -1241,8 +2289,8 @@ function sel(s, content) { var dummy = document.createElement("span"); dummy.innerHTML = "<select>" + content + "</select>"; - var x = input(dummy.firstChild, s, function(x) { return function(v) { if (selectValue(x) != v) setSelectValue(x, v); }; }); + var x = dummy.firstChild; for (var i = 0; i < x.options.length; ++i) { if (x.options[i].value == "") x.options[i].value = x.options[i].text; @@ -1250,6 +2298,8 @@ function sel(s, content) { x.options[i].value = x.options[i].value.substring(1); } + x = input(x, s, function(x) { return function(v) { if (selectValue(x) != v) setSelectValue(x, v); }; }); + setSelectValue(x, s.data); if (selectValue(x) != s.data) sv(s, selectValue(x)); @@ -1303,6 +2353,9 @@ function dynClass(pnode, html, s_class, s_style) { var x = null; var y = null; + var classNameBefore = html.className; + var styleCssBefore = html.style.cssText; + if (s_class) { x = document.createElement("script"); x.dead = false; @@ -1315,7 +2368,10 @@ function dynClass(pnode, html, s_class, s_style) { freeClosure(ls.data); var cls = {v : null}; - html.className = flatten(cls, v); + var s = flatten(cls, v); + if (classNameBefore) + s += " " + classNameBefore; + html.className = s; x.closures = concat(cls.v, htmlCls); } @@ -1335,7 +2391,10 @@ function dynClass(pnode, html, s_class, s_style) { freeClosure(ls.data); var cls = {v : null}; - html.style.cssText = flatten(cls, v); + var s = flatten(cls, v); + if (styleCssBefore) + s += " " + styleCssBefore; + html.style.cssText = s; y.closures = concat(cls.v, htmlCls2); } @@ -1432,7 +2491,7 @@ function eh(x) { if (x == null) return "NULL"; else - return x.split("&").join("&").split("<").join("<").split(">").join(">"); + return flattenLocal(x).split("&").join("&").split("<").join("<").split(">").join(">"); } function ts(x) { return x.toString() } @@ -1441,30 +2500,67 @@ function s2b(s) { return s == "True" ? true : s == "False" ? false : null; } function s2be(s) { return s == "True" ? true : s == "False" ? false : er("Illegal Boolean " ^ s); } function id(x) { return x; } -function sub(s, i) { return s.charAt(i); } -function suf(s, i) { return s.substring(i); } -function slen(s) { return s.length; } +function sub(s, i) { + var ch = undefined; + iterateString(s, function(c, idx) { if (idx == i) { ch = c; return false; }}); + if (ch == undefined) + er("String index " + i + " out of bounds") + return ch; +} +function suf(s, i) { + var off = s.length; + iterateString(s, function(_, idx, sidx) { if (idx == i) { off = sidx; return false; } }); + return s.substring(off); +} +function slen(s) { + var len = 0; + iterateString(s, function(){ ++len;}); + return len; +} function sidx(s, ch) { - var r = s.indexOf(ch); + var r = -1; + iterateString(s, function(c, idx){ if (c == ch) { r = idx; return false; } }); if (r == -1) return null; else return r; } function ssidx(h, n) { - var r = h.indexOf(n); - if (r == -1) - return null; - else - return r; + if (n == "") return 0; + var ah = strSplit(h); + var an = strSplit(n); + var i = 0, y = 0; + var top = ah.length - an.length + 1; + if (top < 0) top = 0; + var found = true; + + for(i = 0; i < top; ++i) { + found = true; + + for (y = 0; y < an.length; ++y) { + if (ah[i + y] != an[y]) { + found = false; + break; + } + } + + if (found) + return i; + } + return null; } + function sspn(s, chs) { - for (var i = 0; i < s.length; ++i) - if (chs.indexOf(s.charAt(i)) != -1) + var s2 = strSplit(s); + var chs2 = strSplit(chs); + + for (var i = 0; i < s2.length; ++i) + if (chs2.indexOf(s2[i]) != -1) return i; - return s.length; + return s2.length; } + function schr(s, ch) { var r = s.indexOf(ch); if (r == -1) @@ -1473,10 +2569,10 @@ function schr(s, ch) { return s.substring(r); } function ssub(s, start, len) { - return s.substring(start, start+len); + return strSplit(s).slice(start, start+len).join(""); } function strlenGe(s, len) { - return s.length >= len; + return slen(s) >= len; } function trimZeroes(s) { @@ -1575,11 +2671,11 @@ function strcmp(str1, str2) { } function chr(n) { - return String.fromCharCode(n); + return String.fromCodePoint(n); } function htmlifySpecialChar(ch) { - return "&#" + ch.charCodeAt(0) + ";"; + return "&#" + ch.codePointAt(0) + ";"; } @@ -2183,6 +3279,10 @@ function confrm(s) { return confirm(s) ? true : false; } +function currentUrl() { + return window.location.toString(); +} + // URL blessing @@ -2207,11 +3307,14 @@ function bless(s) { // Attribute name blessing +var maxCh = chr(127); function blessData(s) { - for (var i = 0; i < s.length; ++i) { - var c = s[i]; - if (!isAlnum(c) && c != '-' && c != '_') + var chars = strSplit(s); + + for (var i = 0; i < chars.length; ++i) { + var c = chars[i]; + if (c > maxCh || (!isAlnum(c) && c != '-' && c != '_')) er("Disallowed character in data-* attribute name"); } @@ -2222,9 +3325,11 @@ function blessData(s) { // CSS validation function atom(s) { - for (var i = 0; i < s.length; ++i) { - var c = s[i]; - if (!isAlnum(c) && c != '+' && c != '-' && c != '.' && c != '%' && c != '#') + var chars = strSplit(s); + + for (var i = 0; i < chars.length; ++i) { + var c = chars[i]; + if (c > maxCh || (!isAlnum(c) && c != '+' && c != '-' && c != '.' && c != '%' && c != '#')) er("Disallowed character in CSS atom"); } @@ -2232,10 +3337,12 @@ function atom(s) { } function css_url(s) { - for (var i = 0; i < s.length; ++i) { - var c = s[i]; - if (!isAlnum(c) && c != ':' && c != '/' && c != '.' && c != '_' && c != '+' - && c != '-' && c != '%' && c != '?' && c != '&' && c != '=' && c != '#') + var chars = strSplit(s); + + for (var i = 0; i < chars.length; ++i) { + var c = chars[i]; + if (c > maxCh || (!isAlnum(c) && c != ':' && c != '/' && c != '.' && c != '_' && c != '+' + && c != '-' && c != '%' && c != '?' && c != '&' && c != '=' && c != '#')) er("Disallowed character in CSS URL"); } @@ -2243,15 +3350,17 @@ function css_url(s) { } function property(s) { - if (s.length <= 0) + var chars = strSplit(s); + + if (chars.length <= 0) er("Empty CSS property"); - if (!isLower(s[0]) && s[0] != '_') + if (chars[0] > maxCh || (!isLower(chars[0]) && chars[0] != '_')) er("Bad initial character in CSS property"); - for (var i = 0; i < s.length; ++i) { - var c = s[i]; - if (!isLower(c) && !isDigit(c) && c != '_' && c != '-') + for (var i = 0; i < chars.length; ++i) { + var c = chars[i]; + if (c > maxCh || (!isLower(c) && !isDigit(c) && c != '_' && c != '-')) er("Disallowed character in CSS property"); } @@ -2276,5 +3385,9 @@ function giveFocus(id) { er("Tried to give focus to ID not used in document: " + id); } +function anchorUrl(id) { + return "#" + id; +} + // App-specific code |