diff --git a/DIST/web/game.html b/DIST/web/game.html index 61a2751..47059e8 100644 --- a/DIST/web/game.html +++ b/DIST/web/game.html @@ -5,43 +5,1224 @@ Emscripten-Generated Code -
+ + image/svg+xml + + +
Downloading...
+ + + Resize canvas + Lock/hide mouse pointer     + + + +
- +
+ +
-
-
- Resize canvas - Lock/hide mouse pointer -     - -
- -
- -
+ + diff --git a/DIST/web/game.js b/DIST/web/game.js index b4c6108..1f3c742 100644 --- a/DIST/web/game.js +++ b/DIST/web/game.js @@ -1,9000 +1,26 @@ - -var Module; -if (typeof Module === 'undefined') Module = eval('(function() { try { return Module || {} } catch(e) { return {} } })()'); -if (!Module.expectedDataFileDownloads) { - Module.expectedDataFileDownloads = 0; - Module.finishedDataFileDownloads = 0; -} -Module.expectedDataFileDownloads++; -(function() { - function fetchRemotePackage(packageName, callback, errback) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', packageName, true); - xhr.responseType = 'arraybuffer'; - xhr.onprogress = function(event) { - var url = packageName; - if (event.loaded && event.total) { - if (!xhr.addedTotal) { - xhr.addedTotal = true; - if (!Module.dataFileDownloads) Module.dataFileDownloads = {}; - Module.dataFileDownloads[url] = { - loaded: event.loaded, - total: event.total - }; - } else { - Module.dataFileDownloads[url].loaded = event.loaded; - } - var total = 0; - var loaded = 0; - var num = 0; - for (var download in Module.dataFileDownloads) { - var data = Module.dataFileDownloads[download]; - total += data.total; - loaded += data.loaded; - num++; - } - total = Math.ceil(total * Module.expectedDataFileDownloads/num); - if (Module['setStatus']) Module['setStatus']('Downloading data... (' + loaded + '/' + total + ')'); - } else if (!Module.dataFileDownloads) { - if (Module['setStatus']) Module['setStatus']('Downloading data...'); - } - }; - xhr.onload = function(event) { - var packageData = xhr.response; - callback(packageData); - }; - xhr.send(null); - }; - function handleError(error) { - console.error('package error:', error); - }; - var fetched = null, fetchedCallback = null; - fetchRemotePackage('game.data', function(data) { - if (fetchedCallback) { - fetchedCallback(data); - fetchedCallback = null; - } else { - fetched = data; - } - }, handleError); - function runWithFS() { -function assert(check, msg) { - if (!check) throw msg + new Error().stack; -} -Module['FS_createPath']('/', 'data', true, true); - function DataRequest(start, end, crunched, audio) { - this.start = start; - this.end = end; - this.crunched = crunched; - this.audio = audio; - } - DataRequest.prototype = { - requests: {}, - open: function(mode, name) { - this.name = name; - this.requests[name] = this; - Module['addRunDependency']('fp ' + this.name); - }, - send: function() {}, - onload: function() { - var byteArray = this.byteArray.subarray(this.start, this.end); - this.finish(byteArray); - }, - finish: function(byteArray) { - var that = this; - Module['FS_createPreloadedFile'](this.name, null, byteArray, true, true, function() { - Module['removeRunDependency']('fp ' + that.name); - }, function() { - if (that.audio) { - Module['removeRunDependency']('fp ' + that.name); // workaround for chromium bug 124926 (still no audio with this, but at least we don't hang) - } else { - Module.printErr('Preloading file ' + that.name + ' failed'); - } - }, false, true); // canOwn this data in the filesystem, it is a slide into the heap that will never change - this.requests[this.name] = null; - }, - }; - new DataRequest(0, 2344, 0, 0).open('GET', '/data/arrowshooter_down.png'); - new DataRequest(2344, 4698, 0, 0).open('GET', '/data/arrowshooter_left.png'); - new DataRequest(4698, 7037, 0, 0).open('GET', '/data/arrowshooter_right.png'); - new DataRequest(7037, 9313, 0, 0).open('GET', '/data/arrowshooter_up.png'); - new DataRequest(9313, 10366, 0, 0).open('GET', '/data/arrow_down.png'); - new DataRequest(10366, 11291, 0, 0).open('GET', '/data/arrow_left.png'); - new DataRequest(11291, 12228, 0, 0).open('GET', '/data/arrow_right.png'); - new DataRequest(12228, 13096, 0, 0).open('GET', '/data/arrow_up.png'); - new DataRequest(13096, 15920, 0, 0).open('GET', '/data/barrel.png'); - new DataRequest(15920, 18827, 0, 0).open('GET', '/data/barrel2.png'); - new DataRequest(18827, 69509, 0, 1).open('GET', '/data/coin.wav'); - new DataRequest(69509, 74221, 0, 0).open('GET', '/data/column.png'); - new DataRequest(74221, 77808, 0, 0).open('GET', '/data/column_faded.png'); - new DataRequest(77808, 123766, 0, 0).open('GET', '/data/end.png'); - new DataRequest(123766, 125708, 0, 0).open('GET', '/data/end_point.png'); - new DataRequest(125708, 130045, 0, 0).open('GET', '/data/exit_point.png'); - new DataRequest(130045, 186059, 0, 1).open('GET', '/data/Explosion16.wav'); - new DataRequest(186059, 250159, 0, 1).open('GET', '/data/Explosion2.wav'); - new DataRequest(250159, 258818, 0, 0).open('GET', '/data/fire.png'); - new DataRequest(258818, 262733, 0, 0).open('GET', '/data/floor.png'); - new DataRequest(262733, 266695, 0, 0).open('GET', '/data/floor_center.png'); - new DataRequest(266695, 270593, 0, 0).open('GET', '/data/floor_left.png'); - new DataRequest(270593, 274545, 0, 0).open('GET', '/data/floor_right.png'); - new DataRequest(274545, 280733, 0, 1).open('GET', '/data/Hit_Hurt10.wav'); - new DataRequest(280733, 296579, 0, 1).open('GET', '/data/Hit_Hurt16.wav'); - new DataRequest(296579, 301561, 0, 0).open('GET', '/data/hole_lava.png'); - new DataRequest(301561, 305229, 0, 0).open('GET', '/data/hole_spiked.png'); - new DataRequest(305229, 308688, 0, 0).open('GET', '/data/lamp.png'); - new DataRequest(308688, 320660, 0, 1).open('GET', '/data/Laser_Shoot2.wav'); - new DataRequest(320660, 322000, 0, 0).open('GET', '/data/level_00.txt'); - new DataRequest(322000, 323144, 0, 0).open('GET', '/data/level_01.txt'); - new DataRequest(323144, 324484, 0, 0).open('GET', '/data/level_02.txt'); - new DataRequest(324484, 325554, 0, 0).open('GET', '/data/level_03.txt'); - new DataRequest(325554, 327089, 0, 0).open('GET', '/data/level_04.txt'); - new DataRequest(327089, 328555, 0, 0).open('GET', '/data/level_05.txt'); - new DataRequest(328555, 328847, 0, 0).open('GET', '/data/level_06.txt'); - new DataRequest(328847, 369638, 0, 0).open('GET', '/data/logo.png'); - new DataRequest(369638, 373865, 0, 0).open('GET', '/data/player_broken.png'); - new DataRequest(373865, 378163, 0, 0).open('GET', '/data/player_down.png'); - new DataRequest(378163, 382654, 0, 0).open('GET', '/data/player_left.png'); - new DataRequest(382654, 387128, 0, 0).open('GET', '/data/player_right.png'); - new DataRequest(387128, 391201, 0, 0).open('GET', '/data/player_up.png'); - new DataRequest(391201, 448215, 0, 1).open('GET', '/data/Powerup10.wav'); - new DataRequest(448215, 475099, 0, 1).open('GET', '/data/Powerup30.wav'); - new DataRequest(475099, 477906, 0, 0).open('GET', '/data/rock.png'); - new DataRequest(477906, 480256, 0, 0).open('GET', '/data/save_point.png'); - new DataRequest(480256, 485902, 0, 0).open('GET', '/data/save_point_active.png'); - new DataRequest(485902, 487037, 0, 0).open('GET', '/data/textshadow.png'); - var PACKAGE_PATH = window['encodeURIComponent'](window.location.pathname.toString().substring(0, window.location.pathname.toString().lastIndexOf('/')) + '/'); - var PACKAGE_NAME = 'build-emscripten-release/game.data'; - var REMOTE_PACKAGE_NAME = 'game.data'; - var PACKAGE_UUID = '011aba0b-a5a1-4466-a269-30e5155d3281'; - function processPackageData(arrayBuffer) { - Module.finishedDataFileDownloads++; - assert(arrayBuffer, 'Loading data file failed.'); - var byteArray = new Uint8Array(arrayBuffer); - var curr; - // copy the entire loaded file into a spot in the heap. Files will refer to slices in that. They cannot be freed though. - var ptr = Module['_malloc'](byteArray.length); - Module['HEAPU8'].set(byteArray, ptr); - DataRequest.prototype.byteArray = Module['HEAPU8'].subarray(ptr, ptr+byteArray.length); - DataRequest.prototype.requests["/data/arrowshooter_down.png"].onload(); - DataRequest.prototype.requests["/data/arrowshooter_left.png"].onload(); - DataRequest.prototype.requests["/data/arrowshooter_right.png"].onload(); - DataRequest.prototype.requests["/data/arrowshooter_up.png"].onload(); - DataRequest.prototype.requests["/data/arrow_down.png"].onload(); - DataRequest.prototype.requests["/data/arrow_left.png"].onload(); - DataRequest.prototype.requests["/data/arrow_right.png"].onload(); - DataRequest.prototype.requests["/data/arrow_up.png"].onload(); - DataRequest.prototype.requests["/data/barrel.png"].onload(); - DataRequest.prototype.requests["/data/barrel2.png"].onload(); - DataRequest.prototype.requests["/data/coin.wav"].onload(); - DataRequest.prototype.requests["/data/column.png"].onload(); - DataRequest.prototype.requests["/data/column_faded.png"].onload(); - DataRequest.prototype.requests["/data/end.png"].onload(); - DataRequest.prototype.requests["/data/end_point.png"].onload(); - DataRequest.prototype.requests["/data/exit_point.png"].onload(); - DataRequest.prototype.requests["/data/Explosion16.wav"].onload(); - DataRequest.prototype.requests["/data/Explosion2.wav"].onload(); - DataRequest.prototype.requests["/data/fire.png"].onload(); - DataRequest.prototype.requests["/data/floor.png"].onload(); - DataRequest.prototype.requests["/data/floor_center.png"].onload(); - DataRequest.prototype.requests["/data/floor_left.png"].onload(); - DataRequest.prototype.requests["/data/floor_right.png"].onload(); - DataRequest.prototype.requests["/data/Hit_Hurt10.wav"].onload(); - DataRequest.prototype.requests["/data/Hit_Hurt16.wav"].onload(); - DataRequest.prototype.requests["/data/hole_lava.png"].onload(); - DataRequest.prototype.requests["/data/hole_spiked.png"].onload(); - DataRequest.prototype.requests["/data/lamp.png"].onload(); - DataRequest.prototype.requests["/data/Laser_Shoot2.wav"].onload(); - DataRequest.prototype.requests["/data/level_00.txt"].onload(); - DataRequest.prototype.requests["/data/level_01.txt"].onload(); - DataRequest.prototype.requests["/data/level_02.txt"].onload(); - DataRequest.prototype.requests["/data/level_03.txt"].onload(); - DataRequest.prototype.requests["/data/level_04.txt"].onload(); - DataRequest.prototype.requests["/data/level_05.txt"].onload(); - DataRequest.prototype.requests["/data/level_06.txt"].onload(); - DataRequest.prototype.requests["/data/logo.png"].onload(); - DataRequest.prototype.requests["/data/player_broken.png"].onload(); - DataRequest.prototype.requests["/data/player_down.png"].onload(); - DataRequest.prototype.requests["/data/player_left.png"].onload(); - DataRequest.prototype.requests["/data/player_right.png"].onload(); - DataRequest.prototype.requests["/data/player_up.png"].onload(); - DataRequest.prototype.requests["/data/Powerup10.wav"].onload(); - DataRequest.prototype.requests["/data/Powerup30.wav"].onload(); - DataRequest.prototype.requests["/data/rock.png"].onload(); - DataRequest.prototype.requests["/data/save_point.png"].onload(); - DataRequest.prototype.requests["/data/save_point_active.png"].onload(); - DataRequest.prototype.requests["/data/textshadow.png"].onload(); - Module['removeRunDependency']('datafile_build-emscripten-release/game.data'); - }; - Module['addRunDependency']('datafile_build-emscripten-release/game.data'); - if (!Module.preloadResults) Module.preloadResults = {}; - Module.preloadResults[PACKAGE_NAME] = {fromCache: false}; - if (fetched) { - processPackageData(fetched); - fetched = null; - } else { - fetchedCallback = processPackageData; - } - } - if (Module['calledRun']) { - runWithFS(); - } else { - if (!Module['preRun']) Module['preRun'] = []; - Module["preRun"].push(runWithFS); // FS is not initialized yet, wait for it - } -})(); -// Note: For maximum-speed code, see "Optimizing Code" on the Emscripten wiki, https://github.com/kripken/emscripten/wiki/Optimizing-Code -// Note: Some Emscripten settings may limit the speed of the generated code. -// The Module object: Our interface to the outside world. We import -// and export values on it, and do the work to get that through -// closure compiler if necessary. There are various ways Module can be used: -// 1. Not defined. We create it here -// 2. A function parameter, function(Module) { ..generated code.. } -// 3. pre-run appended it, var Module = {}; ..generated code.. -// 4. External script tag defines var Module. -// We need to do an eval in order to handle the closure compiler -// case, where this code here is minified but Module was defined -// elsewhere (e.g. case 4 above). We also need to check if Module -// already exists (e.g. case 3 above). -// Note that if you want to run closure, and also to use Module -// after the generated code, you will need to define var Module = {}; -// before the code. Then that object will be used in the code, and you -// can continue to use Module afterwards as well. -var Module; -if (!Module) Module = eval('(function() { try { return Module || {} } catch(e) { return {} } })()'); -// Sometimes an existing Module object exists with properties -// meant to overwrite the default module functionality. Here -// we collect those properties and reapply _after_ we configure -// the current environment's defaults to avoid having to be so -// defensive during initialization. -var moduleOverrides = {}; -for (var key in Module) { - if (Module.hasOwnProperty(key)) { - moduleOverrides[key] = Module[key]; - } -} -// The environment setup code below is customized to use Module. -// *** Environment setup code *** -var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function'; -var ENVIRONMENT_IS_WEB = typeof window === 'object'; -var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; -var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; -if (ENVIRONMENT_IS_NODE) { - // Expose functionality in the same simple way that the shells work - // Note that we pollute the global namespace here, otherwise we break in node - Module['print'] = function print(x) { - process['stdout'].write(x + '\n'); - }; - Module['printErr'] = function printErr(x) { - process['stderr'].write(x + '\n'); - }; - var nodeFS = require('fs'); - var nodePath = require('path'); - Module['read'] = function read(filename, binary) { - filename = nodePath['normalize'](filename); - var ret = nodeFS['readFileSync'](filename); - // The path is absolute if the normalized version is the same as the resolved. - if (!ret && filename != nodePath['resolve'](filename)) { - filename = path.join(__dirname, '..', 'src', filename); - ret = nodeFS['readFileSync'](filename); - } - if (ret && !binary) ret = ret.toString(); - return ret; - }; - Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) }; - Module['load'] = function load(f) { - globalEval(read(f)); - }; - Module['arguments'] = process['argv'].slice(2); - module['exports'] = Module; -} -else if (ENVIRONMENT_IS_SHELL) { - Module['print'] = print; - if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm - if (typeof read != 'undefined') { - Module['read'] = read; - } else { - Module['read'] = function read() { throw 'no read() available (jsc?)' }; - } - Module['readBinary'] = function readBinary(f) { - return read(f, 'binary'); - }; - if (typeof scriptArgs != 'undefined') { - Module['arguments'] = scriptArgs; - } else if (typeof arguments != 'undefined') { - Module['arguments'] = arguments; - } - this['Module'] = Module; - eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined"); // wipe out the SpiderMonkey shell 'gc' function, which can confuse closure (uses it as a minified name, and it is then initted to a non-falsey value unexpectedly) -} -else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - Module['read'] = function read(url) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, false); - xhr.send(null); - return xhr.responseText; - }; - if (typeof arguments != 'undefined') { - Module['arguments'] = arguments; - } - if (typeof console !== 'undefined') { - Module['print'] = function print(x) { - console.log(x); - }; - Module['printErr'] = function printErr(x) { - console.log(x); - }; - } else { - // Probably a worker, and without console.log. We can do very little here... - var TRY_USE_DUMP = false; - Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) { - dump(x); - }) : (function(x) { - // self.postMessage(x); // enable this if you want stdout to be sent as messages - })); - } - if (ENVIRONMENT_IS_WEB) { - this['Module'] = Module; - } else { - Module['load'] = importScripts; - } -} -else { - // Unreachable because SHELL is dependant on the others - throw 'Unknown runtime environment. Where are we?'; -} -function globalEval(x) { - eval.call(null, x); -} -if (!Module['load'] == 'undefined' && Module['read']) { - Module['load'] = function load(f) { - globalEval(Module['read'](f)); - }; -} -if (!Module['print']) { - Module['print'] = function(){}; -} -if (!Module['printErr']) { - Module['printErr'] = Module['print']; -} -if (!Module['arguments']) { - Module['arguments'] = []; -} -// *** Environment setup code *** -// Closure helpers -Module.print = Module['print']; -Module.printErr = Module['printErr']; -// Callbacks -Module['preRun'] = []; -Module['postRun'] = []; -// Merge back in the overrides -for (var key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key]; - } -} -// === Auto-generated preamble library stuff === -//======================================== -// Runtime code shared with compiler -//======================================== -var Runtime = { - stackSave: function () { - return STACKTOP; - }, - stackRestore: function (stackTop) { - STACKTOP = stackTop; - }, - forceAlign: function (target, quantum) { - quantum = quantum || 4; - if (quantum == 1) return target; - if (isNumber(target) && isNumber(quantum)) { - return Math.ceil(target/quantum)*quantum; - } else if (isNumber(quantum) && isPowerOfTwo(quantum)) { - return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')'; - } - return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum; - }, - isNumberType: function (type) { - return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES; - }, - isPointerType: function isPointerType(type) { - return type[type.length-1] == '*'; -}, - isStructType: function isStructType(type) { - if (isPointerType(type)) return false; - if (isArrayType(type)) return true; - if (/?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types - // See comment in isStructPointerType() - return type[0] == '%'; -}, - INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0}, - FLOAT_TYPES: {"float":0,"double":0}, - or64: function (x, y) { - var l = (x | 0) | (y | 0); - var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296; - return l + h; - }, - and64: function (x, y) { - var l = (x | 0) & (y | 0); - var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296; - return l + h; - }, - xor64: function (x, y) { - var l = (x | 0) ^ (y | 0); - var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296; - return l + h; - }, - getNativeTypeSize: function (type) { - switch (type) { - case 'i1': case 'i8': return 1; - case 'i16': return 2; - case 'i32': return 4; - case 'i64': return 8; - case 'float': return 4; - case 'double': return 8; - default: { - if (type[type.length-1] === '*') { - return Runtime.QUANTUM_SIZE; // A pointer - } else if (type[0] === 'i') { - var bits = parseInt(type.substr(1)); - assert(bits % 8 === 0); - return bits/8; - } else { - return 0; - } - } - } - }, - getNativeFieldSize: function (type) { - return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE); - }, - dedup: function dedup(items, ident) { - var seen = {}; - if (ident) { - return items.filter(function(item) { - if (seen[item[ident]]) return false; - seen[item[ident]] = true; - return true; - }); - } else { - return items.filter(function(item) { - if (seen[item]) return false; - seen[item] = true; - return true; - }); - } -}, - set: function set() { - var args = typeof arguments[0] === 'object' ? arguments[0] : arguments; - var ret = {}; - for (var i = 0; i < args.length; i++) { - ret[args[i]] = 0; - } - return ret; -}, - STACK_ALIGN: 8, - getAlignSize: function (type, size, vararg) { - // we align i64s and doubles on 64-bit boundaries, unlike x86 - if (type == 'i64' || type == 'double' || vararg) return 8; - if (!type) return Math.min(size, 8); // align structures internally to 64 bits - return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE); - }, - calculateStructAlignment: function calculateStructAlignment(type) { - type.flatSize = 0; - type.alignSize = 0; - var diffs = []; - var prev = -1; - var index = 0; - type.flatIndexes = type.fields.map(function(field) { - index++; - var size, alignSize; - if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) { - size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s. - alignSize = Runtime.getAlignSize(field, size); - } else if (Runtime.isStructType(field)) { - if (field[1] === '0') { - // this is [0 x something]. When inside another structure like here, it must be at the end, - // and it adds no size - // XXX this happens in java-nbody for example... assert(index === type.fields.length, 'zero-length in the middle!'); - size = 0; - if (Types.types[field]) { - alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize); - } else { - alignSize = type.alignSize || QUANTUM_SIZE; - } - } else { - size = Types.types[field].flatSize; - alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize); - } - } else if (field[0] == 'b') { - // bN, large number field, like a [N x i8] - size = field.substr(1)|0; - alignSize = 1; - } else if (field[0] === '<') { - // vector type - size = alignSize = Types.types[field].flatSize; // fully aligned - } else if (field[0] === 'i') { - // illegal integer field, that could not be legalized because it is an internal structure field - // it is ok to have such fields, if we just use them as markers of field size and nothing more complex - size = alignSize = parseInt(field.substr(1))/8; - assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field); - } else { - assert(false, 'invalid type for calculateStructAlignment'); - } - if (type.packed) alignSize = 1; - type.alignSize = Math.max(type.alignSize, alignSize); - var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory - type.flatSize = curr + size; - if (prev >= 0) { - diffs.push(curr-prev); - } - prev = curr; - return curr; - }); - if (type.name_[0] === '[') { - // arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid - // allocating a potentially huge array for [999999 x i8] etc. - type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2; - } - type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize); - if (diffs.length == 0) { - type.flatFactor = type.flatSize; - } else if (Runtime.dedup(diffs).length == 1) { - type.flatFactor = diffs[0]; - } - type.needsFlattening = (type.flatFactor != 1); - return type.flatIndexes; - }, - generateStructInfo: function (struct, typeName, offset) { - var type, alignment; - if (typeName) { - offset = offset || 0; - type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName]; - if (!type) return null; - if (type.fields.length != struct.length) { - printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo'); - return null; - } - alignment = type.flatIndexes; - } else { - var type = { fields: struct.map(function(item) { return item[0] }) }; - alignment = Runtime.calculateStructAlignment(type); - } - var ret = { - __size__: type.flatSize - }; - if (typeName) { - struct.forEach(function(item, i) { - if (typeof item === 'string') { - ret[item] = alignment[i] + offset; - } else { - // embedded struct - var key; - for (var k in item) key = k; - ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]); - } - }); - } else { - struct.forEach(function(item, i) { - ret[item[1]] = alignment[i]; - }); - } - return ret; - }, - dynCall: function (sig, ptr, args) { - if (args && args.length) { - if (!args.splice) args = Array.prototype.slice.call(args); - args.splice(0, 0, ptr); - return Module['dynCall_' + sig].apply(null, args); - } else { - return Module['dynCall_' + sig].call(null, ptr); - } - }, - functionPointers: [], - addFunction: function (func) { - for (var i = 0; i < Runtime.functionPointers.length; i++) { - if (!Runtime.functionPointers[i]) { - Runtime.functionPointers[i] = func; - return 2*(1 + i); - } - } - throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.'; - }, - removeFunction: function (index) { - Runtime.functionPointers[(index-2)/2] = null; - }, - getAsmConst: function (code, numArgs) { - // code is a constant string on the heap, so we can cache these - if (!Runtime.asmConstCache) Runtime.asmConstCache = {}; - var func = Runtime.asmConstCache[code]; - if (func) return func; - var args = []; - for (var i = 0; i < numArgs; i++) { - args.push(String.fromCharCode(36) + i); // $0, $1 etc - } - return Runtime.asmConstCache[code] = eval('(function(' + args.join(',') + '){ ' + Pointer_stringify(code) + ' })'); // new Function does not allow upvars in node - }, - warnOnce: function (text) { - if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {}; - if (!Runtime.warnOnce.shown[text]) { - Runtime.warnOnce.shown[text] = 1; - Module.printErr(text); - } - }, - funcWrappers: {}, - getFuncWrapper: function (func, sig) { - assert(sig); - if (!Runtime.funcWrappers[func]) { - Runtime.funcWrappers[func] = function dynCall_wrapper() { - return Runtime.dynCall(sig, func, arguments); - }; - } - return Runtime.funcWrappers[func]; - }, - UTF8Processor: function () { - var buffer = []; - var needed = 0; - this.processCChar = function (code) { - code = code & 0xFF; - if (buffer.length == 0) { - if ((code & 0x80) == 0x00) { // 0xxxxxxx - return String.fromCharCode(code); - } - buffer.push(code); - if ((code & 0xE0) == 0xC0) { // 110xxxxx - needed = 1; - } else if ((code & 0xF0) == 0xE0) { // 1110xxxx - needed = 2; - } else { // 11110xxx - needed = 3; - } - return ''; - } - if (needed) { - buffer.push(code); - needed--; - if (needed > 0) return ''; - } - var c1 = buffer[0]; - var c2 = buffer[1]; - var c3 = buffer[2]; - var c4 = buffer[3]; - var ret; - if (buffer.length == 2) { - ret = String.fromCharCode(((c1 & 0x1F) << 6) | (c2 & 0x3F)); - } else if (buffer.length == 3) { - ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F)); - } else { - // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) | - ((c3 & 0x3F) << 6) | (c4 & 0x3F); - ret = String.fromCharCode( - Math.floor((codePoint - 0x10000) / 0x400) + 0xD800, - (codePoint - 0x10000) % 0x400 + 0xDC00); - } - buffer.length = 0; - return ret; - } - this.processJSString = function processJSString(string) { - string = unescape(encodeURIComponent(string)); - var ret = []; - for (var i = 0; i < string.length; i++) { - ret.push(string.charCodeAt(i)); - } - return ret; - } - }, - stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+7)&-8); return ret; }, - staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; }, - dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; }, - alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; }, - makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+4294967296)))); return ret; }, - GLOBAL_BASE: 8, - QUANTUM_SIZE: 4, - __dummy__: 0 -} -//======================================== -// Runtime essentials -//======================================== -var __THREW__ = 0; // Used in checking for thrown exceptions. -var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort() -var EXITSTATUS = 0; -var undef = 0; -// tempInt is used for 32-bit signed values or smaller. tempBigInt is used -// for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt -var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat; -var tempI64, tempI64b; -var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9; -function assert(condition, text) { - if (!condition) { - abort('Assertion failed: ' + text); - } -} -var globalScope = this; -// C calling interface. A convenient way to call C functions (in C files, or -// defined with extern "C"). -// -// Note: LLVM optimizations can inline and remove functions, after which you will not be -// able to call them. Closure can also do so. To avoid that, add your function to -// the exports using something like -// -// -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]' -// -// @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C") -// @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and -// 'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit). -// @param argTypes An array of the types of arguments for the function (if there are no arguments, this can be ommitted). Types are as in returnType, -// except that 'array' is not possible (there is no way for us to know the length of the array) -// @param args An array of the arguments to the function, as native JS values (as in returnType) -// Note that string arguments will be stored on the stack (the JS string will become a C string on the stack). -// @return The return value, as a native JS value (as in returnType) -function ccall(ident, returnType, argTypes, args) { - return ccallFunc(getCFunc(ident), returnType, argTypes, args); -} -Module["ccall"] = ccall; -// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) -function getCFunc(ident) { - try { - var func = Module['_' + ident]; // closure exported function - if (!func) func = eval('_' + ident); // explicit lookup - } catch(e) { - } - assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)'); - return func; -} -// Internal function that does a C call using a function, not an identifier -function ccallFunc(func, returnType, argTypes, args) { - var stack = 0; - function toC(value, type) { - if (type == 'string') { - if (value === null || value === undefined || value === 0) return 0; // null string - value = intArrayFromString(value); - type = 'array'; - } - if (type == 'array') { - if (!stack) stack = Runtime.stackSave(); - var ret = Runtime.stackAlloc(value.length); - writeArrayToMemory(value, ret); - return ret; - } - return value; - } - function fromC(value, type) { - if (type == 'string') { - return Pointer_stringify(value); - } - assert(type != 'array'); - return value; - } - var i = 0; - var cArgs = args ? args.map(function(arg) { - return toC(arg, argTypes[i++]); - }) : []; - var ret = fromC(func.apply(null, cArgs), returnType); - if (stack) Runtime.stackRestore(stack); - return ret; -} -// Returns a native JS wrapper for a C function. This is similar to ccall, but -// returns a function you can call repeatedly in a normal way. For example: -// -// var my_function = cwrap('my_c_function', 'number', ['number', 'number']); -// alert(my_function(5, 22)); -// alert(my_function(99, 12)); -// -function cwrap(ident, returnType, argTypes) { - var func = getCFunc(ident); - return function() { - return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments)); - } -} -Module["cwrap"] = cwrap; -// Sets a value in memory in a dynamic way at run-time. Uses the -// type data. This is the same as makeSetValue, except that -// makeSetValue is done at compile-time and generates the needed -// code then, whereas this function picks the right code at -// run-time. -// Note that setValue and getValue only do *aligned* writes and reads! -// Note that ccall uses JS types as for defining types, while setValue and -// getValue need LLVM types ('i8', 'i32') - this is a lower-level operation -function setValue(ptr, value, type, noSafe) { - type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit - switch(type) { - case 'i1': HEAP8[(ptr)]=value; break; - case 'i8': HEAP8[(ptr)]=value; break; - case 'i16': HEAP16[((ptr)>>1)]=value; break; - case 'i32': HEAP32[((ptr)>>2)]=value; break; - case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+4294967296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/(+4294967296))))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break; - case 'float': HEAPF32[((ptr)>>2)]=value; break; - case 'double': HEAPF64[((ptr)>>3)]=value; break; - default: abort('invalid type for setValue: ' + type); - } -} -Module['setValue'] = setValue; -// Parallel to setValue. -function getValue(ptr, type, noSafe) { - type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit - switch(type) { - case 'i1': return HEAP8[(ptr)]; - case 'i8': return HEAP8[(ptr)]; - case 'i16': return HEAP16[((ptr)>>1)]; - case 'i32': return HEAP32[((ptr)>>2)]; - case 'i64': return HEAP32[((ptr)>>2)]; - case 'float': return HEAPF32[((ptr)>>2)]; - case 'double': return HEAPF64[((ptr)>>3)]; - default: abort('invalid type for setValue: ' + type); - } - return null; -} -Module['getValue'] = getValue; -var ALLOC_NORMAL = 0; // Tries to use _malloc() -var ALLOC_STACK = 1; // Lives for the duration of the current function call -var ALLOC_STATIC = 2; // Cannot be freed -var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk -var ALLOC_NONE = 4; // Do not allocate -Module['ALLOC_NORMAL'] = ALLOC_NORMAL; -Module['ALLOC_STACK'] = ALLOC_STACK; -Module['ALLOC_STATIC'] = ALLOC_STATIC; -Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC; -Module['ALLOC_NONE'] = ALLOC_NONE; -// allocate(): This is for internal use. You can use it yourself as well, but the interface -// is a little tricky (see docs right below). The reason is that it is optimized -// for multiple syntaxes to save space in generated code. So you should -// normally not use allocate(), and instead allocate memory using _malloc(), -// initialize it with setValue(), and so forth. -// @slab: An array of data, or a number. If a number, then the size of the block to allocate, -// in *bytes* (note that this is sometimes confusing: the next parameter does not -// affect this!) -// @types: Either an array of types, one for each byte (or 0 if no type at that position), -// or a single type which is used for the entire block. This only matters if there -// is initial data - if @slab is a number, then this does not matter at all and is -// ignored. -// @allocator: How to allocate memory, see ALLOC_* -function allocate(slab, types, allocator, ptr) { - var zeroinit, size; - if (typeof slab === 'number') { - zeroinit = true; - size = slab; - } else { - zeroinit = false; - size = slab.length; - } - var singleType = typeof types === 'string' ? types : null; - var ret; - if (allocator == ALLOC_NONE) { - ret = ptr; - } else { - ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length)); - } - if (zeroinit) { - var ptr = ret, stop; - assert((ret & 3) == 0); - stop = ret + (size & ~3); - for (; ptr < stop; ptr += 4) { - HEAP32[((ptr)>>2)]=0; - } - stop = ret + size; - while (ptr < stop) { - HEAP8[((ptr++)|0)]=0; - } - return ret; - } - if (singleType === 'i8') { - if (slab.subarray || slab.slice) { - HEAPU8.set(slab, ret); - } else { - HEAPU8.set(new Uint8Array(slab), ret); - } - return ret; - } - var i = 0, type, typeSize, previousType; - while (i < size) { - var curr = slab[i]; - if (typeof curr === 'function') { - curr = Runtime.getFunctionIndex(curr); - } - type = singleType || types[i]; - if (type === 0) { - i++; - continue; - } - if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later - setValue(ret+i, curr, type); - // no need to look up size unless type changes, so cache it - if (previousType !== type) { - typeSize = Runtime.getNativeTypeSize(type); - previousType = type; - } - i += typeSize; - } - return ret; -} -Module['allocate'] = allocate; -function Pointer_stringify(ptr, /* optional */ length) { - // TODO: use TextDecoder - // Find the length, and check for UTF while doing so - var hasUtf = false; - var t; - var i = 0; - while (1) { - t = HEAPU8[(((ptr)+(i))|0)]; - if (t >= 128) hasUtf = true; - else if (t == 0 && !length) break; - i++; - if (length && i == length) break; - } - if (!length) length = i; - var ret = ''; - if (!hasUtf) { - var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack - var curr; - while (length > 0) { - curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK))); - ret = ret ? ret + curr : curr; - ptr += MAX_CHUNK; - length -= MAX_CHUNK; - } - return ret; - } - var utf8 = new Runtime.UTF8Processor(); - for (i = 0; i < length; i++) { - t = HEAPU8[(((ptr)+(i))|0)]; - ret += utf8.processCChar(t); - } - return ret; -} -Module['Pointer_stringify'] = Pointer_stringify; -// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns -// a copy of that string as a Javascript String object. -function UTF16ToString(ptr) { - var i = 0; - var str = ''; - while (1) { - var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; - if (codeUnit == 0) - return str; - ++i; - // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. - str += String.fromCharCode(codeUnit); - } -} -Module['UTF16ToString'] = UTF16ToString; -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP. -function stringToUTF16(str, outPtr) { - for(var i = 0; i < str.length; ++i) { - // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. - var codeUnit = str.charCodeAt(i); // possibly a lead surrogate - HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit - } - // Null-terminate the pointer to the HEAP. - HEAP16[(((outPtr)+(str.length*2))>>1)]=0 -} -Module['stringToUTF16'] = stringToUTF16; -// Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emscripten HEAP, returns -// a copy of that string as a Javascript String object. -function UTF32ToString(ptr) { - var i = 0; - var str = ''; - while (1) { - var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; - if (utf32 == 0) - return str; - ++i; - // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. - if (utf32 >= 0x10000) { - var ch = utf32 - 0x10000; - str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); - } else { - str += String.fromCharCode(utf32); - } - } -} -Module['UTF32ToString'] = UTF32ToString; -// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', -// null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP, -// but can use less, since str.length does not return the number of characters in the string, but the number of UTF-16 code units in the string. -function stringToUTF32(str, outPtr) { - var iChar = 0; - for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) { - // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. - var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate - if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { - var trailSurrogate = str.charCodeAt(++iCodeUnit); - codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); - } - HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit - ++iChar; - } - // Null-terminate the pointer to the HEAP. - HEAP32[(((outPtr)+(iChar*4))>>2)]=0 -} -Module['stringToUTF32'] = stringToUTF32; -function demangle(func) { - try { - if (typeof func === 'number') func = Pointer_stringify(func); - if (func[0] !== '_') return func; - if (func[1] !== '_') return func; // C function - if (func[2] !== 'Z') return func; - switch (func[3]) { - case 'n': return 'operator new()'; - case 'd': return 'operator delete()'; - } - var i = 3; - // params, etc. - var basicTypes = { - 'v': 'void', - 'b': 'bool', - 'c': 'char', - 's': 'short', - 'i': 'int', - 'l': 'long', - 'f': 'float', - 'd': 'double', - 'w': 'wchar_t', - 'a': 'signed char', - 'h': 'unsigned char', - 't': 'unsigned short', - 'j': 'unsigned int', - 'm': 'unsigned long', - 'x': 'long long', - 'y': 'unsigned long long', - 'z': '...' - }; - function dump(x) { - //return; - if (x) Module.print(x); - Module.print(func); - var pre = ''; - for (var a = 0; a < i; a++) pre += ' '; - Module.print (pre + '^'); - } - var subs = []; - function parseNested() { - i++; - if (func[i] === 'K') i++; // ignore const - var parts = []; - while (func[i] !== 'E') { - if (func[i] === 'S') { // substitution - i++; - var next = func.indexOf('_', i); - var num = func.substring(i, next) || 0; - parts.push(subs[num] || '?'); - i = next+1; - continue; - } - if (func[i] === 'C') { // constructor - parts.push(parts[parts.length-1]); - i += 2; - continue; - } - var size = parseInt(func.substr(i)); - var pre = size.toString().length; - if (!size || !pre) { i--; break; } // counter i++ below us - var curr = func.substr(i + pre, size); - parts.push(curr); - subs.push(curr); - i += pre + size; - } - i++; // skip E - return parts; - } - var first = true; - function parse(rawList, limit, allowVoid) { // main parser - limit = limit || Infinity; - var ret = '', list = []; - function flushList() { - return '(' + list.join(', ') + ')'; - } - var name; - if (func[i] === 'N') { - // namespaced N-E - name = parseNested().join('::'); - limit--; - if (limit === 0) return rawList ? [name] : name; - } else { - // not namespaced - if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L' - var size = parseInt(func.substr(i)); - if (size) { - var pre = size.toString().length; - name = func.substr(i + pre, size); - i += pre + size; - } - } - first = false; - if (func[i] === 'I') { - i++; - var iList = parse(true); - var iRet = parse(true, 1, true); - ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>'; - } else { - ret = name; - } - paramLoop: while (i < func.length && limit-- > 0) { - //dump('paramLoop'); - var c = func[i++]; - if (c in basicTypes) { - list.push(basicTypes[c]); - } else { - switch (c) { - case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer - case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference - case 'L': { // literal - i++; // skip basic type - var end = func.indexOf('E', i); - var size = end - i; - list.push(func.substr(i, size)); - i += size + 2; // size + 'EE' - break; - } - case 'A': { // array - var size = parseInt(func.substr(i)); - i += size.toString().length; - if (func[i] !== '_') throw '?'; - i++; // skip _ - list.push(parse(true, 1, true)[0] + ' [' + size + ']'); - break; - } - case 'E': break paramLoop; - default: ret += '?' + c; break paramLoop; - } - } - } - if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void) - return rawList ? list : ret + flushList(); - } - return parse(); - } catch(e) { - return func; - } -} -function demangleAll(text) { - return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') }); -} -function stackTrace() { - var stack = new Error().stack; - return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack trace is not available at least on IE10 and Safari 6. -} -// Memory management -var PAGE_SIZE = 4096; -function alignMemoryPage(x) { - return (x+4095)&-4096; -} -var HEAP; -var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; -var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area -var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area -var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk -function enlargeMemory() { - abort('Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', or (2) set Module.TOTAL_MEMORY before the program runs.'); -} -var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880; -var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 16777216; -var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152; -// Initialize the runtime's memory -// check for full engine support (use string 'subarray' to avoid closure compiler confusion) -assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']), - 'Cannot fallback to non-typed array case: Code is too specialized'); -var buffer = new ArrayBuffer(TOTAL_MEMORY); -HEAP8 = new Int8Array(buffer); -HEAP16 = new Int16Array(buffer); -HEAP32 = new Int32Array(buffer); -HEAPU8 = new Uint8Array(buffer); -HEAPU16 = new Uint16Array(buffer); -HEAPU32 = new Uint32Array(buffer); -HEAPF32 = new Float32Array(buffer); -HEAPF64 = new Float64Array(buffer); -// Endianness check (note: assumes compiler arch was little-endian) -HEAP32[0] = 255; -assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system'); -Module['HEAP'] = HEAP; -Module['HEAP8'] = HEAP8; -Module['HEAP16'] = HEAP16; -Module['HEAP32'] = HEAP32; -Module['HEAPU8'] = HEAPU8; -Module['HEAPU16'] = HEAPU16; -Module['HEAPU32'] = HEAPU32; -Module['HEAPF32'] = HEAPF32; -Module['HEAPF64'] = HEAPF64; -function callRuntimeCallbacks(callbacks) { - while(callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback == 'function') { - callback(); - continue; - } - var func = callback.func; - if (typeof func === 'number') { - if (callback.arg === undefined) { - Runtime.dynCall('v', func); - } else { - Runtime.dynCall('vi', func, [callback.arg]); - } - } else { - func(callback.arg === undefined ? null : callback.arg); - } - } -} -var __ATPRERUN__ = []; // functions called before the runtime is initialized -var __ATINIT__ = []; // functions called during startup -var __ATMAIN__ = []; // functions called when main() is to be run -var __ATEXIT__ = []; // functions called during shutdown -var __ATPOSTRUN__ = []; // functions called after the runtime has exited -var runtimeInitialized = false; -function preRun() { - // compatibility - merge in anything from Module['preRun'] at this time - if (Module['preRun']) { - if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; - while (Module['preRun'].length) { - addOnPreRun(Module['preRun'].shift()); - } - } - callRuntimeCallbacks(__ATPRERUN__); -} -function ensureInitRuntime() { - if (runtimeInitialized) return; - runtimeInitialized = true; - callRuntimeCallbacks(__ATINIT__); -} -function preMain() { - callRuntimeCallbacks(__ATMAIN__); -} -function exitRuntime() { - callRuntimeCallbacks(__ATEXIT__); -} -function postRun() { - // compatibility - merge in anything from Module['postRun'] at this time - if (Module['postRun']) { - if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; - while (Module['postRun'].length) { - addOnPostRun(Module['postRun'].shift()); - } - } - callRuntimeCallbacks(__ATPOSTRUN__); -} -function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb); -} -Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun; -function addOnInit(cb) { - __ATINIT__.unshift(cb); -} -Module['addOnInit'] = Module.addOnInit = addOnInit; -function addOnPreMain(cb) { - __ATMAIN__.unshift(cb); -} -Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain; -function addOnExit(cb) { - __ATEXIT__.unshift(cb); -} -Module['addOnExit'] = Module.addOnExit = addOnExit; -function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb); -} -Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun; -// Tools -// This processes a JS string into a C-line array of numbers, 0-terminated. -// For LLVM-originating strings, see parser.js:parseLLVMString function -function intArrayFromString(stringy, dontAddNull, length /* optional */) { - var ret = (new Runtime.UTF8Processor()).processJSString(stringy); - if (length) { - ret.length = length; - } - if (!dontAddNull) { - ret.push(0); - } - return ret; -} -Module['intArrayFromString'] = intArrayFromString; -function intArrayToString(array) { - var ret = []; - for (var i = 0; i < array.length; i++) { - var chr = array[i]; - if (chr > 0xFF) { - chr &= 0xFF; - } - ret.push(String.fromCharCode(chr)); - } - return ret.join(''); -} -Module['intArrayToString'] = intArrayToString; -// Write a Javascript array to somewhere in the heap -function writeStringToMemory(string, buffer, dontAddNull) { - var array = intArrayFromString(string, dontAddNull); - var i = 0; - while (i < array.length) { - var chr = array[i]; - HEAP8[(((buffer)+(i))|0)]=chr - i = i + 1; - } -} -Module['writeStringToMemory'] = writeStringToMemory; -function writeArrayToMemory(array, buffer) { - for (var i = 0; i < array.length; i++) { - HEAP8[(((buffer)+(i))|0)]=array[i]; - } -} -Module['writeArrayToMemory'] = writeArrayToMemory; -function writeAsciiToMemory(str, buffer, dontAddNull) { - for (var i = 0; i < str.length; i++) { - HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i) - } - if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0 -} -Module['writeAsciiToMemory'] = writeAsciiToMemory; -function unSign(value, bits, ignore, sig) { - if (value >= 0) { - return value; - } - return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts - : Math.pow(2, bits) + value; -} -function reSign(value, bits, ignore, sig) { - if (value <= 0) { - return value; - } - var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32 - : Math.pow(2, bits-1); - if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that - // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors - // TODO: In i64 mode 1, resign the two parts separately and safely - value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts - } - return value; -} -if (!Math['imul']) Math['imul'] = function imul(a, b) { - var ah = a >>> 16; - var al = a & 0xffff; - var bh = b >>> 16; - var bl = b & 0xffff; - return (al*bl + ((ah*bl + al*bh) << 16))|0; -}; -Math.imul = Math['imul']; -var Math_abs = Math.abs; -var Math_cos = Math.cos; -var Math_sin = Math.sin; -var Math_tan = Math.tan; -var Math_acos = Math.acos; -var Math_asin = Math.asin; -var Math_atan = Math.atan; -var Math_atan2 = Math.atan2; -var Math_exp = Math.exp; -var Math_log = Math.log; -var Math_sqrt = Math.sqrt; -var Math_ceil = Math.ceil; -var Math_floor = Math.floor; -var Math_pow = Math.pow; -var Math_imul = Math.imul; -var Math_fround = Math.fround; -var Math_min = Math.min; -// A counter of dependencies for calling run(). If we need to -// do asynchronous work before running, increment this and -// decrement it. Incrementing must happen in a place like -// PRE_RUN_ADDITIONS (used by emcc to add file preloading). -// Note that you can add dependencies in preRun, even though -// it happens right before run - run will be postponed until -// the dependencies are met. -var runDependencies = 0; -var runDependencyWatcher = null; -var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled -function addRunDependency(id) { - runDependencies++; - if (Module['monitorRunDependencies']) { - Module['monitorRunDependencies'](runDependencies); - } -} -Module['addRunDependency'] = addRunDependency; -function removeRunDependency(id) { - runDependencies--; - if (Module['monitorRunDependencies']) { - Module['monitorRunDependencies'](runDependencies); - } - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); // can add another dependenciesFulfilled - } - } -} -Module['removeRunDependency'] = removeRunDependency; -Module["preloadedImages"] = {}; // maps url to image data -Module["preloadedAudios"] = {}; // maps url to audio data -var memoryInitializer = null; -// === Body === -STATIC_BASE = 8; -STATICTOP = STATIC_BASE + 12256; -/* global initializers */ __ATINIT__.push({ func: function() { runPostSets() } }); -/* memory initializer */ allocate([65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,68,65,84,65,32,98,108,111,99,107,32,110,111,116,32,102,111,117,110,100,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,78,111,116,32,80,67,77,32,102,111,114,109,97,116,46,0,0,0,0,0,0,0,0,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,0,0,0,0,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,105,108,101,32,116,111,111,32,115,104,111,114,116,46,0,0,0,0,0,0,0,0,42,42,42,32,68,114,97,119,32,73,110,102,111,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,105,108,101,32,105,115,32,110,111,116,32,87,65,86,69,46,0,0,0,0,0,0,10,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,0,0,0,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,105,108,101,32,105,115,32,110,111,116,32,82,73,70,70,46,0,0,0,0,0,0,68,114,97,119,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,105,110,105,116,105,97,108,105,122,105,110,103,32,118,105,100,101,111,32,109,111,100,101,46,0,0,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,97,105,108,117,114,101,32,111,112,101,110,105,110,103,32,102,105,108,101,46,0,0,80,114,111,102,105,108,105,110,103,58,58,58,58,58,58,58,58,58,0,0,0,0,0,0,65,117,100,105,111,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,111,112,101,110,105,110,103,32,97,117,100,105,111,46,32,40,52,52,46,49,75,104,122,47,49,54,98,47,50,99,41,46,0,0,0,0,65,117,100,105,111,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,105,110,105,116,105,97,108,105,122,105,110,103,32,83,68,76,32,65,117,100,105,111,46,0,0,0,0,0,68,101,98,117,103,32,77,111,100,101,32,65,99,116,105,118,97,116,101,100,33,0,0,0,65,117,100,105,111,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,111,112,101,110,105,110,103,32,97,117,100,105,111,46,0,0,0,0,0,0,68,114,97,119,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,105,110,105,116,105,97,108,105,122,105,110,103,32,83,68,76,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,150,48,7,119,44,97,14,238,186,81,9,153,25,196,109,7,143,244,106,112,53,165,99,233,163,149,100,158,50,136,219,14,164,184,220,121,30,233,213,224,136,217,210,151,43,76,182,9,189,124,177,126,7,45,184,231,145,29,191,144,100,16,183,29,242,32,176,106,72,113,185,243,222,65,190,132,125,212,218,26,235,228,221,109,81,181,212,244,199,133,211,131,86,152,108,19,192,168,107,100,122,249,98,253,236,201,101,138,79,92,1,20,217,108,6,99,99,61,15,250,245,13,8,141,200,32,110,59,94,16,105,76,228,65,96,213,114,113,103,162,209,228,3,60,71,212,4,75,253,133,13,210,107,181,10,165,250,168,181,53,108,152,178,66,214,201,187,219,64,249,188,172,227,108,216,50,117,92,223,69,207,13,214,220,89,61,209,171,172,48,217,38,58,0,222,81,128,81,215,200,22,97,208,191,181,244,180,33,35,196,179,86,153,149,186,207,15,165,189,184,158,184,2,40,8,136,5,95,178,217,12,198,36,233,11,177,135,124,111,47,17,76,104,88,171,29,97,193,61,45,102,182,144,65,220,118,6,113,219,1,188,32,210,152,42,16,213,239,137,133,177,113,31,181,182,6,165,228,191,159,51,212,184,232,162,201,7,120,52,249,0,15,142,168,9,150,24,152,14,225,187,13,106,127,45,61,109,8,151,108,100,145,1,92,99,230,244,81,107,107,98,97,108,28,216,48,101,133,78,0,98,242,237,149,6,108,123,165,1,27,193,244,8,130,87,196,15,245,198,217,176,101,80,233,183,18,234,184,190,139,124,136,185,252,223,29,221,98,73,45,218,21,243,124,211,140,101,76,212,251,88,97,178,77,206,81,181,58,116,0,188,163,226,48,187,212,65,165,223,74,215,149,216,61,109,196,209,164,251,244,214,211,106,233,105,67,252,217,110,52,70,136,103,173,208,184,96,218,115,45,4,68,229,29,3,51,95,76,10,170,201,124,13,221,60,113,5,80,170,65,2,39,16,16,11,190,134,32,12,201,37,181,104,87,179,133,111,32,9,212,102,185,159,228,97,206,14,249,222,94,152,201,217,41,34,152,208,176,180,168,215,199,23,61,179,89,129,13,180,46,59,92,189,183,173,108,186,192,32,131,184,237,182,179,191,154,12,226,182,3,154,210,177,116,57,71,213,234,175,119,210,157,21,38,219,4,131,22,220,115,18,11,99,227,132,59,100,148,62,106,109,13,168,90,106,122,11,207,14,228,157,255,9,147,39,174,0,10,177,158,7,125,68,147,15,240,210,163,8,135,104,242,1,30,254,194,6,105,93,87,98,247,203,103,101,128,113,54,108,25,231,6,107,110,118,27,212,254,224,43,211,137,90,122,218,16,204,74,221,103,111,223,185,249,249,239,190,142,67,190,183,23,213,142,176,96,232,163,214,214,126,147,209,161,196,194,216,56,82,242,223,79,241,103,187,209,103,87,188,166,221,6,181,63,75,54,178,72,218,43,13,216,76,27,10,175,246,74,3,54,96,122,4,65,195,239,96,223,85,223,103,168,239,142,110,49,121,190,105,70,140,179,97,203,26,131,102,188,160,210,111,37,54,226,104,82,149,119,12,204,3,71,11,187,185,22,2,34,47,38,5,85,190,59,186,197,40,11,189,178,146,90,180,43,4,106,179,92,167,255,215,194,49,207,208,181,139,158,217,44,29,174,222,91,176,194,100,155,38,242,99,236,156,163,106,117,10,147,109,2,169,6,9,156,63,54,14,235,133,103,7,114,19,87,0,5,130,74,191,149,20,122,184,226,174,43,177,123,56,27,182,12,155,142,210,146,13,190,213,229,183,239,220,124,33,223,219,11,212,210,211,134,66,226,212,241,248,179,221,104,110,131,218,31,205,22,190,129,91,38,185,246,225,119,176,111,119,71,183,24,230,90,8,136,112,106,15,255,202,59,6,102,92,11,1,17,255,158,101,143,105,174,98,248,211,255,107,97,69,207,108,22,120,226,10,160,238,210,13,215,84,131,4,78,194,179,3,57,97,38,103,167,247,22,96,208,77,71,105,73,219,119,110,62,74,106,209,174,220,90,214,217,102,11,223,64,240,59,216,55,83,174,188,169,197,158,187,222,127,207,178,71,233,255,181,48,28,242,189,189,138,194,186,202,48,147,179,83,166,163,180,36,5,54,208,186,147,6,215,205,41,87,222,84,191,103,217,35,46,122,102,179,184,74,97,196,2,27,104,93,148,43,111,42,55,190,11,180,161,142,12,195,27,223,5,90,141,239,2,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,0,0,0,0,0,0,0,0,0,0,0,16,56,124,254,0,0,0,0,254,124,56,16,0,0,32,48,56,60,56,48,32,0,4,12,28,60,28,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,24,24,24,0,24,0,108,108,0,0,0,0,0,0,108,108,254,108,254,108,108,0,24,62,96,60,6,124,24,0,0,198,204,24,48,102,198,0,56,108,56,118,220,204,118,0,24,24,48,0,0,0,0,0,12,24,48,48,48,24,12,0,48,24,12,12,12,24,48,0,0,108,56,254,56,108,0,0,0,24,24,126,24,24,0,0,0,0,0,0,24,24,48,0,0,0,0,126,0,0,0,0,0,0,0,0,24,24,0,0,6,12,24,48,96,192,128,0,60,102,110,118,102,60,0,0,24,56,120,24,24,24,0,0,60,102,6,28,48,126,0,0,60,102,12,6,102,60,0,0,28,60,108,204,254,12,0,0,126,96,124,6,102,60,0,0,28,48,96,124,102,60,0,0,126,6,6,12,24,24,0,0,60,102,60,102,102,60,0,0,60,102,62,6,12,56,0,0,0,24,24,0,24,24,0,0,0,24,24,0,24,24,48,0,0,6,24,96,24,6,0,0,0,0,126,0,126,0,0,0,0,96,24,6,24,96,0,0,60,102,6,12,24,0,24,0,60,102,90,90,94,96,60,0,60,102,102,126,102,102,0,0,124,102,124,102,102,124,0,0,60,96,96,96,96,60,0,0,120,108,102,102,108,120,0,0,126,96,120,96,96,126,0,0,126,96,120,96,96,96,0,0,60,102,96,110,102,62,0,0,102,102,126,102,102,102,0,0,60,24,24,24,24,60,0,0,6,6,6,6,102,60,0,0,198,204,216,248,204,198,0,0,96,96,96,96,96,124,0,0,198,238,254,214,198,198,0,0,198,230,246,222,206,198,0,0,60,102,102,102,102,60,0,0,252,198,198,252,192,192,0,0,120,204,204,204,220,126,0,0,124,102,102,124,108,102,0,0,124,198,112,28,198,124,0,0,126,24,24,24,24,24,0,0,102,102,102,102,102,60,0,0,102,102,102,102,60,24,0,0,198,198,214,254,238,198,0,0,198,108,56,56,108,198,0,0,198,108,56,48,48,48,0,0,254,12,24,48,96,254,0,0,60,48,48,48,48,48,60,0,192,96,48,24,12,6,2,0,60,12,12,12,12,12,60,0,24,60,102,0,0,0,0,0,0,0,0,0,0,0,254,0,24,24,12,0,0,0,0,0,0,60,6,62,102,62,0,0,96,96,124,102,102,124,0,0,0,60,96,96,96,60,0,0,6,6,62,102,102,62,0,0,0,60,102,126,96,60,0,0,28,48,124,48,48,48,0,0,0,62,102,102,62,6,60,0,96,96,124,102,102,102,0,0,48,0,48,48,48,24,0,0,12,0,12,12,12,12,120,0,96,102,108,120,108,102,0,0,24,24,24,24,24,12,0,0,0,236,254,214,198,198,0,0,0,124,102,102,102,102,0,0,0,60,102,102,102,60,0,0,0,124,102,102,124,96,96,0,0,62,102,102,62,6,6,0,0,124,102,96,96,96,0,0,0,60,96,60,6,124,0,0,48,48,124,48,48,28,0,0,0,102,102,102,102,62,0,0,0,102,102,102,60,24,0,0,0,198,198,214,254,108,0,0,0,204,120,48,120,204,0,0,0,102,102,102,60,24,48,0,0,126,12,24,48,126,0,0,12,24,24,48,24,24,12,0,24,24,24,24,24,24,24,0,48,24,24,12,24,24,48,0,118,220,0,0,0,0,0,0,0,16,56,108,198,198,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,108,97,109,112,46,112,110,103,0,0,0,68,114,97,119,95,76,111,97,100,73,109,97,103,101,58,32,73,109,97,103,101,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,58,32,37,115,10,0,0,0,68,114,97,119,95,76,111,97,100,73,109,97,103,101,58,32,80,78,71,32,100,101,99,111,100,101,114,32,101,114,114,111,114,32,37,117,58,32,37,115,10,0,0,0,0,0,0,0,46,80,78,71,0,0,0,0,46,112,110,103,0,0,0,0,115,80,114,111,106,101,99,116,105,111,110,77,97,116,114,105,120,0,0,0,0,0,0,0,115,84,101,120,116,117,114,101,0,0,0,0,0,0,0,0,76,101,118,101,108,32,67,111,109,112,108,101,116,101,0,0,97,67,111,108,111,114,0,0,97,84,101,120,67,111,111,114,100,0,0,0,0,0,0,0,117,110,101,120,105,115,116,105,110,103,32,99,111,100,101,32,119,104,105,108,101,32,112,114,111,99,101,115,115,105,110,103,32,100,121,110,97,109,105,99,32,100,101,102,108,97,116,101,32,98,108,111,99,107,0,0,97,80,111,115,105,116,105,111,110,0,0,0,0,0,0,0,100,97,116,97,47,114,111,99,107,46,112,110,103,0,0,0,32,86,101,114,115,105,111,110,58,32,37,115,10,0,0,0,32,82,101,110,100,101,114,101,114,58,32,37,115,10,0,0,32,86,101,110,100,111,114,58,32,37,115,10,0,0,0,0,76,101,118,101,108,58,32,37,100,46,37,100,0,0,0,0,87,65,86,69,0,0,0,0,100,97,116,97,47,98,97,114,114,101,108,46,112,110,103,0,112,114,111,98,108,101,109,32,119,104,105,108,101,32,112,114,111,99,101,115,115,105,110,103,32,100,121,110,97,109,105,99,32,100,101,102,108,97,116,101,32,98,108,111,99,107,0,0,117,110,107,110,111,119,110,32,101,114,114,111,114,32,99,111,100,101,0,0,0,0,0,0,100,97,116,97,47,99,111,108,117,109,110,95,102,97,100,101,100,46,112,110,103,0,0,0,119,105,110,100,111,119,115,105,122,101,32,109,117,115,116,32,98,101,32,97,32,112,111,119,101,114,32,111,102,32,116,119,111,0,0,0,0,0,0,0,116,101,120,116,32,99,104,117,110,107,32,107,101,121,119,111,114,100,32,116,111,111,32,115,104,111,114,116,32,111,114,32,108,111,110,103,58,32,109,117,115,116,32,104,97,118,101,32,115,105,122,101,32,49,45,55,57,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,102,105,108,116,101,114,32,115,116,114,97,116,101,103,121,32,103,105,118,101,110,32,102,111,114,32,76,111,100,101,80,78,71,69,110,99,111,100,101,114,83,101,116,116,105,110,103,115,46,102,105,108,116,101,114,95,115,116,114,97,116,101,103,121,0,0,0,0,0,0,0,0,109,117,115,116,32,112,114,111,118,105,100,101,32,99,117,115,116,111,109,32,122,108,105,98,32,102,117,110,99,116,105,111,110,32,112,111,105,110,116,101,114,32,105,102,32,76,79,68,69,80,78,71,95,67,79,77,80,73,76,69,95,90,76,73,66,32,105,115,32,110,111,116,32,100,101,102,105,110,101,100,0,0,0,0,0,0,0,0,105,109,112,111,115,115,105,98,108,101,32,111,102,102,115,101,116,32,105,110,32,108,122,55,55,32,101,110,99,111,100,105,110,103,32,40,105,110,116,101,114,110,97,108,32,98,117,103,41,0,0,0,0,0,0,0,105,110,116,101,114,110,97,108,32,99,111,108,111,114,32,99,111,110,118,101,114,115,105,111,110,32,98,117,103,0,0,0,103,105,118,101,110,32,105,109,97,103,101,32,116,111,111,32,115,109,97,108,108,32,116,111,32,99,111,110,116,97,105,110,32,97,108,108,32,112,105,120,101,108,115,32,116,111,32,98,101,32,101,110,99,111,100,101,100,0,0,0,0,0,0,0,80,114,101,115,115,32,91,83,112,97,99,101,93,32,116,111,32,84,105,116,108,101,46,0,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,102,97,105,108,101,100,0,0,0,0,0,0,0,0,99,111,108,111,114,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,112,97,108,101,116,116,101,32,114,101,113,117,101,115,116,101,100,32,119,104,105,108,101,32,97,32,99,111,108,111,114,32,105,115,110,39,116,32,105,110,32,112,97,108,101,116,116,101,0,0,0,0,101,114,114,111,114,32,105,110,32,99,111,100,101,32,116,114,101,101,32,109,97,100,101,32,105,116,32,106,117,109,112,32,111,117,116,115,105,100,101,32,111,102,32,104,117,102,102,109,97,110,32,116,114,101,101,0,108,97,122,121,32,109,97,116,99,104,105,110,103,32,97,116,32,112,111,115,32,48,32,105,115,32,105,109,112,111,115,115,105,98,108,101,0,0,0,0,100,97,116,97,47,99,111,108,117,109,110,46,112,110,103,0,116,114,105,101,100,32,99,114,101,97,116,105,110,103,32,97,32,116,114,101,101,32,111,102,32,48,32,115,121,109,98,111,108,115,0,0,0,0,0,0,102,97,105,108,101,100,32,116,111,32,111,112,101,110,32,102,105,108,101,32,102,111,114,32,119,114,105,116,105,110,103,0,102,97,105,108,101,100,32,116,111,32,111,112,101,110,32,102,105,108,101,32,102,111,114,32,114,101,97,100,105,110,103,0,105,110,116,101,103,101,114,32,111,118,101,114,102,108,111,119,32,105,110,32,98,117,102,102,101,114,32,115,105,122,101,0,105,84,88,116,32,99,104,117,110,107,32,116,111,111,32,115,104,111,114,116,32,116,111,32,99,111,110,116,97,105,110,32,114,101,113,117,105,114,101,100,32,98,121,116,101,115,0,0,110,111,32,110,117,108,108,32,116,101,114,109,105,110,97,116,105,111,110,32,99,104,97,114,32,102,111,117,110,100,32,119,104,105,108,101,32,100,101,99,111,100,105,110,103,32,116,101,120,116,32,99,104,117,110,107,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,112,72,89,115,32,99,104,117,110,107,32,115,105,122,101,0,84,104,97,110,107,115,32,102,111,114,32,112,108,97,121,105,110,103,33,0,0,0,0,0,82,73,70,70,0,0,0,0,105,110,118,97,108,105,100,32,116,73,77,69,32,99,104,117,110,107,32,115,105,122,101,0,119,104,105,108,101,32,100,101,99,111,100,105,110,103,44,32,117,110,101,120,105,115,116,105,110,103,32,99,111,109,112,114,101,115,115,105,111,110,32,109,101,116,104,111,100,32,101,110,99,111,117,110,116,101,114,105,110,103,32,105,110,32,122,84,88,116,32,111,114,32,105,84,88,116,32,99,104,117,110,107,32,40,105,116,32,109,117,115,116,32,98,101,32,48,41,0,101,110,100,32,111,102,32,105,110,112,117,116,32,109,101,109,111,114,121,32,114,101,97,99,104,101,100,32,119,105,116,104,111,117,116,32,104,117,102,102,109,97,110,32,101,110,100,32,99,111,100,101,0,0,0,0,117,110,101,120,105,115,116,105,110,103,32,105,110,116,101,114,108,97,99,101,32,109,111,100,101,32,103,105,118,101,110,32,116,111,32,101,110,99,111,100,101,114,32,40,109,117,115,116,32,98,101,32,48,32,111,114,32,49,41,0,0,0,0,0,100,97,116,97,47,102,108,111,111,114,95,99,101,110,116,101,114,46,112,110,103,0,0,0,117,110,107,110,111,119,110,32,99,104,117,110,107,32,116,121,112,101,32,119,105,116,104,32,39,99,114,105,116,105,99,97,108,39,32,102,108,97,103,32,101,110,99,111,117,110,116,101,114,101,100,32,98,121,32,116,104,101,32,100,101,99,111,100,101,114,0,0,0,0,0,0,116,114,105,101,100,32,116,111,32,101,110,99,111,100,101,32,97,32,80,76,84,69,32,99,104,117,110,107,32,119,105,116,104,32,97,32,112,97,108,101,116,116,101,32,116,104,97,116,32,104,97,115,32,108,101,115,115,32,116,104,97,110,32,49,32,111,114,32,109,111,114,101,32,116,104,97,110,32,50,53,54,32,99,111,108,111,114,115,0,0,0,0,0,0,0,0,116,104,101,32,108,101,110,103,116,104,32,111,102,32,97,32,116,101,120,116,32,99,104,117,110,107,32,107,101,121,119,111,114,100,32,103,105,118,101,110,32,116,111,32,116,104,101,32,101,110,99,111,100,101,114,32,105,115,32,115,109,97,108,108,101,114,32,116,104,97,110,32,116,104,101,32,109,105,110,105,109,117,109,32,111,102,32,49,32,98,121,116,101,0,0,0,116,104,101,32,108,101,110,103,116,104,32,111,102,32,97,32,116,101,120,116,32,99,104,117,110,107,32,107,101,121,119,111,114,100,32,103,105,118,101,110,32,116,111,32,116,104,101,32,101,110,99,111,100,101,114,32,105,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,101,32,109,97,120,105,109,117,109,32,111,102,32,55,57,32,98,121,116,101,115,0,0,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,69,78,68,32,115,121,109,98,111,108,32,50,53,54,32,105,110,32,116,104,101,32,72,117,102,102,109,97,110,32,116,114,101,101,32,105,115,32,48,0,0,0,0,0,0,0,108,101,110,103,116,104,32,111,102,32,97,32,99,104,117,110,107,32,116,111,111,32,108,111,110,103,44,32,109,97,120,32,97,108,108,111,119,101,100,32,102,111,114,32,80,78,71,32,105,115,32,50,49,52,55,52,56,51,54,52,55,32,98,121,116,101,115,32,112,101,114,32,99,104,117,110,107,0,0,0,116,95,100,114,97,119,46,46,46,46,46,58,37,54,108,108,100,10,0,0,0,0,0,0,99,111,110,118,101,114,115,105,111,110,32,102,114,111,109,32,99,111,108,111,114,32,116,111,32,103,114,101,121,115,99,97,108,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,0,0,0,0,0,0,0,67,111,110,103,114,97,116,117,108,97,116,105,111,110,115,32,121,111,117,32,115,97,118,101,100,32,116,104,101,32,107,105,116,116,105,101,33,0,0,0,105,110,118,97,108,105,100,32,66,84,89,80,69,32,103,105,118,101,110,32,105,110,32,116,104,101,32,115,101,116,116,105,110,103,115,32,111,102,32,116,104,101,32,101,110,99,111,100,101,114,32,40,111,110,108,121,32,48,44,32,49,32,97,110,100,32,50,32,97,114,101,32,97,108,108,111,119,101,100,41,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,119,105,110,100,111,119,32,115,105,122,101,32,103,105,118,101,110,32,105,110,32,116,104,101,32,115,101,116,116,105,110,103,115,32,111,102,32,116,104,101,32,101,110,99,111,100,101,114,32,40,109,117,115,116,32,98,101,32,48,45,51,50,55,54,56,41,0,0,0,0,0,0,110,111,116,104,105,110,103,32,100,111,110,101,32,121,101,116,0,0,0,0,0,0,0,0,114,101,113,117,101,115,116,101,100,32,99,111,108,111,114,32,99,111,110,118,101,114,115,105,111,110,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,0,0,0,0,0,0,0,100,97,116,97,47,102,108,111,111,114,95,114,105,103,104,116,46,112,110,103,0,0,0,0,105,110,118,97,108,105,100,32,65,68,76,69,82,51,50,32,101,110,99,111,117,110,116,101,114,101,100,32,40,99,104,101,99,107,105,110,103,32,65,68,76,69,82,51,50,32,99,97,110,32,98,101,32,100,105,115,97,98,108,101,100,41,0,0,105,110,118,97,108,105,100,32,67,82,67,32,101,110,99,111,117,110,116,101,114,101,100,32,40,99,104,101,99,107,105,110,103,32,67,82,67,32,99,97,110,32,98,101,32,100,105,115,97,98,108,101,100,41,0,0,103,105,118,101,110,32,111,117,116,112,117,116,32,105,109,97,103,101,32,99,111,108,111,114,116,121,112,101,32,111,114,32,98,105,116,100,101,112,116,104,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,99,111,108,111,114,32,99,111,110,118,101,114,115,105,111,110,0,0,0,0,0,106,117,109,112,101,100,32,112,97,115,116,32,116,114,101,101,32,119,104,105,108,101,32,103,101,110,101,114,97,116,105,110,103,32,104,117,102,102,109,97,110,32,116,114,101,101,0,0,114,101,112,101,97,116,32,115,121,109,98,111,108,32,105,110,32,116,114,101,101,32,119,104,105,108,101,32,116,104,101,114,101,32,119,97,115,32,110,111,32,118,97,108,117,101,32,115,121,109,98,111,108,32,121,101,116,0,0,0,0,0,0,0,115,105,122,101,32,111,102,32,122,108,105,98,32,100,97,116,97,32,116,111,111,32,115,109,97,108,108,0,0,0,0,0,116,95,112,111,115,116,112,114,111,99,46,58,37,54,108,108,100,10,0,0,0,0,0,0,106,117,109,112,101,100,32,112,97,115,116,32,109,101,109,111,114,121,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,0,0,0,0,0,0,66,121,32,75,97,98,108,101,97,100,111,32,40,86,65,82,41,0,0,0,0,0,0,0,106,117,109,112,101,100,32,112,97,115,116,32,109,101,109,111,114,121,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,32,104,117,102,102,109,97,110,32,98,108,111,99,107,0,0,0,0,0,0,0,0,106,117,109,112,101,100,32,112,97,115,116,32,109,101,109,111,114,121,32,119,104,105,108,101,32,103,101,110,101,114,97,116,105,110,103,32,100,121,110,97,109,105,99,32,104,117,102,102,109,97,110,32,116,114,101,101,0,0,0,0,0,0,0,0,110,111,32,101,114,114,111,114,44,32,101,118,101,114,121,116,104,105,110,103,32,119,101,110,116,32,111,107,0,0,0,0,101,109,112,116,121,32,105,110,112,117,116,32,111,114,32,102,105,108,101,32,100,111,101,115,110,39,116,32,101,120,105,115,116,0,0,0,0,0,0,0,100,97,116,97,47,102,108,111,111,114,95,108,101,102,116,46,112,110,103,0,0,0,0,0,97,32,118,97,108,117,101,32,105,110,32,105,110,100,101,120,101,100,32,105,109,97,103,101,32,105,115,32,108,97,114,103,101,114,32,116,104,97,110,32,116,104,101,32,112,97,108,101,116,116,101,32,115,105,122,101,32,40,98,105,116,100,101,112,116,104,32,60,32,56,41,0,97,32,118,97,108,117,101,32,105,110,32,105,110,100,101,120,101,100,32,105,109,97,103,101,32,105,115,32,108,97,114,103,101,114,32,116,104,97,110,32,116,104,101,32,112,97,108,101,116,116,101,32,115,105,122,101,32,40,98,105,116,100,101,112,116,104,32,61,32,56,41,0,100,97,116,97,47,69,120,112,108,111,115,105,111,110,49,54,46,119,97,118,0,0,0,0,98,75,71,68,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,82,71,66,32,105,109,97,103,101,0,100,97,116,97,47,72,105,116,95,72,117,114,116,49,54,46,119,97,118,0,0,0,0,0,98,75,71,68,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,103,114,101,121,115,99,97,108,101,32,105,109,97,103,101,0,0,0,100,97,116,97,47,69,120,112,108,111,115,105,111,110,50,46,119,97,118,0,0,0,0,0,98,75,71,68,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,112,97,108,101,116,116,101,32,105,109,97,103,101,0,0,0,0,0,100,97,116,97,47,76,97,115,101,114,95,83,104,111,111,116,50,46,119,97,118,0,0,0,116,82,78,83,32,99,104,117,110,107,32,97,112,112,101,97,114,101,100,32,119,104,105,108,101,32,105,116,32,119,97,115,32,110,111,116,32,97,108,108,111,119,101,100,32,102,111,114,32,116,104,105,115,32,99,111,108,111,114,32,116,121,112,101,0,0,0,0,0,0,0,0,116,95,111,118,101,114,46,46,46,46,46,58,37,54,108,108,100,10,0,0,0,0,0,0,100,97,116,97,47,80,111,119,101,114,117,112,51,48,46,119,97,118,0,0,0,0,0,0,116,82,78,83,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,82,71,66,32,105,109,97,103,101,0,80,114,101,115,115,32,91,88,93,32,116,111,32,83,116,97,114,116,46,0,0,0,0,0,100,97,116,97,47,80,111,119,101,114,117,112,49,48,46,119,97,118,0,0,0,0,0,0,116,82,78,83,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,103,114,101,121,115,99,97,108,101,32,105,109,97,103,101,0,0,0,100,97,116,97,47,72,105,116,95,72,117,114,116,49,48,46,119,97,118,0,0,0,0,0,109,111,114,101,32,112,97,108,101,116,116,101,32,97,108,112,104,97,32,118,97,108,117,101,115,32,103,105,118,101,110,32,105,110,32,116,82,78,83,32,99,104,117,110,107,32,116,104,97,110,32,116,104,101,114,101,32,97,114,101,32,99,111,108,111,114,115,32,105,110,32,116,104,101,32,112,97,108,101,116,116,101,0,0,0,0,0,0,100,97,116,97,47,112,108,97,121,101,114,95,98,114,111,107,101,110,46,112,110,103,0,0,116,104,101,32,112,97,108,101,116,116,101,32,105,115,32,116,111,111,32,98,105,103,0,0,100,97,116,97,47,102,108,111,111,114,46,112,110,103,0,0,100,97,116,97,47,102,105,114,101,46,112,110,103,0,0,0,105,108,108,101,103,97,108,32,98,105,116,32,100,101,112,116,104,32,102,111,114,32,116,104,105,115,32,99,111,108,111,114,32,116,121,112,101,32,103,105,118,101,110,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,95,114,105,103,104,116,46,112,110,103,0,0,0,0,105,108,108,101,103,97,108,32,80,78,71,32,102,105,108,116,101,114,32,116,121,112,101,32,101,110,99,111,117,110,116,101,114,101,100,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,95,108,101,102,116,46,112,110,103,0,0,0,0,0,99,104,117,110,107,32,108,101,110,103,116,104,32,111,102,32,97,32,99,104,117,110,107,32,105,115,32,116,111,111,32,108,97,114,103,101,32,111,114,32,116,104,101,32,99,104,117,110,107,32,116,111,111,32,115,109,97,108,108,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,95,100,111,119,110,46,112,110,103,0,0,0,0,0,105,108,108,101,103,97,108,32,80,78,71,32,105,110,116,101,114,108,97,99,101,32,109,101,116,104,111,100,0,0,0,0,100,97,116,97,47,97,114,114,111,119,95,117,112,46,112,110,103,0,0,0,0,0,0,0,105,108,108,101,103,97,108,32,80,78,71,32,102,105,108,116,101,114,32,109,101,116,104,111,100,0,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,115,104,111,111,116,101,114,95,114,105,103,104,116,46,112,110,103,0,0,0,0,0,105,108,108,101,103,97,108,32,80,78,71,32,99,111,109,112,114,101,115,115,105,111,110,32,109,101,116,104,111,100,0,0,116,95,99,111,108,46,46,46,46,46,46,58,37,54,108,108,100,10,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,115,104,111,111,116,101,114,95,108,101,102,116,46,112,110,103,0,0,0,0,0,0,105,108,108,101,103,97,108,32,80,78,71,32,99,111,108,111,114,32,116,121,112,101,32,111,114,32,98,112,112,0,0,0,80,114,101,115,115,32,91,83,112,97,99,101,93,32,116,111,32,67,111,110,116,105,110,117,101,46,0,0,0,0,0,0,37,100,32,37,100,0,0,0,100,97,116,97,47,97,114,114,111,119,115,104,111,111,116,101,114,95,100,111,119,110,46,112,110,103,0,0,0,0,0,0,99,104,117,110,107,32,108,101,110,103,116,104,32,116,111,111,32,108,97,114,103,101,44,32,99,104,117,110,107,32,98,114,111,107,101,110,32,111,102,102,32,97,116,32,101,110,100,32,111,102,32,102,105,108,101,0,100,97,116,97,47,101,110,100,46,112,110,103,0,0,0,0,100,97,116,97,47,97,114,114,111,119,115,104,111,111,116,101,114,95,117,112,46,112,110,103,0,0,0,0,0,0,0,0,102,105,114,115,116,32,99,104,117,110,107,32,105,115,32,110,111,116,32,116,104,101,32,104,101,97,100,101,114,32,99,104,117,110,107,0,0,0,0,0,100,97,116,97,47,101,110,100,95,112,111,105,110,116,46,112,110,103,0,0,0,0,0,0,100,97,116,97,47,108,111,103,111,46,112,110,103,0,0,0,105,110,99,111,114,114,101,99,116,32,80,78,71,32,115,105,103,110,97,116,117,114,101,44,32,105,116,39,115,32,110,111,32,80,78,71,32,111,114,32,99,111,114,114,117,112,116,101,100,0,0,0,0,0,0,0,100,97,116,97,47,101,120,105,116,95,112,111,105,110,116,46,112,110,103,0,0,0,0,0,71,97,109,101,0,0,0,0,100,97,116,97,47,98,97,114,114,101,108,50,46,112,110,103,0,0,0,0,0,0,0,0,80,78,71,32,102,105,108,101,32,105,115,32,115,109,97,108,108,101,114,32,116,104,97,110,32,97,32,80,78,71,32,104,101,97,100,101,114,0,0,0,100,97,116,97,47,115,97,118,101,95,112,111,105,110,116,95,97,99,116,105,118,101,46,112,110,103,0,0,0,0,0,0,70,68,73,67,84,32,101,110,99,111,117,110,116,101,114,101,100,32,105,110,32,122,108,105,98,32,104,101,97,100,101,114,32,119,104,105,108,101,32,105,116,39,115,32,110,111,116,32,117,115,101,100,32,102,111,114,32,80,78,71,0,0,0,0,100,97,116,97,47,115,97,118,101,95,112,111,105,110,116,46,112,110,103,0,0,0,0,0,100,101,98,117,103,0,0,0,105,110,118,97,108,105,100,32,99,111,109,112,114,101,115,115,105,111,110,32,109,101,116,104,111,100,32,105,110,32,122,108,105,98,32,104,101,97,100,101,114,0,0,0,0,0,0,0,100,97,116,97,47,112,108,97,121,101,114,95,114,105,103,104,116,46,112,110,103,0,0,0,70,83,46,115,121,110,99,102,115,40,102,117,110,99,116,105,111,110,32,40,101,114,114,41,32,123,32,125,41,59,0,0,105,110,118,97,108,105,100,32,70,67,72,69,67,75,32,105,110,32,122,108,105,98,32,104,101,97,100,101,114,0,0,0,100,97,116,97,47,112,108,97,121,101,114,95,108,101,102,116,46,112,110,103,0,0,0,0,119,98,0,0,0,0,0,0,101,110,100,32,111,102,32,105,110,32,98,117,102,102,101,114,32,109,101,109,111,114,121,32,114,101,97,99,104,101,100,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,0,100,97,116,97,47,112,108,97,121,101,114,95,100,111,119,110,46,112,110,103,0,0,0,0,100,97,116,97,0,0,0,0,114,98,0,0,0,0,0,0,78,76,69,78,32,105,115,32,110,111,116,32,111,110,101,115,32,99,111,109,112,108,101,109,101,110,116,32,111,102,32,76,69,78,32,105,110,32,97,32,100,101,102,108,97,116,101,32,98,108,111,99,107,0,0,0,100,97,116,97,47,112,108,97,121,101,114,95,117,112,46,112,110,103,0,0,0,0,0,0,116,95,112,114,111,99,46,46,46,46,46,58,37,54,108,108,100,10,0,0,0,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,111,114,109,97,116,32,110,111,116,32,115,117,112,112,111,114,116,101,100,58,32,115,97,109,112,108,101,82,97,116,101,58,37,100,59,32,99,104,97,110,110,101,108,115,58,37,100,59,32,66,80,66,58,37,100,10,0,0,0,0,0,0,115,97,118,101,115,0,0,0,115,97,118,101,115,47,103,97,109,101,46,115,97,118,101,0,105,110,118,97,108,105,100,32,100,101,102,108,97,116,101,32,98,108,111,99,107,32,66,84,89,80,69,32,101,110,99,111,117,110,116,101,114,101,100,32,119,104,105,108,101,32,100,101,99,111,100,105,110,103,0,0,100,97,116,97,47,104,111,108,101,95,108,97,118,97,46,112,110,103,0,0,0,0,0,0,100,97,116,97,47,108,101,118,101,108,95,37,48,50,100,46,116,120,116,0,0,0,0,0,80,114,101,115,115,32,91,83,112,97,99,101,93,32,116,111,32,83,116,97,114,116,46,0,114,0,0,0,0,0,0,0,89,111,117,32,97,114,101,32,100,101,97,100,46,0,0,0,9,83,68,76,32,69,114,114,111,114,58,32,37,115,10,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,99,111,100,101,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,0,0,0,100,97,116,97,47,104,111,108,101,95,115,112,105,107,101,100,46,112,110,103,0,0,0,0,76,101,118,101,108,32,67,111,109,112,108,101,116,101,46,0,101,110,100,32,111,102,32,111,117,116,32,98,117,102,102,101,114,32,109,101,109,111,114,121,32,114,101,97,99,104,101,100,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,13,0,0,0,15,0,0,0,17,0,0,0,19,0,0,0,23,0,0,0,27,0,0,0,31,0,0,0,35,0,0,0,43,0,0,0,51,0,0,0,59,0,0,0,67,0,0,0,83,0,0,0,99,0,0,0,115,0,0,0,131,0,0,0,163,0,0,0,195,0,0,0,227,0,0,0,2,1,0,0,0,0,0,0,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,97,80,111,115,105,116,105,111,110,59,32,32,32,32,32,32,10,97,116,116,114,105,98,117,116,101,32,118,101,99,50,32,97,84,101,120,67,111,111,114,100,59,32,32,32,32,32,32,10,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,97,67,111,108,111,114,59,32,32,32,32,32,32,32,32,32,10,118,97,114,121,105,110,103,32,118,101,99,50,32,118,84,101,120,67,111,111,114,100,59,32,32,32,32,32,32,32,32,10,118,97,114,121,105,110,103,32,118,101,99,52,32,118,67,111,108,111,114,59,32,32,32,32,32,32,32,32,32,32,32,10,117,110,105,102,111,114,109,32,109,97,116,52,32,115,80,114,111,106,101,99,116,105,111,110,77,97,116,114,105,120,59,32,10,118,111,105,100,32,109,97,105,110,40,41,32,123,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,97,80,111,115,105,116,105,111,110,32,42,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,115,80,114,111,106,101,99,116,105,111,110,77,97,116,114,105,120,59,32,32,10,32,32,32,118,84,101,120,67,111,111,114,100,32,61,32,97,84,101,120,67,111,111,114,100,59,32,32,32,32,32,32,10,32,32,32,118,67,111,108,111,114,32,61,32,97,67].concat([111,108,111,114,59,32,32,32,32,32,32,32,32,32,32,32,32,10,125,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,0,0,0,0,0,0,112,114,101,99,105,115,105,111,110,32,109,101,100,105,117,109,112,32,102,108,111,97,116,59,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,118,97,114,121,105,110,103,32,118,101,99,50,32,118,84,101,120,67,111,111,114,100,59,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,118,97,114,121,105,110,103,32,118,101,99,52,32,118,67,111,108,111,114,59,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,115,84,101,120,116,117,114,101,59,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,118,111,105,100,32,109,97,105,110,40,41,32,123,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,116,101,120,116,117,114,101,50,68,40,115,84,101,120,116,117,114,101,44,32,118,84,101,120,67,111,111,114,100,41,42,118,67,111,108,111,114,59,32,10,125,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,7,0,0,0,8,0,0,0,8,0,0,0,9,0,0,0,9,0,0,0,10,0,0,0,10,0,0,0,11,0,0,0,11,0,0,0,12,0,0,0,12,0,0,0,13,0,0,0,13,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,7,0,0,0,9,0,0,0,13,0,0,0,17,0,0,0,25,0,0,0,33,0,0,0,49,0,0,0,65,0,0,0,97,0,0,0,129,0,0,0,193,0,0,0,1,1,0,0,129,1,0,0,1,2,0,0,1,3,0,0,1,4,0,0,1,6,0,0,1,8,0,0,1,12,0,0,1,16,0,0,1,24,0,0,1,32,0,0,1,48,0,0,1,64,0,0,1,96,0,0,16,0,0,0,17,0,0,0,18,0,0,0,0,0,0,0,8,0,0,0,7,0,0,0,9,0,0,0,6,0,0,0,10,0,0,0,5,0,0,0,11,0,0,0,4,0,0,0,12,0,0,0,3,0,0,0,13,0,0,0,2,0,0,0,14,0,0,0,1,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,4,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,4,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0]) -, "i8", ALLOC_NONE, Runtime.GLOBAL_BASE) -var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8); -assert(tempDoublePtr % 8 == 0); -function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much - HEAP8[tempDoublePtr] = HEAP8[ptr]; - HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; - HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; - HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; -} -function copyTempDouble(ptr) { - HEAP8[tempDoublePtr] = HEAP8[ptr]; - HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; - HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; - HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; - HEAP8[tempDoublePtr+4] = HEAP8[ptr+4]; - HEAP8[tempDoublePtr+5] = HEAP8[ptr+5]; - HEAP8[tempDoublePtr+6] = HEAP8[ptr+6]; - HEAP8[tempDoublePtr+7] = HEAP8[ptr+7]; -} - function _gettimeofday(ptr) { - var now = Date.now(); - HEAP32[((ptr)>>2)]=Math.floor(now/1000); // seconds - HEAP32[(((ptr)+(4))>>2)]=Math.floor((now-1000*Math.floor(now/1000))*1000); // microseconds - return 0; - } - var _sqrtf=Math_sqrt; - Module["_strlen"] = _strlen; - function _strncmp(px, py, n) { - var i = 0; - while (i < n) { - var x = HEAPU8[(((px)+(i))|0)]; - var y = HEAPU8[(((py)+(i))|0)]; - if (x == y && x == 0) return 0; - if (x == 0) return -1; - if (y == 0) return 1; - if (x == y) { - i ++; - continue; - } else { - return x > y ? 1 : -1; - } - } - return 0; - } - var _fabsf=Math_abs; - Module["_memcpy"] = _memcpy;var _llvm_memcpy_p0i8_p0i8_i32=_memcpy; - var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86}; - var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"}; - var ___errno_state=0;function ___setErrNo(value) { - // For convenient setting and returning of errno. - HEAP32[((___errno_state)>>2)]=value - return value; - } - var PATH={splitPath:function (filename) { - var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; - return splitPathRe.exec(filename).slice(1); - },normalizeArray:function (parts, allowAboveRoot) { - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = parts.length - 1; i >= 0; i--) { - var last = parts[i]; - if (last === '.') { - parts.splice(i, 1); - } else if (last === '..') { - parts.splice(i, 1); - up++; - } else if (up) { - parts.splice(i, 1); - up--; - } - } - // if the path is allowed to go above the root, restore leading ..s - if (allowAboveRoot) { - for (; up--; up) { - parts.unshift('..'); - } - } - return parts; - },normalize:function (path) { - var isAbsolute = path.charAt(0) === '/', - trailingSlash = path.substr(-1) === '/'; - // Normalize the path - path = PATH.normalizeArray(path.split('/').filter(function(p) { - return !!p; - }), !isAbsolute).join('/'); - if (!path && !isAbsolute) { - path = '.'; - } - if (path && trailingSlash) { - path += '/'; - } - return (isAbsolute ? '/' : '') + path; - },dirname:function (path) { - var result = PATH.splitPath(path), - root = result[0], - dir = result[1]; - if (!root && !dir) { - // No dirname whatsoever - return '.'; - } - if (dir) { - // It has a dirname, strip trailing slash - dir = dir.substr(0, dir.length - 1); - } - return root + dir; - },basename:function (path) { - // EMSCRIPTEN return '/'' for '/', not an empty string - if (path === '/') return '/'; - var lastSlash = path.lastIndexOf('/'); - if (lastSlash === -1) return path; - return path.substr(lastSlash+1); - },extname:function (path) { - return PATH.splitPath(path)[3]; - },join:function () { - var paths = Array.prototype.slice.call(arguments, 0); - return PATH.normalize(paths.join('/')); - },join2:function (l, r) { - return PATH.normalize(l + '/' + r); - },resolve:function () { - var resolvedPath = '', - resolvedAbsolute = false; - for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { - var path = (i >= 0) ? arguments[i] : FS.cwd(); - // Skip empty and invalid entries - if (typeof path !== 'string') { - throw new TypeError('Arguments to path.resolve must be strings'); - } else if (!path) { - continue; - } - resolvedPath = path + '/' + resolvedPath; - resolvedAbsolute = path.charAt(0) === '/'; - } - // At this point the path should be resolved to a full absolute path, but - // handle relative paths to be safe (might happen when process.cwd() fails) - resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) { - return !!p; - }), !resolvedAbsolute).join('/'); - return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; - },relative:function (from, to) { - from = PATH.resolve(from).substr(1); - to = PATH.resolve(to).substr(1); - function trim(arr) { - var start = 0; - for (; start < arr.length; start++) { - if (arr[start] !== '') break; - } - var end = arr.length - 1; - for (; end >= 0; end--) { - if (arr[end] !== '') break; - } - if (start > end) return []; - return arr.slice(start, end - start + 1); - } - var fromParts = trim(from.split('/')); - var toParts = trim(to.split('/')); - var length = Math.min(fromParts.length, toParts.length); - var samePartsLength = length; - for (var i = 0; i < length; i++) { - if (fromParts[i] !== toParts[i]) { - samePartsLength = i; - break; - } - } - var outputParts = []; - for (var i = samePartsLength; i < fromParts.length; i++) { - outputParts.push('..'); - } - outputParts = outputParts.concat(toParts.slice(samePartsLength)); - return outputParts.join('/'); - }}; - var TTY={ttys:[],init:function () { - // https://github.com/kripken/emscripten/pull/1555 - // if (ENVIRONMENT_IS_NODE) { - // // currently, FS.init does not distinguish if process.stdin is a file or TTY - // // device, it always assumes it's a TTY device. because of this, we're forcing - // // process.stdin to UTF8 encoding to at least make stdin reading compatible - // // with text files until FS.init can be refactored. - // process['stdin']['setEncoding']('utf8'); - // } - },shutdown:function () { - // https://github.com/kripken/emscripten/pull/1555 - // if (ENVIRONMENT_IS_NODE) { - // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? - // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation - // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? - // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle - // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call - // process['stdin']['pause'](); - // } - },register:function (dev, ops) { - TTY.ttys[dev] = { input: [], output: [], ops: ops }; - FS.registerDevice(dev, TTY.stream_ops); - },stream_ops:{open:function (stream) { - var tty = TTY.ttys[stream.node.rdev]; - if (!tty) { - throw new FS.ErrnoError(ERRNO_CODES.ENODEV); - } - stream.tty = tty; - stream.seekable = false; - },close:function (stream) { - // flush any pending line data - if (stream.tty.output.length) { - stream.tty.ops.put_char(stream.tty, 10); - } - },read:function (stream, buffer, offset, length, pos /* ignored */) { - if (!stream.tty || !stream.tty.ops.get_char) { - throw new FS.ErrnoError(ERRNO_CODES.ENXIO); - } - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = stream.tty.ops.get_char(stream.tty); - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES.EIO); - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset+i] = result; - } - if (bytesRead) { - stream.node.timestamp = Date.now(); - } - return bytesRead; - },write:function (stream, buffer, offset, length, pos) { - if (!stream.tty || !stream.tty.ops.put_char) { - throw new FS.ErrnoError(ERRNO_CODES.ENXIO); - } - for (var i = 0; i < length; i++) { - try { - stream.tty.ops.put_char(stream.tty, buffer[offset+i]); - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES.EIO); - } - } - if (length) { - stream.node.timestamp = Date.now(); - } - return i; - }},default_tty_ops:{get_char:function (tty) { - if (!tty.input.length) { - var result = null; - if (ENVIRONMENT_IS_NODE) { - result = process['stdin']['read'](); - if (!result) { - if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) { - return null; // EOF - } - return undefined; // no data available - } - } else if (typeof window != 'undefined' && - typeof window.prompt == 'function') { - // Browser. - result = window.prompt('Input: '); // returns null on cancel - if (result !== null) { - result += '\n'; - } - } else if (typeof readline == 'function') { - // Command line. - result = readline(); - if (result !== null) { - result += '\n'; - } - } - if (!result) { - return null; - } - tty.input = intArrayFromString(result, true); - } - return tty.input.shift(); - },put_char:function (tty, val) { - if (val === null || val === 10) { - Module['print'](tty.output.join('')); - tty.output = []; - } else { - tty.output.push(TTY.utf8.processCChar(val)); - } - }},default_tty1_ops:{put_char:function (tty, val) { - if (val === null || val === 10) { - Module['printErr'](tty.output.join('')); - tty.output = []; - } else { - tty.output.push(TTY.utf8.processCChar(val)); - } - }}}; - var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3,mount:function (mount) { - return MEMFS.createNode(null, '/', 16384 | 0777, 0); - },createNode:function (parent, name, mode, dev) { - if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { - // no supported - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - if (!MEMFS.ops_table) { - MEMFS.ops_table = { - dir: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - lookup: MEMFS.node_ops.lookup, - mknod: MEMFS.node_ops.mknod, - mknod: MEMFS.node_ops.mknod, - rename: MEMFS.node_ops.rename, - unlink: MEMFS.node_ops.unlink, - rmdir: MEMFS.node_ops.rmdir, - readdir: MEMFS.node_ops.readdir, - symlink: MEMFS.node_ops.symlink - }, - stream: { - llseek: MEMFS.stream_ops.llseek - } - }, - file: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: { - llseek: MEMFS.stream_ops.llseek, - read: MEMFS.stream_ops.read, - write: MEMFS.stream_ops.write, - allocate: MEMFS.stream_ops.allocate, - mmap: MEMFS.stream_ops.mmap - } - }, - link: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr, - readlink: MEMFS.node_ops.readlink - }, - stream: {} - }, - chrdev: { - node: { - getattr: MEMFS.node_ops.getattr, - setattr: MEMFS.node_ops.setattr - }, - stream: FS.chrdev_stream_ops - }, - }; - } - var node = FS.createNode(parent, name, mode, dev); - if (FS.isDir(node.mode)) { - node.node_ops = MEMFS.ops_table.dir.node; - node.stream_ops = MEMFS.ops_table.dir.stream; - node.contents = {}; - } else if (FS.isFile(node.mode)) { - node.node_ops = MEMFS.ops_table.file.node; - node.stream_ops = MEMFS.ops_table.file.stream; - node.contents = []; - node.contentMode = MEMFS.CONTENT_FLEXIBLE; - } else if (FS.isLink(node.mode)) { - node.node_ops = MEMFS.ops_table.link.node; - node.stream_ops = MEMFS.ops_table.link.stream; - } else if (FS.isChrdev(node.mode)) { - node.node_ops = MEMFS.ops_table.chrdev.node; - node.stream_ops = MEMFS.ops_table.chrdev.stream; - } - node.timestamp = Date.now(); - // add the new node to the parent - if (parent) { - parent.contents[name] = node; - } - return node; - },ensureFlexible:function (node) { - if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) { - var contents = node.contents; - node.contents = Array.prototype.slice.call(contents); - node.contentMode = MEMFS.CONTENT_FLEXIBLE; - } - },node_ops:{getattr:function (node) { - var attr = {}; - // device numbers reuse inode numbers. - attr.dev = FS.isChrdev(node.mode) ? node.id : 1; - attr.ino = node.id; - attr.mode = node.mode; - attr.nlink = 1; - attr.uid = 0; - attr.gid = 0; - attr.rdev = node.rdev; - if (FS.isDir(node.mode)) { - attr.size = 4096; - } else if (FS.isFile(node.mode)) { - attr.size = node.contents.length; - } else if (FS.isLink(node.mode)) { - attr.size = node.link.length; - } else { - attr.size = 0; - } - attr.atime = new Date(node.timestamp); - attr.mtime = new Date(node.timestamp); - attr.ctime = new Date(node.timestamp); - // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), - // but this is not required by the standard. - attr.blksize = 4096; - attr.blocks = Math.ceil(attr.size / attr.blksize); - return attr; - },setattr:function (node, attr) { - if (attr.mode !== undefined) { - node.mode = attr.mode; - } - if (attr.timestamp !== undefined) { - node.timestamp = attr.timestamp; - } - if (attr.size !== undefined) { - MEMFS.ensureFlexible(node); - var contents = node.contents; - if (attr.size < contents.length) contents.length = attr.size; - else while (attr.size > contents.length) contents.push(0); - } - },lookup:function (parent, name) { - throw FS.genericErrors[ERRNO_CODES.ENOENT]; - },mknod:function (parent, name, mode, dev) { - return MEMFS.createNode(parent, name, mode, dev); - },rename:function (old_node, new_dir, new_name) { - // if we're overwriting a directory at new_name, make sure it's empty. - if (FS.isDir(old_node.mode)) { - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name); - } catch (e) { - } - if (new_node) { - for (var i in new_node.contents) { - throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); - } - } - } - // do the internal rewiring - delete old_node.parent.contents[old_node.name]; - old_node.name = new_name; - new_dir.contents[new_name] = old_node; - old_node.parent = new_dir; - },unlink:function (parent, name) { - delete parent.contents[name]; - },rmdir:function (parent, name) { - var node = FS.lookupNode(parent, name); - for (var i in node.contents) { - throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); - } - delete parent.contents[name]; - },readdir:function (node) { - var entries = ['.', '..'] - for (var key in node.contents) { - if (!node.contents.hasOwnProperty(key)) { - continue; - } - entries.push(key); - } - return entries; - },symlink:function (parent, newname, oldpath) { - var node = MEMFS.createNode(parent, newname, 0777 | 40960, 0); - node.link = oldpath; - return node; - },readlink:function (node) { - if (!FS.isLink(node.mode)) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - return node.link; - }},stream_ops:{read:function (stream, buffer, offset, length, position) { - var contents = stream.node.contents; - if (position >= contents.length) - return 0; - var size = Math.min(contents.length - position, length); - assert(size >= 0); - if (size > 8 && contents.subarray) { // non-trivial, and typed array - buffer.set(contents.subarray(position, position + size), offset); - } else - { - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents[position + i]; - } - } - return size; - },write:function (stream, buffer, offset, length, position, canOwn) { - var node = stream.node; - node.timestamp = Date.now(); - var contents = node.contents; - if (length && contents.length === 0 && position === 0 && buffer.subarray) { - // just replace it with the new data - if (canOwn && offset === 0) { - node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source. - node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTENT_OWNING : MEMFS.CONTENT_FIXED; - } else { - node.contents = new Uint8Array(buffer.subarray(offset, offset+length)); - node.contentMode = MEMFS.CONTENT_FIXED; - } - return length; - } - MEMFS.ensureFlexible(node); - var contents = node.contents; - while (contents.length < position) contents.push(0); - for (var i = 0; i < length; i++) { - contents[position + i] = buffer[offset + i]; - } - return length; - },llseek:function (stream, offset, whence) { - var position = offset; - if (whence === 1) { // SEEK_CUR. - position += stream.position; - } else if (whence === 2) { // SEEK_END. - if (FS.isFile(stream.node.mode)) { - position += stream.node.contents.length; - } - } - if (position < 0) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - stream.ungotten = []; - stream.position = position; - return position; - },allocate:function (stream, offset, length) { - MEMFS.ensureFlexible(stream.node); - var contents = stream.node.contents; - var limit = offset + length; - while (limit > contents.length) contents.push(0); - },mmap:function (stream, buffer, offset, length, position, prot, flags) { - if (!FS.isFile(stream.node.mode)) { - throw new FS.ErrnoError(ERRNO_CODES.ENODEV); - } - var ptr; - var allocated; - var contents = stream.node.contents; - // Only make a new copy when MAP_PRIVATE is specified. - if ( !(flags & 2) && - (contents.buffer === buffer || contents.buffer === buffer.buffer) ) { - // We can't emulate MAP_SHARED when the file is not backed by the buffer - // we're mapping to (e.g. the HEAP buffer). - allocated = false; - ptr = contents.byteOffset; - } else { - // Try to avoid unnecessary slices. - if (position > 0 || position + length < contents.length) { - if (contents.subarray) { - contents = contents.subarray(position, position + length); - } else { - contents = Array.prototype.slice.call(contents, position, position + length); - } - } - allocated = true; - ptr = _malloc(length); - if (!ptr) { - throw new FS.ErrnoError(ERRNO_CODES.ENOMEM); - } - buffer.set(contents, ptr); - } - return { ptr: ptr, allocated: allocated }; - }}}; - var IDBFS={dbs:{},indexedDB:function () { - return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; - },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",mount:function (mount) { - return MEMFS.mount.apply(null, arguments); - },syncfs:function (mount, populate, callback) { - IDBFS.getLocalSet(mount, function(err, local) { - if (err) return callback(err); - IDBFS.getRemoteSet(mount, function(err, remote) { - if (err) return callback(err); - var src = populate ? remote : local; - var dst = populate ? local : remote; - IDBFS.reconcile(src, dst, callback); - }); - }); - },reconcile:function (src, dst, callback) { - var total = 0; - var create = {}; - for (var key in src.files) { - if (!src.files.hasOwnProperty(key)) continue; - var e = src.files[key]; - var e2 = dst.files[key]; - if (!e2 || e.timestamp > e2.timestamp) { - create[key] = e; - total++; - } - } - var remove = {}; - for (var key in dst.files) { - if (!dst.files.hasOwnProperty(key)) continue; - var e = dst.files[key]; - var e2 = src.files[key]; - if (!e2) { - remove[key] = e; - total++; - } - } - if (!total) { - // early out - return callback(null); - } - var completed = 0; - function done(err) { - if (err) return callback(err); - if (++completed >= total) { - return callback(null); - } - }; - // create a single transaction to handle and IDB reads / writes we'll need to do - var db = src.type === 'remote' ? src.db : dst.db; - var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite'); - transaction.onerror = function transaction_onerror() { callback(this.error); }; - var store = transaction.objectStore(IDBFS.DB_STORE_NAME); - for (var path in create) { - if (!create.hasOwnProperty(path)) continue; - var entry = create[path]; - if (dst.type === 'local') { - // save file to local - try { - if (FS.isDir(entry.mode)) { - FS.mkdir(path, entry.mode); - } else if (FS.isFile(entry.mode)) { - var stream = FS.open(path, 'w+', 0666); - FS.write(stream, entry.contents, 0, entry.contents.length, 0, true /* canOwn */); - FS.close(stream); - } - done(null); - } catch (e) { - return done(e); - } - } else { - // save file to IDB - var req = store.put(entry, path); - req.onsuccess = function req_onsuccess() { done(null); }; - req.onerror = function req_onerror() { done(this.error); }; - } - } - for (var path in remove) { - if (!remove.hasOwnProperty(path)) continue; - var entry = remove[path]; - if (dst.type === 'local') { - // delete file from local - try { - if (FS.isDir(entry.mode)) { - // TODO recursive delete? - FS.rmdir(path); - } else if (FS.isFile(entry.mode)) { - FS.unlink(path); - } - done(null); - } catch (e) { - return done(e); - } - } else { - // delete file from IDB - var req = store.delete(path); - req.onsuccess = function req_onsuccess() { done(null); }; - req.onerror = function req_onerror() { done(this.error); }; - } - } - },getLocalSet:function (mount, callback) { - var files = {}; - function isRealDir(p) { - return p !== '.' && p !== '..'; - }; - function toAbsolute(root) { - return function(p) { - return PATH.join2(root, p); - } - }; - var check = FS.readdir(mount.mountpoint) - .filter(isRealDir) - .map(toAbsolute(mount.mountpoint)); - while (check.length) { - var path = check.pop(); - var stat, node; - try { - var lookup = FS.lookupPath(path); - node = lookup.node; - stat = FS.stat(path); - } catch (e) { - return callback(e); - } - if (FS.isDir(stat.mode)) { - check.push.apply(check, FS.readdir(path) - .filter(isRealDir) - .map(toAbsolute(path))); - files[path] = { mode: stat.mode, timestamp: stat.mtime }; - } else if (FS.isFile(stat.mode)) { - files[path] = { contents: node.contents, mode: stat.mode, timestamp: stat.mtime }; - } else { - return callback(new Error('node type not supported')); - } - } - return callback(null, { type: 'local', files: files }); - },getDB:function (name, callback) { - // look it up in the cache - var db = IDBFS.dbs[name]; - if (db) { - return callback(null, db); - } - var req; - try { - req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION); - } catch (e) { - return onerror(e); - } - req.onupgradeneeded = function req_onupgradeneeded() { - db = req.result; - db.createObjectStore(IDBFS.DB_STORE_NAME); - }; - req.onsuccess = function req_onsuccess() { - db = req.result; - // add to the cache - IDBFS.dbs[name] = db; - callback(null, db); - }; - req.onerror = function req_onerror() { - callback(this.error); - }; - },getRemoteSet:function (mount, callback) { - var files = {}; - IDBFS.getDB(mount.mountpoint, function(err, db) { - if (err) return callback(err); - var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly'); - transaction.onerror = function transaction_onerror() { callback(this.error); }; - var store = transaction.objectStore(IDBFS.DB_STORE_NAME); - store.openCursor().onsuccess = function store_openCursor_onsuccess(event) { - var cursor = event.target.result; - if (!cursor) { - return callback(null, { type: 'remote', db: db, files: files }); - } - files[cursor.key] = cursor.value; - cursor.continue(); - }; - }); - }}; - var NODEFS={isWindows:false,staticInit:function () { - NODEFS.isWindows = !!process.platform.match(/^win/); - },mount:function (mount) { - assert(ENVIRONMENT_IS_NODE); - return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0); - },createNode:function (parent, name, mode, dev) { - if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - var node = FS.createNode(parent, name, mode); - node.node_ops = NODEFS.node_ops; - node.stream_ops = NODEFS.stream_ops; - return node; - },getMode:function (path) { - var stat; - try { - stat = fs.lstatSync(path); - if (NODEFS.isWindows) { - // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so - // propagate write bits to execute bits. - stat.mode = stat.mode | ((stat.mode & 146) >> 1); - } - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - return stat.mode; - },realPath:function (node) { - var parts = []; - while (node.parent !== node) { - parts.push(node.name); - node = node.parent; - } - parts.push(node.mount.opts.root); - parts.reverse(); - return PATH.join.apply(null, parts); - },flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:function (flags) { - if (flags in NODEFS.flagsToPermissionStringMap) { - return NODEFS.flagsToPermissionStringMap[flags]; - } else { - return flags; - } - },node_ops:{getattr:function (node) { - var path = NODEFS.realPath(node); - var stat; - try { - stat = fs.lstatSync(path); - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096. - // See http://support.microsoft.com/kb/140365 - if (NODEFS.isWindows && !stat.blksize) { - stat.blksize = 4096; - } - if (NODEFS.isWindows && !stat.blocks) { - stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0; - } - return { - dev: stat.dev, - ino: stat.ino, - mode: stat.mode, - nlink: stat.nlink, - uid: stat.uid, - gid: stat.gid, - rdev: stat.rdev, - size: stat.size, - atime: stat.atime, - mtime: stat.mtime, - ctime: stat.ctime, - blksize: stat.blksize, - blocks: stat.blocks - }; - },setattr:function (node, attr) { - var path = NODEFS.realPath(node); - try { - if (attr.mode !== undefined) { - fs.chmodSync(path, attr.mode); - // update the common node structure mode as well - node.mode = attr.mode; - } - if (attr.timestamp !== undefined) { - var date = new Date(attr.timestamp); - fs.utimesSync(path, date, date); - } - if (attr.size !== undefined) { - fs.truncateSync(path, attr.size); - } - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - },lookup:function (parent, name) { - var path = PATH.join2(NODEFS.realPath(parent), name); - var mode = NODEFS.getMode(path); - return NODEFS.createNode(parent, name, mode); - },mknod:function (parent, name, mode, dev) { - var node = NODEFS.createNode(parent, name, mode, dev); - // create the backing node for this in the fs root as well - var path = NODEFS.realPath(node); - try { - if (FS.isDir(node.mode)) { - fs.mkdirSync(path, node.mode); - } else { - fs.writeFileSync(path, '', { mode: node.mode }); - } - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - return node; - },rename:function (oldNode, newDir, newName) { - var oldPath = NODEFS.realPath(oldNode); - var newPath = PATH.join2(NODEFS.realPath(newDir), newName); - try { - fs.renameSync(oldPath, newPath); - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - },unlink:function (parent, name) { - var path = PATH.join2(NODEFS.realPath(parent), name); - try { - fs.unlinkSync(path); - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - },rmdir:function (parent, name) { - var path = PATH.join2(NODEFS.realPath(parent), name); - try { - fs.rmdirSync(path); - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - },readdir:function (node) { - var path = NODEFS.realPath(node); - try { - return fs.readdirSync(path); - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - },symlink:function (parent, newName, oldPath) { - var newPath = PATH.join2(NODEFS.realPath(parent), newName); - try { - fs.symlinkSync(oldPath, newPath); - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - },readlink:function (node) { - var path = NODEFS.realPath(node); - try { - return fs.readlinkSync(path); - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - }},stream_ops:{open:function (stream) { - var path = NODEFS.realPath(stream.node); - try { - if (FS.isFile(stream.node.mode)) { - stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags)); - } - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - },close:function (stream) { - try { - if (FS.isFile(stream.node.mode) && stream.nfd) { - fs.closeSync(stream.nfd); - } - } catch (e) { - if (!e.code) throw e; - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - },read:function (stream, buffer, offset, length, position) { - // FIXME this is terrible. - var nbuffer = new Buffer(length); - var res; - try { - res = fs.readSync(stream.nfd, nbuffer, 0, length, position); - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - if (res > 0) { - for (var i = 0; i < res; i++) { - buffer[offset + i] = nbuffer[i]; - } - } - return res; - },write:function (stream, buffer, offset, length, position) { - // FIXME this is terrible. - var nbuffer = new Buffer(buffer.subarray(offset, offset + length)); - var res; - try { - res = fs.writeSync(stream.nfd, nbuffer, 0, length, position); - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - return res; - },llseek:function (stream, offset, whence) { - var position = offset; - if (whence === 1) { // SEEK_CUR. - position += stream.position; - } else if (whence === 2) { // SEEK_END. - if (FS.isFile(stream.node.mode)) { - try { - var stat = fs.fstatSync(stream.nfd); - position += stat.size; - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES[e.code]); - } - } - } - if (position < 0) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - stream.position = position; - return position; - }}}; - var _stdin=allocate(1, "i32*", ALLOC_STATIC); - var _stdout=allocate(1, "i32*", ALLOC_STATIC); - var _stderr=allocate(1, "i32*", ALLOC_STATIC); - function _fflush(stream) { - // int fflush(FILE *stream); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html - // we don't currently perform any user-space buffering of data - }var FS={root:null,mounts:[],devices:[null],streams:[null],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},handleFSError:function (e) { - if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace(); - return ___setErrNo(e.errno); - },lookupPath:function (path, opts) { - path = PATH.resolve(FS.cwd(), path); - opts = opts || { recurse_count: 0 }; - if (opts.recurse_count > 8) { // max recursive lookup of 8 - throw new FS.ErrnoError(ERRNO_CODES.ELOOP); - } - // split the path - var parts = PATH.normalizeArray(path.split('/').filter(function(p) { - return !!p; - }), false); - // start at the root - var current = FS.root; - var current_path = '/'; - for (var i = 0; i < parts.length; i++) { - var islast = (i === parts.length-1); - if (islast && opts.parent) { - // stop resolving - break; - } - current = FS.lookupNode(current, parts[i]); - current_path = PATH.join2(current_path, parts[i]); - // jump to the mount's root node if this is a mountpoint - if (FS.isMountpoint(current)) { - current = current.mount.root; - } - // follow symlinks - // by default, lookupPath will not follow a symlink if it is the final path component. - // setting opts.follow = true will override this behavior. - if (!islast || opts.follow) { - var count = 0; - while (FS.isLink(current.mode)) { - var link = FS.readlink(current_path); - current_path = PATH.resolve(PATH.dirname(current_path), link); - var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count }); - current = lookup.node; - if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX). - throw new FS.ErrnoError(ERRNO_CODES.ELOOP); - } - } - } - } - return { path: current_path, node: current }; - },getPath:function (node) { - var path; - while (true) { - if (FS.isRoot(node)) { - var mount = node.mount.mountpoint; - if (!path) return mount; - return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path; - } - path = path ? node.name + '/' + path : node.name; - node = node.parent; - } - },hashName:function (parentid, name) { - var hash = 0; - for (var i = 0; i < name.length; i++) { - hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; - } - return ((parentid + hash) >>> 0) % FS.nameTable.length; - },hashAddNode:function (node) { - var hash = FS.hashName(node.parent.id, node.name); - node.name_next = FS.nameTable[hash]; - FS.nameTable[hash] = node; - },hashRemoveNode:function (node) { - var hash = FS.hashName(node.parent.id, node.name); - if (FS.nameTable[hash] === node) { - FS.nameTable[hash] = node.name_next; - } else { - var current = FS.nameTable[hash]; - while (current) { - if (current.name_next === node) { - current.name_next = node.name_next; - break; - } - current = current.name_next; - } - } - },lookupNode:function (parent, name) { - var err = FS.mayLookup(parent); - if (err) { - throw new FS.ErrnoError(err); - } - var hash = FS.hashName(parent.id, name); - for (var node = FS.nameTable[hash]; node; node = node.name_next) { - var nodeName = node.name; - if (node.parent.id === parent.id && nodeName === name) { - return node; - } - } - // if we failed to find it in the cache, call into the VFS - return FS.lookup(parent, name); - },createNode:function (parent, name, mode, rdev) { - if (!FS.FSNode) { - FS.FSNode = function(parent, name, mode, rdev) { - this.id = FS.nextInode++; - this.name = name; - this.mode = mode; - this.node_ops = {}; - this.stream_ops = {}; - this.rdev = rdev; - this.parent = null; - this.mount = null; - if (!parent) { - parent = this; // root node sets parent to itself - } - this.parent = parent; - this.mount = parent.mount; - FS.hashAddNode(this); - }; - // compatibility - var readMode = 292 | 73; - var writeMode = 146; - FS.FSNode.prototype = {}; - // NOTE we must use Object.defineProperties instead of individual calls to - // Object.defineProperty in order to make closure compiler happy - Object.defineProperties(FS.FSNode.prototype, { - read: { - get: function() { return (this.mode & readMode) === readMode; }, - set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; } - }, - write: { - get: function() { return (this.mode & writeMode) === writeMode; }, - set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; } - }, - isFolder: { - get: function() { return FS.isDir(this.mode); }, - }, - isDevice: { - get: function() { return FS.isChrdev(this.mode); }, - }, - }); - } - return new FS.FSNode(parent, name, mode, rdev); - },destroyNode:function (node) { - FS.hashRemoveNode(node); - },isRoot:function (node) { - return node === node.parent; - },isMountpoint:function (node) { - return node.mounted; - },isFile:function (mode) { - return (mode & 61440) === 32768; - },isDir:function (mode) { - return (mode & 61440) === 16384; - },isLink:function (mode) { - return (mode & 61440) === 40960; - },isChrdev:function (mode) { - return (mode & 61440) === 8192; - },isBlkdev:function (mode) { - return (mode & 61440) === 24576; - },isFIFO:function (mode) { - return (mode & 61440) === 4096; - },isSocket:function (mode) { - return (mode & 49152) === 49152; - },flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function (str) { - var flags = FS.flagModes[str]; - if (typeof flags === 'undefined') { - throw new Error('Unknown file open mode: ' + str); - } - return flags; - },flagsToPermissionString:function (flag) { - var accmode = flag & 2097155; - var perms = ['r', 'w', 'rw'][accmode]; - if ((flag & 512)) { - perms += 'w'; - } - return perms; - },nodePermissions:function (node, perms) { - if (FS.ignorePermissions) { - return 0; - } - // return 0 if any user, group or owner bits are set. - if (perms.indexOf('r') !== -1 && !(node.mode & 292)) { - return ERRNO_CODES.EACCES; - } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) { - return ERRNO_CODES.EACCES; - } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) { - return ERRNO_CODES.EACCES; - } - return 0; - },mayLookup:function (dir) { - return FS.nodePermissions(dir, 'x'); - },mayCreate:function (dir, name) { - try { - var node = FS.lookupNode(dir, name); - return ERRNO_CODES.EEXIST; - } catch (e) { - } - return FS.nodePermissions(dir, 'wx'); - },mayDelete:function (dir, name, isdir) { - var node; - try { - node = FS.lookupNode(dir, name); - } catch (e) { - return e.errno; - } - var err = FS.nodePermissions(dir, 'wx'); - if (err) { - return err; - } - if (isdir) { - if (!FS.isDir(node.mode)) { - return ERRNO_CODES.ENOTDIR; - } - if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { - return ERRNO_CODES.EBUSY; - } - } else { - if (FS.isDir(node.mode)) { - return ERRNO_CODES.EISDIR; - } - } - return 0; - },mayOpen:function (node, flags) { - if (!node) { - return ERRNO_CODES.ENOENT; - } - if (FS.isLink(node.mode)) { - return ERRNO_CODES.ELOOP; - } else if (FS.isDir(node.mode)) { - if ((flags & 2097155) !== 0 || // opening for write - (flags & 512)) { - return ERRNO_CODES.EISDIR; - } - } - return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); - },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) { - fd_start = fd_start || 1; - fd_end = fd_end || FS.MAX_OPEN_FDS; - for (var fd = fd_start; fd <= fd_end; fd++) { - if (!FS.streams[fd]) { - return fd; - } - } - throw new FS.ErrnoError(ERRNO_CODES.EMFILE); - },getStream:function (fd) { - return FS.streams[fd]; - },createStream:function (stream, fd_start, fd_end) { - if (!FS.FSStream) { - FS.FSStream = function(){}; - FS.FSStream.prototype = {}; - // compatibility - Object.defineProperties(FS.FSStream.prototype, { - object: { - get: function() { return this.node; }, - set: function(val) { this.node = val; } - }, - isRead: { - get: function() { return (this.flags & 2097155) !== 1; } - }, - isWrite: { - get: function() { return (this.flags & 2097155) !== 0; } - }, - isAppend: { - get: function() { return (this.flags & 1024); } - } - }); - } - if (stream.__proto__) { - // reuse the object - stream.__proto__ = FS.FSStream.prototype; - } else { - var newStream = new FS.FSStream(); - for (var p in stream) { - newStream[p] = stream[p]; - } - stream = newStream; - } - var fd = FS.nextfd(fd_start, fd_end); - stream.fd = fd; - FS.streams[fd] = stream; - return stream; - },closeStream:function (fd) { - FS.streams[fd] = null; - },chrdev_stream_ops:{open:function (stream) { - var device = FS.getDevice(stream.node.rdev); - // override node's stream ops with the device's - stream.stream_ops = device.stream_ops; - // forward the open call - if (stream.stream_ops.open) { - stream.stream_ops.open(stream); - } - },llseek:function () { - throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); - }},major:function (dev) { - return ((dev) >> 8); - },minor:function (dev) { - return ((dev) & 0xff); - },makedev:function (ma, mi) { - return ((ma) << 8 | (mi)); - },registerDevice:function (dev, ops) { - FS.devices[dev] = { stream_ops: ops }; - },getDevice:function (dev) { - return FS.devices[dev]; - },syncfs:function (populate, callback) { - if (typeof(populate) === 'function') { - callback = populate; - populate = false; - } - var completed = 0; - var total = FS.mounts.length; - function done(err) { - if (err) { - return callback(err); - } - if (++completed >= total) { - callback(null); - } - }; - // sync all mounts - for (var i = 0; i < FS.mounts.length; i++) { - var mount = FS.mounts[i]; - if (!mount.type.syncfs) { - done(null); - continue; - } - mount.type.syncfs(mount, populate, done); - } - },mount:function (type, opts, mountpoint) { - var lookup; - if (mountpoint) { - lookup = FS.lookupPath(mountpoint, { follow: false }); - mountpoint = lookup.path; // use the absolute path - } - var mount = { - type: type, - opts: opts, - mountpoint: mountpoint, - root: null - }; - // create a root node for the fs - var root = type.mount(mount); - root.mount = mount; - mount.root = root; - // assign the mount info to the mountpoint's node - if (lookup) { - lookup.node.mount = mount; - lookup.node.mounted = true; - // compatibility update FS.root if we mount to / - if (mountpoint === '/') { - FS.root = mount.root; - } - } - // add to our cached list of mounts - FS.mounts.push(mount); - return root; - },lookup:function (parent, name) { - return parent.node_ops.lookup(parent, name); - },mknod:function (path, mode, dev) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - var err = FS.mayCreate(parent, name); - if (err) { - throw new FS.ErrnoError(err); - } - if (!parent.node_ops.mknod) { - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - return parent.node_ops.mknod(parent, name, mode, dev); - },create:function (path, mode) { - mode = mode !== undefined ? mode : 0666; - mode &= 4095; - mode |= 32768; - return FS.mknod(path, mode, 0); - },mkdir:function (path, mode) { - mode = mode !== undefined ? mode : 0777; - mode &= 511 | 512; - mode |= 16384; - return FS.mknod(path, mode, 0); - },mkdev:function (path, mode, dev) { - if (typeof(dev) === 'undefined') { - dev = mode; - mode = 0666; - } - mode |= 8192; - return FS.mknod(path, mode, dev); - },symlink:function (oldpath, newpath) { - var lookup = FS.lookupPath(newpath, { parent: true }); - var parent = lookup.node; - var newname = PATH.basename(newpath); - var err = FS.mayCreate(parent, newname); - if (err) { - throw new FS.ErrnoError(err); - } - if (!parent.node_ops.symlink) { - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - return parent.node_ops.symlink(parent, newname, oldpath); - },rename:function (old_path, new_path) { - var old_dirname = PATH.dirname(old_path); - var new_dirname = PATH.dirname(new_path); - var old_name = PATH.basename(old_path); - var new_name = PATH.basename(new_path); - // parents must exist - var lookup, old_dir, new_dir; - try { - lookup = FS.lookupPath(old_path, { parent: true }); - old_dir = lookup.node; - lookup = FS.lookupPath(new_path, { parent: true }); - new_dir = lookup.node; - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES.EBUSY); - } - // need to be part of the same mount - if (old_dir.mount !== new_dir.mount) { - throw new FS.ErrnoError(ERRNO_CODES.EXDEV); - } - // source must exist - var old_node = FS.lookupNode(old_dir, old_name); - // old path should not be an ancestor of the new path - var relative = PATH.relative(old_path, new_dirname); - if (relative.charAt(0) !== '.') { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - // new path should not be an ancestor of the old path - relative = PATH.relative(new_path, old_dirname); - if (relative.charAt(0) !== '.') { - throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY); - } - // see if the new path already exists - var new_node; - try { - new_node = FS.lookupNode(new_dir, new_name); - } catch (e) { - // not fatal - } - // early out if nothing needs to change - if (old_node === new_node) { - return; - } - // we'll need to delete the old entry - var isdir = FS.isDir(old_node.mode); - var err = FS.mayDelete(old_dir, old_name, isdir); - if (err) { - throw new FS.ErrnoError(err); - } - // need delete permissions if we'll be overwriting. - // need create permissions if new doesn't already exist. - err = new_node ? - FS.mayDelete(new_dir, new_name, isdir) : - FS.mayCreate(new_dir, new_name); - if (err) { - throw new FS.ErrnoError(err); - } - if (!old_dir.node_ops.rename) { - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { - throw new FS.ErrnoError(ERRNO_CODES.EBUSY); - } - // if we are going to change the parent, check write permissions - if (new_dir !== old_dir) { - err = FS.nodePermissions(old_dir, 'w'); - if (err) { - throw new FS.ErrnoError(err); - } - } - // remove the node from the lookup hash - FS.hashRemoveNode(old_node); - // do the underlying fs rename - try { - old_dir.node_ops.rename(old_node, new_dir, new_name); - } catch (e) { - throw e; - } finally { - // add the node back to the hash (in case node_ops.rename - // changed its name) - FS.hashAddNode(old_node); - } - },rmdir:function (path) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var err = FS.mayDelete(parent, name, true); - if (err) { - throw new FS.ErrnoError(err); - } - if (!parent.node_ops.rmdir) { - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(ERRNO_CODES.EBUSY); - } - parent.node_ops.rmdir(parent, name); - FS.destroyNode(node); - },readdir:function (path) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - if (!node.node_ops.readdir) { - throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); - } - return node.node_ops.readdir(node); - },unlink:function (path) { - var lookup = FS.lookupPath(path, { parent: true }); - var parent = lookup.node; - var name = PATH.basename(path); - var node = FS.lookupNode(parent, name); - var err = FS.mayDelete(parent, name, false); - if (err) { - // POSIX says unlink should set EPERM, not EISDIR - if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM; - throw new FS.ErrnoError(err); - } - if (!parent.node_ops.unlink) { - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - if (FS.isMountpoint(node)) { - throw new FS.ErrnoError(ERRNO_CODES.EBUSY); - } - parent.node_ops.unlink(parent, name); - FS.destroyNode(node); - },readlink:function (path) { - var lookup = FS.lookupPath(path, { follow: false }); - var link = lookup.node; - if (!link.node_ops.readlink) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - return link.node_ops.readlink(link); - },stat:function (path, dontFollow) { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - var node = lookup.node; - if (!node.node_ops.getattr) { - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - return node.node_ops.getattr(node); - },lstat:function (path) { - return FS.stat(path, true); - },chmod:function (path, mode, dontFollow) { - var node; - if (typeof path === 'string') { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - node.node_ops.setattr(node, { - mode: (mode & 4095) | (node.mode & ~4095), - timestamp: Date.now() - }); - },lchmod:function (path, mode) { - FS.chmod(path, mode, true); - },fchmod:function (fd, mode) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(ERRNO_CODES.EBADF); - } - FS.chmod(stream.node, mode); - },chown:function (path, uid, gid, dontFollow) { - var node; - if (typeof path === 'string') { - var lookup = FS.lookupPath(path, { follow: !dontFollow }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - node.node_ops.setattr(node, { - timestamp: Date.now() - // we ignore the uid / gid for now - }); - },lchown:function (path, uid, gid) { - FS.chown(path, uid, gid, true); - },fchown:function (fd, uid, gid) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(ERRNO_CODES.EBADF); - } - FS.chown(stream.node, uid, gid); - },truncate:function (path, len) { - if (len < 0) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - var node; - if (typeof path === 'string') { - var lookup = FS.lookupPath(path, { follow: true }); - node = lookup.node; - } else { - node = path; - } - if (!node.node_ops.setattr) { - throw new FS.ErrnoError(ERRNO_CODES.EPERM); - } - if (FS.isDir(node.mode)) { - throw new FS.ErrnoError(ERRNO_CODES.EISDIR); - } - if (!FS.isFile(node.mode)) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - var err = FS.nodePermissions(node, 'w'); - if (err) { - throw new FS.ErrnoError(err); - } - node.node_ops.setattr(node, { - size: len, - timestamp: Date.now() - }); - },ftruncate:function (fd, len) { - var stream = FS.getStream(fd); - if (!stream) { - throw new FS.ErrnoError(ERRNO_CODES.EBADF); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - FS.truncate(stream.node, len); - },utime:function (path, atime, mtime) { - var lookup = FS.lookupPath(path, { follow: true }); - var node = lookup.node; - node.node_ops.setattr(node, { - timestamp: Math.max(atime, mtime) - }); - },open:function (path, flags, mode, fd_start, fd_end) { - flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags; - mode = typeof mode === 'undefined' ? 0666 : mode; - if ((flags & 64)) { - mode = (mode & 4095) | 32768; - } else { - mode = 0; - } - var node; - if (typeof path === 'object') { - node = path; - } else { - path = PATH.normalize(path); - try { - var lookup = FS.lookupPath(path, { - follow: !(flags & 131072) - }); - node = lookup.node; - } catch (e) { - // ignore - } - } - // perhaps we need to create the node - if ((flags & 64)) { - if (node) { - // if O_CREAT and O_EXCL are set, error out if the node already exists - if ((flags & 128)) { - throw new FS.ErrnoError(ERRNO_CODES.EEXIST); - } - } else { - // node doesn't exist, try to create it - node = FS.mknod(path, mode, 0); - } - } - if (!node) { - throw new FS.ErrnoError(ERRNO_CODES.ENOENT); - } - // can't truncate a device - if (FS.isChrdev(node.mode)) { - flags &= ~512; - } - // check permissions - var err = FS.mayOpen(node, flags); - if (err) { - throw new FS.ErrnoError(err); - } - // do truncation if necessary - if ((flags & 512)) { - FS.truncate(node, 0); - } - // we've already handled these, don't pass down to the underlying vfs - flags &= ~(128 | 512); - // register the stream with the filesystem - var stream = FS.createStream({ - node: node, - path: FS.getPath(node), // we want the absolute path to the node - flags: flags, - seekable: true, - position: 0, - stream_ops: node.stream_ops, - // used by the file family libc calls (fopen, fwrite, ferror, etc.) - ungotten: [], - error: false - }, fd_start, fd_end); - // call the new stream's open function - if (stream.stream_ops.open) { - stream.stream_ops.open(stream); - } - if (Module['logReadFiles'] && !(flags & 1)) { - if (!FS.readFiles) FS.readFiles = {}; - if (!(path in FS.readFiles)) { - FS.readFiles[path] = 1; - Module['printErr']('read file: ' + path); - } - } - return stream; - },close:function (stream) { - try { - if (stream.stream_ops.close) { - stream.stream_ops.close(stream); - } - } catch (e) { - throw e; - } finally { - FS.closeStream(stream.fd); - } - },llseek:function (stream, offset, whence) { - if (!stream.seekable || !stream.stream_ops.llseek) { - throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); - } - return stream.stream_ops.llseek(stream, offset, whence); - },read:function (stream, buffer, offset, length, position) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(ERRNO_CODES.EBADF); - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(ERRNO_CODES.EISDIR); - } - if (!stream.stream_ops.read) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - var seeking = true; - if (typeof position === 'undefined') { - position = stream.position; - seeking = false; - } else if (!stream.seekable) { - throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); - } - var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); - if (!seeking) stream.position += bytesRead; - return bytesRead; - },write:function (stream, buffer, offset, length, position, canOwn) { - if (length < 0 || position < 0) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(ERRNO_CODES.EBADF); - } - if (FS.isDir(stream.node.mode)) { - throw new FS.ErrnoError(ERRNO_CODES.EISDIR); - } - if (!stream.stream_ops.write) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - var seeking = true; - if (typeof position === 'undefined') { - position = stream.position; - seeking = false; - } else if (!stream.seekable) { - throw new FS.ErrnoError(ERRNO_CODES.ESPIPE); - } - if (stream.flags & 1024) { - // seek to the end before writing in append mode - FS.llseek(stream, 0, 2); - } - var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); - if (!seeking) stream.position += bytesWritten; - return bytesWritten; - },allocate:function (stream, offset, length) { - if (offset < 0 || length <= 0) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - if ((stream.flags & 2097155) === 0) { - throw new FS.ErrnoError(ERRNO_CODES.EBADF); - } - if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) { - throw new FS.ErrnoError(ERRNO_CODES.ENODEV); - } - if (!stream.stream_ops.allocate) { - throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); - } - stream.stream_ops.allocate(stream, offset, length); - },mmap:function (stream, buffer, offset, length, position, prot, flags) { - // TODO if PROT is PROT_WRITE, make sure we have write access - if ((stream.flags & 2097155) === 1) { - throw new FS.ErrnoError(ERRNO_CODES.EACCES); - } - if (!stream.stream_ops.mmap) { - throw new FS.errnoError(ERRNO_CODES.ENODEV); - } - return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags); - },ioctl:function (stream, cmd, arg) { - if (!stream.stream_ops.ioctl) { - throw new FS.ErrnoError(ERRNO_CODES.ENOTTY); - } - return stream.stream_ops.ioctl(stream, cmd, arg); - },readFile:function (path, opts) { - opts = opts || {}; - opts.flags = opts.flags || 'r'; - opts.encoding = opts.encoding || 'binary'; - var ret; - var stream = FS.open(path, opts.flags); - var stat = FS.stat(path); - var length = stat.size; - var buf = new Uint8Array(length); - FS.read(stream, buf, 0, length, 0); - if (opts.encoding === 'utf8') { - ret = ''; - var utf8 = new Runtime.UTF8Processor(); - for (var i = 0; i < length; i++) { - ret += utf8.processCChar(buf[i]); - } - } else if (opts.encoding === 'binary') { - ret = buf; - } else { - throw new Error('Invalid encoding type "' + opts.encoding + '"'); - } - FS.close(stream); - return ret; - },writeFile:function (path, data, opts) { - opts = opts || {}; - opts.flags = opts.flags || 'w'; - opts.encoding = opts.encoding || 'utf8'; - var stream = FS.open(path, opts.flags, opts.mode); - if (opts.encoding === 'utf8') { - var utf8 = new Runtime.UTF8Processor(); - var buf = new Uint8Array(utf8.processJSString(data)); - FS.write(stream, buf, 0, buf.length, 0); - } else if (opts.encoding === 'binary') { - FS.write(stream, data, 0, data.length, 0); - } else { - throw new Error('Invalid encoding type "' + opts.encoding + '"'); - } - FS.close(stream); - },cwd:function () { - return FS.currentPath; - },chdir:function (path) { - var lookup = FS.lookupPath(path, { follow: true }); - if (!FS.isDir(lookup.node.mode)) { - throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR); - } - var err = FS.nodePermissions(lookup.node, 'x'); - if (err) { - throw new FS.ErrnoError(err); - } - FS.currentPath = lookup.path; - },createDefaultDirectories:function () { - FS.mkdir('/tmp'); - },createDefaultDevices:function () { - // create /dev - FS.mkdir('/dev'); - // setup /dev/null - FS.registerDevice(FS.makedev(1, 3), { - read: function() { return 0; }, - write: function() { return 0; } - }); - FS.mkdev('/dev/null', FS.makedev(1, 3)); - // setup /dev/tty and /dev/tty1 - // stderr needs to print output using Module['printErr'] - // so we register a second tty just for it. - TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); - TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); - FS.mkdev('/dev/tty', FS.makedev(5, 0)); - FS.mkdev('/dev/tty1', FS.makedev(6, 0)); - // we're not going to emulate the actual shm device, - // just create the tmp dirs that reside in it commonly - FS.mkdir('/dev/shm'); - FS.mkdir('/dev/shm/tmp'); - },createStandardStreams:function () { - // TODO deprecate the old functionality of a single - // input / output callback and that utilizes FS.createDevice - // and instead require a unique set of stream ops - // by default, we symlink the standard streams to the - // default tty devices. however, if the standard streams - // have been overwritten we create a unique device for - // them instead. - if (Module['stdin']) { - FS.createDevice('/dev', 'stdin', Module['stdin']); - } else { - FS.symlink('/dev/tty', '/dev/stdin'); - } - if (Module['stdout']) { - FS.createDevice('/dev', 'stdout', null, Module['stdout']); - } else { - FS.symlink('/dev/tty', '/dev/stdout'); - } - if (Module['stderr']) { - FS.createDevice('/dev', 'stderr', null, Module['stderr']); - } else { - FS.symlink('/dev/tty1', '/dev/stderr'); - } - // open default streams for the stdin, stdout and stderr devices - var stdin = FS.open('/dev/stdin', 'r'); - HEAP32[((_stdin)>>2)]=stdin.fd; - assert(stdin.fd === 1, 'invalid handle for stdin (' + stdin.fd + ')'); - var stdout = FS.open('/dev/stdout', 'w'); - HEAP32[((_stdout)>>2)]=stdout.fd; - assert(stdout.fd === 2, 'invalid handle for stdout (' + stdout.fd + ')'); - var stderr = FS.open('/dev/stderr', 'w'); - HEAP32[((_stderr)>>2)]=stderr.fd; - assert(stderr.fd === 3, 'invalid handle for stderr (' + stderr.fd + ')'); - },ensureErrnoError:function () { - if (FS.ErrnoError) return; - FS.ErrnoError = function ErrnoError(errno) { - this.errno = errno; - for (var key in ERRNO_CODES) { - if (ERRNO_CODES[key] === errno) { - this.code = key; - break; - } - } - this.message = ERRNO_MESSAGES[errno]; - this.stack = stackTrace(); - }; - FS.ErrnoError.prototype = new Error(); - FS.ErrnoError.prototype.constructor = FS.ErrnoError; - // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info) - [ERRNO_CODES.ENOENT].forEach(function(code) { - FS.genericErrors[code] = new FS.ErrnoError(code); - FS.genericErrors[code].stack = ''; - }); - },staticInit:function () { - FS.ensureErrnoError(); - FS.nameTable = new Array(4096); - FS.root = FS.createNode(null, '/', 16384 | 0777, 0); - FS.mount(MEMFS, {}, '/'); - FS.createDefaultDirectories(); - FS.createDefaultDevices(); - },init:function (input, output, error) { - assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); - FS.init.initialized = true; - FS.ensureErrnoError(); - // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here - Module['stdin'] = input || Module['stdin']; - Module['stdout'] = output || Module['stdout']; - Module['stderr'] = error || Module['stderr']; - FS.createStandardStreams(); - },quit:function () { - FS.init.initialized = false; - for (var i = 0; i < FS.streams.length; i++) { - var stream = FS.streams[i]; - if (!stream) { - continue; - } - FS.close(stream); - } - },getMode:function (canRead, canWrite) { - var mode = 0; - if (canRead) mode |= 292 | 73; - if (canWrite) mode |= 146; - return mode; - },joinPath:function (parts, forceRelative) { - var path = PATH.join.apply(null, parts); - if (forceRelative && path[0] == '/') path = path.substr(1); - return path; - },absolutePath:function (relative, base) { - return PATH.resolve(base, relative); - },standardizePath:function (path) { - return PATH.normalize(path); - },findObject:function (path, dontResolveLastLink) { - var ret = FS.analyzePath(path, dontResolveLastLink); - if (ret.exists) { - return ret.object; - } else { - ___setErrNo(ret.error); - return null; - } - },analyzePath:function (path, dontResolveLastLink) { - // operate from within the context of the symlink's target - try { - var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); - path = lookup.path; - } catch (e) { - } - var ret = { - isRoot: false, exists: false, error: 0, name: null, path: null, object: null, - parentExists: false, parentPath: null, parentObject: null - }; - try { - var lookup = FS.lookupPath(path, { parent: true }); - ret.parentExists = true; - ret.parentPath = lookup.path; - ret.parentObject = lookup.node; - ret.name = PATH.basename(path); - lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); - ret.exists = true; - ret.path = lookup.path; - ret.object = lookup.node; - ret.name = lookup.node.name; - ret.isRoot = lookup.path === '/'; - } catch (e) { - ret.error = e.errno; - }; - return ret; - },createFolder:function (parent, name, canRead, canWrite) { - var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); - var mode = FS.getMode(canRead, canWrite); - return FS.mkdir(path, mode); - },createPath:function (parent, path, canRead, canWrite) { - parent = typeof parent === 'string' ? parent : FS.getPath(parent); - var parts = path.split('/').reverse(); - while (parts.length) { - var part = parts.pop(); - if (!part) continue; - var current = PATH.join2(parent, part); - try { - FS.mkdir(current); - } catch (e) { - // ignore EEXIST - } - parent = current; - } - return current; - },createFile:function (parent, name, properties, canRead, canWrite) { - var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); - var mode = FS.getMode(canRead, canWrite); - return FS.create(path, mode); - },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) { - var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent; - var mode = FS.getMode(canRead, canWrite); - var node = FS.create(path, mode); - if (data) { - if (typeof data === 'string') { - var arr = new Array(data.length); - for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); - data = arr; - } - // make sure we can write to the file - FS.chmod(node, mode | 146); - var stream = FS.open(node, 'w'); - FS.write(stream, data, 0, data.length, 0, canOwn); - FS.close(stream); - FS.chmod(node, mode); - } - return node; - },createDevice:function (parent, name, input, output) { - var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); - var mode = FS.getMode(!!input, !!output); - if (!FS.createDevice.major) FS.createDevice.major = 64; - var dev = FS.makedev(FS.createDevice.major++, 0); - // Create a fake device that a set of stream ops to emulate - // the old behavior. - FS.registerDevice(dev, { - open: function(stream) { - stream.seekable = false; - }, - close: function(stream) { - // flush any pending line data - if (output && output.buffer && output.buffer.length) { - output(10); - } - }, - read: function(stream, buffer, offset, length, pos /* ignored */) { - var bytesRead = 0; - for (var i = 0; i < length; i++) { - var result; - try { - result = input(); - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES.EIO); - } - if (result === undefined && bytesRead === 0) { - throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); - } - if (result === null || result === undefined) break; - bytesRead++; - buffer[offset+i] = result; - } - if (bytesRead) { - stream.node.timestamp = Date.now(); - } - return bytesRead; - }, - write: function(stream, buffer, offset, length, pos) { - for (var i = 0; i < length; i++) { - try { - output(buffer[offset+i]); - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES.EIO); - } - } - if (length) { - stream.node.timestamp = Date.now(); - } - return i; - } - }); - return FS.mkdev(path, mode, dev); - },createLink:function (parent, name, target, canRead, canWrite) { - var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name); - return FS.symlink(target, path); - },forceLoadFile:function (obj) { - if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; - var success = true; - if (typeof XMLHttpRequest !== 'undefined') { - throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); - } else if (Module['read']) { - // Command-line. - try { - // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as - // read() will try to parse UTF8. - obj.contents = intArrayFromString(Module['read'](obj.url), true); - } catch (e) { - success = false; - } - } else { - throw new Error('Cannot load without read() or XMLHttpRequest.'); - } - if (!success) ___setErrNo(ERRNO_CODES.EIO); - return success; - },createLazyFile:function (parent, name, url, canRead, canWrite) { - if (typeof XMLHttpRequest !== 'undefined') { - if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; - // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse. - function LazyUint8Array() { - this.lengthKnown = false; - this.chunks = []; // Loaded chunks. Index is the chunk number - } - LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) { - if (idx > this.length-1 || idx < 0) { - return undefined; - } - var chunkOffset = idx % this.chunkSize; - var chunkNum = Math.floor(idx / this.chunkSize); - return this.getter(chunkNum)[chunkOffset]; - } - LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) { - this.getter = getter; - } - LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() { - // Find length - var xhr = new XMLHttpRequest(); - xhr.open('HEAD', url, false); - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - var datalength = Number(xhr.getResponseHeader("Content-length")); - var header; - var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; - var chunkSize = 1024*1024; // Chunk size in bytes - if (!hasByteServing) chunkSize = datalength; - // Function to get a range from the remote URL. - var doXHR = (function(from, to) { - if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); - if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); - // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, false); - if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); - // Some hints to the browser that we want binary data. - if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer'; - if (xhr.overrideMimeType) { - xhr.overrideMimeType('text/plain; charset=x-user-defined'); - } - xhr.send(null); - if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); - if (xhr.response !== undefined) { - return new Uint8Array(xhr.response || []); - } else { - return intArrayFromString(xhr.responseText || '', true); - } - }); - var lazyArray = this; - lazyArray.setDataGetter(function(chunkNum) { - var start = chunkNum * chunkSize; - var end = (chunkNum+1) * chunkSize - 1; // including this byte - end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block - if (typeof(lazyArray.chunks[chunkNum]) === "undefined") { - lazyArray.chunks[chunkNum] = doXHR(start, end); - } - if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!"); - return lazyArray.chunks[chunkNum]; - }); - this._length = datalength; - this._chunkSize = chunkSize; - this.lengthKnown = true; - } - var lazyArray = new LazyUint8Array(); - Object.defineProperty(lazyArray, "length", { - get: function() { - if(!this.lengthKnown) { - this.cacheLength(); - } - return this._length; - } - }); - Object.defineProperty(lazyArray, "chunkSize", { - get: function() { - if(!this.lengthKnown) { - this.cacheLength(); - } - return this._chunkSize; - } - }); - var properties = { isDevice: false, contents: lazyArray }; - } else { - var properties = { isDevice: false, url: url }; - } - var node = FS.createFile(parent, name, properties, canRead, canWrite); - // This is a total hack, but I want to get this lazy file code out of the - // core of MEMFS. If we want to keep this lazy file concept I feel it should - // be its own thin LAZYFS proxying calls to MEMFS. - if (properties.contents) { - node.contents = properties.contents; - } else if (properties.url) { - node.contents = null; - node.url = properties.url; - } - // override each stream op with one that tries to force load the lazy file first - var stream_ops = {}; - var keys = Object.keys(node.stream_ops); - keys.forEach(function(key) { - var fn = node.stream_ops[key]; - stream_ops[key] = function forceLoadLazyFile() { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(ERRNO_CODES.EIO); - } - return fn.apply(null, arguments); - }; - }); - // use a custom read function - stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) { - if (!FS.forceLoadFile(node)) { - throw new FS.ErrnoError(ERRNO_CODES.EIO); - } - var contents = stream.node.contents; - if (position >= contents.length) - return 0; - var size = Math.min(contents.length - position, length); - assert(size >= 0); - if (contents.slice) { // normal array - for (var i = 0; i < size; i++) { - buffer[offset + i] = contents[position + i]; - } - } else { - for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR - buffer[offset + i] = contents.get(position + i); - } - } - return size; - }; - node.stream_ops = stream_ops; - return node; - },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) { - Browser.init(); - // TODO we should allow people to just pass in a complete filename instead - // of parent and name being that we just join them anyways - var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent; - function processData(byteArray) { - function finish(byteArray) { - if (!dontCreateFile) { - FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); - } - if (onload) onload(); - removeRunDependency('cp ' + fullname); - } - var handled = false; - Module['preloadPlugins'].forEach(function(plugin) { - if (handled) return; - if (plugin['canHandle'](fullname)) { - plugin['handle'](byteArray, fullname, finish, function() { - if (onerror) onerror(); - removeRunDependency('cp ' + fullname); - }); - handled = true; - } - }); - if (!handled) finish(byteArray); - } - addRunDependency('cp ' + fullname); - if (typeof url == 'string') { - Browser.asyncLoad(url, function(byteArray) { - processData(byteArray); - }, onerror); - } else { - processData(url); - } - },indexedDB:function () { - return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; - },DB_NAME:function () { - return 'EM_FS_' + window.location.pathname; - },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) { - onload = onload || function(){}; - onerror = onerror || function(){}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); - } catch (e) { - return onerror(e); - } - openRequest.onupgradeneeded = function openRequest_onupgradeneeded() { - console.log('creating db'); - var db = openRequest.result; - db.createObjectStore(FS.DB_STORE_NAME); - }; - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite'); - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, fail = 0, total = paths.length; - function finish() { - if (fail == 0) onload(); else onerror(); - } - paths.forEach(function(path) { - var putRequest = files.put(FS.analyzePath(path).object.contents, path); - putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() }; - putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() }; - }); - transaction.onerror = onerror; - }; - openRequest.onerror = onerror; - },loadFilesFromDB:function (paths, onload, onerror) { - onload = onload || function(){}; - onerror = onerror || function(){}; - var indexedDB = FS.indexedDB(); - try { - var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION); - } catch (e) { - return onerror(e); - } - openRequest.onupgradeneeded = onerror; // no database to load from - openRequest.onsuccess = function openRequest_onsuccess() { - var db = openRequest.result; - try { - var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly'); - } catch(e) { - onerror(e); - return; - } - var files = transaction.objectStore(FS.DB_STORE_NAME); - var ok = 0, fail = 0, total = paths.length; - function finish() { - if (fail == 0) onload(); else onerror(); - } - paths.forEach(function(path) { - var getRequest = files.get(path); - getRequest.onsuccess = function getRequest_onsuccess() { - if (FS.analyzePath(path).exists) { - FS.unlink(path); - } - FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true); - ok++; - if (ok + fail == total) finish(); - }; - getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() }; - }); - transaction.onerror = onerror; - }; - openRequest.onerror = onerror; - }}; - function _open(path, oflag, varargs) { - // int open(const char *path, int oflag, ...); - // http://pubs.opengroup.org/onlinepubs/009695399/functions/open.html - var mode = HEAP32[((varargs)>>2)]; - path = Pointer_stringify(path); - try { - var stream = FS.open(path, oflag, mode); - return stream.fd; - } catch (e) { - FS.handleFSError(e); - return -1; - } - }function _fopen(filename, mode) { - // FILE *fopen(const char *restrict filename, const char *restrict mode); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html - var flags; - mode = Pointer_stringify(mode); - if (mode[0] == 'r') { - if (mode.indexOf('+') != -1) { - flags = 2; - } else { - flags = 0; - } - } else if (mode[0] == 'w') { - if (mode.indexOf('+') != -1) { - flags = 2; - } else { - flags = 1; - } - flags |= 64; - flags |= 512; - } else if (mode[0] == 'a') { - if (mode.indexOf('+') != -1) { - flags = 2; - } else { - flags = 1; - } - flags |= 64; - flags |= 1024; - } else { - ___setErrNo(ERRNO_CODES.EINVAL); - return 0; - } - var ret = _open(filename, flags, allocate([0x1FF, 0, 0, 0], 'i32', ALLOC_STACK)); // All creation permissions. - return (ret == -1) ? 0 : ret; - } - function _lseek(fildes, offset, whence) { - // off_t lseek(int fildes, off_t offset, int whence); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/lseek.html - var stream = FS.getStream(fildes); - if (!stream) { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - try { - return FS.llseek(stream, offset, whence); - } catch (e) { - FS.handleFSError(e); - return -1; - } - }function _fseek(stream, offset, whence) { - // int fseek(FILE *stream, long offset, int whence); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fseek.html - var ret = _lseek(stream, offset, whence); - if (ret == -1) { - return -1; - } - stream = FS.getStream(stream); - stream.eof = false; - return 0; - } - function _ftell(stream) { - // long ftell(FILE *stream); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/ftell.html - stream = FS.getStream(stream); - if (!stream) { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - if (FS.isChrdev(stream.node.mode)) { - ___setErrNo(ERRNO_CODES.ESPIPE); - return -1; - } else { - return stream.position; - } - } - function _rewind(stream) { - // void rewind(FILE *stream); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/rewind.html - _fseek(stream, 0, 0); // SEEK_SET. - var streamObj = FS.getStream(stream); - if (streamObj) streamObj.error = false; - } - var SOCKFS={mount:function (mount) { - return FS.createNode(null, '/', 16384 | 0777, 0); - },createSocket:function (family, type, protocol) { - var streaming = type == 1; - if (protocol) { - assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp - } - // create our internal socket structure - var sock = { - family: family, - type: type, - protocol: protocol, - server: null, - peers: {}, - pending: [], - recv_queue: [], - sock_ops: SOCKFS.websocket_sock_ops - }; - // create the filesystem node to store the socket structure - var name = SOCKFS.nextname(); - var node = FS.createNode(SOCKFS.root, name, 49152, 0); - node.sock = sock; - // and the wrapping stream that enables library functions such - // as read and write to indirectly interact with the socket - var stream = FS.createStream({ - path: name, - node: node, - flags: FS.modeStringToFlags('r+'), - seekable: false, - stream_ops: SOCKFS.stream_ops - }); - // map the new stream to the socket structure (sockets have a 1:1 - // relationship with a stream) - sock.stream = stream; - return sock; - },getSocket:function (fd) { - var stream = FS.getStream(fd); - if (!stream || !FS.isSocket(stream.node.mode)) { - return null; - } - return stream.node.sock; - },stream_ops:{poll:function (stream) { - var sock = stream.node.sock; - return sock.sock_ops.poll(sock); - },ioctl:function (stream, request, varargs) { - var sock = stream.node.sock; - return sock.sock_ops.ioctl(sock, request, varargs); - },read:function (stream, buffer, offset, length, position /* ignored */) { - var sock = stream.node.sock; - var msg = sock.sock_ops.recvmsg(sock, length); - if (!msg) { - // socket is closed - return 0; - } - buffer.set(msg.buffer, offset); - return msg.buffer.length; - },write:function (stream, buffer, offset, length, position /* ignored */) { - var sock = stream.node.sock; - return sock.sock_ops.sendmsg(sock, buffer, offset, length); - },close:function (stream) { - var sock = stream.node.sock; - sock.sock_ops.close(sock); - }},nextname:function () { - if (!SOCKFS.nextname.current) { - SOCKFS.nextname.current = 0; - } - return 'socket[' + (SOCKFS.nextname.current++) + ']'; - },websocket_sock_ops:{createPeer:function (sock, addr, port) { - var ws; - if (typeof addr === 'object') { - ws = addr; - addr = null; - port = null; - } - if (ws) { - // for sockets that've already connected (e.g. we're the server) - // we can inspect the _socket property for the address - if (ws._socket) { - addr = ws._socket.remoteAddress; - port = ws._socket.remotePort; - } - // if we're just now initializing a connection to the remote, - // inspect the url property - else { - var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url); - if (!result) { - throw new Error('WebSocket URL must be in the format ws(s)://address:port'); - } - addr = result[1]; - port = parseInt(result[2], 10); - } - } else { - // create the actual websocket object and connect - try { - var url = 'ws://' + addr + ':' + port; - // the node ws library API is slightly different than the browser's - var opts = ENVIRONMENT_IS_NODE ? {headers: {'websocket-protocol': ['binary']}} : ['binary']; - // If node we use the ws library. - var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket']; - ws = new WebSocket(url, opts); - ws.binaryType = 'arraybuffer'; - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH); - } - } - var peer = { - addr: addr, - port: port, - socket: ws, - dgram_send_queue: [] - }; - SOCKFS.websocket_sock_ops.addPeer(sock, peer); - SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer); - // if this is a bound dgram socket, send the port number first to allow - // us to override the ephemeral port reported to us by remotePort on the - // remote end. - if (sock.type === 2 && typeof sock.sport !== 'undefined') { - peer.dgram_send_queue.push(new Uint8Array([ - 255, 255, 255, 255, - 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0), - ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff) - ])); - } - return peer; - },getPeer:function (sock, addr, port) { - return sock.peers[addr + ':' + port]; - },addPeer:function (sock, peer) { - sock.peers[peer.addr + ':' + peer.port] = peer; - },removePeer:function (sock, peer) { - delete sock.peers[peer.addr + ':' + peer.port]; - },handlePeerEvents:function (sock, peer) { - var first = true; - var handleOpen = function () { - try { - var queued = peer.dgram_send_queue.shift(); - while (queued) { - peer.socket.send(queued); - queued = peer.dgram_send_queue.shift(); - } - } catch (e) { - // not much we can do here in the way of proper error handling as we've already - // lied and said this data was sent. shut it down. - peer.socket.close(); - } - }; - function handleMessage(data) { - assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer - data = new Uint8Array(data); // make a typed array view on the array buffer - // if this is the port message, override the peer's port with it - var wasfirst = first; - first = false; - if (wasfirst && - data.length === 10 && - data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 && - data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) { - // update the peer's port and it's key in the peer map - var newport = ((data[8] << 8) | data[9]); - SOCKFS.websocket_sock_ops.removePeer(sock, peer); - peer.port = newport; - SOCKFS.websocket_sock_ops.addPeer(sock, peer); - return; - } - sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data }); - }; - if (ENVIRONMENT_IS_NODE) { - peer.socket.on('open', handleOpen); - peer.socket.on('message', function(data, flags) { - if (!flags.binary) { - return; - } - handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer - }); - peer.socket.on('error', function() { - // don't throw - }); - } else { - peer.socket.onopen = handleOpen; - peer.socket.onmessage = function peer_socket_onmessage(event) { - handleMessage(event.data); - }; - } - },poll:function (sock) { - if (sock.type === 1 && sock.server) { - // listen sockets should only say they're available for reading - // if there are pending clients. - return sock.pending.length ? (64 | 1) : 0; - } - var mask = 0; - var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets - SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) : - null; - if (sock.recv_queue.length || - !dest || // connection-less sockets are always ready to read - (dest && dest.socket.readyState === dest.socket.CLOSING) || - (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed - mask |= (64 | 1); - } - if (!dest || // connection-less sockets are always ready to write - (dest && dest.socket.readyState === dest.socket.OPEN)) { - mask |= 4; - } - if ((dest && dest.socket.readyState === dest.socket.CLOSING) || - (dest && dest.socket.readyState === dest.socket.CLOSED)) { - mask |= 16; - } - return mask; - },ioctl:function (sock, request, arg) { - switch (request) { - case 21531: - var bytes = 0; - if (sock.recv_queue.length) { - bytes = sock.recv_queue[0].data.length; - } - HEAP32[((arg)>>2)]=bytes; - return 0; - default: - return ERRNO_CODES.EINVAL; - } - },close:function (sock) { - // if we've spawned a listen server, close it - if (sock.server) { - try { - sock.server.close(); - } catch (e) { - } - sock.server = null; - } - // close any peer connections - var peers = Object.keys(sock.peers); - for (var i = 0; i < peers.length; i++) { - var peer = sock.peers[peers[i]]; - try { - peer.socket.close(); - } catch (e) { - } - SOCKFS.websocket_sock_ops.removePeer(sock, peer); - } - return 0; - },bind:function (sock, addr, port) { - if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound - } - sock.saddr = addr; - sock.sport = port || _mkport(); - // in order to emulate dgram sockets, we need to launch a listen server when - // binding on a connection-less socket - // note: this is only required on the server side - if (sock.type === 2) { - // close the existing server if it exists - if (sock.server) { - sock.server.close(); - sock.server = null; - } - // swallow error operation not supported error that occurs when binding in the - // browser where this isn't supported - try { - sock.sock_ops.listen(sock, 0); - } catch (e) { - if (!(e instanceof FS.ErrnoError)) throw e; - if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e; - } - } - },connect:function (sock, addr, port) { - if (sock.server) { - throw new FS.ErrnoError(ERRNO_CODS.EOPNOTSUPP); - } - // TODO autobind - // if (!sock.addr && sock.type == 2) { - // } - // early out if we're already connected / in the middle of connecting - if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') { - var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); - if (dest) { - if (dest.socket.readyState === dest.socket.CONNECTING) { - throw new FS.ErrnoError(ERRNO_CODES.EALREADY); - } else { - throw new FS.ErrnoError(ERRNO_CODES.EISCONN); - } - } - } - // add the socket to our peer list and set our - // destination address / port to match - var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); - sock.daddr = peer.addr; - sock.dport = peer.port; - // always "fail" in non-blocking mode - throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS); - },listen:function (sock, backlog) { - if (!ENVIRONMENT_IS_NODE) { - throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP); - } - if (sock.server) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening - } - var WebSocketServer = require('ws').Server; - var host = sock.saddr; - sock.server = new WebSocketServer({ - host: host, - port: sock.sport - // TODO support backlog - }); - sock.server.on('connection', function(ws) { - if (sock.type === 1) { - var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol); - // create a peer on the new socket - var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws); - newsock.daddr = peer.addr; - newsock.dport = peer.port; - // push to queue for accept to pick up - sock.pending.push(newsock); - } else { - // create a peer on the listen socket so calling sendto - // with the listen socket and an address will resolve - // to the correct client - SOCKFS.websocket_sock_ops.createPeer(sock, ws); - } - }); - sock.server.on('closed', function() { - sock.server = null; - }); - sock.server.on('error', function() { - // don't throw - }); - },accept:function (listensock) { - if (!listensock.server) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - var newsock = listensock.pending.shift(); - newsock.stream.flags = listensock.stream.flags; - return newsock; - },getname:function (sock, peer) { - var addr, port; - if (peer) { - if (sock.daddr === undefined || sock.dport === undefined) { - throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); - } - addr = sock.daddr; - port = sock.dport; - } else { - // TODO saddr and sport will be set for bind()'d UDP sockets, but what - // should we be returning for TCP sockets that've been connect()'d? - addr = sock.saddr || 0; - port = sock.sport || 0; - } - return { addr: addr, port: port }; - },sendmsg:function (sock, buffer, offset, length, addr, port) { - if (sock.type === 2) { - // connection-less sockets will honor the message address, - // and otherwise fall back to the bound destination address - if (addr === undefined || port === undefined) { - addr = sock.daddr; - port = sock.dport; - } - // if there was no address to fall back to, error out - if (addr === undefined || port === undefined) { - throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ); - } - } else { - // connection-based sockets will only use the bound - addr = sock.daddr; - port = sock.dport; - } - // find the peer for the destination address - var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port); - // early out if not connected with a connection-based socket - if (sock.type === 1) { - if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { - throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); - } else if (dest.socket.readyState === dest.socket.CONNECTING) { - throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); - } - } - // create a copy of the incoming data to send, as the WebSocket API - // doesn't work entirely with an ArrayBufferView, it'll just send - // the entire underlying buffer - var data; - if (buffer instanceof Array || buffer instanceof ArrayBuffer) { - data = buffer.slice(offset, offset + length); - } else { // ArrayBufferView - data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length); - } - // if we're emulating a connection-less dgram socket and don't have - // a cached connection, queue the buffer to send upon connect and - // lie, saying the data was sent now. - if (sock.type === 2) { - if (!dest || dest.socket.readyState !== dest.socket.OPEN) { - // if we're not connected, open a new connection - if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { - dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port); - } - dest.dgram_send_queue.push(data); - return length; - } - } - try { - // send the actual data - dest.socket.send(data); - return length; - } catch (e) { - throw new FS.ErrnoError(ERRNO_CODES.EINVAL); - } - },recvmsg:function (sock, length) { - // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html - if (sock.type === 1 && sock.server) { - // tcp servers should not be recv()'ing on the listen socket - throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); - } - var queued = sock.recv_queue.shift(); - if (!queued) { - if (sock.type === 1) { - var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport); - if (!dest) { - // if we have a destination address but are not connected, error out - throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN); - } - else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) { - // return null if the socket has closed - return null; - } - else { - // else, our socket is in a valid state but truly has nothing available - throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); - } - } else { - throw new FS.ErrnoError(ERRNO_CODES.EAGAIN); - } - } - // queued.data will be an ArrayBuffer if it's unadulterated, but if it's - // requeued TCP data it'll be an ArrayBufferView - var queuedLength = queued.data.byteLength || queued.data.length; - var queuedOffset = queued.data.byteOffset || 0; - var queuedBuffer = queued.data.buffer || queued.data; - var bytesRead = Math.min(length, queuedLength); - var res = { - buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead), - addr: queued.addr, - port: queued.port - }; - // push back any unread data for TCP connections - if (sock.type === 1 && bytesRead < queuedLength) { - var bytesRemaining = queuedLength - bytesRead; - queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining); - sock.recv_queue.unshift(queued); - } - return res; - }}};function _recv(fd, buf, len, flags) { - var sock = SOCKFS.getSocket(fd); - if (!sock) { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - // TODO honor flags - return _read(fd, buf, len); - } - function _pread(fildes, buf, nbyte, offset) { - // ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html - var stream = FS.getStream(fildes); - if (!stream) { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - try { - var slab = HEAP8; - return FS.read(stream, slab, buf, nbyte, offset); - } catch (e) { - FS.handleFSError(e); - return -1; - } - }function _read(fildes, buf, nbyte) { - // ssize_t read(int fildes, void *buf, size_t nbyte); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html - var stream = FS.getStream(fildes); - if (!stream) { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - try { - var slab = HEAP8; - return FS.read(stream, slab, buf, nbyte); - } catch (e) { - FS.handleFSError(e); - return -1; - } - }function _fread(ptr, size, nitems, stream) { - // size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html - var bytesToRead = nitems * size; - if (bytesToRead == 0) { - return 0; - } - var bytesRead = 0; - var streamObj = FS.getStream(stream); - while (streamObj.ungotten.length && bytesToRead > 0) { - HEAP8[((ptr++)|0)]=streamObj.ungotten.pop() - bytesToRead--; - bytesRead++; - } - var err = _read(stream, ptr, bytesToRead); - if (err == -1) { - if (streamObj) streamObj.error = true; - return 0; - } - bytesRead += err; - if (bytesRead < bytesToRead) streamObj.eof = true; - return Math.floor(bytesRead / size); - } - function _close(fildes) { - // int close(int fildes); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/close.html - var stream = FS.getStream(fildes); - if (!stream) { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - try { - FS.close(stream); - return 0; - } catch (e) { - FS.handleFSError(e); - return -1; - } - } - function _fsync(fildes) { - // int fsync(int fildes); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fsync.html - var stream = FS.getStream(fildes); - if (stream) { - // We write directly to the file system, so there's nothing to do here. - return 0; - } else { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - }function _fclose(stream) { - // int fclose(FILE *stream); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fclose.html - _fsync(stream); - return _close(stream); - } - function _send(fd, buf, len, flags) { - var sock = SOCKFS.getSocket(fd); - if (!sock) { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - // TODO honor flags - return _write(fd, buf, len); - } - function _pwrite(fildes, buf, nbyte, offset) { - // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html - var stream = FS.getStream(fildes); - if (!stream) { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - try { - var slab = HEAP8; - return FS.write(stream, slab, buf, nbyte, offset); - } catch (e) { - FS.handleFSError(e); - return -1; - } - }function _write(fildes, buf, nbyte) { - // ssize_t write(int fildes, const void *buf, size_t nbyte); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html - var stream = FS.getStream(fildes); - if (!stream) { - ___setErrNo(ERRNO_CODES.EBADF); - return -1; - } - try { - var slab = HEAP8; - return FS.write(stream, slab, buf, nbyte); - } catch (e) { - FS.handleFSError(e); - return -1; - } - }function _fwrite(ptr, size, nitems, stream) { - // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html - var bytesToWrite = nitems * size; - if (bytesToWrite == 0) return 0; - var bytesWritten = _write(stream, ptr, bytesToWrite); - if (bytesWritten == -1) { - var streamObj = FS.getStream(stream); - if (streamObj) streamObj.error = true; - return 0; - } else { - return Math.floor(bytesWritten / size); - } - } - function _strcmp(px, py) { - return _strncmp(px, py, TOTAL_MEMORY); - } - var GL={counter:1,lastError:0,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],clientBuffers:[],currArrayBuffer:0,currElementArrayBuffer:0,byteSizeByTypeRoot:5120,byteSizeByType:[1,1,2,2,4,4,4,2,3,4,8],programInfos:{},stringCache:{},packAlignment:4,unpackAlignment:4,init:function () { - Browser.moduleContextCreatedCallbacks.push(GL.initExtensions); - },recordError:function recordError(errorCode) { - if (!GL.lastError) { - GL.lastError = errorCode; - } - },getNewId:function (table) { - var ret = GL.counter++; - for (var i = table.length; i < ret; i++) { - table[i] = null; - } - return ret; - },MINI_TEMP_BUFFER_SIZE:16,miniTempBuffer:null,miniTempBufferViews:[0],MAX_TEMP_BUFFER_SIZE:2097152,tempBufferIndexLookup:null,tempVertexBuffers:null,tempIndexBuffers:null,tempQuadIndexBuffer:null,generateTempBuffers:function (quads) { - GL.tempBufferIndexLookup = new Uint8Array(GL.MAX_TEMP_BUFFER_SIZE+1); - GL.tempVertexBuffers = []; - GL.tempIndexBuffers = []; - var last = -1, curr = -1; - var size = 1; - for (var i = 0; i <= GL.MAX_TEMP_BUFFER_SIZE; i++) { - if (i > size) { - size <<= 1; - } - if (size != last) { - curr++; - GL.tempVertexBuffers[curr] = Module.ctx.createBuffer(); - Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, GL.tempVertexBuffers[curr]); - Module.ctx.bufferData(Module.ctx.ARRAY_BUFFER, size, Module.ctx.DYNAMIC_DRAW); - Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, null); - GL.tempIndexBuffers[curr] = Module.ctx.createBuffer(); - Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, GL.tempIndexBuffers[curr]); - Module.ctx.bufferData(Module.ctx.ELEMENT_ARRAY_BUFFER, size, Module.ctx.DYNAMIC_DRAW); - Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, null); - last = size; - } - GL.tempBufferIndexLookup[i] = curr; - } - if (quads) { - // GL_QUAD indexes can be precalculated - GL.tempQuadIndexBuffer = Module.ctx.createBuffer(); - Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, GL.tempQuadIndexBuffer); - var numIndexes = GL.MAX_TEMP_BUFFER_SIZE >> 1; - var quadIndexes = new Uint16Array(numIndexes); - var i = 0, v = 0; - while (1) { - quadIndexes[i++] = v; - if (i >= numIndexes) break; - quadIndexes[i++] = v+1; - if (i >= numIndexes) break; - quadIndexes[i++] = v+2; - if (i >= numIndexes) break; - quadIndexes[i++] = v; - if (i >= numIndexes) break; - quadIndexes[i++] = v+2; - if (i >= numIndexes) break; - quadIndexes[i++] = v+3; - if (i >= numIndexes) break; - v += 4; - } - Module.ctx.bufferData(Module.ctx.ELEMENT_ARRAY_BUFFER, quadIndexes, Module.ctx.STATIC_DRAW); - Module.ctx.bindBuffer(Module.ctx.ELEMENT_ARRAY_BUFFER, null); - } - },findToken:function (source, token) { - function isIdentChar(ch) { - if (ch >= 48 && ch <= 57) // 0-9 - return true; - if (ch >= 65 && ch <= 90) // A-Z - return true; - if (ch >= 97 && ch <= 122) // a-z - return true; - return false; - } - var i = -1; - do { - i = source.indexOf(token, i + 1); - if (i < 0) { - break; - } - if (i > 0 && isIdentChar(source[i - 1])) { - continue; - } - i += token.length; - if (i < source.length - 1 && isIdentChar(source[i + 1])) { - continue; - } - return true; - } while (true); - return false; - },getSource:function (shader, count, string, length) { - var source = ''; - for (var i = 0; i < count; ++i) { - var frag; - if (length) { - var len = HEAP32[(((length)+(i*4))>>2)]; - if (len < 0) { - frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)]); - } else { - frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)], len); - } - } else { - frag = Pointer_stringify(HEAP32[(((string)+(i*4))>>2)]); - } - source += frag; - } - // Let's see if we need to enable the standard derivatives extension - type = Module.ctx.getShaderParameter(GL.shaders[shader], 0x8B4F /* GL_SHADER_TYPE */); - if (type == 0x8B30 /* GL_FRAGMENT_SHADER */) { - if (GL.findToken(source, "dFdx") || - GL.findToken(source, "dFdy") || - GL.findToken(source, "fwidth")) { - source = "#extension GL_OES_standard_derivatives : enable\n" + source; - var extension = Module.ctx.getExtension("OES_standard_derivatives"); - } - } - return source; - },computeImageSize:function (width, height, sizePerPixel, alignment) { - function roundedToNextMultipleOf(x, y) { - return Math.floor((x + y - 1) / y) * y - } - var plainRowSize = width * sizePerPixel; - var alignedRowSize = roundedToNextMultipleOf(plainRowSize, alignment); - return (height <= 0) ? 0 : - ((height - 1) * alignedRowSize + plainRowSize); - },getTexPixelData:function (type, format, width, height, pixels, internalFormat) { - var sizePerPixel; - switch (type) { - case 0x1401 /* GL_UNSIGNED_BYTE */: - switch (format) { - case 0x1906 /* GL_ALPHA */: - case 0x1909 /* GL_LUMINANCE */: - sizePerPixel = 1; - break; - case 0x1907 /* GL_RGB */: - sizePerPixel = 3; - break; - case 0x1908 /* GL_RGBA */: - sizePerPixel = 4; - break; - case 0x190A /* GL_LUMINANCE_ALPHA */: - sizePerPixel = 2; - break; - default: - throw 'Invalid format (' + format + ')'; - } - break; - case 0x1403 /* GL_UNSIGNED_SHORT */: - if (format == 0x1902 /* GL_DEPTH_COMPONENT */) { - sizePerPixel = 2; - } else { - throw 'Invalid format (' + format + ')'; - } - break; - case 0x1405 /* GL_UNSIGNED_INT */: - if (format == 0x1902 /* GL_DEPTH_COMPONENT */) { - sizePerPixel = 4; - } else { - throw 'Invalid format (' + format + ')'; - } - break; - case 0x84FA /* UNSIGNED_INT_24_8_WEBGL */: - sizePerPixel = 4; - break; - case 0x8363 /* GL_UNSIGNED_SHORT_5_6_5 */: - case 0x8033 /* GL_UNSIGNED_SHORT_4_4_4_4 */: - case 0x8034 /* GL_UNSIGNED_SHORT_5_5_5_1 */: - sizePerPixel = 2; - break; - case 0x1406 /* GL_FLOAT */: - switch (format) { - case 0x1907 /* GL_RGB */: - sizePerPixel = 3*4; - break; - case 0x1908 /* GL_RGBA */: - sizePerPixel = 4*4; - break; - default: - throw 'Invalid format (' + format + ')'; - } - internalFormat = Module.ctx.RGBA; - break; - default: - throw 'Invalid type (' + type + ')'; - } - var bytes = GL.computeImageSize(width, height, sizePerPixel, GL.unpackAlignment); - if (type == 0x1401 /* GL_UNSIGNED_BYTE */) { - pixels = HEAPU8.subarray((pixels),(pixels+bytes)); - } else if (type == 0x1406 /* GL_FLOAT */) { - pixels = HEAPF32.subarray((pixels)>>2,(pixels+bytes)>>2); - } else if (type == 0x1405 /* GL_UNSIGNED_INT */ || type == 0x84FA /* UNSIGNED_INT_24_8_WEBGL */) { - pixels = HEAPU32.subarray((pixels)>>2,(pixels+bytes)>>2); - } else { - pixels = HEAPU16.subarray((pixels)>>1,(pixels+bytes)>>1); - } - return { - pixels: pixels, - internalFormat: internalFormat - } - },calcBufLength:function calcBufLength(size, type, stride, count) { - if (stride > 0) { - return count * stride; // XXXvlad this is not exactly correct I don't think - } - var typeSize = GL.byteSizeByType[type - GL.byteSizeByTypeRoot]; - return size * typeSize * count; - },usedTempBuffers:[],preDrawHandleClientVertexAttribBindings:function preDrawHandleClientVertexAttribBindings(count) { - GL.resetBufferBinding = false; - var used = GL.usedTempBuffers; - used.length = 0; - // TODO: initial pass to detect ranges we need to upload, might not need an upload per attrib - for (var i = 0; i < GL.maxVertexAttribs; ++i) { - var cb = GL.clientBuffers[i]; - if (!cb.clientside || !cb.enabled) continue; - GL.resetBufferBinding = true; - var size = GL.calcBufLength(cb.size, cb.type, cb.stride, count); - var index = GL.tempBufferIndexLookup[size]; - var buf; - do { - buf = GL.tempVertexBuffers[index++]; - } while (used.indexOf(buf) >= 0); - used.push(buf); - Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, buf); - Module.ctx.bufferSubData(Module.ctx.ARRAY_BUFFER, - 0, - HEAPU8.subarray(cb.ptr, cb.ptr + size)); - Module.ctx.vertexAttribPointer(i, cb.size, cb.type, cb.normalized, cb.stride, 0); - } - },postDrawHandleClientVertexAttribBindings:function postDrawHandleClientVertexAttribBindings() { - if (GL.resetBufferBinding) { - Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, GL.buffers[GL.currArrayBuffer]); - } - },initExtensions:function () { - if (GL.initExtensions.done) return; - GL.initExtensions.done = true; - if (!Module.useWebGL) return; // an app might link both gl and 2d backends - GL.miniTempBuffer = new Float32Array(GL.MINI_TEMP_BUFFER_SIZE); - for (var i = 0; i < GL.MINI_TEMP_BUFFER_SIZE; i++) { - GL.miniTempBufferViews[i] = GL.miniTempBuffer.subarray(0, i+1); - } - GL.maxVertexAttribs = Module.ctx.getParameter(Module.ctx.MAX_VERTEX_ATTRIBS); - for (var i = 0; i < GL.maxVertexAttribs; i++) { - GL.clientBuffers[i] = { enabled: false, clientside: false, size: 0, type: 0, normalized: 0, stride: 0, ptr: 0 }; - } - GL.generateTempBuffers(); - // Detect the presence of a few extensions manually, this GL interop layer itself will need to know if they exist. - GL.compressionExt = Module.ctx.getExtension('WEBGL_compressed_texture_s3tc') || - Module.ctx.getExtension('MOZ_WEBGL_compressed_texture_s3tc') || - Module.ctx.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc'); - GL.anisotropicExt = Module.ctx.getExtension('EXT_texture_filter_anisotropic') || - Module.ctx.getExtension('MOZ_EXT_texture_filter_anisotropic') || - Module.ctx.getExtension('WEBKIT_EXT_texture_filter_anisotropic'); - GL.floatExt = Module.ctx.getExtension('OES_texture_float'); - // These are the 'safe' feature-enabling extensions that don't add any performance impact related to e.g. debugging, and - // should be enabled by default so that client GLES2/GL code will not need to go through extra hoops to get its stuff working. - // As new extensions are ratified at http://www.khronos.org/registry/webgl/extensions/ , feel free to add your new extensions - // here, as long as they don't produce a performance impact for users that might not be using those extensions. - // E.g. debugging-related extensions should probably be off by default. - var automaticallyEnabledExtensions = [ "OES_texture_float", "OES_texture_half_float", "OES_standard_derivatives", - "OES_vertex_array_object", "WEBGL_compressed_texture_s3tc", "WEBGL_depth_texture", - "OES_element_index_uint", "EXT_texture_filter_anisotropic", "ANGLE_instanced_arrays", - "OES_texture_float_linear", "OES_texture_half_float_linear", "WEBGL_compressed_texture_atc", - "WEBGL_compressed_texture_pvrtc", "EXT_color_buffer_half_float", "WEBGL_color_buffer_float", - "EXT_frag_depth", "EXT_sRGB", "WEBGL_draw_buffers", "WEBGL_shared_resources" ]; - function shouldEnableAutomatically(extension) { - for(var i in automaticallyEnabledExtensions) { - var include = automaticallyEnabledExtensions[i]; - if (ext.indexOf(include) != -1) { - return true; - } - } - return false; - } - var extensions = Module.ctx.getSupportedExtensions(); - for(var e in extensions) { - var ext = extensions[e].replace('MOZ_', '').replace('WEBKIT_', ''); - if (automaticallyEnabledExtensions.indexOf(ext) != -1) { - Module.ctx.getExtension(ext); // Calling .getExtension enables that extension permanently, no need to store the return value to be enabled. - } - } - },populateUniformTable:function (program) { - var p = GL.programs[program]; - GL.programInfos[program] = { - uniforms: {}, - maxUniformLength: 0, // This is eagerly computed below, since we already enumerate all uniforms anyway. - maxAttributeLength: -1 // This is lazily computed and cached, computed when/if first asked, "-1" meaning not computed yet. - }; - var ptable = GL.programInfos[program]; - var utable = ptable.uniforms; - // A program's uniform table maps the string name of an uniform to an integer location of that uniform. - // The global GL.uniforms map maps integer locations to WebGLUniformLocations. - var numUniforms = Module.ctx.getProgramParameter(p, Module.ctx.ACTIVE_UNIFORMS); - for (var i = 0; i < numUniforms; ++i) { - var u = Module.ctx.getActiveUniform(p, i); - var name = u.name; - ptable.maxUniformLength = Math.max(ptable.maxUniformLength, name.length+1); - // Strip off any trailing array specifier we might have got, e.g. "[0]". - if (name.indexOf(']', name.length-1) !== -1) { - var ls = name.lastIndexOf('['); - name = name.slice(0, ls); - } - // Optimize memory usage slightly: If we have an array of uniforms, e.g. 'vec3 colors[3];', then - // only store the string 'colors' in utable, and 'colors[0]', 'colors[1]' and 'colors[2]' will be parsed as 'colors'+i. - // Note that for the GL.uniforms table, we still need to fetch the all WebGLUniformLocations for all the indices. - var loc = Module.ctx.getUniformLocation(p, name); - var id = GL.getNewId(GL.uniforms); - utable[name] = [u.size, id]; - GL.uniforms[id] = loc; - for (var j = 1; j < u.size; ++j) { - var n = name + '['+j+']'; - loc = Module.ctx.getUniformLocation(p, n); - id = GL.getNewId(GL.uniforms); - GL.uniforms[id] = loc; - } - } - }};function _glCreateShader(shaderType) { - var id = GL.getNewId(GL.shaders); - GL.shaders[id] = Module.ctx.createShader(shaderType); - return id; - } - function _glShaderSource(shader, count, string, length) { - var source = GL.getSource(shader, count, string, length); - Module.ctx.shaderSource(GL.shaders[shader], source); - } - function _glCompileShader(shader) { - Module.ctx.compileShader(GL.shaders[shader]); - } - function _glGetShaderiv(shader, pname, p) { - if (pname == 0x8B84) { // GL_INFO_LOG_LENGTH - HEAP32[((p)>>2)]=Module.ctx.getShaderInfoLog(GL.shaders[shader]).length + 1; - } else { - HEAP32[((p)>>2)]=Module.ctx.getShaderParameter(GL.shaders[shader], pname); - } - } - function _glDeleteShader(shader) { - Module.ctx.deleteShader(GL.shaders[shader]); - GL.shaders[shader] = null; - } - function _glCreateProgram() { - var id = GL.getNewId(GL.programs); - var program = Module.ctx.createProgram(); - program.name = id; - GL.programs[id] = program; - return id; - } - function _glAttachShader(program, shader) { - Module.ctx.attachShader(GL.programs[program], - GL.shaders[shader]); - } - function _glLinkProgram(program) { - Module.ctx.linkProgram(GL.programs[program]); - GL.programInfos[program] = null; // uniforms no longer keep the same names after linking - GL.populateUniformTable(program); - } - function _glGetProgramiv(program, pname, p) { - if (pname == 0x8B84) { // GL_INFO_LOG_LENGTH - HEAP32[((p)>>2)]=Module.ctx.getProgramInfoLog(GL.programs[program]).length + 1; - } else if (pname == 0x8B87 /* GL_ACTIVE_UNIFORM_MAX_LENGTH */) { - var ptable = GL.programInfos[program]; - if (ptable) { - HEAP32[((p)>>2)]=ptable.maxUniformLength; - return; - } else if (program < GL.counter) { - GL.recordError(0x0502 /* GL_INVALID_OPERATION */); - } else { - GL.recordError(0x0501 /* GL_INVALID_VALUE */); - } - } else if (pname == 0x8B8A /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */) { - var ptable = GL.programInfos[program]; - if (ptable) { - if (ptable.maxAttributeLength == -1) { - var program = GL.programs[program]; - var numAttribs = Module.ctx.getProgramParameter(program, Module.ctx.ACTIVE_ATTRIBUTES); - ptable.maxAttributeLength = 0; // Spec says if there are no active attribs, 0 must be returned. - for(var i = 0; i < numAttribs; ++i) { - var activeAttrib = Module.ctx.getActiveAttrib(program, i); - ptable.maxAttributeLength = Math.max(ptable.maxAttributeLength, activeAttrib.name.length+1); - } - } - HEAP32[((p)>>2)]=ptable.maxAttributeLength; - return; - } else if (program < GL.counter) { - GL.recordError(0x0502 /* GL_INVALID_OPERATION */); - } else { - GL.recordError(0x0501 /* GL_INVALID_VALUE */); - } - } else { - HEAP32[((p)>>2)]=Module.ctx.getProgramParameter(GL.programs[program], pname); - } - } - function _glDeleteProgram(program) { - var program = GL.programs[program]; - Module.ctx.deleteProgram(program); - program.name = 0; - GL.programs[program] = null; - GL.programInfos[program] = null; - } - var Browser={mainLoop:{scheduler:null,shouldPause:false,paused:false,queue:[],pause:function () { - Browser.mainLoop.shouldPause = true; - },resume:function () { - if (Browser.mainLoop.paused) { - Browser.mainLoop.paused = false; - Browser.mainLoop.scheduler(); - } - Browser.mainLoop.shouldPause = false; - },updateStatus:function () { - if (Module['setStatus']) { - var message = Module['statusMessage'] || 'Please wait...'; - var remaining = Browser.mainLoop.remainingBlockers; - var expected = Browser.mainLoop.expectedBlockers; - if (remaining) { - if (remaining < expected) { - Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')'); - } else { - Module['setStatus'](message); - } - } else { - Module['setStatus'](''); - } - } - }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () { - if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers - if (Browser.initted || ENVIRONMENT_IS_WORKER) return; - Browser.initted = true; - try { - new Blob(); - Browser.hasBlobConstructor = true; - } catch(e) { - Browser.hasBlobConstructor = false; - console.log("warning: no blob constructor, cannot create blobs with mimetypes"); - } - Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null)); - Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined; - if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') { - console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."); - Module.noImageDecoding = true; - } - // Support for plugins that can process preloaded files. You can add more of these to - // your app by creating and appending to Module.preloadPlugins. - // - // Each plugin is asked if it can handle a file based on the file's name. If it can, - // it is given the file's raw data. When it is done, it calls a callback with the file's - // (possibly modified) data. For example, a plugin might decompress a file, or it - // might create some side data structure for use later (like an Image element, etc.). - var imagePlugin = {}; - imagePlugin['canHandle'] = function imagePlugin_canHandle(name) { - return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name); - }; - imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) { - var b = null; - if (Browser.hasBlobConstructor) { - try { - b = new Blob([byteArray], { type: Browser.getMimetype(name) }); - if (b.size !== byteArray.length) { // Safari bug #118630 - // Safari's Blob can only take an ArrayBuffer - b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) }); - } - } catch(e) { - Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder'); - } - } - if (!b) { - var bb = new Browser.BlobBuilder(); - bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range - b = bb.getBlob(); - } - var url = Browser.URLObject.createObjectURL(b); - var img = new Image(); - img.onload = function img_onload() { - assert(img.complete, 'Image ' + name + ' could not be decoded'); - var canvas = document.createElement('canvas'); - canvas.width = img.width; - canvas.height = img.height; - var ctx = canvas.getContext('2d'); - ctx.drawImage(img, 0, 0); - Module["preloadedImages"][name] = canvas; - Browser.URLObject.revokeObjectURL(url); - if (onload) onload(byteArray); - }; - img.onerror = function img_onerror(event) { - console.log('Image ' + url + ' could not be decoded'); - if (onerror) onerror(); - }; - img.src = url; - }; - Module['preloadPlugins'].push(imagePlugin); - var audioPlugin = {}; - audioPlugin['canHandle'] = function audioPlugin_canHandle(name) { - return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 }; - }; - audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) { - var done = false; - function finish(audio) { - if (done) return; - done = true; - Module["preloadedAudios"][name] = audio; - if (onload) onload(byteArray); - } - function fail() { - if (done) return; - done = true; - Module["preloadedAudios"][name] = new Audio(); // empty shim - if (onerror) onerror(); - } - if (Browser.hasBlobConstructor) { - try { - var b = new Blob([byteArray], { type: Browser.getMimetype(name) }); - } catch(e) { - return fail(); - } - var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this! - var audio = new Audio(); - audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926 - audio.onerror = function audio_onerror(event) { - if (done) return; - console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach'); - function encode64(data) { - var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - var PAD = '='; - var ret = ''; - var leftchar = 0; - var leftbits = 0; - for (var i = 0; i < data.length; i++) { - leftchar = (leftchar << 8) | data[i]; - leftbits += 8; - while (leftbits >= 6) { - var curr = (leftchar >> (leftbits-6)) & 0x3f; - leftbits -= 6; - ret += BASE[curr]; - } - } - if (leftbits == 2) { - ret += BASE[(leftchar&3) << 4]; - ret += PAD + PAD; - } else if (leftbits == 4) { - ret += BASE[(leftchar&0xf) << 2]; - ret += PAD; - } - return ret; - } - audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray); - finish(audio); // we don't wait for confirmation this worked - but it's worth trying - }; - audio.src = url; - // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror - Browser.safeSetTimeout(function() { - finish(audio); // try to use it even though it is not necessarily ready to play - }, 10000); - } else { - return fail(); - } - }; - Module['preloadPlugins'].push(audioPlugin); - // Canvas event setup - var canvas = Module['canvas']; - canvas.requestPointerLock = canvas['requestPointerLock'] || - canvas['mozRequestPointerLock'] || - canvas['webkitRequestPointerLock']; - canvas.exitPointerLock = document['exitPointerLock'] || - document['mozExitPointerLock'] || - document['webkitExitPointerLock'] || - function(){}; // no-op if function does not exist - canvas.exitPointerLock = canvas.exitPointerLock.bind(document); - function pointerLockChange() { - Browser.pointerLock = document['pointerLockElement'] === canvas || - document['mozPointerLockElement'] === canvas || - document['webkitPointerLockElement'] === canvas; - } - document.addEventListener('pointerlockchange', pointerLockChange, false); - document.addEventListener('mozpointerlockchange', pointerLockChange, false); - document.addEventListener('webkitpointerlockchange', pointerLockChange, false); - if (Module['elementPointerLock']) { - canvas.addEventListener("click", function(ev) { - if (!Browser.pointerLock && canvas.requestPointerLock) { - canvas.requestPointerLock(); - ev.preventDefault(); - } - }, false); - } - },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) { - var ctx; - try { - if (useWebGL) { - var contextAttributes = { - antialias: false, - alpha: false - }; - if (webGLContextAttributes) { - for (var attribute in webGLContextAttributes) { - contextAttributes[attribute] = webGLContextAttributes[attribute]; - } - } - ['experimental-webgl', 'webgl'].some(function(webglId) { - return ctx = canvas.getContext(webglId, contextAttributes); - }); - } else { - ctx = canvas.getContext('2d'); - } - if (!ctx) throw ':('; - } catch (e) { - Module.print('Could not create canvas - ' + e); - return null; - } - if (useWebGL) { - // Set the background of the WebGL canvas to black - canvas.style.backgroundColor = "black"; - // Warn on context loss - canvas.addEventListener('webglcontextlost', function(event) { - alert('WebGL context lost. You will need to reload the page.'); - }, false); - } - if (setInModule) { - Module.ctx = ctx; - Module.useWebGL = useWebGL; - Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() }); - Browser.init(); - } - return ctx; - },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) { - Browser.lockPointer = lockPointer; - Browser.resizeCanvas = resizeCanvas; - if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true; - if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false; - var canvas = Module['canvas']; - function fullScreenChange() { - Browser.isFullScreen = false; - if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] || - document['mozFullScreenElement'] || document['mozFullscreenElement'] || - document['fullScreenElement'] || document['fullscreenElement']) === canvas) { - canvas.cancelFullScreen = document['cancelFullScreen'] || - document['mozCancelFullScreen'] || - document['webkitCancelFullScreen']; - canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document); - if (Browser.lockPointer) canvas.requestPointerLock(); - Browser.isFullScreen = true; - if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize(); - } else if (Browser.resizeCanvas){ - Browser.setWindowedCanvasSize(); - } - if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen); - } - if (!Browser.fullScreenHandlersInstalled) { - Browser.fullScreenHandlersInstalled = true; - document.addEventListener('fullscreenchange', fullScreenChange, false); - document.addEventListener('mozfullscreenchange', fullScreenChange, false); - document.addEventListener('webkitfullscreenchange', fullScreenChange, false); - } - canvas.requestFullScreen = canvas['requestFullScreen'] || - canvas['mozRequestFullScreen'] || - (canvas['webkitRequestFullScreen'] ? function() { canvas['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null); - canvas.requestFullScreen(); - },requestAnimationFrame:function requestAnimationFrame(func) { - if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js) - setTimeout(func, 1000/60); - } else { - if (!window.requestAnimationFrame) { - window.requestAnimationFrame = window['requestAnimationFrame'] || - window['mozRequestAnimationFrame'] || - window['webkitRequestAnimationFrame'] || - window['msRequestAnimationFrame'] || - window['oRequestAnimationFrame'] || - window['setTimeout']; - } - window.requestAnimationFrame(func); - } - },safeCallback:function (func) { - return function() { - if (!ABORT) return func.apply(null, arguments); - }; - },safeRequestAnimationFrame:function (func) { - return Browser.requestAnimationFrame(function() { - if (!ABORT) func(); - }); - },safeSetTimeout:function (func, timeout) { - return setTimeout(function() { - if (!ABORT) func(); - }, timeout); - },safeSetInterval:function (func, timeout) { - return setInterval(function() { - if (!ABORT) func(); - }, timeout); - },getMimetype:function (name) { - return { - 'jpg': 'image/jpeg', - 'jpeg': 'image/jpeg', - 'png': 'image/png', - 'bmp': 'image/bmp', - 'ogg': 'audio/ogg', - 'wav': 'audio/wav', - 'mp3': 'audio/mpeg' - }[name.substr(name.lastIndexOf('.')+1)]; - },getUserMedia:function (func) { - if(!window.getUserMedia) { - window.getUserMedia = navigator['getUserMedia'] || - navigator['mozGetUserMedia']; - } - window.getUserMedia(func); - },getMovementX:function (event) { - return event['movementX'] || - event['mozMovementX'] || - event['webkitMovementX'] || - 0; - },getMovementY:function (event) { - return event['movementY'] || - event['mozMovementY'] || - event['webkitMovementY'] || - 0; - },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup - if (Browser.pointerLock) { - // When the pointer is locked, calculate the coordinates - // based on the movement of the mouse. - // Workaround for Firefox bug 764498 - if (event.type != 'mousemove' && - ('mozMovementX' in event)) { - Browser.mouseMovementX = Browser.mouseMovementY = 0; - } else { - Browser.mouseMovementX = Browser.getMovementX(event); - Browser.mouseMovementY = Browser.getMovementY(event); - } - // check if SDL is available - if (typeof SDL != "undefined") { - Browser.mouseX = SDL.mouseX + Browser.mouseMovementX; - Browser.mouseY = SDL.mouseY + Browser.mouseMovementY; - } else { - // just add the mouse delta to the current absolut mouse position - // FIXME: ideally this should be clamped against the canvas size and zero - Browser.mouseX += Browser.mouseMovementX; - Browser.mouseY += Browser.mouseMovementY; - } - } else { - // Otherwise, calculate the movement based on the changes - // in the coordinates. - var rect = Module["canvas"].getBoundingClientRect(); - var x, y; - if (event.type == 'touchstart' || - event.type == 'touchend' || - event.type == 'touchmove') { - var t = event.touches.item(0); - if (t) { - x = t.pageX - (window.scrollX + rect.left); - y = t.pageY - (window.scrollY + rect.top); - } else { - return; - } - } else { - x = event.pageX - (window.scrollX + rect.left); - y = event.pageY - (window.scrollY + rect.top); - } - // the canvas might be CSS-scaled compared to its backbuffer; - // SDL-using content will want mouse coordinates in terms - // of backbuffer units. - var cw = Module["canvas"].width; - var ch = Module["canvas"].height; - x = x * (cw / rect.width); - y = y * (ch / rect.height); - Browser.mouseMovementX = x - Browser.mouseX; - Browser.mouseMovementY = y - Browser.mouseY; - Browser.mouseX = x; - Browser.mouseY = y; - } - },xhrLoad:function (url, onload, onerror) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.responseType = 'arraybuffer'; - xhr.onload = function xhr_onload() { - if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 - onload(xhr.response); - } else { - onerror(); - } - }; - xhr.onerror = onerror; - xhr.send(null); - },asyncLoad:function (url, onload, onerror, noRunDep) { - Browser.xhrLoad(url, function(arrayBuffer) { - assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).'); - onload(new Uint8Array(arrayBuffer)); - if (!noRunDep) removeRunDependency('al ' + url); - }, function(event) { - if (onerror) { - onerror(); - } else { - throw 'Loading data file "' + url + '" failed.'; - } - }); - if (!noRunDep) addRunDependency('al ' + url); - },resizeListeners:[],updateResizeListeners:function () { - var canvas = Module['canvas']; - Browser.resizeListeners.forEach(function(listener) { - listener(canvas.width, canvas.height); - }); - },setCanvasSize:function (width, height, noUpdates) { - var canvas = Module['canvas']; - canvas.width = width; - canvas.height = height; - if (!noUpdates) Browser.updateResizeListeners(); - },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () { - var canvas = Module['canvas']; - this.windowedWidth = canvas.width; - this.windowedHeight = canvas.height; - canvas.width = screen.width; - canvas.height = screen.height; - // check if SDL is available - if (typeof SDL != "undefined") { - var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; - flags = flags | 0x00800000; // set SDL_FULLSCREEN flag - HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags - } - Browser.updateResizeListeners(); - },setWindowedCanvasSize:function () { - var canvas = Module['canvas']; - canvas.width = this.windowedWidth; - canvas.height = this.windowedHeight; - // check if SDL is available - if (typeof SDL != "undefined") { - var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]; - flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag - HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags - } - Browser.updateResizeListeners(); - }};var SDL={defaults:{width:320,height:200,copyOnLock:true},version:null,surfaces:{},canvasPool:[],events:[],fonts:[null],audios:[null],rwops:[null],music:{audio:null,volume:1},mixerFrequency:22050,mixerFormat:32784,mixerNumChannels:2,mixerChunkSize:1024,channelMinimumNumber:0,GL:false,glAttributes:{0:3,1:3,2:2,3:0,4:0,5:1,6:16,7:0,8:0,9:0,10:0,11:0,12:0,13:0,14:0,15:1,16:0,17:0,18:0},keyboardState:null,keyboardMap:{},canRequestFullscreen:false,isRequestingFullscreen:false,textInput:false,startTime:null,initFlags:0,buttonState:0,modState:0,DOMButtons:[0,0,0],DOMEventToSDLEvent:{},keyCodes:{16:1249,17:1248,18:1250,33:1099,34:1102,37:1104,38:1106,39:1103,40:1105,46:127,96:1112,97:1113,98:1114,99:1115,100:1116,101:1117,102:1118,103:1119,104:1120,105:1121,112:1082,113:1083,114:1084,115:1085,116:1086,117:1087,118:1088,119:1089,120:1090,121:1091,122:1092,123:1093,173:45,188:44,190:46,191:47,192:96},scanCodes:{8:42,9:43,13:40,27:41,32:44,44:54,46:55,47:56,48:39,49:30,50:31,51:32,52:33,53:34,54:35,55:36,56:37,57:38,59:51,61:46,91:47,92:49,93:48,96:52,97:4,98:5,99:6,100:7,101:8,102:9,103:10,104:11,105:12,106:13,107:14,108:15,109:16,110:17,111:18,112:19,113:20,114:21,115:22,116:23,117:24,118:25,119:26,120:27,121:28,122:29,305:224,308:226},loadRect:function (rect) { - return { - x: HEAP32[((rect + 0)>>2)], - y: HEAP32[((rect + 4)>>2)], - w: HEAP32[((rect + 8)>>2)], - h: HEAP32[((rect + 12)>>2)] - }; - },loadColorToCSSRGB:function (color) { - var rgba = HEAP32[((color)>>2)]; - return 'rgb(' + (rgba&255) + ',' + ((rgba >> 8)&255) + ',' + ((rgba >> 16)&255) + ')'; - },loadColorToCSSRGBA:function (color) { - var rgba = HEAP32[((color)>>2)]; - return 'rgba(' + (rgba&255) + ',' + ((rgba >> 8)&255) + ',' + ((rgba >> 16)&255) + ',' + (((rgba >> 24)&255)/255) + ')'; - },translateColorToCSSRGBA:function (rgba) { - return 'rgba(' + (rgba&0xff) + ',' + (rgba>>8 & 0xff) + ',' + (rgba>>16 & 0xff) + ',' + (rgba>>>24)/0xff + ')'; - },translateRGBAToCSSRGBA:function (r, g, b, a) { - return 'rgba(' + (r&0xff) + ',' + (g&0xff) + ',' + (b&0xff) + ',' + (a&0xff)/255 + ')'; - },translateRGBAToColor:function (r, g, b, a) { - return r | g << 8 | b << 16 | a << 24; - },makeSurface:function (width, height, flags, usePageCanvas, source, rmask, gmask, bmask, amask) { - flags = flags || 0; - var surf = _malloc(60); // SDL_Surface has 15 fields of quantum size - var buffer = _malloc(width*height*4); // TODO: only allocate when locked the first time - var pixelFormat = _malloc(44); - flags |= 1; // SDL_HWSURFACE - this tells SDL_MUSTLOCK that this needs to be locked - //surface with SDL_HWPALETTE flag is 8bpp surface (1 byte) - var is_SDL_HWPALETTE = flags & 0x00200000; - var bpp = is_SDL_HWPALETTE ? 1 : 4; - HEAP32[((surf)>>2)]=flags // SDL_Surface.flags - HEAP32[(((surf)+(4))>>2)]=pixelFormat // SDL_Surface.format TODO - HEAP32[(((surf)+(8))>>2)]=width // SDL_Surface.w - HEAP32[(((surf)+(12))>>2)]=height // SDL_Surface.h - HEAP32[(((surf)+(16))>>2)]=width * bpp // SDL_Surface.pitch, assuming RGBA or indexed for now, - // since that is what ImageData gives us in browsers - HEAP32[(((surf)+(20))>>2)]=buffer // SDL_Surface.pixels - HEAP32[(((surf)+(36))>>2)]=0 // SDL_Surface.offset - HEAP32[(((surf)+(56))>>2)]=1 - HEAP32[((pixelFormat)>>2)]=0 /* XXX missing C define SDL_PIXELFORMAT_RGBA8888 */ // SDL_PIXELFORMAT_RGBA8888 - HEAP32[(((pixelFormat)+(4))>>2)]=0 // TODO - HEAP8[(((pixelFormat)+(8))|0)]=bpp * 8 - HEAP8[(((pixelFormat)+(9))|0)]=bpp - HEAP32[(((pixelFormat)+(12))>>2)]=rmask || 0x000000ff - HEAP32[(((pixelFormat)+(16))>>2)]=gmask || 0x0000ff00 - HEAP32[(((pixelFormat)+(20))>>2)]=bmask || 0x00ff0000 - HEAP32[(((pixelFormat)+(24))>>2)]=amask || 0xff000000 - // Decide if we want to use WebGL or not - var useWebGL = (flags & 0x04000000) != 0; // SDL_OPENGL - SDL.GL = SDL.GL || useWebGL; - var canvas; - if (!usePageCanvas) { - if (SDL.canvasPool.length > 0) { - canvas = SDL.canvasPool.pop(); - } else { - canvas = document.createElement('canvas'); - } - canvas.width = width; - canvas.height = height; - } else { - canvas = Module['canvas']; - } - var webGLContextAttributes = { - antialias: ((SDL.glAttributes[13 /*SDL_GL_MULTISAMPLEBUFFERS*/] != 0) && (SDL.glAttributes[14 /*SDL_GL_MULTISAMPLESAMPLES*/] > 1)), - depth: (SDL.glAttributes[6 /*SDL_GL_DEPTH_SIZE*/] > 0), - stencil: (SDL.glAttributes[7 /*SDL_GL_STENCIL_SIZE*/] > 0) - }; - var ctx = Browser.createContext(canvas, useWebGL, usePageCanvas, webGLContextAttributes); - SDL.surfaces[surf] = { - width: width, - height: height, - canvas: canvas, - ctx: ctx, - surf: surf, - buffer: buffer, - pixelFormat: pixelFormat, - alpha: 255, - flags: flags, - locked: 0, - usePageCanvas: usePageCanvas, - source: source, - isFlagSet: function(flag) { - return flags & flag; - } - }; - return surf; - },copyIndexedColorData:function (surfData, rX, rY, rW, rH) { - // HWPALETTE works with palette - // setted by SDL_SetColors - if (!surfData.colors) { - return; - } - var fullWidth = Module['canvas'].width; - var fullHeight = Module['canvas'].height; - var startX = rX || 0; - var startY = rY || 0; - var endX = (rW || (fullWidth - startX)) + startX; - var endY = (rH || (fullHeight - startY)) + startY; - var buffer = surfData.buffer; - var data = surfData.image.data; - var colors = surfData.colors; - for (var y = startY; y < endY; ++y) { - var indexBase = y * fullWidth; - var colorBase = indexBase * 4; - for (var x = startX; x < endX; ++x) { - // HWPALETTE have only 256 colors (not rgba) - var index = HEAPU8[((buffer + indexBase + x)|0)] * 3; - var colorOffset = colorBase + x * 4; - data[colorOffset ] = colors[index ]; - data[colorOffset +1] = colors[index +1]; - data[colorOffset +2] = colors[index +2]; - //unused: data[colorOffset +3] = color[index +3]; - } - } - },freeSurface:function (surf) { - var refcountPointer = surf + 56; - var refcount = HEAP32[((refcountPointer)>>2)]; - if (refcount > 1) { - HEAP32[((refcountPointer)>>2)]=refcount - 1; - return; - } - var info = SDL.surfaces[surf]; - if (!info.usePageCanvas && info.canvas) SDL.canvasPool.push(info.canvas); - _free(info.buffer); - _free(info.pixelFormat); - _free(surf); - SDL.surfaces[surf] = null; - },touchX:0,touchY:0,savedKeydown:null,receiveEvent:function (event) { - switch(event.type) { - case 'touchstart': - event.preventDefault(); - var touch = event.touches[0]; - touchX = touch.pageX; - touchY = touch.pageY; - var event = { - type: 'mousedown', - button: 0, - pageX: touchX, - pageY: touchY - }; - SDL.DOMButtons[0] = 1; - SDL.events.push(event); - break; - case 'touchmove': - event.preventDefault(); - var touch = event.touches[0]; - touchX = touch.pageX; - touchY = touch.pageY; - event = { - type: 'mousemove', - button: 0, - pageX: touchX, - pageY: touchY - }; - SDL.events.push(event); - break; - case 'touchend': - event.preventDefault(); - event = { - type: 'mouseup', - button: 0, - pageX: touchX, - pageY: touchY - }; - SDL.DOMButtons[0] = 0; - SDL.events.push(event); - break; - case 'mousemove': - if (Browser.pointerLock) { - // workaround for firefox bug 750111 - if ('mozMovementX' in event) { - event['movementX'] = event['mozMovementX']; - event['movementY'] = event['mozMovementY']; - } - // workaround for Firefox bug 782777 - if (event['movementX'] == 0 && event['movementY'] == 0) { - // ignore a mousemove event if it doesn't contain any movement info - // (without pointer lock, we infer movement from pageX/pageY, so this check is unnecessary) - event.preventDefault(); - return; - } - } - // fall through - case 'keydown': case 'keyup': case 'keypress': case 'mousedown': case 'mouseup': case 'DOMMouseScroll': case 'mousewheel': - // If we preventDefault on keydown events, the subsequent keypress events - // won't fire. However, it's fine (and in some cases necessary) to - // preventDefault for keys that don't generate a character. Otherwise, - // preventDefault is the right thing to do in general. - if (event.type !== 'keydown' || (event.keyCode === 8 /* backspace */ || event.keyCode === 9 /* tab */)) { - event.preventDefault(); - } - if (event.type == 'DOMMouseScroll' || event.type == 'mousewheel') { - var button = (event.type == 'DOMMouseScroll' ? event.detail : -event.wheelDelta) > 0 ? 4 : 3; - var event2 = { - type: 'mousedown', - button: button, - pageX: event.pageX, - pageY: event.pageY - }; - SDL.events.push(event2); - event = { - type: 'mouseup', - button: button, - pageX: event.pageX, - pageY: event.pageY - }; - } else if (event.type == 'mousedown') { - SDL.DOMButtons[event.button] = 1; - } else if (event.type == 'mouseup') { - // ignore extra ups, can happen if we leave the canvas while pressing down, then return, - // since we add a mouseup in that case - if (!SDL.DOMButtons[event.button]) { - return; - } - SDL.DOMButtons[event.button] = 0; - } - // We can only request fullscreen as the result of user input. - // Due to this limitation, we toggle a boolean on keydown which - // SDL_WM_ToggleFullScreen will check and subsequently set another - // flag indicating for us to request fullscreen on the following - // keyup. This isn't perfect, but it enables SDL_WM_ToggleFullScreen - // to work as the result of a keypress (which is an extremely - // common use case). - if (event.type === 'keydown') { - SDL.canRequestFullscreen = true; - } else if (event.type === 'keyup') { - if (SDL.isRequestingFullscreen) { - Module['requestFullScreen'](true, true); - SDL.isRequestingFullscreen = false; - } - SDL.canRequestFullscreen = false; - } - // SDL expects a unicode character to be passed to its keydown events. - // Unfortunately, the browser APIs only provide a charCode property on - // keypress events, so we must backfill in keydown events with their - // subsequent keypress event's charCode. - if (event.type === 'keypress' && SDL.savedKeydown) { - // charCode is read-only - SDL.savedKeydown.keypressCharCode = event.charCode; - SDL.savedKeydown = null; - } else if (event.type === 'keydown') { - SDL.savedKeydown = event; - } - // Don't push keypress events unless SDL_StartTextInput has been called. - if (event.type !== 'keypress' || SDL.textInput) { - SDL.events.push(event); - } - break; - case 'mouseout': - // Un-press all pressed mouse buttons, because we might miss the release outside of the canvas - for (var i = 0; i < 3; i++) { - if (SDL.DOMButtons[i]) { - SDL.events.push({ - type: 'mouseup', - button: i, - pageX: event.pageX, - pageY: event.pageY - }); - SDL.DOMButtons[i] = 0; - } - } - event.preventDefault(); - break; - case 'blur': - case 'visibilitychange': { - // Un-press all pressed keys: TODO - for (var code in SDL.keyboardMap) { - SDL.events.push({ - type: 'keyup', - keyCode: SDL.keyboardMap[code] - }); - } - event.preventDefault(); - break; - } - case 'unload': - if (Browser.mainLoop.runner) { - SDL.events.push(event); - // Force-run a main event loop, since otherwise this event will never be caught! - Browser.mainLoop.runner(); - } - return; - case 'resize': - SDL.events.push(event); - // manually triggered resize event doesn't have a preventDefault member - if (event.preventDefault) { - event.preventDefault(); - } - break; - } - if (SDL.events.length >= 10000) { - Module.printErr('SDL event queue full, dropping events'); - SDL.events = SDL.events.slice(0, 10000); - } - return; - },handleEvent:function (event) { - if (event.handled) return; - event.handled = true; - switch (event.type) { - case 'keydown': case 'keyup': { - var down = event.type === 'keydown'; - var code = event.keyCode; - if (code >= 65 && code <= 90) { - code += 32; // make lowercase for SDL - } else { - code = SDL.keyCodes[event.keyCode] || event.keyCode; - } - HEAP8[(((SDL.keyboardState)+(code))|0)]=down; - // TODO: lmeta, rmeta, numlock, capslock, KMOD_MODE, KMOD_RESERVED - SDL.modState = (HEAP8[(((SDL.keyboardState)+(1248))|0)] ? 0x0040 | 0x0080 : 0) | // KMOD_LCTRL & KMOD_RCTRL - (HEAP8[(((SDL.keyboardState)+(1249))|0)] ? 0x0001 | 0x0002 : 0) | // KMOD_LSHIFT & KMOD_RSHIFT - (HEAP8[(((SDL.keyboardState)+(1250))|0)] ? 0x0100 | 0x0200 : 0); // KMOD_LALT & KMOD_RALT - if (down) { - SDL.keyboardMap[code] = event.keyCode; // save the DOM input, which we can use to unpress it during blur - } else { - delete SDL.keyboardMap[code]; - } - break; - } - case 'mousedown': case 'mouseup': - case 'touchstart': case 'touchend': - if (event.type == 'mousedown') { - // SDL_BUTTON(x) is defined as (1 << ((x)-1)). SDL buttons are 1-3, - // and DOM buttons are 0-2, so this means that the below formula is - // correct. - SDL.buttonState |= 1 << event.button; - } else if (event.type == 'mouseup') { - SDL.buttonState &= ~(1 << event.button); - } - if (event.type == 'touchstart') { - SDL.buttonState |= 1 ; - } else if (event.type == 'touchend') { - SDL.buttonState &= ~(1); - } - // fall through - case 'mousemove': { - Browser.calculateMouseEvent(event); - break; - } - } - },makeCEvent:function (event, ptr) { - if (typeof event === 'number') { - // This is a pointer to a native C event that was SDL_PushEvent'ed - _memcpy(ptr, event, 28); // XXX - return; - } - SDL.handleEvent(event); - switch (event.type) { - case 'keydown': case 'keyup': { - var down = event.type === 'keydown'; - //Module.print('Received key event: ' + event.keyCode); - var key = event.keyCode; - if (key >= 65 && key <= 90) { - key += 32; // make lowercase for SDL - } else { - key = SDL.keyCodes[event.keyCode] || event.keyCode; - } - var scan; - if (key >= 1024) { - scan = key - 1024; - } else { - scan = SDL.scanCodes[key] || key; - } - HEAP32[((ptr)>>2)]=SDL.DOMEventToSDLEvent[event.type] - HEAP8[(((ptr)+(8))|0)]=down ? 1 : 0 - HEAP8[(((ptr)+(9))|0)]=0 // TODO - HEAP32[(((ptr)+(12))>>2)]=scan - HEAP32[(((ptr)+(16))>>2)]=key - HEAP16[(((ptr)+(20))>>1)]=SDL.modState - // some non-character keys (e.g. backspace and tab) won't have keypressCharCode set, fill in with the keyCode. - HEAP32[(((ptr)+(24))>>2)]=event.keypressCharCode || key - break; - } - case 'keypress': { - HEAP32[((ptr)>>2)]=SDL.DOMEventToSDLEvent[event.type] - // Not filling in windowID for now - var cStr = intArrayFromString(String.fromCharCode(event.charCode)); - for (var i = 0; i < cStr.length; ++i) { - HEAP8[(((ptr)+(8 + i))|0)]=cStr[i]; - } - break; - } - case 'mousedown': case 'mouseup': case 'mousemove': { - if (event.type != 'mousemove') { - var down = event.type === 'mousedown'; - HEAP32[((ptr)>>2)]=SDL.DOMEventToSDLEvent[event.type]; - HEAP8[(((ptr)+(8))|0)]=event.button+1; // DOM buttons are 0-2, SDL 1-3 - HEAP8[(((ptr)+(9))|0)]=down ? 1 : 0; - HEAP32[(((ptr)+(12))>>2)]=Browser.mouseX; - HEAP32[(((ptr)+(16))>>2)]=Browser.mouseY; - } else { - HEAP32[((ptr)>>2)]=SDL.DOMEventToSDLEvent[event.type]; - HEAP8[(((ptr)+(8))|0)]=SDL.buttonState; - HEAP32[(((ptr)+(12))>>2)]=Browser.mouseX; - HEAP32[(((ptr)+(16))>>2)]=Browser.mouseY; - HEAP32[(((ptr)+(20))>>2)]=Browser.mouseMovementX; - HEAP32[(((ptr)+(24))>>2)]=Browser.mouseMovementY; - } - break; - } - case 'unload': { - HEAP32[((ptr)>>2)]=SDL.DOMEventToSDLEvent[event.type]; - break; - } - case 'resize': { - HEAP32[((ptr)>>2)]=SDL.DOMEventToSDLEvent[event.type]; - HEAP32[(((ptr)+(4))>>2)]=event.w; - HEAP32[(((ptr)+(8))>>2)]=event.h; - break; - } - case 'joystick_button_up': case 'joystick_button_down': { - var state = event.type === 'joystick_button_up' ? 0 : 1; - HEAP32[((ptr)>>2)]=SDL.DOMEventToSDLEvent[event.type]; - HEAP8[(((ptr)+(4))|0)]=event.index; - HEAP8[(((ptr)+(5))|0)]=event.button; - HEAP8[(((ptr)+(6))|0)]=state; - break; - } - case 'joystick_axis_motion': { - HEAP32[((ptr)>>2)]=SDL.DOMEventToSDLEvent[event.type]; - HEAP8[(((ptr)+(4))|0)]=event.index; - HEAP8[(((ptr)+(5))|0)]=event.axis; - HEAP32[(((ptr)+(8))>>2)]=SDL.joystickAxisValueConversion(event.value); - break; - } - default: throw 'Unhandled SDL event: ' + event.type; - } - },estimateTextWidth:function (fontData, text) { - var h = fontData.size; - var fontString = h + 'px ' + fontData.name; - var tempCtx = SDL.ttfContext; - tempCtx.save(); - tempCtx.font = fontString; - var ret = tempCtx.measureText(text).width | 0; - tempCtx.restore(); - return ret; - },allocateChannels:function (num) { // called from Mix_AllocateChannels and init - if (SDL.numChannels && SDL.numChannels >= num && num != 0) return; - SDL.numChannels = num; - SDL.channels = []; - for (var i = 0; i < num; i++) { - SDL.channels[i] = { - audio: null, - volume: 1.0 - }; - } - },setGetVolume:function (info, volume) { - if (!info) return 0; - var ret = info.volume * 128; // MIX_MAX_VOLUME - if (volume != -1) { - info.volume = volume / 128; - if (info.audio) info.audio.volume = info.volume; - } - return ret; - },debugSurface:function (surfData) { - console.log('dumping surface ' + [surfData.surf, surfData.source, surfData.width, surfData.height]); - var image = surfData.ctx.getImageData(0, 0, surfData.width, surfData.height); - var data = image.data; - var num = Math.min(surfData.width, surfData.height); - for (var i = 0; i < num; i++) { - console.log(' diagonal ' + i + ':' + [data[i*surfData.width*4 + i*4 + 0], data[i*surfData.width*4 + i*4 + 1], data[i*surfData.width*4 + i*4 + 2], data[i*surfData.width*4 + i*4 + 3]]); - } - },joystickEventState:0,lastJoystickState:{},joystickNamePool:{},recordJoystickState:function (joystick, state) { - // Standardize button state. - var buttons = new Array(state.buttons.length); - for (var i = 0; i < state.buttons.length; i++) { - buttons[i] = SDL.getJoystickButtonState(state.buttons[i]); - } - SDL.lastJoystickState[joystick] = { - buttons: buttons, - axes: state.axes.slice(0), - timestamp: state.timestamp, - index: state.index, - id: state.id - }; - },getJoystickButtonState:function (button) { - if (typeof button === 'object') { - // Current gamepad API editor's draft (Firefox Nightly) - // https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#idl-def-GamepadButton - return button.pressed; - } else { - // Current gamepad API working draft (Firefox / Chrome Stable) - // http://www.w3.org/TR/2012/WD-gamepad-20120529/#gamepad-interface - return button > 0; - } - },queryJoysticks:function () { - for (var joystick in SDL.lastJoystickState) { - var state = SDL.getGamepad(joystick - 1); - var prevState = SDL.lastJoystickState[joystick]; - // Check only if the timestamp has differed. - // NOTE: Timestamp is not available in Firefox. - if (typeof state.timestamp !== 'number' || state.timestamp !== prevState.timestamp) { - var i; - for (i = 0; i < state.buttons.length; i++) { - var buttonState = SDL.getJoystickButtonState(state.buttons[i]); - // NOTE: The previous state already has a boolean representation of - // its button, so no need to standardize its button state here. - if (buttonState !== prevState.buttons[i]) { - // Insert button-press event. - SDL.events.push({ - type: buttonState ? 'joystick_button_down' : 'joystick_button_up', - joystick: joystick, - index: joystick - 1, - button: i - }); - } - } - for (i = 0; i < state.axes.length; i++) { - if (state.axes[i] !== prevState.axes[i]) { - // Insert axes-change event. - SDL.events.push({ - type: 'joystick_axis_motion', - joystick: joystick, - index: joystick - 1, - axis: i, - value: state.axes[i] - }); - } - } - SDL.recordJoystickState(joystick, state); - } - } - },joystickAxisValueConversion:function (value) { - // Ensures that 0 is 0, 1 is 32767, and -1 is 32768. - return Math.ceil(((value+1) * 32767.5) - 32768); - },getGamepads:function () { - var fcn = navigator.getGamepads || navigator.webkitGamepads || navigator.mozGamepads || navigator.gamepads || navigator.webkitGetGamepads; - if (fcn !== undefined) { - // The function must be applied on the navigator object. - return fcn.apply(navigator); - } else { - return []; - } - },getGamepad:function (deviceIndex) { - var gamepads = SDL.getGamepads(); - if (gamepads.length > deviceIndex && deviceIndex >= 0) { - return gamepads[deviceIndex]; - } - return null; - }};function _SDL_Init(initFlags) { - SDL.startTime = Date.now(); - SDL.initFlags = initFlags; - // capture all key events. we just keep down and up, but also capture press to prevent default actions - if (!Module['doNotCaptureKeyboard']) { - document.addEventListener("keydown", SDL.receiveEvent); - document.addEventListener("keyup", SDL.receiveEvent); - document.addEventListener("keypress", SDL.receiveEvent); - window.addEventListener("blur", SDL.receiveEvent); - document.addEventListener("visibilitychange", SDL.receiveEvent); - } - if (initFlags & 0x200) { - // SDL_INIT_JOYSTICK - // Firefox will not give us Joystick data unless we register this NOP - // callback. - // https://bugzilla.mozilla.org/show_bug.cgi?id=936104 - addEventListener("gamepadconnected", function() {}); - } - window.addEventListener("unload", SDL.receiveEvent); - SDL.keyboardState = _malloc(0x10000); // Our SDL needs 512, but 64K is safe for older SDLs - _memset(SDL.keyboardState, 0, 0x10000); - // Initialize this structure carefully for closure - SDL.DOMEventToSDLEvent['keydown'] = 0x300 /* SDL_KEYDOWN */; - SDL.DOMEventToSDLEvent['keyup'] = 0x301 /* SDL_KEYUP */; - SDL.DOMEventToSDLEvent['keypress'] = 0x303 /* SDL_TEXTINPUT */; - SDL.DOMEventToSDLEvent['mousedown'] = 0x401 /* SDL_MOUSEBUTTONDOWN */; - SDL.DOMEventToSDLEvent['mouseup'] = 0x402 /* SDL_MOUSEBUTTONUP */; - SDL.DOMEventToSDLEvent['mousemove'] = 0x400 /* SDL_MOUSEMOTION */; - SDL.DOMEventToSDLEvent['unload'] = 0x100 /* SDL_QUIT */; - SDL.DOMEventToSDLEvent['resize'] = 0x7001 /* SDL_VIDEORESIZE/SDL_EVENT_COMPAT2 */; - // These are not technically DOM events; the HTML gamepad API is poll-based. - // However, we define them here, as the rest of the SDL code assumes that - // all SDL events originate as DOM events. - SDL.DOMEventToSDLEvent['joystick_axis_motion'] = 0x600 /* SDL_JOYAXISMOTION */; - SDL.DOMEventToSDLEvent['joystick_button_down'] = 0x603 /* SDL_JOYBUTTONDOWN */; - SDL.DOMEventToSDLEvent['joystick_button_up'] = 0x604 /* SDL_JOYBUTTONUP */; - return 0; // success - } - function __reallyNegative(x) { - return x < 0 || (x === 0 && (1/x) === -Infinity); - }function __formatString(format, varargs) { - var textIndex = format; - var argIndex = 0; - function getNextArg(type) { - // NOTE: Explicitly ignoring type safety. Otherwise this fails: - // int x = 4; printf("%c\n", (char)x); - var ret; - if (type === 'double') { - ret = HEAPF64[(((varargs)+(argIndex))>>3)]; - } else if (type == 'i64') { - ret = [HEAP32[(((varargs)+(argIndex))>>2)], - HEAP32[(((varargs)+(argIndex+8))>>2)]]; - argIndex += 8; // each 32-bit chunk is in a 64-bit block - } else { - type = 'i32'; // varargs are always i32, i64, or double - ret = HEAP32[(((varargs)+(argIndex))>>2)]; - } - argIndex += Math.max(Runtime.getNativeFieldSize(type), Runtime.getAlignSize(type, null, true)); - return ret; - } - var ret = []; - var curr, next, currArg; - while(1) { - var startTextIndex = textIndex; - curr = HEAP8[(textIndex)]; - if (curr === 0) break; - next = HEAP8[((textIndex+1)|0)]; - if (curr == 37) { - // Handle flags. - var flagAlwaysSigned = false; - var flagLeftAlign = false; - var flagAlternative = false; - var flagZeroPad = false; - var flagPadSign = false; - flagsLoop: while (1) { - switch (next) { - case 43: - flagAlwaysSigned = true; - break; - case 45: - flagLeftAlign = true; - break; - case 35: - flagAlternative = true; - break; - case 48: - if (flagZeroPad) { - break flagsLoop; - } else { - flagZeroPad = true; - break; - } - case 32: - flagPadSign = true; - break; - default: - break flagsLoop; - } - textIndex++; - next = HEAP8[((textIndex+1)|0)]; - } - // Handle width. - var width = 0; - if (next == 42) { - width = getNextArg('i32'); - textIndex++; - next = HEAP8[((textIndex+1)|0)]; - } else { - while (next >= 48 && next <= 57) { - width = width * 10 + (next - 48); - textIndex++; - next = HEAP8[((textIndex+1)|0)]; - } - } - // Handle precision. - var precisionSet = false; - if (next == 46) { - var precision = 0; - precisionSet = true; - textIndex++; - next = HEAP8[((textIndex+1)|0)]; - if (next == 42) { - precision = getNextArg('i32'); - textIndex++; - } else { - while(1) { - var precisionChr = HEAP8[((textIndex+1)|0)]; - if (precisionChr < 48 || - precisionChr > 57) break; - precision = precision * 10 + (precisionChr - 48); - textIndex++; - } - } - next = HEAP8[((textIndex+1)|0)]; - } else { - var precision = 6; // Standard default. - } - // Handle integer sizes. WARNING: These assume a 32-bit architecture! - var argSize; - switch (String.fromCharCode(next)) { - case 'h': - var nextNext = HEAP8[((textIndex+2)|0)]; - if (nextNext == 104) { - textIndex++; - argSize = 1; // char (actually i32 in varargs) - } else { - argSize = 2; // short (actually i32 in varargs) - } - break; - case 'l': - var nextNext = HEAP8[((textIndex+2)|0)]; - if (nextNext == 108) { - textIndex++; - argSize = 8; // long long - } else { - argSize = 4; // long - } - break; - case 'L': // long long - case 'q': // int64_t - case 'j': // intmax_t - argSize = 8; - break; - case 'z': // size_t - case 't': // ptrdiff_t - case 'I': // signed ptrdiff_t or unsigned size_t - argSize = 4; - break; - default: - argSize = null; - } - if (argSize) textIndex++; - next = HEAP8[((textIndex+1)|0)]; - // Handle type specifier. - switch (String.fromCharCode(next)) { - case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': { - // Integer. - var signed = next == 100 || next == 105; - argSize = argSize || 4; - var currArg = getNextArg('i' + (argSize * 8)); - var origArg = currArg; - var argText; - // Flatten i64-1 [low, high] into a (slightly rounded) double - if (argSize == 8) { - currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117); - } - // Truncate to requested size. - if (argSize <= 4) { - var limit = Math.pow(256, argSize) - 1; - currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8); - } - // Format the number. - var currAbsArg = Math.abs(currArg); - var prefix = ''; - if (next == 100 || next == 105) { - if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); else - argText = reSign(currArg, 8 * argSize, 1).toString(10); - } else if (next == 117) { - if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); else - argText = unSign(currArg, 8 * argSize, 1).toString(10); - currArg = Math.abs(currArg); - } else if (next == 111) { - argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8); - } else if (next == 120 || next == 88) { - prefix = (flagAlternative && currArg != 0) ? '0x' : ''; - if (argSize == 8 && i64Math) { - if (origArg[1]) { - argText = (origArg[1]>>>0).toString(16); - var lower = (origArg[0]>>>0).toString(16); - while (lower.length < 8) lower = '0' + lower; - argText += lower; - } else { - argText = (origArg[0]>>>0).toString(16); - } - } else - if (currArg < 0) { - // Represent negative numbers in hex as 2's complement. - currArg = -currArg; - argText = (currAbsArg - 1).toString(16); - var buffer = []; - for (var i = 0; i < argText.length; i++) { - buffer.push((0xF - parseInt(argText[i], 16)).toString(16)); - } - argText = buffer.join(''); - while (argText.length < argSize * 2) argText = 'f' + argText; - } else { - argText = currAbsArg.toString(16); - } - if (next == 88) { - prefix = prefix.toUpperCase(); - argText = argText.toUpperCase(); - } - } else if (next == 112) { - if (currAbsArg === 0) { - argText = '(nil)'; - } else { - prefix = '0x'; - argText = currAbsArg.toString(16); - } - } - if (precisionSet) { - while (argText.length < precision) { - argText = '0' + argText; - } - } - // Add sign if needed - if (currArg >= 0) { - if (flagAlwaysSigned) { - prefix = '+' + prefix; - } else if (flagPadSign) { - prefix = ' ' + prefix; - } - } - // Move sign to prefix so we zero-pad after the sign - if (argText.charAt(0) == '-') { - prefix = '-' + prefix; - argText = argText.substr(1); - } - // Add padding. - while (prefix.length + argText.length < width) { - if (flagLeftAlign) { - argText += ' '; - } else { - if (flagZeroPad) { - argText = '0' + argText; - } else { - prefix = ' ' + prefix; - } - } - } - // Insert the result into the buffer. - argText = prefix + argText; - argText.split('').forEach(function(chr) { - ret.push(chr.charCodeAt(0)); - }); - break; - } - case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': { - // Float. - var currArg = getNextArg('double'); - var argText; - if (isNaN(currArg)) { - argText = 'nan'; - flagZeroPad = false; - } else if (!isFinite(currArg)) { - argText = (currArg < 0 ? '-' : '') + 'inf'; - flagZeroPad = false; - } else { - var isGeneral = false; - var effectivePrecision = Math.min(precision, 20); - // Convert g/G to f/F or e/E, as per: - // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html - if (next == 103 || next == 71) { - isGeneral = true; - precision = precision || 1; - var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10); - if (precision > exponent && exponent >= -4) { - next = ((next == 103) ? 'f' : 'F').charCodeAt(0); - precision -= exponent + 1; - } else { - next = ((next == 103) ? 'e' : 'E').charCodeAt(0); - precision--; - } - effectivePrecision = Math.min(precision, 20); - } - if (next == 101 || next == 69) { - argText = currArg.toExponential(effectivePrecision); - // Make sure the exponent has at least 2 digits. - if (/[eE][-+]\d$/.test(argText)) { - argText = argText.slice(0, -1) + '0' + argText.slice(-1); - } - } else if (next == 102 || next == 70) { - argText = currArg.toFixed(effectivePrecision); - if (currArg === 0 && __reallyNegative(currArg)) { - argText = '-' + argText; - } - } - var parts = argText.split('e'); - if (isGeneral && !flagAlternative) { - // Discard trailing zeros and periods. - while (parts[0].length > 1 && parts[0].indexOf('.') != -1 && - (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) { - parts[0] = parts[0].slice(0, -1); - } - } else { - // Make sure we have a period in alternative mode. - if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.'; - // Zero pad until required precision. - while (precision > effectivePrecision++) parts[0] += '0'; - } - argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : ''); - // Capitalize 'E' if needed. - if (next == 69) argText = argText.toUpperCase(); - // Add sign. - if (currArg >= 0) { - if (flagAlwaysSigned) { - argText = '+' + argText; - } else if (flagPadSign) { - argText = ' ' + argText; - } - } - } - // Add padding. - while (argText.length < width) { - if (flagLeftAlign) { - argText += ' '; - } else { - if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) { - argText = argText[0] + '0' + argText.slice(1); - } else { - argText = (flagZeroPad ? '0' : ' ') + argText; - } - } - } - // Adjust case. - if (next < 97) argText = argText.toUpperCase(); - // Insert the result into the buffer. - argText.split('').forEach(function(chr) { - ret.push(chr.charCodeAt(0)); - }); - break; - } - case 's': { - // String. - var arg = getNextArg('i8*'); - var argLength = arg ? _strlen(arg) : '(null)'.length; - if (precisionSet) argLength = Math.min(argLength, precision); - if (!flagLeftAlign) { - while (argLength < width--) { - ret.push(32); - } - } - if (arg) { - for (var i = 0; i < argLength; i++) { - ret.push(HEAPU8[((arg++)|0)]); - } - } else { - ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true)); - } - if (flagLeftAlign) { - while (argLength < width--) { - ret.push(32); - } - } - break; - } - case 'c': { - // Character. - if (flagLeftAlign) ret.push(getNextArg('i8')); - while (--width > 0) { - ret.push(32); - } - if (!flagLeftAlign) ret.push(getNextArg('i8')); - break; - } - case 'n': { - // Write the length written so far to the next parameter. - var ptr = getNextArg('i32*'); - HEAP32[((ptr)>>2)]=ret.length - break; - } - case '%': { - // Literal percent sign. - ret.push(curr); - break; - } - default: { - // Unknown specifiers remain untouched. - for (var i = startTextIndex; i < textIndex + 2; i++) { - ret.push(HEAP8[(i)]); - } - } - } - textIndex += 2; - // TODO: Support a/A (hex float) and m (last error) specifiers. - // TODO: Support %1${specifier} for arg selection. - } else { - ret.push(curr); - textIndex += 1; - } - } - return ret; - }function _fprintf(stream, format, varargs) { - // int fprintf(FILE *restrict stream, const char *restrict format, ...); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html - var result = __formatString(format, varargs); - var stack = Runtime.stackSave(); - var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream); - Runtime.stackRestore(stack); - return ret; - }function _printf(format, varargs) { - // int printf(const char *restrict format, ...); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html - var stdout = HEAP32[((_stdout)>>2)]; - return _fprintf(stdout, format, varargs); - } - function _SDL_GetError() { - if (!SDL.errorMessage) { - SDL.errorMessage = allocate(intArrayFromString("unknown SDL-emscripten error"), 'i8', ALLOC_NORMAL); - } - return SDL.errorMessage; - } - function _SDL_SetVideoMode(width, height, depth, flags) { - ['mousedown', 'mouseup', 'mousemove', 'DOMMouseScroll', 'mousewheel', 'mouseout'].forEach(function(event) { - Module['canvas'].addEventListener(event, SDL.receiveEvent, true); - }); - // (0,0) means 'use fullscreen' in native; in Emscripten, use the current canvas size. - if (width == 0 && height == 0) { - var canvas = Module['canvas']; - width = canvas.width; - height = canvas.height; - } - Browser.setCanvasSize(width, height, true); - // Free the old surface first. - if (SDL.screen) { - SDL.freeSurface(SDL.screen); - SDL.screen = null; - } - SDL.screen = SDL.makeSurface(width, height, flags, true, 'screen'); - if (!SDL.addedResizeListener) { - SDL.addedResizeListener = true; - Browser.resizeListeners.push(function(w, h) { - SDL.receiveEvent({ - type: 'resize', - w: w, - h: h - }); - }); - } - return SDL.screen; - } - function _SDL_WM_SetCaption(title, icon) { - title = title && Pointer_stringify(title); - icon = icon && Pointer_stringify(icon); - } - function _glGetString(name_) { - if (GL.stringCache[name_]) return GL.stringCache[name_]; - var ret; - switch(name_) { - case 0x1F00 /* GL_VENDOR */: - case 0x1F01 /* GL_RENDERER */: - case 0x1F02 /* GL_VERSION */: - ret = allocate(intArrayFromString(Module.ctx.getParameter(name_)), 'i8', ALLOC_NORMAL); - break; - case 0x1F03 /* GL_EXTENSIONS */: - var exts = Module.ctx.getSupportedExtensions(); - var gl_exts = []; - for (i in exts) { - gl_exts.push(exts[i]); - gl_exts.push("GL_" + exts[i]); - } - ret = allocate(intArrayFromString(gl_exts.join(' ')), 'i8', ALLOC_NORMAL); - break; - case 0x8B8C /* GL_SHADING_LANGUAGE_VERSION */: - ret = allocate(intArrayFromString('OpenGL ES GLSL 1.00 (WebGL)'), 'i8', ALLOC_NORMAL); - break; - default: - GL.recordError(0x0500/*GL_INVALID_ENUM*/); - return 0; - } - GL.stringCache[name_] = ret; - return ret; - } - function _glUseProgram(program) { - Module.ctx.useProgram(program ? GL.programs[program] : null); - } - function _glGetAttribLocation(program, name) { - program = GL.programs[program]; - name = Pointer_stringify(name); - return Module.ctx.getAttribLocation(program, name); - } - function _glGetUniformLocation(program, name) { - name = Pointer_stringify(name); - var arrayOffset = 0; - // If user passed an array accessor "[index]", parse the array index off the accessor. - if (name.indexOf(']', name.length-1) !== -1) { - var ls = name.lastIndexOf('['); - var arrayIndex = name.slice(ls+1, -1); - if (arrayIndex.length > 0) { - arrayOffset = parseInt(arrayIndex); - if (arrayOffset < 0) { - return -1; - } - } - name = name.slice(0, ls); - } - var ptable = GL.programInfos[program]; - if (!ptable) { - return -1; - } - var utable = ptable.uniforms; - var uniformInfo = utable[name]; // returns pair [ dimension_of_uniform_array, uniform_location ] - if (uniformInfo && arrayOffset < uniformInfo[0]) { // Check if user asked for an out-of-bounds element, i.e. for 'vec4 colors[3];' user could ask for 'colors[10]' which should return -1. - return uniformInfo[1]+arrayOffset; - } else { - return -1; - } - } - function _glGenBuffers(n, buffers) { - for (var i = 0; i < n; i++) { - var id = GL.getNewId(GL.buffers); - var buffer = Module.ctx.createBuffer(); - buffer.name = id; - GL.buffers[id] = buffer; - HEAP32[(((buffers)+(i*4))>>2)]=id; - } - } - function _glBindBuffer(target, buffer) { - var bufferObj = buffer ? GL.buffers[buffer] : null; - if (target == Module.ctx.ARRAY_BUFFER) { - GL.currArrayBuffer = buffer; - } else if (target == Module.ctx.ELEMENT_ARRAY_BUFFER) { - GL.currElementArrayBuffer = buffer; - } - Module.ctx.bindBuffer(target, bufferObj); - } - function _glBufferData(target, size, data, usage) { - switch (usage) { // fix usages, WebGL only has *_DRAW - case 0x88E1: // GL_STREAM_READ - case 0x88E2: // GL_STREAM_COPY - usage = 0x88E0; // GL_STREAM_DRAW - break; - case 0x88E5: // GL_STATIC_READ - case 0x88E6: // GL_STATIC_COPY - usage = 0x88E4; // GL_STATIC_DRAW - break; - case 0x88E9: // GL_DYNAMIC_READ - case 0x88EA: // GL_DYNAMIC_COPY - usage = 0x88E8; // GL_DYNAMIC_DRAW - break; - } - Module.ctx.bufferData(target, HEAPU8.subarray(data, data+size), usage); - } - function _glVertexAttribPointer(index, size, type, normalized, stride, ptr) { - var cb = GL.clientBuffers[index]; - if (!GL.currArrayBuffer) { - cb.size = size; - cb.type = type; - cb.normalized = normalized; - cb.stride = stride; - cb.ptr = ptr; - cb.clientside = true; - return; - } - cb.clientside = false; - Module.ctx.vertexAttribPointer(index, size, type, normalized, stride, ptr); - } - function _glEnableVertexAttribArray(index) { - var cb = GL.clientBuffers[index]; - cb.enabled = true; - Module.ctx.enableVertexAttribArray(index); - } - function _glUniform1i(location, v0) { - location = GL.uniforms[location]; - Module.ctx.uniform1i(location, v0); - } - function _glUniformMatrix4fv(location, count, transpose, value) { - location = GL.uniforms[location]; - var view; - if (count == 1) { - // avoid allocation for the common case of uploading one uniform matrix - view = GL.miniTempBufferViews[15]; - for (var i = 0; i < 16; i++) { - view[i] = HEAPF32[(((value)+(i*4))>>2)]; - } - } else { - view = HEAPF32.subarray((value)>>2,(value+count*64)>>2); - } - Module.ctx.uniformMatrix4fv(location, transpose, view); - } - function _glEnable(x0) { Module.ctx.enable(x0) } - function _glBlendFunc(x0, x1) { Module.ctx.blendFunc(x0, x1) } - function _glGenTextures(n, textures) { - for (var i = 0; i < n; i++) { - var id = GL.getNewId(GL.textures); - var texture = Module.ctx.createTexture(); - texture.name = id; - GL.textures[id] = texture; - HEAP32[(((textures)+(i*4))>>2)]=id; - } - } - function _glBindTexture(target, texture) { - Module.ctx.bindTexture(target, texture ? GL.textures[texture] : null); - } - function _glTexParameteri(x0, x1, x2) { Module.ctx.texParameteri(x0, x1, x2) } - function _glPixelStorei(pname, param) { - if (pname == 0x0D05 /* GL_PACK_ALIGNMENT */) { - GL.packAlignment = param; - } else if (pname == 0x0cf5 /* GL_UNPACK_ALIGNMENT */) { - GL.unpackAlignment = param; - } - Module.ctx.pixelStorei(pname, param); - } - function _glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels) { - if (pixels) { - var data = GL.getTexPixelData(type, format, width, height, pixels, internalFormat); - pixels = data.pixels; - internalFormat = data.internalFormat; - } else { - pixels = null; - } - Module.ctx.texImage2D(target, level, internalFormat, width, height, border, format, type, pixels); - } - function _glBufferSubData(target, offset, size, data) { - Module.ctx.bufferSubData(target, offset, HEAPU8.subarray(data, data+size)); - } - function _glDrawArrays(mode, first, count) { - // bind any client-side buffers - GL.preDrawHandleClientVertexAttribBindings(first + count); - Module.ctx.drawArrays(mode, first, count); - GL.postDrawHandleClientVertexAttribBindings(); - } - function _SDL_GL_SwapBuffers() {} - function _SDL_PollEvent(ptr) { - if (SDL.initFlags & 0x200 && SDL.joystickEventState) { - // If SDL_INIT_JOYSTICK was supplied AND the joystick system is configured - // to automatically query for events, query for joystick events. - SDL.queryJoysticks(); - } - if (SDL.events.length === 0) return 0; - if (ptr) { - SDL.makeCEvent(SDL.events.shift(), ptr); - } - return 1; - } - function _emscripten_set_main_loop(func, fps, simulateInfiniteLoop) { - Module['noExitRuntime'] = true; - Browser.mainLoop.runner = function Browser_mainLoop_runner() { - if (ABORT) return; - if (Browser.mainLoop.queue.length > 0) { - var start = Date.now(); - var blocker = Browser.mainLoop.queue.shift(); - blocker.func(blocker.arg); - if (Browser.mainLoop.remainingBlockers) { - var remaining = Browser.mainLoop.remainingBlockers; - var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining); - if (blocker.counted) { - Browser.mainLoop.remainingBlockers = next; - } else { - // not counted, but move the progress along a tiny bit - next = next + 0.5; // do not steal all the next one's progress - Browser.mainLoop.remainingBlockers = (8*remaining + next)/9; - } - } - console.log('main loop blocker "' + blocker.name + '" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers); - Browser.mainLoop.updateStatus(); - setTimeout(Browser.mainLoop.runner, 0); - return; - } - if (Browser.mainLoop.shouldPause) { - // catch pauses from non-main loop sources - Browser.mainLoop.paused = true; - Browser.mainLoop.shouldPause = false; - return; - } - if (Module['preMainLoop']) { - Module['preMainLoop'](); - } - try { - Runtime.dynCall('v', func); - } catch (e) { - if (e instanceof ExitStatus) { - return; - } else { - if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]); - throw e; - } - } - if (Module['postMainLoop']) { - Module['postMainLoop'](); - } - if (Browser.mainLoop.shouldPause) { - // catch pauses from the main loop itself - Browser.mainLoop.paused = true; - Browser.mainLoop.shouldPause = false; - return; - } - Browser.mainLoop.scheduler(); - } - if (fps && fps > 0) { - Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() { - setTimeout(Browser.mainLoop.runner, 1000/fps); // doing this each time means that on exception, we stop - } - } else { - Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler() { - Browser.requestAnimationFrame(Browser.mainLoop.runner); - } - } - Browser.mainLoop.scheduler(); - if (simulateInfiniteLoop) { - throw 'SimulateInfiniteLoop'; - } - } - Module["_memset"] = _memset;var _llvm_memset_p0i8_i32=_memset; - function _llvm_uadd_with_overflow_i32(x, y) { - x = x>>>0; - y = y>>>0; - return ((asm["setTempRet0"](x+y > 4294967295),(x+y)>>>0)|0); - } - function _llvm_lifetime_start() {} - function _llvm_lifetime_end() {} - var _llvm_memset_p0i8_i64=_memset; - function _fputs(s, stream) { - // int fputs(const char *restrict s, FILE *restrict stream); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html - return _write(stream, s, _strlen(s)); - } - function _fputc(c, stream) { - // int fputc(int c, FILE *stream); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html - var chr = unSign(c & 0xFF); - HEAP8[((_fputc.ret)|0)]=chr - var ret = _write(stream, _fputc.ret, 1); - if (ret == -1) { - var streamObj = FS.getStream(stream); - if (streamObj) streamObj.error = true; - return -1; - } else { - return chr; - } - }function _puts(s) { - // int puts(const char *s); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/puts.html - // NOTE: puts() always writes an extra newline. - var stdout = HEAP32[((_stdout)>>2)]; - var ret = _fputs(s, stdout); - if (ret < 0) { - return ret; - } else { - var newlineRet = _fputc(10, stdout); - return (newlineRet < 0) ? -1 : ret + 1; - } - } - function _SDL_InitSubSystem(flags) { return 0 } - function _SDL_GetKeyboardState(numKeys) { - if (numKeys) { - HEAP32[((numKeys)>>2)]=65536; - } - return SDL.keyboardState; - }function _SDL_GetKeyState() { - return _SDL_GetKeyboardState(); - } - function _SDL_GetMouseState(x, y) { - if (x) HEAP32[((x)>>2)]=Browser.mouseX; - if (y) HEAP32[((y)>>2)]=Browser.mouseY; - return SDL.buttonState; - } - function _SDL_OpenAudio(desired, obtained) { - try { - SDL.audio = { - freq: HEAPU32[((desired)>>2)], - format: HEAPU16[(((desired)+(4))>>1)], - channels: HEAPU8[(((desired)+(6))|0)], - samples: HEAPU16[(((desired)+(8))>>1)], // Samples in the CB buffer per single sound channel. - callback: HEAPU32[(((desired)+(16))>>2)], - userdata: HEAPU32[(((desired)+(20))>>2)], - paused: true, - timer: null - }; - // The .silence field tells the constant sample value that corresponds to the safe un-skewed silence value for the wave data. - if (SDL.audio.format == 0x0008 /*AUDIO_U8*/) { - SDL.audio.silence = 128; // Audio ranges in [0, 255], so silence is half-way in between. - } else if (SDL.audio.format == 0x8010 /*AUDIO_S16LSB*/) { - SDL.audio.silence = 0; // Signed data in range [-32768, 32767], silence is 0. - } else { - throw 'Invalid SDL audio format ' + SDL.audio.format + '!'; - } - // Round the desired audio frequency up to the next 'common' frequency value. - // Web Audio API spec states 'An implementation must support sample-rates in at least the range 22050 to 96000.' - if (SDL.audio.freq <= 0) { - throw 'Unsupported sound frequency ' + SDL.audio.freq + '!'; - } else if (SDL.audio.freq <= 22050) { - SDL.audio.freq = 22050; // Take it safe and clamp everything lower than 22kHz to that. - } else if (SDL.audio.freq <= 32000) { - SDL.audio.freq = 32000; - } else if (SDL.audio.freq <= 44100) { - SDL.audio.freq = 44100; - } else if (SDL.audio.freq <= 48000) { - SDL.audio.freq = 48000; - } else if (SDL.audio.freq <= 96000) { - SDL.audio.freq = 96000; - } else { - throw 'Unsupported sound frequency ' + SDL.audio.freq + '!'; - } - if (SDL.audio.channels == 0) { - SDL.audio.channels = 1; // In SDL both 0 and 1 mean mono. - } else if (SDL.audio.channels < 0 || SDL.audio.channels > 32) { - throw 'Unsupported number of audio channels for SDL audio: ' + SDL.audio.channels + '!'; - } else if (SDL.audio.channels != 1 && SDL.audio.channels != 2) { // Unsure what SDL audio spec supports. Web Audio spec supports up to 32 channels. - console.log('Warning: Using untested number of audio channels ' + SDL.audio.channels); - } - if (SDL.audio.samples < 128 || SDL.audio.samples > 524288 /* arbitrary cap */) { - throw 'Unsupported audio callback buffer size ' + SDL.audio.samples + '!'; - } else if ((SDL.audio.samples & (SDL.audio.samples-1)) != 0) { - throw 'Audio callback buffer size ' + SDL.audio.samples + ' must be a power-of-two!'; - } - var totalSamples = SDL.audio.samples*SDL.audio.channels; - SDL.audio.bytesPerSample = (SDL.audio.format == 0x0008 /*AUDIO_U8*/ || SDL.audio.format == 0x8008 /*AUDIO_S8*/) ? 1 : 2; - SDL.audio.bufferSize = totalSamples*SDL.audio.bytesPerSample; - SDL.audio.buffer = _malloc(SDL.audio.bufferSize); - // To account for jittering in frametimes, always have multiple audio buffers queued up for the audio output device. - // This helps that we won't starve that easily if a frame takes long to complete. - SDL.audio.numSimultaneouslyQueuedBuffers = Module['SDL_numSimultaneouslyQueuedBuffers'] || 3; - // Create a callback function that will be routinely called to ask more audio data from the user application. - SDL.audio.caller = function SDL_audio_caller() { - if (!SDL.audio) { - return; - } - Runtime.dynCall('viii', SDL.audio.callback, [SDL.audio.userdata, SDL.audio.buffer, SDL.audio.bufferSize]); - SDL.audio.pushAudio(SDL.audio.buffer, SDL.audio.bufferSize); - }; - SDL.audio.audioOutput = new Audio(); - // As a workaround use Mozilla Audio Data API on Firefox until it ships with Web Audio and sound quality issues are fixed. - if (typeof(SDL.audio.audioOutput['mozSetup'])==='function') { - SDL.audio.audioOutput['mozSetup'](SDL.audio.channels, SDL.audio.freq); // use string attributes on mozOutput for closure compiler - SDL.audio.mozBuffer = new Float32Array(totalSamples); - SDL.audio.nextPlayTime = 0; - SDL.audio.pushAudio = function SDL_audio_pushAudio(ptr, size) { - --SDL.audio.numAudioTimersPending; - var mozBuffer = SDL.audio.mozBuffer; - // The input audio data for SDL audio is either 8-bit or 16-bit interleaved across channels, output for Mozilla Audio Data API - // needs to be Float32 interleaved, so perform a sample conversion. - if (SDL.audio.format == 0x8010 /*AUDIO_S16LSB*/) { - for (var i = 0; i < totalSamples; i++) { - mozBuffer[i] = (HEAP16[(((ptr)+(i*2))>>1)]) / 0x8000; - } - } else if (SDL.audio.format == 0x0008 /*AUDIO_U8*/) { - for (var i = 0; i < totalSamples; i++) { - var v = (HEAP8[(((ptr)+(i))|0)]); - mozBuffer[i] = ((v >= 0) ? v-128 : v+128) /128; - } - } - // Submit the audio data to audio device. - SDL.audio.audioOutput['mozWriteAudio'](mozBuffer); - // Compute when the next audio callback should be called. - var curtime = Date.now() / 1000.0 - SDL.audio.startTime; - var playtime = Math.max(curtime, SDL.audio.nextPlayTime); - var buffer_duration = SDL.audio.samples / SDL.audio.freq; - SDL.audio.nextPlayTime = playtime + buffer_duration; - // Schedule the next audio callback call to occur when the current one finishes. - SDL.audio.timer = Browser.safeSetTimeout(SDL.audio.caller, 1000.0 * (playtime-curtime)); - ++SDL.audio.numAudioTimersPending; - // And also schedule extra buffers _now_ if we have too few in queue. - if (SDL.audio.numAudioTimersPending < SDL.audio.numSimultaneouslyQueuedBuffers) { - ++SDL.audio.numAudioTimersPending; - Browser.safeSetTimeout(SDL.audio.caller, 1.0); - } - } - } else { - // Initialize Web Audio API if we haven't done so yet. Note: Only initialize Web Audio context ever once on the web page, - // since initializing multiple times fails on Chrome saying 'audio resources have been exhausted'. - if (!SDL.audioContext) { - if (typeof(AudioContext) === 'function') { - SDL.audioContext = new AudioContext(); - } else if (typeof(webkitAudioContext) === 'function') { - SDL.audioContext = new webkitAudioContext(); - } else { - throw 'Web Audio API is not available!'; - } - } - SDL.audio.soundSource = new Array(); // Use an array of sound sources as a ring buffer to queue blocks of synthesized audio to Web Audio API. - SDL.audio.nextSoundSource = 0; // Index of the next sound buffer in the ring buffer queue to play. - SDL.audio.nextPlayTime = 0; // Time in seconds when the next audio block is due to start. - // The pushAudio function with a new audio buffer whenever there is new audio data to schedule to be played back on the device. - SDL.audio.pushAudio=function(ptr,sizeBytes) { - try { - --SDL.audio.numAudioTimersPending; - var sizeSamples = sizeBytes / SDL.audio.bytesPerSample; // How many samples fit in the callback buffer? - var sizeSamplesPerChannel = sizeSamples / SDL.audio.channels; // How many samples per a single channel fit in the cb buffer? - if (sizeSamplesPerChannel != SDL.audio.samples) { - throw 'Received mismatching audio buffer size!'; - } - // Allocate new sound buffer to be played. - var source = SDL.audioContext['createBufferSource'](); - if (SDL.audio.soundSource[SDL.audio.nextSoundSource]) { - SDL.audio.soundSource[SDL.audio.nextSoundSource]['disconnect'](); // Explicitly disconnect old source, since we know it shouldn't be running anymore. - } - SDL.audio.soundSource[SDL.audio.nextSoundSource] = source; - var soundBuffer = SDL.audioContext['createBuffer'](SDL.audio.channels,sizeSamplesPerChannel,SDL.audio.freq); - SDL.audio.soundSource[SDL.audio.nextSoundSource]['connect'](SDL.audioContext['destination']); - // The input audio data is interleaved across the channels, i.e. [L, R, L, R, L, R, ...] and is either 8-bit or 16-bit as - // supported by the SDL API. The output audio wave data for Web Audio API must be in planar buffers of [-1,1]-normalized Float32 data, - // so perform a buffer conversion for the data. - var numChannels = SDL.audio.channels; - for(var i = 0; i < numChannels; ++i) { - var channelData = soundBuffer['getChannelData'](i); - if (channelData.length != sizeSamplesPerChannel) { - throw 'Web Audio output buffer length mismatch! Destination size: ' + channelData.length + ' samples vs expected ' + sizeSamplesPerChannel + ' samples!'; - } - if (SDL.audio.format == 0x8010 /*AUDIO_S16LSB*/) { - for(var j = 0; j < sizeSamplesPerChannel; ++j) { - channelData[j] = (HEAP16[(((ptr)+((j*numChannels + i)*2))>>1)]) / 0x8000; - } - } else if (SDL.audio.format == 0x0008 /*AUDIO_U8*/) { - for(var j = 0; j < sizeSamplesPerChannel; ++j) { - var v = (HEAP8[(((ptr)+(j*numChannels + i))|0)]); - channelData[j] = ((v >= 0) ? v-128 : v+128) /128; - } - } - } - // Workaround https://bugzilla.mozilla.org/show_bug.cgi?id=883675 by setting the buffer only after filling. The order is important here! - source['buffer'] = soundBuffer; - // Schedule the generated sample buffer to be played out at the correct time right after the previously scheduled - // sample buffer has finished. - var curtime = SDL.audioContext['currentTime']; - var playtime = Math.max(curtime, SDL.audio.nextPlayTime); - SDL.audio.soundSource[SDL.audio.nextSoundSource]['start'](playtime); - var buffer_duration = sizeSamplesPerChannel / SDL.audio.freq; - SDL.audio.nextPlayTime = playtime + buffer_duration; - SDL.audio.nextSoundSource = (SDL.audio.nextSoundSource + 1) % 4; - var secsUntilNextCall = playtime-curtime; - // Queue the next audio frame push to be performed when the previously queued buffer has finished playing. - if (SDL.audio.numAudioTimersPending == 0) { - var preemptBufferFeedMSecs = buffer_duration/2.0; - SDL.audio.timer = Browser.safeSetTimeout(SDL.audio.caller, Math.max(0.0, 1000.0*secsUntilNextCall-preemptBufferFeedMSecs)); - ++SDL.audio.numAudioTimersPending; - } - // If we are risking starving, immediately queue extra buffers. - if (secsUntilNextCall <= buffer_duration && SDL.audio.numAudioTimersPending < SDL.audio.numSimultaneouslyQueuedBuffers) { - ++SDL.audio.numAudioTimersPending; - Browser.safeSetTimeout(SDL.audio.caller, 1.0); - } - } catch(e) { - console.log('Web Audio API error playing back audio: ' + e.toString()); - } - } - } - if (obtained) { - // Report back the initialized audio parameters. - HEAP32[((obtained)>>2)]=SDL.audio.freq; - HEAP16[(((obtained)+(4))>>1)]=SDL.audio.format; - HEAP8[(((obtained)+(6))|0)]=SDL.audio.channels; - HEAP8[(((obtained)+(7))|0)]=SDL.audio.silence; - HEAP16[(((obtained)+(8))>>1)]=SDL.audio.samples; - HEAP32[(((obtained)+(16))>>2)]=SDL.audio.callback; - HEAP32[(((obtained)+(20))>>2)]=SDL.audio.userdata; - } - SDL.allocateChannels(32); - } catch(e) { - console.log('Initializing SDL audio threw an exception: "' + e.toString() + '"! Continuing without audio.'); - SDL.audio = null; - SDL.allocateChannels(0); - if (obtained) { - HEAP32[((obtained)>>2)]=0; - HEAP16[(((obtained)+(4))>>1)]=0; - HEAP8[(((obtained)+(6))|0)]=0; - HEAP8[(((obtained)+(7))|0)]=0; - HEAP16[(((obtained)+(8))>>1)]=0; - HEAP32[(((obtained)+(16))>>2)]=0; - HEAP32[(((obtained)+(20))>>2)]=0; - } - } - if (!SDL.audio) { - return -1; - } - return 0; - } - function _SDL_PauseAudio(pauseOn) { - if (!SDL.audio) { - return; - } - if (pauseOn) { - if (SDL.audio.timer !== undefined) { - clearTimeout(SDL.audio.timer); - SDL.audio.numAudioTimersPending = 0; - SDL.audio.timer = undefined; - } - } else if (!SDL.audio.timer) { - // Start the audio playback timer callback loop. - SDL.audio.numAudioTimersPending = 1; - SDL.audio.timer = Browser.safeSetTimeout(SDL.audio.caller, 1); - SDL.audio.startTime = Date.now() / 1000.0; // Only used for Mozilla Audio Data API. Not needed for Web Audio API. - } - SDL.audio.paused = pauseOn; - }function _SDL_CloseAudio() { - if (SDL.audio) { - try{ - for(var i = 0; i < SDL.audio.soundSource.length; ++i) { - if (!(typeof(SDL.audio.soundSource[i]==='undefined'))) { - SDL.audio.soundSource[i].stop(0); - } - } - } catch(e) {} - SDL.audio.soundSource = null; - _SDL_PauseAudio(1); - _free(SDL.audio.buffer); - SDL.audio = null; - SDL.allocateChannels(0); - } - } - function _rand() { - return Math.floor(Math.random()*0x80000000); - } - function _fgetc(stream) { - // int fgetc(FILE *stream); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/fgetc.html - var streamObj = FS.getStream(stream); - if (!streamObj) return -1; - if (streamObj.eof || streamObj.error) return -1; - var ret = _fread(_fgetc.ret, 1, 1, stream); - if (ret == 0) { - return -1; - } else if (ret == -1) { - streamObj.error = true; - return -1; - } else { - return HEAPU8[((_fgetc.ret)|0)]; - } - } - function _snprintf(s, n, format, varargs) { - // int snprintf(char *restrict s, size_t n, const char *restrict format, ...); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html - var result = __formatString(format, varargs); - var limit = (n === undefined) ? result.length - : Math.min(result.length, Math.max(n - 1, 0)); - if (s < 0) { - s = -s; - var buf = _malloc(limit+1); - HEAP32[((s)>>2)]=buf; - s = buf; - } - for (var i = 0; i < limit; i++) { - HEAP8[(((s)+(i))|0)]=result[i]; - } - if (limit < n || (n === undefined)) HEAP8[(((s)+(i))|0)]=0; - return result.length; - }function _sprintf(s, format, varargs) { - // int sprintf(char *restrict s, const char *restrict format, ...); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html - return _snprintf(s, undefined, format, varargs); - } - function __getFloat(text) { - return /^[+-]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?/.exec(text); - }function __scanString(format, get, unget, varargs) { - if (!__scanString.whiteSpace) { - __scanString.whiteSpace = {}; - __scanString.whiteSpace[32] = 1; - __scanString.whiteSpace[9] = 1; - __scanString.whiteSpace[10] = 1; - __scanString.whiteSpace[11] = 1; - __scanString.whiteSpace[12] = 1; - __scanString.whiteSpace[13] = 1; - } - // Supports %x, %4x, %d.%d, %lld, %s, %f, %lf. - // TODO: Support all format specifiers. - format = Pointer_stringify(format); - var soFar = 0; - if (format.indexOf('%n') >= 0) { - // need to track soFar - var _get = get; - get = function get() { - soFar++; - return _get(); - } - var _unget = unget; - unget = function unget() { - soFar--; - return _unget(); - } - } - var formatIndex = 0; - var argsi = 0; - var fields = 0; - var argIndex = 0; - var next; - mainLoop: - for (var formatIndex = 0; formatIndex < format.length;) { - if (format[formatIndex] === '%' && format[formatIndex+1] == 'n') { - var argPtr = HEAP32[(((varargs)+(argIndex))>>2)]; - argIndex += Runtime.getAlignSize('void*', null, true); - HEAP32[((argPtr)>>2)]=soFar; - formatIndex += 2; - continue; - } - if (format[formatIndex] === '%') { - var nextC = format.indexOf('c', formatIndex+1); - if (nextC > 0) { - var maxx = 1; - if (nextC > formatIndex+1) { - var sub = format.substring(formatIndex+1, nextC); - maxx = parseInt(sub); - if (maxx != sub) maxx = 0; - } - if (maxx) { - var argPtr = HEAP32[(((varargs)+(argIndex))>>2)]; - argIndex += Runtime.getAlignSize('void*', null, true); - fields++; - for (var i = 0; i < maxx; i++) { - next = get(); - HEAP8[((argPtr++)|0)]=next; - } - formatIndex += nextC - formatIndex + 1; - continue; - } - } - } - // handle %[...] - if (format[formatIndex] === '%' && format.indexOf('[', formatIndex+1) > 0) { - var match = /\%([0-9]*)\[(\^)?(\]?[^\]]*)\]/.exec(format.substring(formatIndex)); - if (match) { - var maxNumCharacters = parseInt(match[1]) || Infinity; - var negateScanList = (match[2] === '^'); - var scanList = match[3]; - // expand "middle" dashs into character sets - var middleDashMatch; - while ((middleDashMatch = /([^\-])\-([^\-])/.exec(scanList))) { - var rangeStartCharCode = middleDashMatch[1].charCodeAt(0); - var rangeEndCharCode = middleDashMatch[2].charCodeAt(0); - for (var expanded = ''; rangeStartCharCode <= rangeEndCharCode; expanded += String.fromCharCode(rangeStartCharCode++)); - scanList = scanList.replace(middleDashMatch[1] + '-' + middleDashMatch[2], expanded); - } - var argPtr = HEAP32[(((varargs)+(argIndex))>>2)]; - argIndex += Runtime.getAlignSize('void*', null, true); - fields++; - for (var i = 0; i < maxNumCharacters; i++) { - next = get(); - if (negateScanList) { - if (scanList.indexOf(String.fromCharCode(next)) < 0) { - HEAP8[((argPtr++)|0)]=next; - } else { - unget(); - break; - } - } else { - if (scanList.indexOf(String.fromCharCode(next)) >= 0) { - HEAP8[((argPtr++)|0)]=next; - } else { - unget(); - break; - } - } - } - // write out null-terminating character - HEAP8[((argPtr++)|0)]=0; - formatIndex += match[0].length; - continue; - } - } - // remove whitespace - while (1) { - next = get(); - if (next == 0) return fields; - if (!(next in __scanString.whiteSpace)) break; - } - unget(); - if (format[formatIndex] === '%') { - formatIndex++; - var suppressAssignment = false; - if (format[formatIndex] == '*') { - suppressAssignment = true; - formatIndex++; - } - var maxSpecifierStart = formatIndex; - while (format[formatIndex].charCodeAt(0) >= 48 && - format[formatIndex].charCodeAt(0) <= 57) { - formatIndex++; - } - var max_; - if (formatIndex != maxSpecifierStart) { - max_ = parseInt(format.slice(maxSpecifierStart, formatIndex), 10); - } - var long_ = false; - var half = false; - var longLong = false; - if (format[formatIndex] == 'l') { - long_ = true; - formatIndex++; - if (format[formatIndex] == 'l') { - longLong = true; - formatIndex++; - } - } else if (format[formatIndex] == 'h') { - half = true; - formatIndex++; - } - var type = format[formatIndex]; - formatIndex++; - var curr = 0; - var buffer = []; - // Read characters according to the format. floats are trickier, they may be in an unfloat state in the middle, then be a valid float later - if (type == 'f' || type == 'e' || type == 'g' || - type == 'F' || type == 'E' || type == 'G') { - next = get(); - while (next > 0 && (!(next in __scanString.whiteSpace))) { - buffer.push(String.fromCharCode(next)); - next = get(); - } - var m = __getFloat(buffer.join('')); - var last = m ? m[0].length : 0; - for (var i = 0; i < buffer.length - last + 1; i++) { - unget(); - } - buffer.length = last; - } else { - next = get(); - var first = true; - // Strip the optional 0x prefix for %x. - if ((type == 'x' || type == 'X') && (next == 48)) { - var peek = get(); - if (peek == 120 || peek == 88) { - next = get(); - } else { - unget(); - } - } - while ((curr < max_ || isNaN(max_)) && next > 0) { - if (!(next in __scanString.whiteSpace) && // stop on whitespace - (type == 's' || - ((type === 'd' || type == 'u' || type == 'i') && ((next >= 48 && next <= 57) || - (first && next == 45))) || - ((type === 'x' || type === 'X') && (next >= 48 && next <= 57 || - next >= 97 && next <= 102 || - next >= 65 && next <= 70))) && - (formatIndex >= format.length || next !== format[formatIndex].charCodeAt(0))) { // Stop when we read something that is coming up - buffer.push(String.fromCharCode(next)); - next = get(); - curr++; - first = false; - } else { - break; - } - } - unget(); - } - if (buffer.length === 0) return 0; // Failure. - if (suppressAssignment) continue; - var text = buffer.join(''); - var argPtr = HEAP32[(((varargs)+(argIndex))>>2)]; - argIndex += Runtime.getAlignSize('void*', null, true); - switch (type) { - case 'd': case 'u': case 'i': - if (half) { - HEAP16[((argPtr)>>1)]=parseInt(text, 10); - } else if (longLong) { - (tempI64 = [parseInt(text, 10)>>>0,(tempDouble=parseInt(text, 10),(+(Math_abs(tempDouble))) >= (+1) ? (tempDouble > (+0) ? ((Math_min((+(Math_floor((tempDouble)/(+4294967296)))), (+4294967295)))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/(+4294967296))))))>>>0) : 0)],HEAP32[((argPtr)>>2)]=tempI64[0],HEAP32[(((argPtr)+(4))>>2)]=tempI64[1]); - } else { - HEAP32[((argPtr)>>2)]=parseInt(text, 10); - } - break; - case 'X': - case 'x': - HEAP32[((argPtr)>>2)]=parseInt(text, 16) - break; - case 'F': - case 'f': - case 'E': - case 'e': - case 'G': - case 'g': - case 'E': - // fallthrough intended - if (long_) { - HEAPF64[((argPtr)>>3)]=parseFloat(text) - } else { - HEAPF32[((argPtr)>>2)]=parseFloat(text) - } - break; - case 's': - var array = intArrayFromString(text); - for (var j = 0; j < array.length; j++) { - HEAP8[(((argPtr)+(j))|0)]=array[j] - } - break; - } - fields++; - } else if (format[formatIndex].charCodeAt(0) in __scanString.whiteSpace) { - next = get(); - while (next in __scanString.whiteSpace) { - if (next <= 0) break mainLoop; // End of input. - next = get(); - } - unget(next); - formatIndex++; - } else { - // Not a specifier. - next = get(); - if (format[formatIndex].charCodeAt(0) !== next) { - unget(next); - break mainLoop; - } - formatIndex++; - } - } - return fields; - }function _sscanf(s, format, varargs) { - // int sscanf(const char *restrict s, const char *restrict format, ... ); - // http://pubs.opengroup.org/onlinepubs/000095399/functions/scanf.html - var index = 0; - function get() { return HEAP8[(((s)+(index++))|0)]; }; - function unget() { index--; }; - return __scanString(format, get, unget, varargs); - } - function _mknod(path, mode, dev) { - // int mknod(const char *path, mode_t mode, dev_t dev); - // http://pubs.opengroup.org/onlinepubs/7908799/xsh/mknod.html - path = Pointer_stringify(path); - // we don't want this in the JS API as the JS API - // uses mknod to create all nodes. - switch (mode & 61440) { - case 32768: - case 8192: - case 24576: - case 4096: - case 49152: - break; - default: - ___setErrNo(ERRNO_CODES.EINVAL); - return -1; - } - try { - FS.mknod(path, mode, dev); - return 0; - } catch (e) { - FS.handleFSError(e); - return -1; - } - }function _mkdir(path, mode) { - // int mkdir(const char *path, mode_t mode); - // http://pubs.opengroup.org/onlinepubs/7908799/xsh/mkdir.html - path = Pointer_stringify(path); - try { - FS.mkdir(path, mode, 0); - return 0; - } catch (e) { - FS.handleFSError(e); - return -1; - } - } - function _emscripten_asm_const(code) { - Runtime.getAsmConst(code, 0)(); - } - function _srand(seed) {} - function _time(ptr) { - var ret = Math.floor(Date.now()/1000); - if (ptr) { - HEAP32[((ptr)>>2)]=ret - } - return ret; - } - function _abort() { - Module['abort'](); - } - function ___errno_location() { - return ___errno_state; - } - function _sbrk(bytes) { - // Implement a Linux-like 'memory area' for our 'process'. - // Changes the size of the memory area by |bytes|; returns the - // address of the previous top ('break') of the memory area - // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP - var self = _sbrk; - if (!self.called) { - DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned - self.called = true; - assert(Runtime.dynamicAlloc); - self.alloc = Runtime.dynamicAlloc; - Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') }; - } - var ret = DYNAMICTOP; - if (bytes != 0) self.alloc(bytes); - return ret; // Previous break location. - } - function _sysconf(name) { - // long sysconf(int name); - // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html - switch(name) { - case 30: return PAGE_SIZE; - case 132: - case 133: - case 12: - case 137: - case 138: - case 15: - case 235: - case 16: - case 17: - case 18: - case 19: - case 20: - case 149: - case 13: - case 10: - case 236: - case 153: - case 9: - case 21: - case 22: - case 159: - case 154: - case 14: - case 77: - case 78: - case 139: - case 80: - case 81: - case 79: - case 82: - case 68: - case 67: - case 164: - case 11: - case 29: - case 47: - case 48: - case 95: - case 52: - case 51: - case 46: - return 200809; - case 27: - case 246: - case 127: - case 128: - case 23: - case 24: - case 160: - case 161: - case 181: - case 182: - case 242: - case 183: - case 184: - case 243: - case 244: - case 245: - case 165: - case 178: - case 179: - case 49: - case 50: - case 168: - case 169: - case 175: - case 170: - case 171: - case 172: - case 97: - case 76: - case 32: - case 173: - case 35: - return -1; - case 176: - case 177: - case 7: - case 155: - case 8: - case 157: - case 125: - case 126: - case 92: - case 93: - case 129: - case 130: - case 131: - case 94: - case 91: - return 1; - case 74: - case 60: - case 69: - case 70: - case 4: - return 1024; - case 31: - case 42: - case 72: - return 32; - case 87: - case 26: - case 33: - return 2147483647; - case 34: - case 1: - return 47839; - case 38: - case 36: - return 99; - case 43: - case 37: - return 2048; - case 0: return 2097152; - case 3: return 65536; - case 28: return 32768; - case 44: return 32767; - case 75: return 16384; - case 39: return 1000; - case 89: return 700; - case 71: return 256; - case 40: return 255; - case 2: return 100; - case 180: return 64; - case 25: return 20; - case 5: return 16; - case 6: return 6; - case 73: return 4; - case 84: return 1; - } - ___setErrNo(ERRNO_CODES.EINVAL); - return -1; - } - function _llvm_trap() { - abort('trap!'); - } -FS.staticInit();__ATINIT__.unshift({ func: function() { if (!Module["noFSInit"] && !FS.init.initialized) FS.init() } });__ATMAIN__.push({ func: function() { FS.ignorePermissions = false } });__ATEXIT__.push({ func: function() { FS.quit() } });Module["FS_createFolder"] = FS.createFolder;Module["FS_createPath"] = FS.createPath;Module["FS_createDataFile"] = FS.createDataFile;Module["FS_createPreloadedFile"] = FS.createPreloadedFile;Module["FS_createLazyFile"] = FS.createLazyFile;Module["FS_createLink"] = FS.createLink;Module["FS_createDevice"] = FS.createDevice; -___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0; -__ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor(); -if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); } -__ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } }); -GL.init() -Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) }; - Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) }; - Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) }; - Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() }; - Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() }; - Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() } -_fputc.ret = allocate([0], "i8", ALLOC_STATIC); -_fgetc.ret = allocate([0], "i8", ALLOC_STATIC); -STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP); -staticSealed = true; // seal the static portion of memory -STACK_MAX = STACK_BASE + 5242880; -DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX); -assert(DYNAMIC_BASE < TOTAL_MEMORY); // Stack must fit in TOTAL_MEMORY; allocations from here on may enlarge TOTAL_MEMORY - var ctlz_i8 = allocate([8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], "i8", ALLOC_DYNAMIC); - var cttz_i8 = allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0], "i8", ALLOC_DYNAMIC); -var Math_min = Math.min; -function invoke_ii(index,a1) { - try { - return Module["dynCall_ii"](index,a1); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function invoke_vif(index,a1,a2) { - try { - Module["dynCall_vif"](index,a1,a2); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function invoke_vf(index,a1) { - try { - Module["dynCall_vf"](index,a1); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function invoke_vi(index,a1) { - try { - Module["dynCall_vi"](index,a1); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function invoke_vii(index,a1,a2) { - try { - Module["dynCall_vii"](index,a1,a2); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function invoke_iiiiii(index,a1,a2,a3,a4,a5) { - try { - return Module["dynCall_iiiiii"](index,a1,a2,a3,a4,a5); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function invoke_viii(index,a1,a2,a3) { - try { - Module["dynCall_viii"](index,a1,a2,a3); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function invoke_v(index) { - try { - Module["dynCall_v"](index); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function invoke_iii(index,a1,a2) { - try { - return Module["dynCall_iii"](index,a1,a2); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function invoke_iiifi(index,a1,a2,a3,a4) { - try { - return Module["dynCall_iiifi"](index,a1,a2,a3,a4); - } catch(e) { - if (typeof e !== 'number' && e !== 'longjmp') throw e; - asm["setThrew"](1, 0); - } -} -function asmPrintInt(x, y) { - Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack); -} -function asmPrintFloat(x, y) { - Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack); -} +var Module;if(typeof Module==="undefined")Module=eval("(function() { try { return Module || {} } catch(e) { return {} } })()");if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0;Module.finishedDataFileDownloads=0}Module.expectedDataFileDownloads++;((function(){var PACKAGE_PATH;if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else{PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}var PACKAGE_NAME="build-emscripten-release/game.data";var REMOTE_PACKAGE_NAME=(Module["filePackagePrefixURL"]||"")+"game.data";var REMOTE_PACKAGE_SIZE=487037;var PACKAGE_UUID="0aba4d1e-27d5-4758-a107-6cae09aa96db";function fetchRemotePackage(packageName,packageSize,callback,errback){var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=(function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"]("Downloading data... ("+loaded+"/"+total+")")}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}});xhr.onload=(function(event){var packageData=xhr.response;callback(packageData)});xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetched=null,fetchedCallback=null;fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,(function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}}),handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}Module["FS_createPath"]("/","data",true,true);function DataRequest(start,end,crunched,audio){this.start=start;this.end=end;this.crunched=crunched;this.audio=audio}DataRequest.prototype={requests:{},open:(function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"]("fp "+this.name)}),send:(function(){}),onload:(function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)}),finish:(function(byteArray){var that=this;Module["FS_createPreloadedFile"](this.name,null,byteArray,true,true,(function(){Module["removeRunDependency"]("fp "+that.name)}),(function(){if(that.audio){Module["removeRunDependency"]("fp "+that.name)}else{Module.printErr("Preloading file "+that.name+" failed")}}),false,true);this.requests[this.name]=null})};(new DataRequest(0,2344,0,0)).open("GET","/data/arrowshooter_down.png");(new DataRequest(2344,4698,0,0)).open("GET","/data/arrowshooter_left.png");(new DataRequest(4698,7037,0,0)).open("GET","/data/arrowshooter_right.png");(new DataRequest(7037,9313,0,0)).open("GET","/data/arrowshooter_up.png");(new DataRequest(9313,10366,0,0)).open("GET","/data/arrow_down.png");(new DataRequest(10366,11291,0,0)).open("GET","/data/arrow_left.png");(new DataRequest(11291,12228,0,0)).open("GET","/data/arrow_right.png");(new DataRequest(12228,13096,0,0)).open("GET","/data/arrow_up.png");(new DataRequest(13096,15920,0,0)).open("GET","/data/barrel.png");(new DataRequest(15920,18827,0,0)).open("GET","/data/barrel2.png");(new DataRequest(18827,69509,0,1)).open("GET","/data/coin.wav");(new DataRequest(69509,74221,0,0)).open("GET","/data/column.png");(new DataRequest(74221,77808,0,0)).open("GET","/data/column_faded.png");(new DataRequest(77808,123766,0,0)).open("GET","/data/end.png");(new DataRequest(123766,125708,0,0)).open("GET","/data/end_point.png");(new DataRequest(125708,130045,0,0)).open("GET","/data/exit_point.png");(new DataRequest(130045,186059,0,1)).open("GET","/data/Explosion16.wav");(new DataRequest(186059,250159,0,1)).open("GET","/data/Explosion2.wav");(new DataRequest(250159,258818,0,0)).open("GET","/data/fire.png");(new DataRequest(258818,262733,0,0)).open("GET","/data/floor.png");(new DataRequest(262733,266695,0,0)).open("GET","/data/floor_center.png");(new DataRequest(266695,270593,0,0)).open("GET","/data/floor_left.png");(new DataRequest(270593,274545,0,0)).open("GET","/data/floor_right.png");(new DataRequest(274545,280733,0,1)).open("GET","/data/Hit_Hurt10.wav");(new DataRequest(280733,296579,0,1)).open("GET","/data/Hit_Hurt16.wav");(new DataRequest(296579,301561,0,0)).open("GET","/data/hole_lava.png");(new DataRequest(301561,305229,0,0)).open("GET","/data/hole_spiked.png");(new DataRequest(305229,308688,0,0)).open("GET","/data/lamp.png");(new DataRequest(308688,320660,0,1)).open("GET","/data/Laser_Shoot2.wav");(new DataRequest(320660,322e3,0,0)).open("GET","/data/level_00.txt");(new DataRequest(322e3,323144,0,0)).open("GET","/data/level_01.txt");(new DataRequest(323144,324484,0,0)).open("GET","/data/level_02.txt");(new DataRequest(324484,325554,0,0)).open("GET","/data/level_03.txt");(new DataRequest(325554,327089,0,0)).open("GET","/data/level_04.txt");(new DataRequest(327089,328555,0,0)).open("GET","/data/level_05.txt");(new DataRequest(328555,328847,0,0)).open("GET","/data/level_06.txt");(new DataRequest(328847,369638,0,0)).open("GET","/data/logo.png");(new DataRequest(369638,373865,0,0)).open("GET","/data/player_broken.png");(new DataRequest(373865,378163,0,0)).open("GET","/data/player_down.png");(new DataRequest(378163,382654,0,0)).open("GET","/data/player_left.png");(new DataRequest(382654,387128,0,0)).open("GET","/data/player_right.png");(new DataRequest(387128,391201,0,0)).open("GET","/data/player_up.png");(new DataRequest(391201,448215,0,1)).open("GET","/data/Powerup10.wav");(new DataRequest(448215,475099,0,1)).open("GET","/data/Powerup30.wav");(new DataRequest(475099,477906,0,0)).open("GET","/data/rock.png");(new DataRequest(477906,480256,0,0)).open("GET","/data/save_point.png");(new DataRequest(480256,485902,0,0)).open("GET","/data/save_point_active.png");(new DataRequest(485902,487037,0,0)).open("GET","/data/textshadow.png");function processPackageData(arrayBuffer){Module.finishedDataFileDownloads++;assert(arrayBuffer,"Loading data file failed.");var byteArray=new Uint8Array(arrayBuffer);var curr;var ptr=Module["_malloc"](byteArray.length);Module["HEAPU8"].set(byteArray,ptr);DataRequest.prototype.byteArray=Module["HEAPU8"].subarray(ptr,ptr+byteArray.length);DataRequest.prototype.requests["/data/arrowshooter_down.png"].onload();DataRequest.prototype.requests["/data/arrowshooter_left.png"].onload();DataRequest.prototype.requests["/data/arrowshooter_right.png"].onload();DataRequest.prototype.requests["/data/arrowshooter_up.png"].onload();DataRequest.prototype.requests["/data/arrow_down.png"].onload();DataRequest.prototype.requests["/data/arrow_left.png"].onload();DataRequest.prototype.requests["/data/arrow_right.png"].onload();DataRequest.prototype.requests["/data/arrow_up.png"].onload();DataRequest.prototype.requests["/data/barrel.png"].onload();DataRequest.prototype.requests["/data/barrel2.png"].onload();DataRequest.prototype.requests["/data/coin.wav"].onload();DataRequest.prototype.requests["/data/column.png"].onload();DataRequest.prototype.requests["/data/column_faded.png"].onload();DataRequest.prototype.requests["/data/end.png"].onload();DataRequest.prototype.requests["/data/end_point.png"].onload();DataRequest.prototype.requests["/data/exit_point.png"].onload();DataRequest.prototype.requests["/data/Explosion16.wav"].onload();DataRequest.prototype.requests["/data/Explosion2.wav"].onload();DataRequest.prototype.requests["/data/fire.png"].onload();DataRequest.prototype.requests["/data/floor.png"].onload();DataRequest.prototype.requests["/data/floor_center.png"].onload();DataRequest.prototype.requests["/data/floor_left.png"].onload();DataRequest.prototype.requests["/data/floor_right.png"].onload();DataRequest.prototype.requests["/data/Hit_Hurt10.wav"].onload();DataRequest.prototype.requests["/data/Hit_Hurt16.wav"].onload();DataRequest.prototype.requests["/data/hole_lava.png"].onload();DataRequest.prototype.requests["/data/hole_spiked.png"].onload();DataRequest.prototype.requests["/data/lamp.png"].onload();DataRequest.prototype.requests["/data/Laser_Shoot2.wav"].onload();DataRequest.prototype.requests["/data/level_00.txt"].onload();DataRequest.prototype.requests["/data/level_01.txt"].onload();DataRequest.prototype.requests["/data/level_02.txt"].onload();DataRequest.prototype.requests["/data/level_03.txt"].onload();DataRequest.prototype.requests["/data/level_04.txt"].onload();DataRequest.prototype.requests["/data/level_05.txt"].onload();DataRequest.prototype.requests["/data/level_06.txt"].onload();DataRequest.prototype.requests["/data/logo.png"].onload();DataRequest.prototype.requests["/data/player_broken.png"].onload();DataRequest.prototype.requests["/data/player_down.png"].onload();DataRequest.prototype.requests["/data/player_left.png"].onload();DataRequest.prototype.requests["/data/player_right.png"].onload();DataRequest.prototype.requests["/data/player_up.png"].onload();DataRequest.prototype.requests["/data/Powerup10.wav"].onload();DataRequest.prototype.requests["/data/Powerup30.wav"].onload();DataRequest.prototype.requests["/data/rock.png"].onload();DataRequest.prototype.requests["/data/save_point.png"].onload();DataRequest.prototype.requests["/data/save_point_active.png"].onload();DataRequest.prototype.requests["/data/textshadow.png"].onload();Module["removeRunDependency"]("datafile_build-emscripten-release/game.data")}Module["addRunDependency"]("datafile_build-emscripten-release/game.data");if(!Module.preloadResults)Module.preloadResults={};Module.preloadResults[PACKAGE_NAME]={fromCache:false};if(fetched){processPackageData(fetched);fetched=null}else{fetchedCallback=processPackageData}}if(Module["calledRun"]){runWithFS()}else{if(!Module["preRun"])Module["preRun"]=[];Module["preRun"].push(runWithFS)}}))();var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function";var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){return Module["read"](filename,true)};Module["load"]=function load(f){globalEval(read(f))};Module["thisProgram"]=process["argv"][1];Module["arguments"]=process["argv"].slice(2);module["exports"]=Module}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){return read(f,"binary")};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}this["Module"]=Module}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WEB){window["Module"]=Module}else{Module["load"]=importScripts}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]=="undefined"&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),forceAlign:(function(target,quantum){quantum=quantum||4;if(quantum==1)return target;if(isNumber(target)&&isNumber(quantum)){return Math.ceil(target/quantum)*quantum}else if(isNumber(quantum)&&isPowerOfTwo(quantum)){return"((("+target+")+"+(quantum-1)+")&"+ -quantum+")"}return"Math.ceil(("+target+")/"+quantum+")*"+quantum}),isNumberType:(function(type){return type in Runtime.INT_TYPES||type in Runtime.FLOAT_TYPES}),isPointerType:function isPointerType(type){return type[type.length-1]=="*"},isStructType:function isStructType(type){if(isPointerType(type))return false;if(isArrayType(type))return true;if(/?/.test(type))return true;return type[0]=="%"},INT_TYPES:{"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},FLOAT_TYPES:{"float":0,"double":0},or64:(function(x,y){var l=x|0|(y|0);var h=(Math.round(x/4294967296)|Math.round(y/4294967296))*4294967296;return l+h}),and64:(function(x,y){var l=(x|0)&(y|0);var h=(Math.round(x/4294967296)&Math.round(y/4294967296))*4294967296;return l+h}),xor64:(function(x,y){var l=(x|0)^(y|0);var h=(Math.round(x/4294967296)^Math.round(y/4294967296))*4294967296;return l+h}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),dedup:function dedup(items,ident){var seen={};if(ident){return items.filter((function(item){if(seen[item[ident]])return false;seen[item[ident]]=true;return true}))}else{return items.filter((function(item){if(seen[item])return false;seen[item]=true;return true}))}},set:function set(){var args=typeof arguments[0]==="object"?arguments[0]:arguments;var ret={};for(var i=0;i=0){diffs.push(curr-prev)}prev=curr;return curr}));if(type.name_&&type.name_[0]==="["){type.flatSize=parseInt(type.name_.substr(1))*type.flatSize/2}type.flatSize=Runtime.alignMemory(type.flatSize,type.alignSize);if(diffs.length==0){type.flatFactor=type.flatSize}else if(Runtime.dedup(diffs).length==1){type.flatFactor=diffs[0]}type.needsFlattening=type.flatFactor!=1;return type.flatIndexes},generateStructInfo:(function(struct,typeName,offset){var type,alignment;if(typeName){offset=offset||0;type=(typeof Types==="undefined"?Runtime.typeInfo:Types.types)[typeName];if(!type)return null;if(type.fields.length!=struct.length){printErr("Number of named fields must match the type for "+typeName+": possibly duplicate struct names. Cannot return structInfo");return null}alignment=type.flatIndexes}else{var type={fields:struct.map((function(item){return item[0]}))};alignment=Runtime.calculateStructAlignment(type)}var ret={__size__:type.flatSize};if(typeName){struct.forEach((function(item,i){if(typeof item==="string"){ret[item]=alignment[i]+offset}else{var key;for(var k in item)key=k;ret[key]=Runtime.generateStructInfo(item[key],type.fields[i],alignment[i])}}))}else{struct.forEach((function(item,i){ret[item[1]]=alignment[i]}))}return ret}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i0)return""}var c1=buffer[0];var c2=buffer[1];var c3=buffer[2];var c4=buffer[3];var ret;if(buffer.length==2){ret=String.fromCharCode((c1&31)<<6|c2&63)}else if(buffer.length==3){ret=String.fromCharCode((c1&15)<<12|(c2&63)<<6|c3&63)}else{var codePoint=(c1&7)<<18|(c2&63)<<12|(c3&63)<<6|c4&63;ret=String.fromCharCode(Math.floor((codePoint-65536)/1024)+55296,(codePoint-65536)%1024+56320)}buffer.length=0;return ret});this.processJSString=function processJSString(string){string=unescape(encodeURIComponent(string));var ret=[];for(var i=0;i=TOTAL_MEMORY)enlargeMemory();return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:8))*(quantum?quantum:8);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var stack=0;var JSfuncs={"stackSave":(function(){stack=Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore(stack)}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc(str.length+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args){var func=getCFunc(ident);var cArgs=[];if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];if(t>=128)hasUtf=true;else if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(!hasUtf){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}var utf8=new Runtime.UTF8Processor;for(i=0;i>0];ret+=utf8.processCChar(t)}return ret}Module["Pointer_stringify"]=Pointer_stringify;function UTF16ToString(ptr){var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module["UTF16ToString"]=UTF16ToString;function stringToUTF16(str,outPtr){for(var i=0;i>1]=codeUnit}HEAP16[outPtr+str.length*2>>1]=0}Module["stringToUTF16"]=stringToUTF16;function UTF32ToString(ptr){var i=0;var str="";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module["UTF32ToString"]=UTF32ToString;function stringToUTF32(str,outPtr){var iChar=0;for(var iCodeUnit=0;iCodeUnit=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++iCodeUnit);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr+iChar*4>>2]=codeUnit;++iChar}HEAP32[outPtr+iChar*4>>2]=0}Module["stringToUTF32"]=stringToUTF32;function demangle(func){var i=3;var basicTypes={"v":"void","b":"bool","c":"char","s":"short","i":"int","l":"long","f":"float","d":"double","w":"wchar_t","a":"signed char","h":"unsigned char","t":"unsigned short","j":"unsigned int","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}return parse()}catch(e){return func}}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function stackTrace(){var stack=(new Error).stack;return stack?demangleAll(stack):"(no stack trace available)"}var PAGE_SIZE=4096;function alignMemoryPage(x){return x+4095&-4096}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function enlargeMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.")}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;var FAST_MEMORY=Module["FAST_MEMORY"]||2097152;var totalMemory=4096;while(totalMemory0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeInitialized=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=Module.addOnPreRun=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=Module.addOnInit=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=Module.addOnPreMain=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=Module.addOnExit=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=Module.addOnPostRun=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var ret=(new Runtime.UTF8Processor).processJSString(stringy);if(length){ret.length=length}if(!dontAddNull){ret.push(0)}return ret}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer+str.length>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;STATIC_BASE=8;STATICTOP=STATIC_BASE+Runtime.alignMemory(13779);__ATINIT__.push();allocate([0,0,0,0,150,48,7,119,44,97,14,238,186,81,9,153,25,196,109,7,143,244,106,112,53,165,99,233,163,149,100,158,50,136,219,14,164,184,220,121,30,233,213,224,136,217,210,151,43,76,182,9,189,124,177,126,7,45,184,231,145,29,191,144,100,16,183,29,242,32,176,106,72,113,185,243,222,65,190,132,125,212,218,26,235,228,221,109,81,181,212,244,199,133,211,131,86,152,108,19,192,168,107,100,122,249,98,253,236,201,101,138,79,92,1,20,217,108,6,99,99,61,15,250,245,13,8,141,200,32,110,59,94,16,105,76,228,65,96,213,114,113,103,162,209,228,3,60,71,212,4,75,253,133,13,210,107,181,10,165,250,168,181,53,108,152,178,66,214,201,187,219,64,249,188,172,227,108,216,50,117,92,223,69,207,13,214,220,89,61,209,171,172,48,217,38,58,0,222,81,128,81,215,200,22,97,208,191,181,244,180,33,35,196,179,86,153,149,186,207,15,165,189,184,158,184,2,40,8,136,5,95,178,217,12,198,36,233,11,177,135,124,111,47,17,76,104,88,171,29,97,193,61,45,102,182,144,65,220,118,6,113,219,1,188,32,210,152,42,16,213,239,137,133,177,113,31,181,182,6,165,228,191,159,51,212,184,232,162,201,7,120,52,249,0,15,142,168,9,150,24,152,14,225,187,13,106,127,45,61,109,8,151,108,100,145,1,92,99,230,244,81,107,107,98,97,108,28,216,48,101,133,78,0,98,242,237,149,6,108,123,165,1,27,193,244,8,130,87,196,15,245,198,217,176,101,80,233,183,18,234,184,190,139,124,136,185,252,223,29,221,98,73,45,218,21,243,124,211,140,101,76,212,251,88,97,178,77,206,81,181,58,116,0,188,163,226,48,187,212,65,165,223,74,215,149,216,61,109,196,209,164,251,244,214,211,106,233,105,67,252,217,110,52,70,136,103,173,208,184,96,218,115,45,4,68,229,29,3,51,95,76,10,170,201,124,13,221,60,113,5,80,170,65,2,39,16,16,11,190,134,32,12,201,37,181,104,87,179,133,111,32,9,212,102,185,159,228,97,206,14,249,222,94,152,201,217,41,34,152,208,176,180,168,215,199,23,61,179,89,129,13,180,46,59,92,189,183,173,108,186,192,32,131,184,237,182,179,191,154,12,226,182,3,154,210,177,116,57,71,213,234,175,119,210,157,21,38,219,4,131,22,220,115,18,11,99,227,132,59,100,148,62,106,109,13,168,90,106,122,11,207,14,228,157,255,9,147,39,174,0,10,177,158,7,125,68,147,15,240,210,163,8,135,104,242,1,30,254,194,6,105,93,87,98,247,203,103,101,128,113,54,108,25,231,6,107,110,118,27,212,254,224,43,211,137,90,122,218,16,204,74,221,103,111,223,185,249,249,239,190,142,67,190,183,23,213,142,176,96,232,163,214,214,126,147,209,161,196,194,216,56,82,242,223,79,241,103,187,209,103,87,188,166,221,6,181,63,75,54,178,72,218,43,13,216,76,27,10,175,246,74,3,54,96,122,4,65,195,239,96,223,85,223,103,168,239,142,110,49,121,190,105,70,140,179,97,203,26,131,102,188,160,210,111,37,54,226,104,82,149,119,12,204,3,71,11,187,185,22,2,34,47,38,5,85,190,59,186,197,40,11,189,178,146,90,180,43,4,106,179,92,167,255,215,194,49,207,208,181,139,158,217,44,29,174,222,91,176,194,100,155,38,242,99,236,156,163,106,117,10,147,109,2,169,6,9,156,63,54,14,235,133,103,7,114,19,87,0,5,130,74,191,149,20,122,184,226,174,43,177,123,56,27,182,12,155,142,210,146,13,190,213,229,183,239,220,124,33,223,219,11,212,210,211,134,66,226,212,241,248,179,221,104,110,131,218,31,205,22,190,129,91,38,185,246,225,119,176,111,119,71,183,24,230,90,8,136,112,106,15,255,202,59,6,102,92,11,1,17,255,158,101,143,105,174,98,248,211,255,107,97,69,207,108,22,120,226,10,160,238,210,13,215,84,131,4,78,194,179,3,57,97,38,103,167,247,22,96,208,77,71,105,73,219,119,110,62,74,106,209,174,220,90,214,217,102,11,223,64,240,59,216,55,83,174,188,169,197,158,187,222,127,207,178,71,233,255,181,48,28,242,189,189,138,194,186,202,48,147,179,83,166,163,180,36,5,54,208,186,147,6,215,205,41,87,222,84,191,103,217,35,46,122,102,179,184,74,97,196,2,27,104,93,148,43,111,42,55,190,11,180,161,142,12,195,27,223,5,90,141,239,2,45,110,111,32,101,114,114,111,114,44,32,101,118,101,114,121,116,104,105,110,103,32,119,101,110,116,32,111,107,0,0,0,0,110,111,116,104,105,110,103,32,100,111,110,101,32,121,101,116,0,0,0,0,0,0,0,0,101,110,100,32,111,102,32,105,110,112,117,116,32,109,101,109,111,114,121,32,114,101,97,99,104,101,100,32,119,105,116,104,111,117,116,32,104,117,102,102,109,97,110,32,101,110,100,32,99,111,100,101,0,0,0,0,101,114,114,111,114,32,105,110,32,99,111,100,101,32,116,114,101,101,32,109,97,100,101,32,105,116,32,106,117,109,112,32,111,117,116,115,105,100,101,32,111,102,32,104,117,102,102,109,97,110,32,116,114,101,101,0,112,114,111,98,108,101,109,32,119,104,105,108,101,32,112,114,111,99,101,115,115,105,110,103,32,100,121,110,97,109,105,99,32,100,101,102,108,97,116,101,32,98,108,111,99,107,0,0,117,110,101,120,105,115,116,105,110,103,32,99,111,100,101,32,119,104,105,108,101,32,112,114,111,99,101,115,115,105,110,103,32,100,121,110,97,109,105,99,32,100,101,102,108,97,116,101,32,98,108,111,99,107,0,0,101,110,100,32,111,102,32,111,117,116,32,98,117,102,102,101,114,32,109,101,109,111,114,121,32,114,101,97,99,104,101,100,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,100,105,115,116,97,110,99,101,32,99,111,100,101,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,0,0,0,105,110,118,97,108,105,100,32,100,101,102,108,97,116,101,32,98,108,111,99,107,32,66,84,89,80,69,32,101,110,99,111,117,110,116,101,114,101,100,32,119,104,105,108,101,32,100,101,99,111,100,105,110,103,0,0,78,76,69,78,32,105,115,32,110,111,116,32,111,110,101,115,32,99,111,109,112,108,101,109,101,110,116,32,111,102,32,76,69,78,32,105,110,32,97,32,100,101,102,108,97,116,101,32,98,108,111,99,107,0,0,0,101,110,100,32,111,102,32,105,110,32,98,117,102,102,101,114,32,109,101,109,111,114,121,32,114,101,97,99,104,101,100,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,0,105,110,118,97,108,105,100,32,70,67,72,69,67,75,32,105,110,32,122,108,105,98,32,104,101,97,100,101,114,0,0,0,105,110,118,97,108,105,100,32,99,111,109,112,114,101,115,115,105,111,110,32,109,101,116,104,111,100,32,105,110,32,122,108,105,98,32,104,101,97,100,101,114,0,0,0,0,0,0,0,70,68,73,67,84,32,101,110,99,111,117,110,116,101,114,101,100,32,105,110,32,122,108,105,98,32,104,101,97,100,101,114,32,119,104,105,108,101,32,105,116,39,115,32,110,111,116,32,117,115,101,100,32,102,111,114,32,80,78,71,0,0,0,0,80,78,71,32,102,105,108,101,32,105,115,32,115,109,97,108,108,101,114,32,116,104,97,110,32,97,32,80,78,71,32,104,101,97,100,101,114,0,0,0,105,110,99,111,114,114,101,99,116,32,80,78,71,32,115,105,103,110,97,116,117,114,101,44,32,105,116,39,115,32,110,111,32,80,78,71,32,111,114,32,99,111,114,114,117,112,116,101,100,0,0,0,0,0,0,0,102,105,114,115,116,32,99,104,117,110,107,32,105,115,32,110,111,116,32,116,104,101,32,104,101,97,100,101,114,32,99,104,117,110,107,0,0,0,0,0,99,104,117,110,107,32,108,101,110,103,116,104,32,116,111,111,32,108,97,114,103,101,44,32,99,104,117,110,107,32,98,114,111,107,101,110,32,111,102,102,32,97,116,32,101,110,100,32,111,102,32,102,105,108,101,0,105,108,108,101,103,97,108,32,80,78,71,32,99,111,108,111,114,32,116,121,112,101,32,111,114,32,98,112,112,0,0,0,105,108,108,101,103,97,108,32,80,78,71,32,99,111,109,112,114,101,115,115,105,111,110,32,109,101,116,104,111,100,0,0,105,108,108,101,103,97,108,32,80,78,71,32,102,105,108,116,101,114,32,109,101,116,104,111,100,0,0,0,0,0,0,0,105,108,108,101,103,97,108,32,80,78,71,32,105,110,116,101,114,108,97,99,101,32,109,101,116,104,111,100,0,0,0,0,99,104,117,110,107,32,108,101,110,103,116,104,32,111,102,32,97,32,99,104,117,110,107,32,105,115,32,116,111,111,32,108,97,114,103,101,32,111,114,32,116,104,101,32,99,104,117,110,107,32,116,111,111,32,115,109,97,108,108,0,0,0,0,0,105,108,108,101,103,97,108,32,80,78,71,32,102,105,108,116,101,114,32,116,121,112,101,32,101,110,99,111,117,110,116,101,114,101,100,0,0,0,0,0,105,108,108,101,103,97,108,32,98,105,116,32,100,101,112,116,104,32,102,111,114,32,116,104,105,115,32,99,111,108,111,114,32,116,121,112,101,32,103,105,118,101,110,0,0,0,0,0,116,104,101,32,112,97,108,101,116,116,101,32,105,115,32,116,111,111,32,98,105,103,0,0,109,111,114,101,32,112,97,108,101,116,116,101,32,97,108,112,104,97,32,118,97,108,117,101,115,32,103,105,118,101,110,32,105,110,32,116,82,78,83,32,99,104,117,110,107,32,116,104,97,110,32,116,104,101,114,101,32,97,114,101,32,99,111,108,111,114,115,32,105,110,32,116,104,101,32,112,97,108,101,116,116,101,0,0,0,0,0,0,116,82,78,83,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,103,114,101,121,115,99,97,108,101,32,105,109,97,103,101,0,0,0,116,82,78,83,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,82,71,66,32,105,109,97,103,101,0,116,82,78,83,32,99,104,117,110,107,32,97,112,112,101,97,114,101,100,32,119,104,105,108,101,32,105,116,32,119,97,115,32,110,111,116,32,97,108,108,111,119,101,100,32,102,111,114,32,116,104,105,115,32,99,111,108,111,114,32,116,121,112,101,0,0,0,0,0,0,0,0,98,75,71,68,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,112,97,108,101,116,116,101,32,105,109,97,103,101,0,0,0,0,0,98,75,71,68,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,103,114,101,121,115,99,97,108,101,32,105,109,97,103,101,0,0,0,98,75,71,68,32,99,104,117,110,107,32,104,97,115,32,119,114,111,110,103,32,115,105,122,101,32,102,111,114,32,82,71,66,32,105,109,97,103,101,0,97,32,118,97,108,117,101,32,105,110,32,105,110,100,101,120,101,100,32,105,109,97,103,101,32,105,115,32,108,97,114,103,101,114,32,116,104,97,110,32,116,104,101,32,112,97,108,101,116,116,101,32,115,105,122,101,32,40,98,105,116,100,101,112,116,104,32,61,32,56,41,0,97,32,118,97,108,117,101,32,105,110,32,105,110,100,101,120,101,100,32,105,109,97,103,101,32,105,115,32,108,97,114,103,101,114,32,116,104,97,110,32,116,104,101,32,112,97,108,101,116,116,101,32,115,105,122,101,32,40,98,105,116,100,101,112,116,104,32,60,32,56,41,0,101,109,112,116,121,32,105,110,112,117,116,32,111,114,32,102,105,108,101,32,100,111,101,115,110,39,116,32,101,120,105,115,116,0,0,0,0,0,0,0,106,117,109,112,101,100,32,112,97,115,116,32,109,101,109,111,114,121,32,119,104,105,108,101,32,103,101,110,101,114,97,116,105,110,103,32,100,121,110,97,109,105,99,32,104,117,102,102,109,97,110,32,116,114,101,101,0,0,0,0,0,0,0,0,106,117,109,112,101,100,32,112,97,115,116,32,109,101,109,111,114,121,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,32,104,117,102,102,109,97,110,32,98,108,111,99,107,0,0,0,0,0,0,0,0,106,117,109,112,101,100,32,112,97,115,116,32,109,101,109,111,114,121,32,119,104,105,108,101,32,105,110,102,108,97,116,105,110,103,0,0,0,0,0,0,115,105,122,101,32,111,102,32,122,108,105,98,32,100,97,116,97,32,116,111,111,32,115,109,97,108,108,0,0,0,0,0,114,101,112,101,97,116,32,115,121,109,98,111,108,32,105,110,32,116,114,101,101,32,119,104,105,108,101,32,116,104,101,114,101,32,119,97,115,32,110,111,32,118,97,108,117,101,32,115,121,109,98,111,108,32,121,101,116,0,0,0,0,0,0,0,106,117,109,112,101,100,32,112,97,115,116,32,116,114,101,101,32,119,104,105,108,101,32,103,101,110,101,114,97,116,105,110,103,32,104,117,102,102,109,97,110,32,116,114,101,101,0,0,103,105,118,101,110,32,111,117,116,112,117,116,32,105,109,97,103,101,32,99,111,108,111,114,116,121,112,101,32,111,114,32,98,105,116,100,101,112,116,104,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,102,111,114,32,99,111,108,111,114,32,99,111,110,118,101,114,115,105,111,110,0,0,0,0,0,105,110,118,97,108,105,100,32,67,82,67,32,101,110,99,111,117,110,116,101,114,101,100,32,40,99,104,101,99,107,105,110,103,32,67,82,67,32,99,97,110,32,98,101,32,100,105,115,97,98,108,101,100,41,0,0,105,110,118,97,108,105,100,32,65,68,76,69,82,51,50,32,101,110,99,111,117,110,116,101,114,101,100,32,40,99,104,101,99,107,105,110,103,32,65,68,76,69,82,51,50,32,99,97,110,32,98,101,32,100,105,115,97,98,108,101,100,41,0,0,114,101,113,117,101,115,116,101,100,32,99,111,108,111,114,32,99,111,110,118,101,114,115,105,111,110,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,119,105,110,100,111,119,32,115,105,122,101,32,103,105,118,101,110,32,105,110,32,116,104,101,32,115,101,116,116,105,110,103,115,32,111,102,32,116,104,101,32,101,110,99,111,100,101,114,32,40,109,117,115,116,32,98,101,32,48,45,51,50,55,54,56,41,0,0,0,0,0,0,105,110,118,97,108,105,100,32,66,84,89,80,69,32,103,105,118,101,110,32,105,110,32,116,104,101,32,115,101,116,116,105,110,103,115,32,111,102,32,116,104,101,32,101,110,99,111,100,101,114,32,40,111,110,108,121,32,48,44,32,49,32,97,110,100,32,50,32,97,114,101,32,97,108,108,111,119,101,100,41,0,0,0,0,0,0,0,0,99,111,110,118,101,114,115,105,111,110,32,102,114,111,109,32,99,111,108,111,114,32,116,111,32,103,114,101,121,115,99,97,108,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,0,0,0,0,0,0,0,108,101,110,103,116,104,32,111,102,32,97,32,99,104,117,110,107,32,116,111,111,32,108,111,110,103,44,32,109,97,120,32,97,108,108,111,119,101,100,32,102,111,114,32,80,78,71,32,105,115,32,50,49,52,55,52,56,51,54,52,55,32,98,121,116,101,115,32,112,101,114,32,99,104,117,110,107,0,0,0,116,104,101,32,108,101,110,103,116,104,32,111,102,32,116,104,101,32,69,78,68,32,115,121,109,98,111,108,32,50,53,54,32,105,110,32,116,104,101,32,72,117,102,102,109,97,110,32,116,114,101,101,32,105,115,32,48,0,0,0,0,0,0,0,116,104,101,32,108,101,110,103,116,104,32,111,102,32,97,32,116,101,120,116,32,99,104,117,110,107,32,107,101,121,119,111,114,100,32,103,105,118,101,110,32,116,111,32,116,104,101,32,101,110,99,111,100,101,114,32,105,115,32,108,111,110,103,101,114,32,116,104,97,110,32,116,104,101,32,109,97,120,105,109,117,109,32,111,102,32,55,57,32,98,121,116,101,115,0,0,116,104,101,32,108,101,110,103,116,104,32,111,102,32,97,32,116,101,120,116,32,99,104,117,110,107,32,107,101,121,119,111,114,100,32,103,105,118,101,110,32,116,111,32,116,104,101,32,101,110,99,111,100,101,114,32,105,115,32,115,109,97,108,108,101,114,32,116,104,97,110,32,116,104,101,32,109,105,110,105,109,117,109,32,111,102,32,49,32,98,121,116,101,0,0,0,116,114,105,101,100,32,116,111,32,101,110,99,111,100,101,32,97,32,80,76,84,69,32,99,104,117,110,107,32,119,105,116,104,32,97,32,112,97,108,101,116,116,101,32,116,104,97,116,32,104,97,115,32,108,101,115,115,32,116,104,97,110,32,49,32,111,114,32,109,111,114,101,32,116,104,97,110,32,50,53,54,32,99,111,108,111,114,115,0,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,99,104,117,110,107,32,116,121,112,101,32,119,105,116,104,32,39,99,114,105,116,105,99,97,108,39,32,102,108,97,103,32,101,110,99,111,117,110,116,101,114,101,100,32,98,121,32,116,104,101,32,100,101,99,111,100,101,114,0,0,0,0,0,0,117,110,101,120,105,115,116,105,110,103,32,105,110,116,101,114,108,97,99,101,32,109,111,100,101,32,103,105,118,101,110,32,116,111,32,101,110,99,111,100,101,114,32,40,109,117,115,116,32,98,101,32,48,32,111,114,32,49,41,0,0,0,0,0,119,104,105,108,101,32,100,101,99,111,100,105,110,103,44,32,117,110,101,120,105,115,116,105,110,103,32,99,111,109,112,114,101,115,115,105,111,110,32,109,101,116,104,111,100,32,101,110,99,111,117,110,116,101,114,105,110,103,32,105,110,32,122,84,88,116,32,111,114,32,105,84,88,116,32,99,104,117,110,107,32,40,105,116,32,109,117,115,116,32,98,101,32,48,41,0,105,110,118,97,108,105,100,32,116,73,77,69,32,99,104,117,110,107,32,115,105,122,101,0,105,110,118,97,108,105,100,32,112,72,89,115,32,99,104,117,110,107,32,115,105,122,101,0,110,111,32,110,117,108,108,32,116,101,114,109,105,110,97,116,105,111,110,32,99,104,97,114,32,102,111,117,110,100,32,119,104,105,108,101,32,100,101,99,111,100,105,110,103,32,116,101,120,116,32,99,104,117,110,107,0,0,0,0,0,0,0,0,105,84,88,116,32,99,104,117,110,107,32,116,111,111,32,115,104,111,114,116,32,116,111,32,99,111,110,116,97,105,110,32,114,101,113,117,105,114,101,100,32,98,121,116,101,115,0,0,105,110,116,101,103,101,114,32,111,118,101,114,102,108,111,119,32,105,110,32,98,117,102,102,101,114,32,115,105,122,101,0,102,97,105,108,101,100,32,116,111,32,111,112,101,110,32,102,105,108,101,32,102,111,114,32,114,101,97,100,105,110,103,0,102,97,105,108,101,100,32,116,111,32,111,112,101,110,32,102,105,108,101,32,102,111,114,32,119,114,105,116,105,110,103,0,116,114,105,101,100,32,99,114,101,97,116,105,110,103,32,97,32,116,114,101,101,32,111,102,32,48,32,115,121,109,98,111,108,115,0,0,0,0,0,0,108,97,122,121,32,109,97,116,99,104,105,110,103,32,97,116,32,112,111,115,32,48,32,105,115,32,105,109,112,111,115,115,105,98,108,101,0,0,0,0,99,111,108,111,114,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,112,97,108,101,116,116,101,32,114,101,113,117,101,115,116,101,100,32,119,104,105,108,101,32,97,32,99,111,108,111,114,32,105,115,110,39,116,32,105,110,32,112,97,108,101,116,116,101,0,0,0,0,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,102,97,105,108,101,100,0,0,0,0,0,0,0,0,103,105,118,101,110,32,105,109,97,103,101,32,116,111,111,32,115,109,97,108,108,32,116,111,32,99,111,110,116,97,105,110,32,97,108,108,32,112,105,120,101,108,115,32,116,111,32,98,101,32,101,110,99,111,100,101,100,0,0,0,0,0,0,0,105,110,116,101,114,110,97,108,32,99,111,108,111,114,32,99,111,110,118,101,114,115,105,111,110,32,98,117,103,0,0,0,105,109,112,111,115,115,105,98,108,101,32,111,102,102,115,101,116,32,105,110,32,108,122,55,55,32,101,110,99,111,100,105,110,103,32,40,105,110,116,101,114,110,97,108,32,98,117,103,41,0,0,0,0,0,0,0,109,117,115,116,32,112,114,111,118,105,100,101,32,99,117,115,116,111,109,32,122,108,105,98,32,102,117,110,99,116,105,111,110,32,112,111,105,110,116,101,114,32,105,102,32,76,79,68,69,80,78,71,95,67,79,77,80,73,76,69,95,90,76,73,66,32,105,115,32,110,111,116,32,100,101,102,105,110,101,100,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,102,105,108,116,101,114,32,115,116,114,97,116,101,103,121,32,103,105,118,101,110,32,102,111,114,32,76,111,100,101,80,78,71,69,110,99,111,100,101,114,83,101,116,116,105,110,103,115,46,102,105,108,116,101,114,95,115,116,114,97,116,101,103,121,0,0,0,0,0,0,0,0,116,101,120,116,32,99,104,117,110,107,32,107,101,121,119,111,114,100,32,116,111,111,32,115,104,111,114,116,32,111,114,32,108,111,110,103,58,32,109,117,115,116,32,104,97,118,101,32,115,105,122,101,32,49,45,55,57,0,0,0,0,0,0,0,119,105,110,100,111,119,115,105,122,101,32,109,117,115,116,32,98,101,32,97,32,112,111,119,101,114,32,111,102,32,116,119,111,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,101,114,114,111,114,32,99,111,100,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,86,101,110,100,111,114,58,32,37,115,10,0,0,0,0,32,82,101,110,100,101,114,101,114,58,32,37,115,10,0,0,32,86,101,114,115,105,111,110,58,32,37,115,10,0,0,0,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,97,80,111,115,105,116,105,111,110,59,32,32,32,32,32,32,10,97,116,116,114,105,98,117,116,101,32,118,101,99,50,32,97,84,101,120,67,111,111,114,100,59,32,32,32,32,32,32,10,97,116,116,114,105,98,117,116,101,32,118,101,99,52,32,97,67,111,108,111,114,59,32,32,32,32,32,32,32,32,32,10,118,97,114,121,105,110,103,32,118,101,99,50,32,118,84,101,120,67,111,111,114,100,59,32,32,32,32,32,32,32,32,10,118,97,114,121,105,110,103,32,118,101,99,52,32,118,67,111,108,111,114,59,32,32,32,32,32,32,32,32,32,32,32,10,117,110,105,102,111,114,109,32,109,97,116,52,32,115,80,114,111,106,101,99,116,105,111,110,77,97,116,114,105,120,59,32,10,118,111,105,100,32,109,97,105,110,40,41,32,123,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,32,103,108,95,80,111,115,105,116,105,111,110,32,61,32,97,80,111,115,105,116,105,111,110,32,42,32,32,32,10,32,32,32,32,32,32,32,32,32,32,32,32,115,80,114,111,106,101,99,116,105,111,110,77,97,116,114,105,120,59,32,32,10,32,32,32,118,84,101,120,67,111,111,114,100,32,61,32,97,84,101,120,67,111,111,114,100,59,32,32,32,32,32,32,10,32,32,32,118,67,111,108,111,114,32,61,32,97,67,111,108,111,114,59,32,32,32,32,32,32,32,32,32,32,32,32,10,125,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,0,0,0,0,0,0,112,114,101,99,105,115,105,111,110,32,109,101,100,105,117,109,112,32,102,108,111,97,116,59,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,118,97,114,121,105,110,103,32,118,101,99,50,32,118,84,101,120,67,111,111,114,100,59,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,118,97,114,121,105,110,103,32,118,101,99,52,32,118,67,111,108,111,114,59,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,117,110,105,102,111,114,109,32,115,97,109,112,108,101,114,50,68,32,115,84,101,120,116,117,114,101,59,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,118,111,105,100,32,109,97,105,110,40,41,32,123,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,32,32,103,108,95,70,114,97,103,67,111,108,111,114,32,61,32,116,101,120,116,117,114,101,50,68,40,115,84,101,120,116,117,114,101,44,32,118,84,101,120,67,111,111,114,100,41,42,118,67,111,108,111,114,59,32,10,125,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,0,97,80,111,115,105,116,105,111,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,84,101,120,67,111,111,114,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,67,111,108,111,114,0,0,0,0,0,0,0,0,0,0,115,84,101,120,116,117,114,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,80,114,111,106,101,99,116,105,111,110,77,97,116,114,105,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,112,110,103,0,0,0,0,46,80,78,71,0,0,0,0,68,114,97,119,95,76,111,97,100,73,109,97,103,101,58,32,80,78,71,32,100,101,99,111,100,101,114,32,101,114,114,111,114,32,37,117,58,32,37,115,10,0,0,0,0,0,0,0,68,114,97,119,95,76,111,97,100,73,109,97,103,101,58,32,73,109,97,103,101,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,58,32,37,115,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,254,254,0,0,0,0,0,0,0,0,0,0,0,16,56,124,254,0,0,0,0,254,124,56,16,0,0,32,48,56,60,56,48,32,0,4,12,28,60,28,12,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,24,24,24,0,24,0,108,108,0,0,0,0,0,0,108,108,254,108,254,108,108,0,24,62,96,60,6,124,24,0,0,198,204,24,48,102,198,0,56,108,56,118,220,204,118,0,24,24,48,0,0,0,0,0,12,24,48,48,48,24,12,0,48,24,12,12,12,24,48,0,0,108,56,254,56,108,0,0,0,24,24,126,24,24,0,0,0,0,0,0,24,24,48,0,0,0,0,126,0,0,0,0,0,0,0,0,24,24,0,0,6,12,24,48,96,192,128,0,60,102,110,118,102,60,0,0,24,56,120,24,24,24,0,0,60,102,6,28,48,126,0,0,60,102,12,6,102,60,0,0,28,60,108,204,254,12,0,0,126,96,124,6,102,60,0,0,28,48,96,124,102,60,0,0,126,6,6,12,24,24,0,0,60,102,60,102,102,60,0,0,60,102,62,6,12,56,0,0,0,24,24,0,24,24,0,0,0,24,24,0,24,24,48,0,0,6,24,96,24,6,0,0,0,0,126,0,126,0,0,0,0,96,24,6,24,96,0,0,60,102,6,12,24,0,24,0,60,102,90,90,94,96,60,0,60,102,102,126,102,102,0,0,124,102,124,102,102,124,0,0,60,96,96,96,96,60,0,0,120,108,102,102,108,120,0,0,126,96,120,96,96,126,0,0,126,96,120,96,96,96,0,0,60,102,96,110,102,62,0,0,102,102,126,102,102,102,0,0,60,24,24,24,24,60,0,0,6,6,6,6,102,60,0,0,198,204,216,248,204,198,0,0,96,96,96,96,96,124,0,0,198,238,254,214,198,198,0,0,198,230,246,222,206,198,0,0,60,102,102,102,102,60,0,0,252,198,198,252,192,192,0,0,120,204,204,204,220,126,0,0,124,102,102,124,108,102,0,0,124,198,112,28,198,124,0,0,126,24,24,24,24,24,0,0,102,102,102,102,102,60,0,0,102,102,102,102,60,24,0,0,198,198,214,254,238,198,0,0,198,108,56,56,108,198,0,0,198,108,56,48,48,48,0,0,254,12,24,48,96,254,0,0,60,48,48,48,48,48,60,0,192,96,48,24,12,6,2,0,60,12,12,12,12,12,60,0,24,60,102,0,0,0,0,0,0,0,0,0,0,0,254,0,24,24,12,0,0,0,0,0,0,60,6,62,102,62,0,0,96,96,124,102,102,124,0,0,0,60,96,96,96,60,0,0,6,6,62,102,102,62,0,0,0,60,102,126,96,60,0,0,28,48,124,48,48,48,0,0,0,62,102,102,62,6,60,0,96,96,124,102,102,102,0,0,48,0,48,48,48,24,0,0,12,0,12,12,12,12,120,0,96,102,108,120,108,102,0,0,24,24,24,24,24,12,0,0,0,236,254,214,198,198,0,0,0,124,102,102,102,102,0,0,0,60,102,102,102,60,0,0,0,124,102,102,124,96,96,0,0,62,102,102,62,6,6,0,0,124,102,96,96,96,0,0,0,60,96,60,6,124,0,0,48,48,124,48,48,28,0,0,0,102,102,102,102,62,0,0,0,102,102,102,60,24,0,0,0,198,198,214,254,108,0,0,0,204,120,48,120,204,0,0,0,102,102,102,60,24,48,0,0,126,12,24,48,126,0,0,12,24,24,48,24,24,12,0,24,24,24,24,24,24,24,0,48,24,24,12,24,24,48,0,118,220,0,0,0,0,0,0,0,16,56,108,198,198,254],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);allocate([4,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,8,0,0,0,4,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,4,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,0,0,0,0,8,0,0,0,7,0,0,0,9,0,0,0,6,0,0,0,10,0,0,0,5,0,0,0,11,0,0,0,4,0,0,0,12,0,0,0,3,0,0,0,13,0,0,0,2,0,0,0,14,0,0,0,1,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,7,0,0,0,8,0,0,0,8,0,0,0,9,0,0,0,9,0,0,0,10,0,0,0,10,0,0,0,11,0,0,0,11,0,0,0,12,0,0,0,12,0,0,0,13,0,0,0,13,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0,13,0,0,0,15,0,0,0,17,0,0,0,19,0,0,0,23,0,0,0,27,0,0,0,31,0,0,0,35,0,0,0,43,0,0,0,51,0,0,0,59,0,0,0,67,0,0,0,83,0,0,0,99,0,0,0,115,0,0,0,131,0,0,0,163,0,0,0,195,0,0,0,227,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,7,0,0,0,9,0,0,0,13,0,0,0,17,0,0,0,25,0,0,0,33,0,0,0,49,0,0,0,65,0,0,0,97,0,0,0,129,0,0,0,193,0,0,0,1,1,0,0,129,1,0,0,1,2,0,0,1,3,0,0,1,4,0,0,1,6,0,0,1,8,0,0,1,12,0,0,1,16,0,0,1,24,0,0,1,32,0,0,1,48,0,0,1,64,0,0,1,96,0,0,10,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,0,0,0,0,0,0,42,42,42,32,68,114,97,119,32,73,110,102,111,0,0,0,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,0,0,0,0,0,0,0,68,114,97,119,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,105,110,105,116,105,97,108,105,122,105,110,103,32,118,105,100,101,111,32,109,111,100,101,46,0,0,0,0,0,68,114,97,119,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,105,110,105,116,105,97,108,105,122,105,110,103,32,83,68,76,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,83,68,76,32,69,114,114,111,114,58,32,37,115,10,0,82,73,70,70,0,0,0,0,87,65,86,69,0,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,111,114,109,97,116,32,110,111,116,32,115,117,112,112,111,114,116,101,100,58,32,115,97,109,112,108,101,82,97,116,101,58,37,100,59,32,99,104,97,110,110,101,108,115,58,37,100,59,32,66,80,66,58,37,100,10,0,0,0,0,0,0,100,97,116,97,0,0,0,0,65,117,100,105,111,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,111,112,101,110,105,110,103,32,97,117,100,105,111,46,32,40,52,52,46,49,75,104,122,47,49,54,98,47,50,99,41,46,0,0,0,0,65,117,100,105,111,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,111,112,101,110,105,110,103,32,97,117,100,105,111,46,0,0,0,0,0,0,65,117,100,105,111,95,73,110,105,116,58,32,70,97,105,108,117,114,101,32,105,110,105,116,105,97,108,105,122,105,110,103,32,83,68,76,32,65,117,100,105,111,46,0,0,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,97,105,108,117,114,101,32,111,112,101,110,105,110,103,32,102,105,108,101,46,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,68,65,84,65,32,98,108,111,99,107,32,110,111,116,32,102,111,117,110,100,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,78,111,116,32,80,67,77,32,102,111,114,109,97,116,46,0,0,0,0,0,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,105,108,101,32,116,111,111,32,115,104,111,114,116,46,0,0,0,0,0,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,105,108,101,32,105,115,32,110,111,116,32,87,65,86,69,46,0,0,0,0,0,0,65,117,100,105,111,95,76,111,97,100,83,111,117,110,100,58,32,70,105,108,101,32,105,115,32,110,111,116,32,82,73,70,70,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,95,112,114,111,99,46,46,46,46,46,58,37,54,108,108,100,10,0,0,0,0,0,0,116,95,99,111,108,46,46,46,46,46,46,58,37,54,108,108,100,10,0,0,0,0,0,0,116,95,111,118,101,114,46,46,46,46,46,58,37,54,108,108,100,10,0,0,0,0,0,0,116,95,112,111,115,116,112,114,111,99,46,58,37,54,108,108,100,10,0,0,0,0,0,0,116,95,100,114,97,119,46,46,46,46,46,58,37,54,108,108,100,10,0,0,0,0,0,0,80,114,111,102,105,108,105,110,103,58,58,58,58,58,58,58,58,58,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,98,97,114,114,101,108,46,112,110,103,0,0,0,0,0,0,0,0,0,100,97,116,97,47,98,97,114,114,101,108,50,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,102,108,111,111,114,46,112,110,103,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,102,108,111,111,114,95,108,101,102,116,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,102,108,111,111,114,95,114,105,103,104,116,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,102,108,111,111,114,95,99,101,110,116,101,114,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,99,111,108,117,109,110,46,112,110,103,0,0,0,0,0,0,0,0,0,100,97,116,97,47,99,111,108,117,109,110,95,102,97,100,101,100,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,114,111,99,107,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,108,97,109,112,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,104,111,108,101,95,115,112,105,107,101,100,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,104,111,108,101,95,108,97,118,97,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,112,108,97,121,101,114,95,117,112,46,112,110,103,0,0,0,0,0,0,100,97,116,97,47,112,108,97,121,101,114,95,100,111,119,110,46,112,110,103,0,0,0,0,100,97,116,97,47,112,108,97,121,101,114,95,108,101,102,116,46,112,110,103,0,0,0,0,100,97,116,97,47,112,108,97,121,101,114,95,114,105,103,104,116,46,112,110,103,0,0,0,100,97,116,97,47,115,97,118,101,95,112,111,105,110,116,46,112,110,103,0,0,0,0,0,100,97,116,97,47,115,97,118,101,95,112,111,105,110,116,95,97,99,116,105,118,101,46,112,110,103,0,0,0,0,0,0,100,97,116,97,47,101,120,105,116,95,112,111,105,110,116,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,101,110,100,95,112,111,105,110,116,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,115,104,111,111,116,101,114,95,117,112,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,115,104,111,111,116,101,114,95,100,111,119,110,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,115,104,111,111,116,101,114,95,108,101,102,116,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,115,104,111,111,116,101,114,95,114,105,103,104,116,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,95,117,112,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,95,100,111,119,110,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,95,108,101,102,116,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,97,114,114,111,119,95,114,105,103,104,116,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,102,105,114,101,46,112,110,103,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,112,108,97,121,101,114,95,98,114,111,107,101,110,46,112,110,103,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,72,105,116,95,72,117,114,116,49,48,46,119,97,118,0,0,0,0,0,100,97,116,97,47,80,111,119,101,114,117,112,49,48,46,119,97,118,0,0,0,0,0,0,100,97,116,97,47,80,111,119,101,114,117,112,51,48,46,119,97,118,0,0,0,0,0,0,100,97,116,97,47,76,97,115,101,114,95,83,104,111,111,116,50,46,119,97,118,0,0,0,100,97,116,97,47,69,120,112,108,111,115,105,111,110,50,46,119,97,118,0,0,0,0,0,100,97,116,97,47,72,105,116,95,72,117,114,116,49,54,46,119,97,118,0,0,0,0,0,100,97,116,97,47,69,120,112,108,111,115,105,111,110,49,54,46,119,97,118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,97,116,97,47,108,101,118,101,108,95,37,48,50,100,46,116,120,116,0,0,0,0,0,114,0,0,0,0,0,0,0,37,100,32,37,100,0,0,0,115,97,118,101,115,47,103,97,109,101,46,115,97,118,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,114,101,115,115,32,91,83,112,97,99,101,93,32,116,111,32,83,116,97,114,116,46,0,80,114,101,115,115,32,91,83,112,97,99,101,93,32,116,111,32,67,111,110,116,105,110,117,101,46,0,0,0,0,0,0,80,114,101,115,115,32,91,88,93,32,116,111,32,83,116,97,114,116,46,0,0,0,0,0,66,121,32,75,97,98,108,101,97,100,111,32,40,86,65,82,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,110,103,114,97,116,117,108,97,116,105,111,110,115,32,121,111,117,32,115,97,118,101,100,32,116,104,101,32,107,105,116,116,105,101,33,0,0,0,84,104,97,110,107,115,32,102,111,114,32,112,108,97,121,105,110,103,33,0,0,0,0,0,80,114,101,115,115,32,91,83,112,97,99,101,93,32,116,111,32,84,105,116,108,101,46,0,76,101,118,101,108,58,32,37,100,46,37,100,0,0,0,0,76,101,118,101,108,32,67,111,109,112,108,101,116,101,0,0,76,101,118,101,108,32,67,111,109,112,108,101,116,101,46,0,89,111,117,32,97,114,101,32,100,101,97,100,46,0,0,0,115,97,118,101,115,0,0,0,114,98,0,0,0,0,0,0,119,98,0,0,0,0,0,0,70,83,46,115,121,110,99,102,115,40,102,117,110,99,116,105,111,110,32,40,101,114,114,41,32,123,32,125,41,59,0,0,100,101,98,117,103,0,0,0,71,97,109,101,0,0,0,0,100,97,116,97,47,108,111,103,111,46,112,110,103,0,0,0,100,97,116,97,47,101,110,100,46,112,110,103,0,0,0,0,68,101,98,117,103,32,77,111,100,101,32,65,99,116,105,118,97,116,101,100,33,0,0,0,2,0,0,192,3,0,0,192,4,0,0,192,5,0,0,192,6,0,0,192,7,0,0,192,8,0,0,192,9,0,0,192,10,0,0,192,11,0,0,192,12,0,0,192,13,0,0,192,14,0,0,192,15,0,0,192,16,0,0,192,17,0,0,192,18,0,0,192,19,0,0,192,20,0,0,192,21,0,0,192,22,0,0,192,23,0,0,192,24,0,0,192,25,0,0,192,26,0,0,192,27,0,0,192,28,0,0,192,29,0,0,192,30,0,0,192,31,0,0,192,0,0,0,179,1,0,0,195,2,0,0,195,3,0,0,195,4,0,0,195,5,0,0,195,6,0,0,195,7,0,0,195,8,0,0,195,9,0,0,195,10,0,0,195,11,0,0,195,12,0,0,195,13,0,0,211,14,0,0,195,15,0,0,195,0,0,12,187,1,0,12,195,2,0,12,195,3,0,12,195,4,0,12,211,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,1,2,4,7,3,6,5,0,0,0,0,0,0,0,0,105,110,102,105,110,105,116,121,0,0,0,0,0,0,0,0,95,112,137,0,255,9,47,15,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,0,0,0,0,0,0,40,110,117,108,108,41,0,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,0,0,0,0,0,105,110,102,0,0,0,0,0,73,78,70,0,0,0,0,0,110,97,110,0,0,0,0,0,78,65,78,0,0,0,0,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE+8344);var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}Module["_rand_r"]=_rand_r;var ___rand_seed=allocate([41108891,0,0,0],"i32",ALLOC_STATIC);Module["_rand"]=_rand;Module["_i64Subtract"]=_i64Subtract;function _fabsf(){return Math_abs.apply(null,arguments)}Module["_i64Add"]=_i64Add;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var ___errno_state=0;function ___setErrNo(value){HEAP32[___errno_state>>2]=value;return value}var PATH={splitPath:(function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)}),normalizeArray:(function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up--;up){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){continue}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.buffer.byteLength:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+lengthe2.timestamp){create.push(key);total++}}));var remove=[];Object.keys(dst.entries).forEach((function(key){var e=dst.entries[key];var e2=src.entries[key];if(!e2){remove.push(key);total++}}));if(!total){return callback(null)}var errored=false;var completed=0;var db=src.type==="remote"?src.db:dst.db;var transaction=db.transaction([IDBFS.DB_STORE_NAME],"readwrite");var store=transaction.objectStore(IDBFS.DB_STORE_NAME);function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=total){return callback(null)}}transaction.onerror=(function(){done(this.error)});create.sort().forEach((function(path){if(dst.type==="local"){IDBFS.loadRemoteEntry(store,path,(function(err,entry){if(err)return done(err);IDBFS.storeLocalEntry(path,entry,done)}))}else{IDBFS.loadLocalEntry(path,(function(err,entry){if(err)return done(err);IDBFS.storeRemoteEntry(store,path,entry,done)}))}}));remove.sort().reverse().forEach((function(path){if(dst.type==="local"){IDBFS.removeLocalEntry(path,done)}else{IDBFS.removeRemoteEntry(store,path,done)}}))})};var NODEFS={isWindows:false,staticInit:(function(){NODEFS.isWindows=!!process.platform.match(/^win/)}),mount:(function(mount){assert(ENVIRONMENT_IS_NODE);return NODEFS.createNode(null,"/",NODEFS.getMode(mount.opts.root),0)}),createNode:(function(parent,name,mode,dev){if(!FS.isDir(mode)&&!FS.isFile(mode)&&!FS.isLink(mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=FS.createNode(parent,name,mode);node.node_ops=NODEFS.node_ops;node.stream_ops=NODEFS.stream_ops;return node}),getMode:(function(path){var stat;try{stat=fs.lstatSync(path);if(NODEFS.isWindows){stat.mode=stat.mode|(stat.mode&146)>>1}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsToPermissionStringMap:{0:"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},flagsToPermissionString:(function(flags){if(flags in NODEFS.flagsToPermissionStringMap){return NODEFS.flagsToPermissionStringMap[flags]}else{return flags}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{return fs.readlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsToPermissionString(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){var nbuffer=new Buffer(length);var res;try{res=fs.readSync(stream.nfd,nbuffer,0,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(res>0){for(var i=0;i8){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(ERRNO_CODES.ELOOP)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var accmode=flag&2097155;var perms=["r","w","rw"][accmode];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return ERRNO_CODES.EACCES}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return ERRNO_CODES.EACCES}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return ERRNO_CODES.EACCES}return 0}),mayLookup:(function(dir){return FS.nodePermissions(dir,"x")}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return ERRNO_CODES.EEXIST}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return ERRNO_CODES.ENOTDIR}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return ERRNO_CODES.EBUSY}}else{if(FS.isDir(node.mode)){return ERRNO_CODES.EISDIR}}return 0}),mayOpen:(function(node,flags){if(!node){return ERRNO_CODES.ENOENT}if(FS.isLink(node.mode)){return ERRNO_CODES.ELOOP}else if(FS.isDir(node.mode)){if((flags&2097155)!==0||flags&512){return ERRNO_CODES.EISDIR}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(ERRNO_CODES.EMFILE)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),getStreamFromPtr:(function(ptr){return FS.streams[ptr-1]}),getPtrForStream:(function(stream){return stream?stream.fd+1:0}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}var mounts=FS.getMounts(FS.root.mount);var completed=0;function done(err){if(err){if(!done.errored){done.errored=true;return callback(err)}return}if(++completed>=mounts.length){callback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdev:(function(path,mode,dev){if(typeof dev==="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)}),symlink:(function(oldpath,newpath){var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;var newname=PATH.basename(newpath);var err=FS.mayCreate(parent,newname);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return parent.node_ops.symlink(parent,newname,oldpath)}),rename:(function(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;try{lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node}catch(e){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(ERRNO_CODES.EXDEV)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}relative=PATH.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var err=FS.mayDelete(old_dir,old_name,isdir);if(err){throw new FS.ErrnoError(err)}err=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(err){throw new FS.ErrnoError(err)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}if(new_dir!==old_dir){err=FS.nodePermissions(old_dir,"w");if(err){throw new FS.ErrnoError(err)}}try{if(FS.trackingDelegate["willMovePath"]){FS.trackingDelegate["willMovePath"](old_path,new_path)}}catch(e){console.log("FS.trackingDelegate['willMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name)}catch(e){throw e}finally{FS.hashAddNode(old_node)}try{if(FS.trackingDelegate["onMovePath"])FS.trackingDelegate["onMovePath"](old_path,new_path)}catch(e){console.log("FS.trackingDelegate['onMovePath']('"+old_path+"', '"+new_path+"') threw an exception: "+e.message)}}),rmdir:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,true);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readdir:(function(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node.node_ops.readdir){throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR)}return node.node_ops.readdir(node)}),unlink:(function(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var err=FS.mayDelete(parent,name,false);if(err){if(err===ERRNO_CODES.EISDIR)err=ERRNO_CODES.EPERM;throw new FS.ErrnoError(err)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(ERRNO_CODES.EBUSY)}try{if(FS.trackingDelegate["willDeletePath"]){FS.trackingDelegate["willDeletePath"](path)}}catch(e){console.log("FS.trackingDelegate['willDeletePath']('"+path+"') threw an exception: "+e.message)}parent.node_ops.unlink(parent,name);FS.destroyNode(node);try{if(FS.trackingDelegate["onDeletePath"])FS.trackingDelegate["onDeletePath"](path)}catch(e){console.log("FS.trackingDelegate['onDeletePath']('"+path+"') threw an exception: "+e.message)}}),readlink:(function(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link.node_ops.readlink){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return link.node_ops.readlink(link)}),stat:(function(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;if(!node.node_ops.getattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}return node.node_ops.getattr(node)}),lstat:(function(path){return FS.stat(path,true)}),chmod:(function(path,mode,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{mode:mode&4095|node.mode&~4095,timestamp:Date.now()})}),lchmod:(function(path,mode){FS.chmod(path,mode,true)}),fchmod:(function(fd,mode){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chmod(stream.node,mode)}),chown:(function(path,uid,gid,dontFollow){var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}node.node_ops.setattr(node,{timestamp:Date.now()})}),lchown:(function(path,uid,gid){FS.chown(path,uid,gid,true)}),fchown:(function(fd,uid,gid){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}FS.chown(stream.node,uid,gid)}),truncate:(function(path,len){if(len<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var node;if(typeof path==="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}if(!node.node_ops.setattr){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var err=FS.nodePermissions(node,"w");if(err){throw new FS.ErrnoError(err)}node.node_ops.setattr(node,{size:len,timestamp:Date.now()})}),ftruncate:(function(fd,len){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}FS.truncate(stream.node,len)}),utime:(function(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;node.node_ops.setattr(node,{timestamp:Math.max(atime,mtime)})}),open:(function(path,flags,mode,fd_start,fd_end){if(path===""){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}flags=typeof flags==="string"?FS.modeStringToFlags(flags):flags;mode=typeof mode==="undefined"?438:mode;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;if(typeof path==="object"){node=path}else{path=PATH.normalize(path);try{var lookup=FS.lookupPath(path,{follow:!(flags&131072)});node=lookup.node}catch(e){}}if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(ERRNO_CODES.EEXIST)}}else{node=FS.mknod(path,mode,0)}}if(!node){throw new FS.ErrnoError(ERRNO_CODES.ENOENT)}if(FS.isChrdev(node.mode)){flags&=~512}var err=FS.mayOpen(node,flags);if(err){throw new FS.ErrnoError(err)}if(flags&512){FS.truncate(node,0)}flags&=~(128|512);var stream=FS.createStream({node:node,path:FS.getPath(node),flags:flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false},fd_start,fd_end);if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(Module["logReadFiles"]&&!(flags&1)){if(!FS.readFiles)FS.readFiles={};if(!(path in FS.readFiles)){FS.readFiles[path]=1;Module["printErr"]("read file: "+path)}}try{if(FS.trackingDelegate["onOpenFile"]){var trackingFlags=0;if((flags&2097155)!==1){trackingFlags|=FS.tracking.openFlags.READ}if((flags&2097155)!==0){trackingFlags|=FS.tracking.openFlags.WRITE}FS.trackingDelegate["onOpenFile"](path,trackingFlags)}}catch(e){console.log("FS.trackingDelegate['onOpenFile']('"+path+"', flags) threw an exception: "+e.message)}return stream}),close:(function(stream){try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}}),llseek:(function(stream,offset,whence){if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}return stream.stream_ops.llseek(stream,offset,whence)}),read:(function(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.read){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(ERRNO_CODES.EISDIR)}if(!stream.stream_ops.write){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if(stream.flags&1024){FS.llseek(stream,0,2)}var seeking=true;if(typeof position==="undefined"){position=stream.position;seeking=false}else if(!stream.seekable){throw new FS.ErrnoError(ERRNO_CODES.ESPIPE)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;try{if(stream.path&&FS.trackingDelegate["onWriteToFile"])FS.trackingDelegate["onWriteToFile"](stream.path)}catch(e){console.log("FS.trackingDelegate['onWriteToFile']('"+path+"') threw an exception: "+e.message)}return bytesWritten}),allocate:(function(stream,offset,length){if(offset<0||length<=0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(ERRNO_CODES.EBADF)}if(!FS.isFile(stream.node.mode)&&!FS.isDir(node.mode)){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}if(!stream.stream_ops.allocate){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}stream.stream_ops.allocate(stream,offset,length)}),mmap:(function(stream,buffer,offset,length,position,prot,flags){if((stream.flags&2097155)===1){throw new FS.ErrnoError(ERRNO_CODES.EACCES)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}return stream.stream_ops.mmap(stream,buffer,offset,length,position,prot,flags)}),ioctl:(function(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)}return stream.stream_ops.ioctl(stream,cmd,arg)}),readFile:(function(path,opts){opts=opts||{};opts.flags=opts.flags||"r";opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error('Invalid encoding type "'+opts.encoding+'"')}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret="";var utf8=new Runtime.UTF8Processor;for(var i=0;i>2]=FS.getPtrForStream(stdin);assert(stdin.fd===0,"invalid handle for stdin ("+stdin.fd+")");var stdout=FS.open("/dev/stdout","w");HEAP32[_stdout>>2]=FS.getPtrForStream(stdout);assert(stdout.fd===1,"invalid handle for stdout ("+stdout.fd+")");var stderr=FS.open("/dev/stderr","w");HEAP32[_stderr>>2]=FS.getPtrForStream(stderr);assert(stderr.fd===2,"invalid handle for stderr ("+stderr.fd+")")}),ensureErrnoError:(function(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno){this.errno=errno;for(var key in ERRNO_CODES){if(ERRNO_CODES[key]===errno){this.code=key;break}}this.message=ERRNO_MESSAGES[errno]};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[ERRNO_CODES.ENOENT].forEach((function(code){FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""}))}),staticInit:(function(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices()}),init:(function(input,output,error){assert(!FS.init.initialized,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()}),quit:(function(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=Math.floor(idx/this.chunkSize);return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperty(lazyArray,"length",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})});Object.defineProperty(lazyArray,"chunkSize",{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperty(node,"usedBytes",{get:(function(){return this.contents.length})});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(ERRNO_CODES.EIO)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;ipow2){pow2<<=1;++log2}GL.log2ceilLookup[i]=log2}}),generateTempBuffers:(function(quads){var largestIndex=GL.log2ceilLookup[GL.MAX_TEMP_BUFFER_SIZE];GL.tempVertexBufferCounters1.length=GL.tempVertexBufferCounters2.length=largestIndex+1;GL.tempVertexBuffers1.length=GL.tempVertexBuffers2.length=largestIndex+1;GL.tempIndexBuffers.length=largestIndex+1;for(var i=0;i<=largestIndex;++i){GL.tempIndexBuffers[i]=null;GL.tempVertexBufferCounters1[i]=GL.tempVertexBufferCounters2[i]=0;var ringbufferLength=GL.numTempVertexBuffersPerSize;GL.tempVertexBuffers1[i]=[];GL.tempVertexBuffers2[i]=[];var ringbuffer1=GL.tempVertexBuffers1[i];var ringbuffer2=GL.tempVertexBuffers2[i];ringbuffer1.length=ringbuffer2.length=ringbufferLength;for(var j=0;j>1;var quadIndexes=new Uint16Array(numIndexes);var i=0,v=0;while(1){quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+1;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v;if(i>=numIndexes)break;quadIndexes[i++]=v+2;if(i>=numIndexes)break;quadIndexes[i++]=v+3;if(i>=numIndexes)break;v+=4}GLctx.bufferData(GLctx.ELEMENT_ARRAY_BUFFER,quadIndexes,GLctx.STATIC_DRAW);GLctx.bindBuffer(GLctx.ELEMENT_ARRAY_BUFFER,null)}}),getTempVertexBuffer:function getTempVertexBuffer(sizeBytes){var idx=GL.log2ceilLookup[sizeBytes];var ringbuffer=GL.tempVertexBuffers1[idx];var nextFreeBufferIndex=GL.tempVertexBufferCounters1[idx];GL.tempVertexBufferCounters1[idx]=GL.tempVertexBufferCounters1[idx]+1&GL.numTempVertexBuffersPerSize-1;var vbo=ringbuffer[nextFreeBufferIndex];if(vbo){return vbo}var prevVBO=GLctx.getParameter(GLctx.ARRAY_BUFFER_BINDING);ringbuffer[nextFreeBufferIndex]=GLctx.createBuffer();GLctx.bindBuffer(GLctx.ARRAY_BUFFER,ringbuffer[nextFreeBufferIndex]);GLctx.bufferData(GLctx.ARRAY_BUFFER,1<>2];if(len<0){frag=Pointer_stringify(HEAP32[string+i*4>>2])}else{frag=Pointer_stringify(HEAP32[string+i*4>>2],len)}}else{frag=Pointer_stringify(HEAP32[string+i*4>>2])}source+=frag}return source}),computeImageSize:(function(width,height,sizePerPixel,alignment){function roundedToNextMultipleOf(x,y){return Math.floor((x+y-1)/y)*y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height<=0?0:(height-1)*alignedRowSize+plainRowSize}),get:(function(name_,p,type){if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=="Integer"){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats.length;break;case 35738:ret=5121;break;case 35739:ret=6408;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34068:{ret=0;break};default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case"Float":HEAPF32[p+i*4>>2]=result[i];break;case"Boolean":HEAP8[p+i>>0]=result[i]?1:0;break;default:throw"internal glGet error, bad type: "+type}}return}else if(result instanceof WebGLBuffer||result instanceof WebGLProgram||result instanceof WebGLFramebuffer||result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){ret=result.name|0}else{GL.recordError(1280);return}break;default:GL.recordError(1280);return}}switch(type){case"Integer":HEAP32[p>>2]=ret;break;case"Float":HEAPF32[p>>2]=ret;break;case"Boolean":HEAP8[p>>0]=ret?1:0;break;default:throw"internal glGet error, bad type: "+type}}),getTexPixelData:(function(type,format,width,height,pixels,internalFormat){var sizePerPixel;switch(type){case 5121:switch(format){case 6406:case 6409:sizePerPixel=1;break;case 6407:sizePerPixel=3;break;case 6408:sizePerPixel=4;break;case 6410:sizePerPixel=2;break;default:GL.recordError(1280);return{pixels:null,internalFormat:0}}break;case 5123:if(format==6402){sizePerPixel=2}else{GL.recordError(1280);return{pixels:null,internalFormat:0}}break;case 5125:if(format==6402){sizePerPixel=4}else{GL.recordError(1280);return{pixels:null,internalFormat:0}}break;case 34042:sizePerPixel=4;break;case 33635:case 32819:case 32820:sizePerPixel=2;break;case 5126:switch(format){case 6407:sizePerPixel=3*4;break;case 6408:sizePerPixel=4*4;break;default:GL.recordError(1280);return{pixels:null,internalFormat:0}}internalFormat=GLctx.RGBA;break;default:GL.recordError(1280);return{pixels:null,internalFormat:0}}var bytes=GL.computeImageSize(width,height,sizePerPixel,GL.unpackAlignment);if(type==5121){pixels=HEAPU8.subarray(pixels,pixels+bytes)}else if(type==5126){pixels=HEAPF32.subarray(pixels>>2,pixels+bytes>>2)}else if(type==5125||type==34042){pixels=HEAPU32.subarray(pixels>>2,pixels+bytes>>2)}else{pixels=HEAPU16.subarray(pixels>>1,pixels+bytes>>1)}return{pixels:pixels,internalFormat:internalFormat}}),calcBufLength:function calcBufLength(size,type,stride,count){if(stride>0){return count*stride}var typeSize=GL.byteSizeByType[type-GL.byteSizeByTypeRoot];return size*typeSize*count},usedTempBuffers:[],preDrawHandleClientVertexAttribBindings:function preDrawHandleClientVertexAttribBindings(count){GL.resetBufferBinding=false;for(var i=0;i>8,sock.sport&255]))}return peer}),getPeer:(function(sock,addr,port){return sock.peers[addr+":"+port]}),addPeer:(function(sock,peer){sock.peers[peer.addr+":"+peer.port]=peer}),removePeer:(function(sock,peer){delete sock.peers[peer.addr+":"+peer.port]}),handlePeerEvents:(function(sock,peer){var first=true;var handleOpen=(function(){try{var queued=peer.dgram_send_queue.shift();while(queued){peer.socket.send(queued);queued=peer.dgram_send_queue.shift()}}catch(e){peer.socket.close()}});function handleMessage(data){assert(typeof data!=="string"&&data.byteLength!==undefined);data=new Uint8Array(data);var wasfirst=first;first=false;if(wasfirst&&data.length===10&&data[0]===255&&data[1]===255&&data[2]===255&&data[3]===255&&data[4]==="p".charCodeAt(0)&&data[5]==="o".charCodeAt(0)&&data[6]==="r".charCodeAt(0)&&data[7]==="t".charCodeAt(0)){var newport=data[8]<<8|data[9];SOCKFS.websocket_sock_ops.removePeer(sock,peer);peer.port=newport;SOCKFS.websocket_sock_ops.addPeer(sock,peer);return}sock.recv_queue.push({addr:peer.addr,port:peer.port,data:data})}if(ENVIRONMENT_IS_NODE){peer.socket.on("open",handleOpen);peer.socket.on("message",(function(data,flags){if(!flags.binary){return}handleMessage((new Uint8Array(data)).buffer)}));peer.socket.on("error",(function(){}))}else{peer.socket.onopen=handleOpen;peer.socket.onmessage=function peer_socket_onmessage(event){handleMessage(event.data)}}}),poll:(function(sock){if(sock.type===1&&sock.server){return sock.pending.length?64|1:0}var mask=0;var dest=sock.type===1?SOCKFS.websocket_sock_ops.getPeer(sock,sock.daddr,sock.dport):null;if(sock.recv_queue.length||!dest||dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=64|1}if(!dest||dest&&dest.socket.readyState===dest.socket.OPEN){mask|=4}if(dest&&dest.socket.readyState===dest.socket.CLOSING||dest&&dest.socket.readyState===dest.socket.CLOSED){mask|=16}return mask}),ioctl:(function(sock,request,arg){switch(request){case 21531:var bytes=0;if(sock.recv_queue.length){bytes=sock.recv_queue[0].data.length}HEAP32[arg>>2]=bytes;return 0;default:return ERRNO_CODES.EINVAL}}),close:(function(sock){if(sock.server){try{sock.server.close()}catch(e){}sock.server=null}var peers=Object.keys(sock.peers);for(var i=0;i0){HEAP8[ptr++>>0]=streamObj.ungotten.pop();bytesToRead--;bytesRead++}var err=_read(streamObj.fd,ptr,bytesToRead);if(err==-1){if(streamObj)streamObj.error=true;return 0}bytesRead+=err;if(bytesRead=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;Browser.safeSetTimeout((function(){finish(audio)}),1e4)}else{return fail()}};Module["preloadPlugins"].push(audioPlugin);var canvas=Module["canvas"];function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===canvas||document["mozPointerLockElement"]===canvas||document["webkitPointerLockElement"]===canvas||document["msPointerLockElement"]===canvas}if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(function(){});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(function(){});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",(function(ev){if(!Browser.pointerLock&&canvas.requestPointerLock){canvas.requestPointerLock();ev.preventDefault()}}),false)}}}),createContext:(function(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx)return Module.ctx;var ctx;var errorInfo="?";function onContextCreationError(event){errorInfo=event.statusMessage||errorInfo}try{if(useWebGL){var contextAttributes={antialias:false,alpha:false};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}canvas.addEventListener("webglcontextcreationerror",onContextCreationError,false);try{["experimental-webgl","webgl"].some((function(webglId){return ctx=canvas.getContext(webglId,contextAttributes)}))}finally{canvas.removeEventListener("webglcontextcreationerror",onContextCreationError,false)}}else{ctx=canvas.getContext("2d")}if(!ctx)throw":("}catch(e){Module.print("Could not create canvas: "+[errorInfo,e]);return null}if(useWebGL){canvas.style.backgroundColor="black"}if(setInModule){if(!useWebGL)assert(typeof GLctx==="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GLctx=ctx;Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach((function(callback){callback()}));Browser.init()}return ctx}),destroyContext:(function(canvas,useWebGL,setInModule){}),fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:(function(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer==="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas==="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullScreenChange(){Browser.isFullScreen=false;var canvasContainer=canvas.parentNode;if((document["webkitFullScreenElement"]||document["webkitFullscreenElement"]||document["mozFullScreenElement"]||document["mozFullscreenElement"]||document["fullScreenElement"]||document["fullscreenElement"]||document["msFullScreenElement"]||document["msFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.cancelFullScreen=document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["webkitCancelFullScreen"]||document["msExitFullscreen"]||document["exitFullscreen"]||(function(){});canvas.cancelFullScreen=canvas.cancelFullScreen.bind(document);if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullScreen=true;if(Browser.resizeCanvas)Browser.setFullScreenCanvasSize()}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas)Browser.setWindowedCanvasSize()}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullScreen);Browser.updateCanvasDimensions(canvas)}if(!Browser.fullScreenHandlersInstalled){Browser.fullScreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullScreenChange,false);document.addEventListener("mozfullscreenchange",fullScreenChange,false);document.addEventListener("webkitfullscreenchange",fullScreenChange,false);document.addEventListener("MSFullscreenChange",fullScreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullScreen=canvasContainer["requestFullScreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullScreen"]?(function(){canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"])}):null);canvasContainer.requestFullScreen()}),nextRAF:0,fakeRequestAnimationFrame:(function(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)}),requestAnimationFrame:function requestAnimationFrame(func){if(typeof window==="undefined"){Browser.fakeRequestAnimationFrame(func)}else{if(!window.requestAnimationFrame){window.requestAnimationFrame=window["requestAnimationFrame"]||window["mozRequestAnimationFrame"]||window["webkitRequestAnimationFrame"]||window["msRequestAnimationFrame"]||window["oRequestAnimationFrame"]||Browser.fakeRequestAnimationFrame}window.requestAnimationFrame(func)}},safeCallback:(function(func){return(function(){if(!ABORT)return func.apply(null,arguments)})}),safeRequestAnimationFrame:(function(func){return Browser.requestAnimationFrame((function(){if(!ABORT)func()}))}),safeSetTimeout:(function(func,timeout){Module["noExitRuntime"]=true;return setTimeout((function(){if(!ABORT)func()}),timeout)}),safeSetInterval:(function(func,timeout){Module["noExitRuntime"]=true;return setInterval((function(){if(!ABORT)func()}),timeout)}),getMimetype:(function(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]}),getUserMedia:(function(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)}),getMovementX:(function(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0}),getMovementY:(function(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0}),getMouseWheelDelta:(function(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail;break;case"mousewheel":delta=-event.wheelDelta;break;case"wheel":delta=event.deltaY;break;default:throw"unrecognized mouse wheel event: "+event.type}return Math.max(-1,Math.min(1,delta))}),mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:(function(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!=="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!=="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){Browser.lastTouches[touch.identifier]=Browser.touches[touch.identifier];Browser.touches[touch.identifier]={x:adjustedX,y:adjustedY}}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}}),xhrLoad:(function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)}),asyncLoad:(function(url,onload,onerror,noRunDep){Browser.xhrLoad(url,(function(arrayBuffer){assert(arrayBuffer,'Loading data file "'+url+'" failed (no arrayBuffer).');onload(new Uint8Array(arrayBuffer));if(!noRunDep)removeRunDependency("al "+url)}),(function(event){if(onerror){onerror()}else{throw'Loading data file "'+url+'" failed.'}}));if(!noRunDep)addRunDependency("al "+url)}),resizeListeners:[],updateResizeListeners:(function(){var canvas=Module["canvas"];Browser.resizeListeners.forEach((function(listener){listener(canvas.width,canvas.height)}))}),setCanvasSize:(function(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()}),windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags|8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),setWindowedCanvasSize:(function(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];flags=flags&~8388608;HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=flags}Browser.updateResizeListeners()}),updateCanvasDimensions:(function(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2]=poolPtr;HEAP32[_environ>>2]=envPtr}else{envPtr=HEAP32[_environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in env){if(typeof env[key]==="string"){var line=key+"="+env[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var ENV={};function _getenv(name){if(name===0)return 0;name=Pointer_stringify(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocate(intArrayFromString(ENV[name]),"i8",ALLOC_NORMAL);return _getenv.ret}function _putenv(string){if(string===0){___setErrNo(ERRNO_CODES.EINVAL);return-1}string=Pointer_stringify(string);var splitPoint=string.indexOf("=");if(string===""||string.indexOf("=")===-1){___setErrNo(ERRNO_CODES.EINVAL);return-1}var name=string.slice(0,splitPoint);var value=string.slice(splitPoint+1);if(!(name in ENV)||ENV[name]!==value){ENV[name]=value;___buildEnvironment(ENV)}return 0}function _SDL_RWFromConstMem(mem,size){var id=SDL.rwops.length;SDL.rwops.push({bytes:mem,count:size});return id}function _TTF_RenderText_Solid(font,text,color){text=Pointer_stringify(text)||" ";var fontData=SDL.fonts[font];var w=SDL.estimateTextWidth(fontData,text);var h=fontData.size;var color=SDL.loadColorToCSSRGB(color);var fontString=h+"px "+fontData.name;var surf=SDL.makeSurface(w,h,0,false,"text:"+text);var surfData=SDL.surfaces[surf];surfData.ctx.save();surfData.ctx.fillStyle=color;surfData.ctx.font=fontString;surfData.ctx.textBaseline="top";surfData.ctx.fillText(text,0,0);surfData.ctx.restore();return surf}function _Mix_HaltMusic(){var audio=SDL.music.audio;if(audio){audio.src=audio.src;audio.currentPosition=0;audio.pause()}SDL.music.audio=null;if(SDL.hookMusicFinished){Runtime.dynCall("v",SDL.hookMusicFinished)}return 0}function _Mix_PlayMusic(id,loops){if(SDL.music.audio){if(!SDL.music.audio.paused)Module.printErr("Music is already playing. "+SDL.music.source);SDL.music.audio.pause()}var info=SDL.audios[id];var audio;if(info.webAudio){audio={};audio.resource=info;audio.paused=false;audio.currentPosition=0;audio.play=(function(){SDL.playWebAudio(this)});audio.pause=(function(){SDL.pauseWebAudio(this)})}else if(info.audio){audio=info.audio}audio["onended"]=(function(){if(SDL.music.audio==this)_Mix_HaltMusic()});audio.loop=loops!=0;audio.volume=SDL.music.volume;SDL.music.audio=audio;audio.play();return 0}function _Mix_FreeChunk(id){SDL.audios[id]=null}function _Mix_LoadWAV_RW(rwopsID,freesrc){var rwops=SDL.rwops[rwopsID];if(rwops===undefined)return 0;var filename="";var audio;var webAudio;var bytes;if(rwops.filename!==undefined){filename=PATH.resolve(rwops.filename);var raw=Module["preloadedAudios"][filename];if(!raw){if(raw===null)Module.printErr("Trying to reuse preloaded audio, but freePreloadedMediaOnUse is set!");if(!Module.noAudioDecoding)Runtime.warnOnce("Cannot find preloaded audio "+filename);try{bytes=FS.readFile(filename)}catch(e){Module.printErr("Couldn't find file for: "+filename);return 0}}if(Module["freePreloadedMediaOnUse"]){Module["preloadedAudios"][filename]=null}audio=raw}else if(rwops.bytes!==undefined){if(SDL.webAudioAvailable())bytes=HEAPU8.buffer.slice(rwops.bytes,rwops.bytes+rwops.count);else bytes=HEAPU8.subarray(rwops.bytes,rwops.bytes+rwops.count)}else{return 0}var arrayBuffer=bytes?bytes.buffer||bytes:bytes;var canPlayWithWebAudio=Module["SDL_canPlayWithWebAudio"]===undefined||Module["SDL_canPlayWithWebAudio"](filename,arrayBuffer);if(bytes!==undefined&&SDL.webAudioAvailable()&&canPlayWithWebAudio){audio=undefined;webAudio={};webAudio.onDecodeComplete=[];function onDecodeComplete(data){webAudio.decodedBuffer=data;webAudio.onDecodeComplete.forEach((function(e){e()}));webAudio.onDecodeComplete=undefined}SDL.audioContext["decodeAudioData"](arrayBuffer,onDecodeComplete)}else if(audio===undefined&&bytes){var blob=new Blob([bytes],{type:rwops.mimetype});var url=URL.createObjectURL(blob);audio=new Audio;audio.src=url;audio.mozAudioChannelType="content"}var id=SDL.audios.length;SDL.audios.push({source:filename,audio:audio,webAudio:webAudio});return id}function _Mix_PlayChannel(channel,id,loops){var info=SDL.audios[id];if(!info)return-1;if(!info.audio&&!info.webAudio)return-1;if(channel==-1){for(var i=SDL.channelMinimumNumber;i0&&SDL.rwops[SDL.rwops.length-1]===null){SDL.rwops.pop()}}function _IMG_Load_RW(rwopsID,freeSrc){try{function cleanup(){if(rwops&&freeSrc)_SDL_FreeRW(rwopsID)}function addCleanup(func){var old=cleanup;cleanup=function added_cleanup(){old();func()}}function callStbImage(func,params){var x=Module["_malloc"](4);var y=Module["_malloc"](4);var comp=Module["_malloc"](4);addCleanup((function(){Module["_free"](x);Module["_free"](y);Module["_free"](comp);if(data)Module["_stbi_image_free"](data)}));var data=Module["_"+func].apply(null,params.concat([x,y,comp,0]));if(!data)return null;return{rawData:true,data:data,width:HEAP32[x>>2],height:HEAP32[y>>2],size:HEAP32[x>>2]*HEAP32[y>>2]*HEAP32[comp>>2],bpp:HEAP32[comp>>2]}}var rwops=SDL.rwops[rwopsID];if(rwops===undefined){return 0}var filename=rwops.filename;if(filename===undefined){Runtime.warnOnce("Only file names that have been preloaded are supported for IMG_Load_RW. Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js)");return 0}if(!raw){filename=PATH.resolve(filename);var raw=Module["preloadedImages"][filename];if(!raw){if(raw===null)Module.printErr("Trying to reuse preloaded image, but freePreloadedMediaOnUse is set!");Runtime.warnOnce("Cannot find preloaded image "+filename);Runtime.warnOnce("Cannot find preloaded image "+filename+". Consider using STB_IMAGE=1 if you want synchronous image decoding (see settings.js)");return 0}else if(Module["freePreloadedMediaOnUse"]){Module["preloadedImages"][filename]=null}}var surf=SDL.makeSurface(raw.width,raw.height,0,false,"load:"+filename);var surfData=SDL.surfaces[surf];surfData.ctx.globalCompositeOperation="copy";if(!raw.rawData){surfData.ctx.drawImage(raw,0,0,raw.width,raw.height,0,0,raw.width,raw.height)}else{var imageData=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);if(raw.bpp==4){imageData.data.set(HEAPU8.subarray(raw.data,raw.data+raw.size))}else if(raw.bpp==3){var pixels=raw.size/3;var data=imageData.data;var sourcePtr=raw.data;var destPtr=0;for(var i=0;i>0];data[destPtr++]=HEAPU8[sourcePtr++>>0];data[destPtr++]=HEAPU8[sourcePtr++>>0];data[destPtr++]=255}}else if(raw.bpp==1){var pixels=raw.size;var data=imageData.data;var sourcePtr=raw.data;var destPtr=0;for(var i=0;i>0];data[destPtr++]=value;data[destPtr++]=value;data[destPtr++]=value;data[destPtr++]=255}}else{Module.printErr("cannot handle bpp "+raw.bpp);return 0}surfData.ctx.putImageData(imageData,0,0)}surfData.ctx.globalCompositeOperation="source-over";_SDL_LockSurface(surf);surfData.locked--;if(SDL.GL){surfData.canvas=surfData.ctx=null}return surf}finally{cleanup()}}function _SDL_RWFromFile(_name,mode){var id=SDL.rwops.length;var name=Pointer_stringify(_name);SDL.rwops.push({filename:name,mimetype:Browser.getMimetype(name)});return id}function _IMG_Load(filename){var rwops=_SDL_RWFromFile(filename);var result=_IMG_Load_RW(rwops,1);return result}function _SDL_LockSurface(surf){var surfData=SDL.surfaces[surf];surfData.locked++;if(surfData.locked>1)return 0;if(!surfData.buffer){surfData.buffer=_malloc(surfData.width*surfData.height*4);HEAP32[surf+20>>2]=surfData.buffer}HEAP32[surf+20>>2]=surfData.buffer;if(surf==SDL.screen&&Module.screenIsReadOnly&&surfData.image)return 0;surfData.image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);if(surf==SDL.screen){var data=surfData.image.data;var num=data.length;for(var i=0;i>2],y:HEAP32[rect+4>>2],w:HEAP32[rect+8>>2],h:HEAP32[rect+12>>2]}}),loadColorToCSSRGB:(function(color){var rgba=HEAP32[color>>2];return"rgb("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+")"}),loadColorToCSSRGBA:(function(color){var rgba=HEAP32[color>>2];return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>24&255)/255+")"}),translateColorToCSSRGBA:(function(rgba){return"rgba("+(rgba&255)+","+(rgba>>8&255)+","+(rgba>>16&255)+","+(rgba>>>24)/255+")"}),translateRGBAToCSSRGBA:(function(r,g,b,a){return"rgba("+(r&255)+","+(g&255)+","+(b&255)+","+(a&255)/255+")"}),translateRGBAToColor:(function(r,g,b,a){return r|g<<8|b<<16|a<<24}),makeSurface:(function(width,height,flags,usePageCanvas,source,rmask,gmask,bmask,amask){flags=flags||0;var is_SDL_HWSURFACE=flags&1;var is_SDL_HWPALETTE=flags&2097152;var is_SDL_OPENGL=flags&67108864;var surf=_malloc(60);var pixelFormat=_malloc(44);var bpp=is_SDL_HWPALETTE?1:4;var buffer=0;if(!is_SDL_HWSURFACE&&!is_SDL_OPENGL){buffer=_malloc(width*height*4)}HEAP32[surf>>2]=flags;HEAP32[surf+4>>2]=pixelFormat;HEAP32[surf+8>>2]=width;HEAP32[surf+12>>2]=height;HEAP32[surf+16>>2]=width*bpp;HEAP32[surf+20>>2]=buffer;HEAP32[surf+36>>2]=0;HEAP32[surf+40>>2]=0;HEAP32[surf+44>>2]=Module["canvas"].width;HEAP32[surf+48>>2]=Module["canvas"].height;HEAP32[surf+56>>2]=1;HEAP32[pixelFormat>>2]=0;HEAP32[pixelFormat+4>>2]=0;HEAP8[pixelFormat+8>>0]=bpp*8;HEAP8[pixelFormat+9>>0]=bpp;HEAP32[pixelFormat+12>>2]=rmask||255;HEAP32[pixelFormat+16>>2]=gmask||65280;HEAP32[pixelFormat+20>>2]=bmask||16711680;HEAP32[pixelFormat+24>>2]=amask||4278190080;SDL.GL=SDL.GL||is_SDL_OPENGL;var canvas;if(!usePageCanvas){if(SDL.canvasPool.length>0){canvas=SDL.canvasPool.pop()}else{canvas=document.createElement("canvas")}canvas.width=width;canvas.height=height}else{canvas=Module["canvas"]}var webGLContextAttributes={antialias:SDL.glAttributes[13]!=0&&SDL.glAttributes[14]>1,depth:SDL.glAttributes[6]>0,stencil:SDL.glAttributes[7]>0};var ctx=Browser.createContext(canvas,is_SDL_OPENGL,usePageCanvas,webGLContextAttributes);SDL.surfaces[surf]={width:width,height:height,canvas:canvas,ctx:ctx,surf:surf,buffer:buffer,pixelFormat:pixelFormat,alpha:255,flags:flags,locked:0,usePageCanvas:usePageCanvas,source:source,isFlagSet:(function(flag){return flags&flag})};return surf}),copyIndexedColorData:(function(surfData,rX,rY,rW,rH){if(!surfData.colors){return}var fullWidth=Module["canvas"].width;var fullHeight=Module["canvas"].height;var startX=rX||0;var startY=rY||0;var endX=(rW||fullWidth-startX)+startX;var endY=(rH||fullHeight-startY)+startY;var buffer=surfData.buffer;var data=surfData.image.data;var colors=surfData.colors;for(var y=startY;y>0]*3;var colorOffset=colorBase+x*4;data[colorOffset]=colors[index];data[colorOffset+1]=colors[index+1];data[colorOffset+2]=colors[index+2]}}}),freeSurface:(function(surf){var refcountPointer=surf+56;var refcount=HEAP32[refcountPointer>>2];if(refcount>1){HEAP32[refcountPointer>>2]=refcount-1;return}var info=SDL.surfaces[surf];if(!info.usePageCanvas&&info.canvas)SDL.canvasPool.push(info.canvas);if(info.buffer)_free(info.buffer);_free(info.pixelFormat);_free(surf);SDL.surfaces[surf]=null;if(surf===SDL.screen){SDL.screen=null}}),downFingers:{},savedKeydown:null,receiveEvent:(function(event){function unpressAllPressedKeys(){for(var code in SDL.keyboardMap){SDL.events.push({type:"keyup",keyCode:SDL.keyboardMap[code]})}}switch(event.type){case"touchstart":case"touchmove":{event.preventDefault();var touches=[];if(event.type==="touchstart"){for(var i=0;i0?4:3;var event1={type:"mousedown",button:button,pageX:event.pageX,pageY:event.pageY};SDL.events.push(event1);var event2={type:"mouseup",button:button,pageX:event.pageX,pageY:event.pageY};SDL.events.push(event2);if(event.type=="DOMMouseScroll"){SDL.events.push({type:"wheel",deltaX:0,deltaY:-event.detail});break}else if(event.type=="mousewheel"){SDL.events.push({type:"wheel",deltaX:0,deltaY:event.wheelDelta});break}}else if(event.type=="mousedown"){SDL.DOMButtons[event.button]=1;SDL.events.push({type:"touchstart",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}})}else if(event.type=="mouseup"){if(!SDL.DOMButtons[event.button]){return}SDL.events.push({type:"touchend",touch:{identifier:0,deviceID:-1,pageX:event.pageX,pageY:event.pageY}});SDL.DOMButtons[event.button]=0}if(event.type==="keydown"||event.type==="mousedown"){SDL.canRequestFullscreen=true}else if(event.type==="keyup"||event.type==="mouseup"){if(SDL.isRequestingFullscreen){Module["requestFullScreen"](true,true);SDL.isRequestingFullscreen=false}SDL.canRequestFullscreen=false}if(event.type==="keypress"&&SDL.savedKeydown){SDL.savedKeydown.keypressCharCode=event.charCode;SDL.savedKeydown=null}else if(event.type==="keydown"){SDL.savedKeydown=event}if(event.type!=="keypress"||SDL.textInput){SDL.events.push(event)}break;case"mouseout":for(var i=0;i<3;i++){if(SDL.DOMButtons[i]){SDL.events.push({type:"mouseup",button:i,pageX:event.pageX,pageY:event.pageY});SDL.DOMButtons[i]=0}}event.preventDefault();break;case"focus":SDL.events.push(event);event.preventDefault();break;case"blur":SDL.events.push(event);unpressAllPressedKeys();event.preventDefault();break;case"visibilitychange":SDL.events.push({type:"visibilitychange",visible:!document.hidden});unpressAllPressedKeys();event.preventDefault();break;case"unload":if(Browser.mainLoop.runner){SDL.events.push(event);Browser.mainLoop.runner()}return;case"resize":SDL.events.push(event);if(event.preventDefault){event.preventDefault()}break}if(SDL.events.length>=1e4){Module.printErr("SDL event queue full, dropping events");SDL.events=SDL.events.slice(0,1e4)}SDL.flushEventsToHandler();return}),handleEvent:(function(event){if(event.handled)return;event.handled=true;switch(event.type){case"touchstart":case"touchend":case"touchmove":{Browser.calculateMouseEvent(event);break};case"keydown":case"keyup":{var down=event.type==="keydown";var code=event.keyCode;if(code>=65&&code<=90){code+=32}else{code=SDL.keyCodes[event.keyCode]||event.keyCode}HEAP8[SDL.keyboardState+code>>0]=down;SDL.modState=(HEAP8[SDL.keyboardState+1248>>0]?64|128:0)|(HEAP8[SDL.keyboardState+1249>>0]?1|2:0)|(HEAP8[SDL.keyboardState+1250>>0]?256|512:0);if(down){SDL.keyboardMap[code]=event.keyCode}else{delete SDL.keyboardMap[code]}break};case"mousedown":case"mouseup":if(event.type=="mousedown"){SDL.buttonState|=1<0){if(SDL.makeCEvent(SDL.events.shift(),ptr)!==false)return 1}return 0}else{return SDL.events.length>0}}),makeCEvent:(function(event,ptr){if(typeof event==="number"){_memcpy(ptr,event,28);return}SDL.handleEvent(event);switch(event.type){case"keydown":case"keyup":{var down=event.type==="keydown";var key=event.keyCode;if(key>=65&&key<=90){key+=32}else{key=SDL.keyCodes[event.keyCode]||event.keyCode}var scan;if(key>=1024){scan=key-1024}else{scan=SDL.scanCodes[key]||key}HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+8>>0]=down?1:0;HEAP8[ptr+9>>0]=0;HEAP32[ptr+12>>2]=scan;HEAP32[ptr+16>>2]=key;HEAP16[ptr+20>>1]=SDL.modState;HEAP32[ptr+24>>2]=event.keypressCharCode||key;break};case"keypress":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];var cStr=intArrayFromString(String.fromCharCode(event.charCode));for(var i=0;i>0]=cStr[i]}break};case"mousedown":case"mouseup":case"mousemove":{if(event.type!="mousemove"){var down=event.type==="mousedown";HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP8[ptr+16>>0]=event.button+1;HEAP8[ptr+17>>0]=down?1:0;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY}else{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP32[ptr+8>>2]=0;HEAP32[ptr+12>>2]=0;HEAP32[ptr+16>>2]=SDL.buttonState;HEAP32[ptr+20>>2]=Browser.mouseX;HEAP32[ptr+24>>2]=Browser.mouseY;HEAP32[ptr+28>>2]=Browser.mouseMovementX;HEAP32[ptr+32>>2]=Browser.mouseMovementY}break};case"wheel":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+16>>2]=event.deltaX;HEAP32[ptr+20>>2]=event.deltaY;break};case"touchstart":case"touchend":case"touchmove":{var touch=event.touch;if(!Browser.touches[touch.identifier])break;var w=Module["canvas"].width;var h=Module["canvas"].height;var x=Browser.touches[touch.identifier].x/w;var y=Browser.touches[touch.identifier].y/h;var lx=Browser.lastTouches[touch.identifier].x/w;var ly=Browser.lastTouches[touch.identifier].y/h;var dx=x-lx;var dy=y-ly;if(touch["deviceID"]===undefined)touch.deviceID=SDL.TOUCH_DEFAULT_ID;if(dx===0&&dy===0&&event.type==="touchmove")return false;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=_SDL_GetTicks();tempI64=[touch.deviceID>>>0,(tempDouble=touch.deviceID,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr+8>>2]=tempI64[0],HEAP32[ptr+12>>2]=tempI64[1];tempI64=[touch.identifier>>>0,(tempDouble=touch.identifier,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr+16>>2]=tempI64[0],HEAP32[ptr+20>>2]=tempI64[1];HEAPF32[ptr+24>>2]=x;HEAPF32[ptr+28>>2]=y;HEAPF32[ptr+32>>2]=dx;HEAPF32[ptr+36>>2]=dy;if(touch.force!==undefined){HEAPF32[ptr+40>>2]=touch.force}else{HEAPF32[ptr+40>>2]=event.type=="touchend"?0:1}break};case"unload":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];break};case"resize":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=event.w;HEAP32[ptr+8>>2]=event.h;break};case"joystick_button_up":case"joystick_button_down":{var state=event.type==="joystick_button_up"?0:1;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.button;HEAP8[ptr+6>>0]=state;break};case"joystick_axis_motion":{HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP8[ptr+4>>0]=event.index;HEAP8[ptr+5>>0]=event.axis;HEAP32[ptr+8>>2]=SDL.joystickAxisValueConversion(event.value);break};case"focus":{var SDL_WINDOWEVENT_FOCUS_GAINED=12;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_GAINED;break};case"blur":{var SDL_WINDOWEVENT_FOCUS_LOST=13;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=SDL_WINDOWEVENT_FOCUS_LOST;break};case"visibilitychange":{var SDL_WINDOWEVENT_SHOWN=1;var SDL_WINDOWEVENT_HIDDEN=2;var visibilityEventID=event.visible?SDL_WINDOWEVENT_SHOWN:SDL_WINDOWEVENT_HIDDEN;HEAP32[ptr>>2]=SDL.DOMEventToSDLEvent[event.type];HEAP32[ptr+4>>2]=0;HEAP8[ptr+8>>0]=visibilityEventID;break};default:throw"Unhandled SDL event: "+event.type}}),estimateTextWidth:(function(fontData,text){var h=fontData.size;var fontString=h+"px "+fontData.name;var tempCtx=SDL.ttfContext;tempCtx.save();tempCtx.font=fontString;var ret=tempCtx.measureText(text).width|0;tempCtx.restore();return ret}),allocateChannels:(function(num){if(SDL.numChannels&&SDL.numChannels>=num&&num!=0)return;SDL.numChannels=num;SDL.channels=[];for(var i=0;i>1]/32768}}else if(SDL.audio.format==8){for(var j=0;j>0];channelData[j]=(v>=0?v-128:v+128)/128}}}}),debugSurface:(function(surfData){console.log("dumping surface "+[surfData.surf,surfData.source,surfData.width,surfData.height]);var image=surfData.ctx.getImageData(0,0,surfData.width,surfData.height);var data=image.data;var num=Math.min(surfData.width,surfData.height);for(var i=0;i0}}),queryJoysticks:(function(){for(var joystick in SDL.lastJoystickState){var state=SDL.getGamepad(joystick-1);var prevState=SDL.lastJoystickState[joystick];if(typeof state.timestamp!=="number"||state.timestamp!==prevState.timestamp){var i;for(i=0;ideviceIndex&&deviceIndex>=0){return gamepads[deviceIndex]}return null})};function _SDL_SetVideoMode(width,height,depth,flags){["touchstart","touchend","touchmove","mousedown","mouseup","mousemove","DOMMouseScroll","mousewheel","wheel","mouseout"].forEach((function(event){Module["canvas"].addEventListener(event,SDL.receiveEvent,true)}));var canvas=Module["canvas"];if(width==0&&height==0){width=canvas.width;height=canvas.height}if(!SDL.addedResizeListener){SDL.addedResizeListener=true;Browser.resizeListeners.push((function(w,h){if(!SDL.settingVideoMode){SDL.receiveEvent({type:"resize",w:w,h:h})}}))}if(width!==canvas.width||height!==canvas.height){SDL.settingVideoMode=true;Browser.setCanvasSize(width,height);SDL.settingVideoMode=false}if(SDL.screen){SDL.freeSurface(SDL.screen);assert(!SDL.screen)}if(SDL.GL)flags=flags|67108864;SDL.screen=SDL.makeSurface(width,height,flags,true,"screen");return SDL.screen}function _open(path,oflag,varargs){var mode=HEAP32[varargs>>2];path=Pointer_stringify(path);try{var stream=FS.open(path,oflag,mode);return stream.fd}catch(e){FS.handleFSError(e);return-1}}function _fopen(filename,mode){var flags;mode=Pointer_stringify(mode);if(mode[0]=="r"){if(mode.indexOf("+")!=-1){flags=2}else{flags=0}}else if(mode[0]=="w"){if(mode.indexOf("+")!=-1){flags=2}else{flags=1}flags|=64;flags|=512}else if(mode[0]=="a"){if(mode.indexOf("+")!=-1){flags=2}else{flags=1}flags|=64;flags|=1024}else{___setErrNo(ERRNO_CODES.EINVAL);return 0}var fd=_open(filename,flags,allocate([511,0,0,0],"i32",ALLOC_STACK));return fd===-1?0:FS.getPtrForStream(FS.getStream(fd))}function _sqrtf(){return Math_sqrt.apply(null,arguments)}function _glGetString(name_){if(GL.stringCache[name_])return GL.stringCache[name_];var ret;switch(name_){case 7936:case 7937:case 7938:ret=allocate(intArrayFromString(GLctx.getParameter(name_)),"i8",ALLOC_NORMAL);break;case 7939:var exts=GLctx.getSupportedExtensions();var gl_exts=[];for(i in exts){gl_exts.push(exts[i]);gl_exts.push("GL_"+exts[i])}ret=allocate(intArrayFromString(gl_exts.join(" ")),"i8",ALLOC_NORMAL);break;case 35724:ret=allocate(intArrayFromString("OpenGL ES GLSL 1.00 (WebGL)"),"i8",ALLOC_NORMAL);break;default:GL.recordError(1280);return 0}GL.stringCache[name_]=ret;return ret}function _send(fd,buf,len,flags){var sock=SOCKFS.getSocket(fd);if(!sock){___setErrNo(ERRNO_CODES.EBADF);return-1}return _write(fd,buf,len)}function _pwrite(fildes,buf,nbyte,offset){var stream=FS.getStream(fildes);if(!stream){___setErrNo(ERRNO_CODES.EBADF);return-1}try{var slab=HEAP8;return FS.write(stream,slab,buf,nbyte,offset)}catch(e){FS.handleFSError(e);return-1}}function _write(fildes,buf,nbyte){var stream=FS.getStream(fildes);if(!stream){___setErrNo(ERRNO_CODES.EBADF);return-1}try{var slab=HEAP8;return FS.write(stream,slab,buf,nbyte)}catch(e){FS.handleFSError(e);return-1}}Module["_strlen"]=_strlen;function _fputs(s,stream){var fd=_fileno(stream);return _write(fd,s,_strlen(s))}function _fputc(c,stream){var chr=unSign(c&255);HEAP8[_fputc.ret>>0]=chr;var fd=_fileno(stream);var ret=_write(fd,_fputc.ret,1);if(ret==-1){var streamObj=FS.getStreamFromPtr(stream);if(streamObj)streamObj.error=true;return-1}else{return chr}}function _puts(s){var stdout=HEAP32[_stdout>>2];var ret=_fputs(s,stdout);if(ret<0){return ret}else{var newlineRet=_fputc(10,stdout);return newlineRet<0?-1:ret+1}}function _fwrite(ptr,size,nitems,stream){var bytesToWrite=nitems*size;if(bytesToWrite==0)return 0;var fd=_fileno(stream);var bytesWritten=_write(fd,ptr,bytesToWrite);if(bytesWritten==-1){var streamObj=FS.getStreamFromPtr(stream);if(streamObj)streamObj.error=true;return 0}else{return Math.floor(bytesWritten/size)}}function _mknod(path,mode,dev){path=Pointer_stringify(path);switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:___setErrNo(ERRNO_CODES.EINVAL);return-1}try{FS.mknod(path,mode,dev);return 0}catch(e){FS.handleFSError(e);return-1}}function _mkdir(path,mode){path=Pointer_stringify(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);try{FS.mkdir(path,mode,0);return 0}catch(e){FS.handleFSError(e);return-1}}function _ftell(stream){stream=FS.getStreamFromPtr(stream);if(!stream){___setErrNo(ERRNO_CODES.EBADF);return-1}if(FS.isChrdev(stream.node.mode)){___setErrNo(ERRNO_CODES.ESPIPE);return-1}else{return stream.position}}function _glEnableVertexAttribArray(index){var cb=GL.clientBuffers[index];cb.enabled=true;GLctx.enableVertexAttribArray(index)}function _glBindBuffer(target,buffer){var bufferObj=buffer?GL.buffers[buffer]:null;if(target==GLctx.ARRAY_BUFFER){GL.currArrayBuffer=buffer}else if(target==GLctx.ELEMENT_ARRAY_BUFFER){GL.currElementArrayBuffer=buffer}GLctx.bindBuffer(target,bufferObj)}function _SDL_InitSubSystem(flags){return 0}function _glCompileShader(shader){GLctx.compileShader(GL.shaders[shader])}Module["_bitshift64Lshr"]=_bitshift64Lshr;Module["_memset"]=_memset;function _glBufferData(target,size,data,usage){switch(usage){case 35041:case 35042:usage=35040;break;case 35045:case 35046:usage=35044;break;case 35049:case 35050:usage=35048;break}if(!data){GLctx.bufferData(target,size,usage)}else{GLctx.bufferData(target,HEAPU8.subarray(data,data+size),usage)}}var _BDtoIHigh=true;function _gettimeofday(ptr){var now=Date.now();HEAP32[ptr>>2]=Math.floor(now/1e3);HEAP32[ptr+4>>2]=Math.floor((now-1e3*Math.floor(now/1e3))*1e3);return 0}function _SDL_WM_SetCaption(title,icon){title=title&&Pointer_stringify(title);icon=icon&&Pointer_stringify(icon)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort("cannot dynamically allocate, sbrk now has control")})}var ret=DYNAMICTOP;if(bytes!=0)self.alloc(bytes);return ret}Module["_bitshift64Shl"]=_bitshift64Shl;function _glGenTextures(n,textures){for(var i=0;i>2]=id}}function _SDL_GetError(){if(!SDL.errorMessage){SDL.errorMessage=allocate(intArrayFromString("unknown SDL-emscripten error"),"i8",ALLOC_NORMAL)}return SDL.errorMessage}function ___errno_location(){return ___errno_state}var _BItoD=true;function _SDL_OpenAudio(desired,obtained){try{SDL.audio={freq:HEAPU32[desired>>2],format:HEAPU16[desired+4>>1],channels:HEAPU8[desired+6>>0],samples:HEAPU16[desired+8>>1],callback:HEAPU32[desired+16>>2],userdata:HEAPU32[desired+20>>2],paused:true,timer:null};if(SDL.audio.format==8){SDL.audio.silence=128}else if(SDL.audio.format==32784){SDL.audio.silence=0}else{throw"Invalid SDL audio format "+SDL.audio.format+"!"}if(SDL.audio.freq<=0){throw"Unsupported sound frequency "+SDL.audio.freq+"!"}else if(SDL.audio.freq<=22050){SDL.audio.freq=22050}else if(SDL.audio.freq<=32e3){SDL.audio.freq=32e3}else if(SDL.audio.freq<=44100){SDL.audio.freq=44100}else if(SDL.audio.freq<=48e3){SDL.audio.freq=48e3}else if(SDL.audio.freq<=96e3){SDL.audio.freq=96e3}else{throw"Unsupported sound frequency "+SDL.audio.freq+"!"}if(SDL.audio.channels==0){SDL.audio.channels=1}else if(SDL.audio.channels<0||SDL.audio.channels>32){throw"Unsupported number of audio channels for SDL audio: "+SDL.audio.channels+"!"}else if(SDL.audio.channels!=1&&SDL.audio.channels!=2){console.log("Warning: Using untested number of audio channels "+SDL.audio.channels)}if(SDL.audio.samples<128||SDL.audio.samples>524288){throw"Unsupported audio callback buffer size "+SDL.audio.samples+"!"}else if((SDL.audio.samples&SDL.audio.samples-1)!=0){throw"Audio callback buffer size "+SDL.audio.samples+" must be a power-of-two!"}var totalSamples=SDL.audio.samples*SDL.audio.channels;SDL.audio.bytesPerSample=SDL.audio.format==8||SDL.audio.format==32776?1:2;SDL.audio.bufferSize=totalSamples*SDL.audio.bytesPerSample;SDL.audio.buffer=_malloc(SDL.audio.bufferSize);SDL.audio.numSimultaneouslyQueuedBuffers=Module["SDL_numSimultaneouslyQueuedBuffers"]||3;SDL.audio.caller=function SDL_audio_caller(){if(!SDL.audio){return}Runtime.dynCall("viii",SDL.audio.callback,[SDL.audio.userdata,SDL.audio.buffer,SDL.audio.bufferSize]);SDL.audio.pushAudio(SDL.audio.buffer,SDL.audio.bufferSize)};SDL.audio.audioOutput=new Audio;if(typeof SDL.audio.audioOutput["mozSetup"]==="function"){SDL.audio.audioOutput["mozSetup"](SDL.audio.channels,SDL.audio.freq);SDL.audio.mozBuffer=new Float32Array(totalSamples);SDL.audio.nextPlayTime=0;SDL.audio.pushAudio=function SDL_audio_pushAudio(ptr,size){--SDL.audio.numAudioTimersPending;var mozBuffer=SDL.audio.mozBuffer;if(SDL.audio.format==32784){for(var i=0;i>1]/32768}}else if(SDL.audio.format==8){for(var i=0;i>0];mozBuffer[i]=(v>=0?v-128:v+128)/128}}SDL.audio.audioOutput["mozWriteAudio"](mozBuffer);var curtime=Date.now()/1e3-SDL.audio.startTime;var playtime=Math.max(curtime,SDL.audio.nextPlayTime);var buffer_duration=SDL.audio.samples/SDL.audio.freq;SDL.audio.nextPlayTime=playtime+buffer_duration;SDL.audio.timer=Browser.safeSetTimeout(SDL.audio.caller,1e3*(playtime-curtime));++SDL.audio.numAudioTimersPending;if(SDL.audio.numAudioTimersPending>2]=SDL.audio.freq;HEAP16[obtained+4>>1]=SDL.audio.format;HEAP8[obtained+6>>0]=SDL.audio.channels;HEAP8[obtained+7>>0]=SDL.audio.silence;HEAP16[obtained+8>>1]=SDL.audio.samples;HEAP32[obtained+16>>2]=SDL.audio.callback;HEAP32[obtained+20>>2]=SDL.audio.userdata}SDL.allocateChannels(32)}catch(e){console.log('Initializing SDL audio threw an exception: "'+e.toString()+'"! Continuing without audio.');SDL.audio=null;SDL.allocateChannels(0);if(obtained){HEAP32[obtained>>2]=0;HEAP16[obtained+4>>1]=0;HEAP8[obtained+6>>0]=0;HEAP8[obtained+7>>0]=0;HEAP16[obtained+8>>1]=0;HEAP32[obtained+16>>2]=0;HEAP32[obtained+20>>2]=0}}if(!SDL.audio){return-1}return 0}function _fmod(x,y){return x%y}function _fmodl(){return _fmod.apply(null,arguments)}function _glCreateShader(shaderType){var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id}function _glUniform1i(location,v0){location=GL.uniforms[location];GLctx.uniform1i(location,v0)}function _glTexImage2D(target,level,internalFormat,width,height,border,format,type,pixels){if(pixels){var data=GL.getTexPixelData(type,format,width,height,pixels,internalFormat);pixels=data.pixels;internalFormat=data.internalFormat}else{pixels=null}GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels)}function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 79:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}function _fgetc(stream){var streamObj=FS.getStreamFromPtr(stream);if(!streamObj)return-1;if(streamObj.eof||streamObj.error)return-1;var ret=_fread(_fgetc.ret,1,1,stream);if(ret==0){return-1}else if(ret==-1){streamObj.error=true;return-1}else{return HEAPU8[_fgetc.ret>>0]}}var _SItoF=true;function _srand(seed){HEAP32[___rand_seed>>2]=seed}var _BDtoILow=true;function _glGetProgramiv(program,pname,p){if(pname==35716){HEAP32[p>>2]=GLctx.getProgramInfoLog(GL.programs[program]).length+1}else if(pname==35719){var ptable=GL.programInfos[program];if(ptable){HEAP32[p>>2]=ptable.maxUniformLength;return}else if(program>2]=ptable.maxAttributeLength;return}else if(program>2]=GLctx.getProgramParameter(GL.programs[program],pname)}}function _glVertexAttribPointer(index,size,type,normalized,stride,ptr){var cb=GL.clientBuffers[index];if(!GL.currArrayBuffer){cb.size=size;cb.type=type;cb.normalized=normalized;cb.stride=stride;cb.ptr=ptr;cb.clientside=true;return}cb.clientside=false;GLctx.vertexAttribPointer(index,size,type,normalized,stride,ptr)}function _SDL_GetKeyboardState(numKeys){if(numKeys){HEAP32[numKeys>>2]=65536}return SDL.keyboardState}function _abort(){Module["abort"]()}function _glGetUniformLocation(program,name){name=Pointer_stringify(name);var arrayOffset=0;if(name.indexOf("]",name.length-1)!==-1){var ls=name.lastIndexOf("[");var arrayIndex=name.slice(ls+1,-1);if(arrayIndex.length>0){arrayOffset=parseInt(arrayIndex);if(arrayOffset<0){return-1}}name=name.slice(0,ls)}var ptable=GL.programInfos[program];if(!ptable){return-1}var utable=ptable.uniforms;var uniformInfo=utable[name];if(uniformInfo&&arrayOffset>2]=Browser.mouseX;if(y)HEAP32[y>>2]=Browser.mouseY;return SDL.buttonState}function _glEnable(x0){GLctx.enable(x0)}function _fabs(){return Math_abs.apply(null,arguments)}function _lseek(fildes,offset,whence){var stream=FS.getStream(fildes);if(!stream){___setErrNo(ERRNO_CODES.EBADF);return-1}try{return FS.llseek(stream,offset,whence)}catch(e){FS.handleFSError(e);return-1}}function _fseek(stream,offset,whence){var fd=_fileno(stream);var ret=_lseek(fd,offset,whence);if(ret==-1){return-1}stream=FS.getStreamFromPtr(stream);stream.eof=false;return 0}function _glDrawArrays(mode,first,count){GL.preDrawHandleClientVertexAttribBindings(first+count);GLctx.drawArrays(mode,first,count);GL.postDrawHandleClientVertexAttribBindings()}function _glGenBuffers(n,buffers){for(var i=0;i>2]=id}}function _glDeleteProgram(program){var program=GL.programs[program];GLctx.deleteProgram(program);program.name=0;GL.programs[program]=null;GL.programInfos[program]=null}function _glGetAttribLocation(program,name){program=GL.programs[program];name=Pointer_stringify(name);return GLctx.getAttribLocation(program,name)}function _rewind(stream){_fseek(stream,0,0);var streamObj=FS.getStreamFromPtr(stream);if(streamObj)streamObj.error=false}function _glAttachShader(program,shader){GLctx.attachShader(GL.programs[program],GL.shaders[shader])}function _glDeleteShader(shader){GLctx.deleteShader(GL.shaders[shader]);GL.shaders[shader]=null}function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}function _glCreateProgram(){var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;GL.programs[id]=program;return id}function _glPixelStorei(pname,param){if(pname==3333){GL.packAlignment=param}else if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)}function _emscripten_set_main_loop(func,fps,simulateInfiniteLoop,arg){Module["noExitRuntime"]=true;assert(!Browser.mainLoop.scheduler,"there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one, if you want to");Browser.mainLoop.runner=function Browser_mainLoop_runner(){if(ABORT)return;if(Browser.mainLoop.queue.length>0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}console.log('main loop blocker "'+blocker.name+'" took '+(Date.now()-start)+" ms");Browser.mainLoop.updateStatus();setTimeout(Browser.mainLoop.runner,0);return}if(Browser.mainLoop.shouldPause){Browser.mainLoop.paused=true;Browser.mainLoop.shouldPause=false;return}GL.newRenderingFrameStarted();if(Browser.mainLoop.method==="timeout"&&Module.ctx){Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!");Browser.mainLoop.method=""}Browser.mainLoop.runIter((function(){if(typeof arg!=="undefined"){Runtime.dynCall("vi",func,[arg])}else{Runtime.dynCall("v",func)}}));if(Browser.mainLoop.shouldPause){Browser.mainLoop.paused=true;Browser.mainLoop.shouldPause=false;return}Browser.mainLoop.scheduler()};if(fps&&fps>0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler(){setTimeout(Browser.mainLoop.runner,1e3/fps)};Browser.mainLoop.method="timeout"}else{Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}Browser.mainLoop.scheduler();if(simulateInfiniteLoop){throw"SimulateInfiniteLoop"}}function _time(ptr){var ret=Math.floor(Date.now()/1e3);if(ptr){HEAP32[ptr>>2]=ret}return ret}function _stime(when){___setErrNo(ERRNO_CODES.EPERM);return-1}function _strerror_r(errnum,strerrbuf,buflen){if(errnum in ERRNO_MESSAGES){if(ERRNO_MESSAGES[errnum].length>buflen-1){return ___setErrNo(ERRNO_CODES.ERANGE)}else{var msg=ERRNO_MESSAGES[errnum];writeAsciiToMemory(msg,strerrbuf);return 0}}else{return ___setErrNo(ERRNO_CODES.EINVAL)}}function _strerror(errnum){if(!_strerror.buffer)_strerror.buffer=_malloc(256);_strerror_r(errnum,_strerror.buffer,256);return _strerror.buffer}function __reallyNegative(x){return x<0||x===0&&1/x===-Infinity}function __formatString(format,varargs){var textIndex=format;var argIndex=0;function getNextArg(type){var ret;if(type==="double"){ret=(HEAP32[tempDoublePtr>>2]=HEAP32[varargs+argIndex>>2],HEAP32[tempDoublePtr+4>>2]=HEAP32[varargs+(argIndex+4)>>2],+HEAPF64[tempDoublePtr>>3])}else if(type=="i64"){ret=[HEAP32[varargs+argIndex>>2],HEAP32[varargs+(argIndex+4)>>2]]}else{type="i32";ret=HEAP32[varargs+argIndex>>2]}argIndex+=Runtime.getNativeFieldSize(type);return ret}var ret=[];var curr,next,currArg;while(1){var startTextIndex=textIndex;curr=HEAP8[textIndex>>0];if(curr===0)break;next=HEAP8[textIndex+1>>0];if(curr==37){var flagAlwaysSigned=false;var flagLeftAlign=false;var flagAlternative=false;var flagZeroPad=false;var flagPadSign=false;flagsLoop:while(1){switch(next){case 43:flagAlwaysSigned=true;break;case 45:flagLeftAlign=true;break;case 35:flagAlternative=true;break;case 48:if(flagZeroPad){break flagsLoop}else{flagZeroPad=true;break};case 32:flagPadSign=true;break;default:break flagsLoop}textIndex++;next=HEAP8[textIndex+1>>0]}var width=0;if(next==42){width=getNextArg("i32");textIndex++;next=HEAP8[textIndex+1>>0]}else{while(next>=48&&next<=57){width=width*10+(next-48);textIndex++;next=HEAP8[textIndex+1>>0]}}var precisionSet=false,precision=-1;if(next==46){precision=0;precisionSet=true;textIndex++;next=HEAP8[textIndex+1>>0];if(next==42){precision=getNextArg("i32");textIndex++}else{while(1){var precisionChr=HEAP8[textIndex+1>>0];if(precisionChr<48||precisionChr>57)break;precision=precision*10+(precisionChr-48);textIndex++}}next=HEAP8[textIndex+1>>0]}if(precision<0){precision=6;precisionSet=false}var argSize;switch(String.fromCharCode(next)){case"h":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==104){textIndex++;argSize=1}else{argSize=2}break;case"l":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==108){textIndex++;argSize=8}else{argSize=4}break;case"L":case"q":case"j":argSize=8;break;case"z":case"t":case"I":argSize=4;break;default:argSize=null}if(argSize)textIndex++;next=HEAP8[textIndex+1>>0];switch(String.fromCharCode(next)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":{var signed=next==100||next==105;argSize=argSize||4;var currArg=getNextArg("i"+argSize*8);var origArg=currArg;var argText;if(argSize==8){currArg=Runtime.makeBigInt(currArg[0],currArg[1],next==117)}if(argSize<=4){var limit=Math.pow(256,argSize)-1;currArg=(signed?reSign:unSign)(currArg&limit,argSize*8)}var currAbsArg=Math.abs(currArg);var prefix="";if(next==100||next==105){if(argSize==8&&i64Math)argText=i64Math.stringify(origArg[0],origArg[1],null);else argText=reSign(currArg,8*argSize,1).toString(10)}else if(next==117){if(argSize==8&&i64Math)argText=i64Math.stringify(origArg[0],origArg[1],true);else argText=unSign(currArg,8*argSize,1).toString(10);currArg=Math.abs(currArg)}else if(next==111){argText=(flagAlternative?"0":"")+currAbsArg.toString(8)}else if(next==120||next==88){prefix=flagAlternative&&currArg!=0?"0x":"";if(argSize==8&&i64Math){if(origArg[1]){argText=(origArg[1]>>>0).toString(16);var lower=(origArg[0]>>>0).toString(16);while(lower.length<8)lower="0"+lower;argText+=lower}else{argText=(origArg[0]>>>0).toString(16)}}else if(currArg<0){currArg=-currArg;argText=(currAbsArg-1).toString(16);var buffer=[];for(var i=0;i=0){if(flagAlwaysSigned){prefix="+"+prefix}else if(flagPadSign){prefix=" "+prefix}}if(argText.charAt(0)=="-"){prefix="-"+prefix;argText=argText.substr(1)}while(prefix.length+argText.lengthexponent&&exponent>=-4){next=(next==103?"f":"F").charCodeAt(0);precision-=exponent+1}else{next=(next==103?"e":"E").charCodeAt(0);precision--}effectivePrecision=Math.min(precision,20)}if(next==101||next==69){argText=currArg.toExponential(effectivePrecision);if(/[eE][-+]\d$/.test(argText)){argText=argText.slice(0,-1)+"0"+argText.slice(-1)}}else if(next==102||next==70){argText=currArg.toFixed(effectivePrecision);if(currArg===0&&__reallyNegative(currArg)){argText="-"+argText}}var parts=argText.split("e");if(isGeneral&&!flagAlternative){while(parts[0].length>1&&parts[0].indexOf(".")!=-1&&(parts[0].slice(-1)=="0"||parts[0].slice(-1)==".")){parts[0]=parts[0].slice(0,-1)}}else{if(flagAlternative&&argText.indexOf(".")==-1)parts[0]+=".";while(precision>effectivePrecision++)parts[0]+="0"}argText=parts[0]+(parts.length>1?"e"+parts[1]:"");if(next==69)argText=argText.toUpperCase();if(currArg>=0){if(flagAlwaysSigned){argText="+"+argText}else if(flagPadSign){argText=" "+argText}}}while(argText.length>0])}}else{ret=ret.concat(intArrayFromString("(null)".substr(0,argLength),true))}if(flagLeftAlign){while(argLength0){ret.push(32)}if(!flagLeftAlign)ret.push(getNextArg("i8"));break};case"n":{var ptr=getNextArg("i32*");HEAP32[ptr>>2]=ret.length;break};case"%":{ret.push(curr);break};default:{for(var i=startTextIndex;i>0])}}}textIndex+=2}else{ret.push(curr);textIndex+=1}}return ret}function _fprintf(stream,format,varargs){var result=__formatString(format,varargs);var stack=Runtime.stackSave();var ret=_fwrite(allocate(result,"i8",ALLOC_STACK),1,result.length,stream);Runtime.stackRestore(stack);return ret}function _printf(format,varargs){var stdout=HEAP32[_stdout>>2];return _fprintf(stdout,format,varargs)}function _glUniformMatrix4fv(location,count,transpose,value){location=GL.uniforms[location];var view;if(count===1){view=GL.miniTempBufferViews[15];for(var i=0;i<16;i++){view[i]=HEAPF32[value+i*4>>2]}}else{view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(location,transpose,view)}function _SDL_GL_SwapBuffers(){if(Browser.doSwapBuffers)Browser.doSwapBuffers()}function _glBufferSubData(target,offset,size,data){GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))}function _SDL_PollEvent(ptr){return SDL.pollEvent(ptr)}function _SDL_Init(initFlags){SDL.startTime=Date.now();SDL.initFlags=initFlags;if(!Module["doNotCaptureKeyboard"]){document.addEventListener("keydown",SDL.receiveEvent);document.addEventListener("keyup",SDL.receiveEvent);document.addEventListener("keypress",SDL.receiveEvent);window.addEventListener("focus",SDL.receiveEvent);window.addEventListener("blur",SDL.receiveEvent);document.addEventListener("visibilitychange",SDL.receiveEvent)}if(initFlags&512){addEventListener("gamepadconnected",(function(){}))}window.addEventListener("unload",SDL.receiveEvent);SDL.keyboardState=_malloc(65536);_memset(SDL.keyboardState,0,65536);SDL.DOMEventToSDLEvent["keydown"]=768;SDL.DOMEventToSDLEvent["keyup"]=769;SDL.DOMEventToSDLEvent["keypress"]=771;SDL.DOMEventToSDLEvent["mousedown"]=1025;SDL.DOMEventToSDLEvent["mouseup"]=1026;SDL.DOMEventToSDLEvent["mousemove"]=1024;SDL.DOMEventToSDLEvent["wheel"]=1027;SDL.DOMEventToSDLEvent["touchstart"]=1792;SDL.DOMEventToSDLEvent["touchend"]=1793;SDL.DOMEventToSDLEvent["touchmove"]=1794;SDL.DOMEventToSDLEvent["unload"]=256;SDL.DOMEventToSDLEvent["resize"]=28673;SDL.DOMEventToSDLEvent["visibilitychange"]=512;SDL.DOMEventToSDLEvent["focus"]=512;SDL.DOMEventToSDLEvent["blur"]=512;SDL.DOMEventToSDLEvent["joystick_axis_motion"]=1536;SDL.DOMEventToSDLEvent["joystick_button_down"]=1539;SDL.DOMEventToSDLEvent["joystick_button_up"]=1540;return 0}function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}function _llvm_trap(){abort("trap!")}function _copysign(a,b){return __reallyNegative(a)===__reallyNegative(b)?a:-a}function _copysignl(){return _copysign.apply(null,arguments)}function _glGetShaderiv(shader,pname,p){if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(!log)log="(unknown error)";HEAP32[p>>2]=log.length+1}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}}FS.staticInit();__ATINIT__.unshift({func:(function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()})});__ATMAIN__.push({func:(function(){FS.ignorePermissions=false})});__ATEXIT__.push({func:(function(){FS.quit()})});Module["FS_createFolder"]=FS.createFolder;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createLink"]=FS.createLink;Module["FS_createDevice"]=FS.createDevice;___errno_state=Runtime.staticAlloc(4);HEAP32[___errno_state>>2]=0;__ATINIT__.unshift({func:(function(){TTY.init()})});__ATEXIT__.push({func:(function(){TTY.shutdown()})});TTY.utf8=new Runtime.UTF8Processor;if(ENVIRONMENT_IS_NODE){var fs=require("fs");NODEFS.staticInit()}var GLctx;GL.init();__ATINIT__.push({func:(function(){SOCKFS.root=FS.mount(SOCKFS,{},null)})});Module["requestFullScreen"]=function Module_requestFullScreen(lockPointer,resizeCanvas){Browser.requestFullScreen(lockPointer,resizeCanvas)};Module["requestAnimationFrame"]=function Module_requestAnimationFrame(func){Browser.requestAnimationFrame(func)};Module["setCanvasSize"]=function Module_setCanvasSize(width,height,noUpdates){Browser.setCanvasSize(width,height,noUpdates)};Module["pauseMainLoop"]=function Module_pauseMainLoop(){Browser.mainLoop.pause()};Module["resumeMainLoop"]=function Module_resumeMainLoop(){Browser.mainLoop.resume()};Module["getUserMedia"]=function Module_getUserMedia(){Browser.getUserMedia()};___buildEnvironment(ENV);_fputc.ret=allocate([0],"i8",ALLOC_STATIC);_fgetc.ret=allocate([0],"i8",ALLOC_STATIC);STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+5242880;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE>2];i=a+4|0;j=+g[i>>2];k=b+4|0;l=e*.5;e=+g[c>>2];m=c+4|0;n=+g[m>>2];o=d+4|0;p=e*+g[d>>2]+n*+g[o>>2];q=h*e+j*n-p;r=(h+ +g[b>>2])*e+(j+ +g[k>>2])*n-p;do{if(!(q<-9999999747378752.0e-20|r>9999999747378752.0e-20)){p=q/(q-r);g[f>>2]=p;n=+g[m>>2];j=-0.0-n;e=+g[c>>2];h=+g[d>>2];s=+g[o>>2];t=(p*+g[b>>2]+ +g[a>>2])*j+(p*+g[k>>2]+ +g[i>>2])*e;if((l*n+h)*j+e*(e*(-0.0-l)+s)-t>0.0){break}if(t-((l*j+h)*j+e*(l*e+s))>0.0){break}else{u=1}return u|0}}while(0);u=0;return u|0}function cl(a,b,d,e,f,h,i){a=a|0;b=+b;d=+d;e=+e;f=+f;h=+h;i=+i;var j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;j=+g[2416];k=+g[2414];l=+g[2412];m=+g[2410];n=a+8|0;o=c[n>>2]|0;p=a+4|0;q=c[p>>2]|0;if((o|0)>(q|0)){r=q;s=c[a>>2]|0}else{c[n>>2]=o<<1;t=db(o<<6)|0;o=t;u=a|0;v=c[u>>2]|0;w=q<<5;dg(t|0,v|0,w)|0;dc(v);c[u>>2]=o;r=c[p>>2]|0;s=o}o=r<<3;g[s+(o<<2)>>2]=b;g[s+((o|1)<<2)>>2]=d;g[s+((o|2)<<2)>>2]=e;g[s+((o|3)<<2)>>2]=0.0;g[s+((o|4)<<2)>>2]=j;g[s+((o|5)<<2)>>2]=k;g[s+((o|6)<<2)>>2]=l;g[s+((o|7)<<2)>>2]=m;o=(c[p>>2]|0)+1|0;c[p>>2]=o;s=c[n>>2]|0;if((s|0)>(o|0)){x=o;y=c[a>>2]|0}else{c[n>>2]=s<<1;r=db(s<<6)|0;s=r;u=a|0;v=c[u>>2]|0;w=o<<5;dg(r|0,v|0,w)|0;dc(v);c[u>>2]=s;x=c[p>>2]|0;y=s}s=x<<3;g[y+(s<<2)>>2]=f;g[y+((s|1)<<2)>>2]=d;g[y+((s|2)<<2)>>2]=i;g[y+((s|3)<<2)>>2]=0.0;g[y+((s|4)<<2)>>2]=j;g[y+((s|5)<<2)>>2]=k;g[y+((s|6)<<2)>>2]=l;g[y+((s|7)<<2)>>2]=m;s=(c[p>>2]|0)+1|0;c[p>>2]=s;y=c[n>>2]|0;if((y|0)>(s|0)){z=s;A=c[a>>2]|0}else{c[n>>2]=y<<1;x=db(y<<6)|0;y=x;u=a|0;v=c[u>>2]|0;w=s<<5;dg(x|0,v|0,w)|0;dc(v);c[u>>2]=y;z=c[p>>2]|0;A=y}y=z<<3;g[A+(y<<2)>>2]=f;g[A+((y|1)<<2)>>2]=h;g[A+((y|2)<<2)>>2]=i;g[A+((y|3)<<2)>>2]=1.0;g[A+((y|4)<<2)>>2]=j;g[A+((y|5)<<2)>>2]=k;g[A+((y|6)<<2)>>2]=l;g[A+((y|7)<<2)>>2]=m;y=(c[p>>2]|0)+1|0;c[p>>2]=y;A=c[n>>2]|0;if((A|0)>(y|0)){B=y;C=c[a>>2]|0}else{c[n>>2]=A<<1;z=db(A<<6)|0;A=z;u=a|0;v=c[u>>2]|0;w=y<<5;dg(z|0,v|0,w)|0;dc(v);c[u>>2]=A;B=c[p>>2]|0;C=A}A=B<<3;g[C+(A<<2)>>2]=f;g[C+((A|1)<<2)>>2]=h;g[C+((A|2)<<2)>>2]=i;g[C+((A|3)<<2)>>2]=1.0;g[C+((A|4)<<2)>>2]=j;g[C+((A|5)<<2)>>2]=k;g[C+((A|6)<<2)>>2]=l;g[C+((A|7)<<2)>>2]=m;A=(c[p>>2]|0)+1|0;c[p>>2]=A;C=c[n>>2]|0;if((C|0)>(A|0)){D=A;E=c[a>>2]|0}else{c[n>>2]=C<<1;B=db(C<<6)|0;C=B;u=a|0;v=c[u>>2]|0;w=A<<5;dg(B|0,v|0,w)|0;dc(v);c[u>>2]=C;D=c[p>>2]|0;E=C}C=D<<3;g[E+(C<<2)>>2]=b;g[E+((C|1)<<2)>>2]=h;g[E+((C|2)<<2)>>2]=e;g[E+((C|3)<<2)>>2]=1.0;g[E+((C|4)<<2)>>2]=j;g[E+((C|5)<<2)>>2]=k;g[E+((C|6)<<2)>>2]=l;g[E+((C|7)<<2)>>2]=m;C=(c[p>>2]|0)+1|0;c[p>>2]=C;E=c[n>>2]|0;if((E|0)>(C|0)){F=C;G=c[a>>2]|0;H=F<<3;I=G+(H<<2)|0;g[I>>2]=b;J=H|1;K=G+(J<<2)|0;g[K>>2]=d;L=H|2;M=G+(L<<2)|0;g[M>>2]=e;N=H|3;O=G+(N<<2)|0;g[O>>2]=0.0;P=H|4;Q=G+(P<<2)|0;g[Q>>2]=j;R=H|5;S=G+(R<<2)|0;g[S>>2]=k;T=H|6;U=G+(T<<2)|0;g[U>>2]=l;V=H|7;W=G+(V<<2)|0;g[W>>2]=m;X=c[p>>2]|0;Y=X+1|0;c[p>>2]=Y;return}else{c[n>>2]=E<<1;n=db(E<<6)|0;E=n;D=a|0;a=c[D>>2]|0;u=C<<5;dg(n|0,a|0,u)|0;dc(a);c[D>>2]=E;F=c[p>>2]|0;G=E;H=F<<3;I=G+(H<<2)|0;g[I>>2]=b;J=H|1;K=G+(J<<2)|0;g[K>>2]=d;L=H|2;M=G+(L<<2)|0;g[M>>2]=e;N=H|3;O=G+(N<<2)|0;g[O>>2]=0.0;P=H|4;Q=G+(P<<2)|0;g[Q>>2]=j;R=H|5;S=G+(R<<2)|0;g[S>>2]=k;T=H|6;U=G+(T<<2)|0;g[U>>2]=l;V=H|7;W=G+(V<<2)|0;g[W>>2]=m;X=c[p>>2]|0;Y=X+1|0;c[p>>2]=Y;return}}function cm(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,aZ=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bA=0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0;j=i;i=i+72|0;k=j|0;l=j+24|0;m=j+48|0;if(g>>>0<2>>>0){n=53;i=j;return n|0}o=a[f]|0;p=o&255;q=d[f+1|0]|0;if((((p<<8|q)>>>0)%31|0|0)!=0){n=24;i=j;return n|0}if((p&15|0)!=8|o<<24>>24<0){n=25;i=j;return n|0}if((q&32|0)!=0){n=26;i=j;return n|0}q=g-2|0;o=c[h+8>>2]|0;if((o|0)==0){p=c[e>>2]|0;r=q<<3;s=l|0;t=l+4|0;u=l+8|0;v=m|0;w=m+4|0;x=m+8|0;y=l+16|0;z=m+16|0;A=m+12|0;B=g-4|0;C=k|0;D=k+4|0;E=k+8|0;F=k+16|0;G=k+12|0;H=l+12|0;I=g-6|0;J=0;K=0;L=c[b>>2]|0;M=p;N=p;L49:while(1){p=J+2|0;if(p>>>0>=r>>>0){O=52;P=L;Q=M;break}R=d[f+((J>>>3)+2)|0]|0;S=J&7;T=J+1|0;U=J+3|0;V=(d[f+((p>>>3)+2)|0]|0)>>>((p&7)>>>0)<<1&2|(d[f+((T>>>3)+2)|0]|0)>>>((T&7)>>>0)&1;if((V|0)==0){if((U&7|0)==0){W=U}else{T=U;while(1){p=T+1|0;if((p&7|0)==0){W=p;break}else{T=p}}}T=W>>>3;if(T>>>0>=I>>>0){O=52;P=L;Q=M;break}p=(d[f+(T+3)|0]|0)<<8|(d[f+(T+2)|0]|0);X=T+4|0;if((((d[f+(T+5)|0]|0)<<8|(d[f+X|0]|0))+p|0)!=65535){O=21;P=L;Q=M;break}Y=p+K|0;do{if(Y>>>0>>0){Z=L;_=M;$=N}else{if(N>>>0>=Y>>>0){Z=L;_=Y;$=N;break}aa=Y<<1;ab=dd(L,aa)|0;if((ab|0)==0){O=83;P=L;Q=M;break L49}else{Z=ab;_=Y;$=aa}}}while(0);aa=p+X|0;if(aa>>>0>q>>>0){O=23;P=Z;Q=_;break}do{if((p|0)==0){ac=X;ad=K}else{ab=K+1|0;a[Z+K|0]=a[f+(T+6)|0]|0;if(p>>>0>1>>>0){ae=1;af=X;ag=ab}else{ac=aa;ad=ab;break}while(1){ab=ae+1|0;a[Z+ag|0]=a[f+(af+3)|0]|0;if(ab>>>0

>>0){ae=ab;af=af+1|0;ag=ag+1|0}else{ac=aa;ad=Y;break}}}}while(0);ah=ad;ai=ac<<3;aj=Z;ak=_;al=$}else if((V|0)==3){O=20;P=L;Q=M;break}else{c[s>>2]=0;c[t>>2]=0;c[u>>2]=0;c[v>>2]=0;c[w>>2]=0;c[x>>2]=0;do{if((V|0)==1){Y=db(1152)|0;aa=Y;if((Y|0)!=0){p=0;while(1){c[aa+(p<<2)>>2]=8;X=p+1|0;if(X>>>0<144>>>0){p=X}else{am=144;break}}do{c[aa+(am<<2)>>2]=9;am=am+1|0;}while(am>>>0<256>>>0);c[Y+1024>>2]=7;c[Y+1028>>2]=7;c[Y+1032>>2]=7;c[Y+1036>>2]=7;c[Y+1040>>2]=7;c[Y+1044>>2]=7;c[Y+1048>>2]=7;c[Y+1052>>2]=7;c[Y+1056>>2]=7;c[Y+1060>>2]=7;c[Y+1064>>2]=7;c[Y+1068>>2]=7;c[Y+1072>>2]=7;c[Y+1076>>2]=7;c[Y+1080>>2]=7;c[Y+1084>>2]=7;c[Y+1088>>2]=7;c[Y+1092>>2]=7;c[Y+1096>>2]=7;c[Y+1100>>2]=7;c[Y+1104>>2]=7;c[Y+1108>>2]=7;c[Y+1112>>2]=7;c[Y+1116>>2]=7;c[Y+1120>>2]=8;c[Y+1124>>2]=8;c[Y+1128>>2]=8;c[Y+1132>>2]=8;c[Y+1136>>2]=8;c[Y+1140>>2]=8;c[Y+1144>>2]=8;c[Y+1148>>2]=8;p=db(1152)|0;X=p;c[u>>2]=X;if((p|0)!=0){p=0;do{c[X+(p<<2)>>2]=c[aa+(p<<2)>>2];p=p+1|0;}while(p>>>0<288>>>0);c[y>>2]=288;c[H>>2]=15;cz(l)|0}dc(Y)}p=db(128)|0;aa=p;if((p|0)==0){an=U;ao=120;break}else{ap=0}do{c[aa+(ap<<2)>>2]=5;ap=ap+1|0;}while(ap>>>0<32>>>0);Y=db(128)|0;X=Y;c[x>>2]=X;if((Y|0)!=0){c[X>>2]=c[aa>>2];c[Y+4>>2]=c[p+4>>2];c[Y+8>>2]=c[p+8>>2];X=Y+12|0;Y=p+12|0;dg(X|0,Y|0,116)|0;c[z>>2]=32;c[A>>2]=15;cz(m)|0}dc(p);an=U;ao=120}else if((V|0)==2){Y=U>>>3;if(Y>>>0>=B>>>0){aq=49;ar=0;as=0;at=K;au=U;av=L;aw=M;ax=N;break}X=J+4|0;T=J+5|0;ab=J+6|0;ay=J+7|0;az=(d[f+((X>>>3)+2)|0]|0)>>>((X&7)>>>0)<<1&2|(d[f+(Y+2)|0]|0)>>>((U&7)>>>0)&1|(d[f+((T>>>3)+2)|0]|0)>>>((T&7)>>>0)<<2&4|(d[f+((ab>>>3)+2)|0]|0)>>>((ab&7)>>>0)<<3&8|(d[f+((ay>>>3)+2)|0]|0)>>>((ay&7)>>>0)<<4&16;ay=J+8|0;ab=az+257|0;T=J+9|0;Y=J+10|0;X=J+11|0;aA=J+12|0;aB=(d[f+((T>>>3)+2)|0]|0)>>>((T&7)>>>0)<<1&2|(d[f+((ay>>>3)+2)|0]|0)>>>((ay&7)>>>0)&1|(d[f+((Y>>>3)+2)|0]|0)>>>((Y&7)>>>0)<<2&4|(d[f+((X>>>3)+2)|0]|0)>>>((X&7)>>>0)<<3&8|(d[f+((aA>>>3)+2)|0]|0)>>>((aA&7)>>>0)<<4&16;aA=J+13|0;X=J+14|0;Y=J+15|0;ay=J+16|0;T=J+17|0;aC=((d[f+((X>>>3)+2)|0]|0)>>>((X&7)>>>0)<<1&2|(d[f+((aA>>>3)+2)|0]|0)>>>((aA&7)>>>0)&1|(d[f+((Y>>>3)+2)|0]|0)>>>((Y&7)>>>0)<<2&4|(d[f+((ay>>>3)+2)|0]|0)>>>((ay&7)>>>0)<<3&8)+4|0;c[C>>2]=0;c[D>>2]=0;c[E>>2]=0;ay=db(76)|0;Y=ay;L93:do{if((ay|0)==0){aD=0;aE=0;aF=83;aG=T}else{aA=0;X=T;while(1){if(aA>>>0>>0){aH=X+1|0;aI=X+2|0;c[Y+(c[10944+(aA<<2)>>2]<<2)>>2]=(d[f+((aH>>>3)+2)|0]|0)>>>((aH&7)>>>0)<<1&2|(d[f+((X>>>3)+2)|0]|0)>>>((X&7)>>>0)&1|(d[f+((aI>>>3)+2)|0]|0)>>>((aI&7)>>>0)<<2&4;aJ=X+3|0}else{c[Y+(c[10944+(aA<<2)>>2]<<2)>>2]=0;aJ=X}aI=aA+1|0;if(aI>>>0<19>>>0){aA=aI;X=aJ}else{break}}X=db(76)|0;aA=X;c[E>>2]=aA;if((X|0)==0){aD=0;aE=0;aF=83;aG=aJ;break}c[aA>>2]=c[Y>>2];aA=X+4|0;X=ay+4|0;dg(aA|0,X|0,72)|0;c[F>>2]=19;c[G>>2]=7;X=cz(k)|0;if((X|0)!=0){aD=0;aE=0;aF=X;aG=aJ;break}X=db(1152)|0;aA=X;aI=db(128)|0;aH=aI;if((X|0)==0|(aI|0)==0){aD=aH;aE=aA;aF=83;aG=aJ;break}dh(X|0,0,1152);dh(aI|0,0,128);aK=az+258|0;aL=aB+aK|0;if((aL|0)==0){aD=aH;aE=aA;aF=64;aG=aJ;break}aM=c[C>>2]|0;aN=c[F>>2]|0;aO=-258-az|0;aP=0;aQ=0;aR=aJ;L105:while(1){aS=aP;aT=aR;while(1){aU=0;aV=aT;while(1){if(aV>>>0>=r>>>0){aW=aV;ao=111;break L105}aX=c[aM+(((d[f+((aV>>>3)+2)|0]|0)>>>((aV&7)>>>0)&1|aU<<1)<<2)>>2]|0;aY=aV+1|0;if(aX>>>0>>0){break}aZ=aX-aN|0;if(aZ>>>0>>0){aU=aZ;aV=aY}else{aW=aY;ao=111;break L105}}if(aX>>>0>=16>>>0){break}if(aS>>>0>>0){c[aA+(aS<<2)>>2]=aX}else{c[aH+(aS-ab<<2)>>2]=aX}aU=aS+1|0;if(aU>>>0>>0){aS=aU;aT=aY}else{a_=aQ;a$=aY;break L105}}L120:do{if((aX|0)==16){if(aY>>>0>=r>>>0){aD=aH;aE=aA;aF=50;aG=aY;break L93}if((aS|0)==0){aD=aH;aE=aA;aF=54;aG=aY;break L93}aT=aV+2|0;aU=aV+3|0;aZ=((d[f+((aT>>>3)+2)|0]|0)>>>((aT&7)>>>0)<<1&2|(d[f+((aY>>>3)+2)|0]|0)>>>((aY&7)>>>0)&1)+3|0;if(aS>>>0>>0){a0=aA+(aS-1<<2)|0}else{a0=aH+(aO+aS<<2)|0}aT=c[a0>>2]|0;a1=0;a2=aS;while(1){if(a2>>>0>=aL>>>0){a3=13;a4=a2;a5=aU;break L120}if(a2>>>0>>0){c[aA+(a2<<2)>>2]=aT}else{c[aH+(a2-ab<<2)>>2]=aT}a6=a2+1|0;a7=a1+1|0;if(a7>>>0>>0){a1=a7;a2=a6}else{a3=aQ;a4=a6;a5=aU;break}}}else if((aX|0)==17){if(aY>>>0>=r>>>0){aD=aH;aE=aA;aF=50;aG=aY;break L93}aU=aV+2|0;a2=aV+3|0;a1=aV+4|0;aZ=((d[f+((aU>>>3)+2)|0]|0)>>>((aU&7)>>>0)<<1&2|(d[f+((aY>>>3)+2)|0]|0)>>>((aY&7)>>>0)&1|(d[f+((a2>>>3)+2)|0]|0)>>>((a2&7)>>>0)<<2&4)+3|0;a2=0;aU=aS;while(1){if(aU>>>0>=aL>>>0){a3=14;a4=aU;a5=a1;break L120}if(aU>>>0>>0){c[aA+(aU<<2)>>2]=0}else{c[aH+(aU-ab<<2)>>2]=0}aT=aU+1|0;a6=a2+1|0;if(a6>>>0>>0){a2=a6;aU=aT}else{a3=aQ;a4=aT;a5=a1;break}}}else if((aX|0)==18){if(aY>>>0>=r>>>0){aD=aH;aE=aA;aF=50;aG=aY;break L93}a1=aV+2|0;aU=aV+3|0;a2=aV+4|0;aZ=aV+5|0;aT=aV+6|0;a6=aV+7|0;a7=aV+8|0;a8=((d[f+((a1>>>3)+2)|0]|0)>>>((a1&7)>>>0)<<1&2|(d[f+((aY>>>3)+2)|0]|0)>>>((aY&7)>>>0)&1|(d[f+((aU>>>3)+2)|0]|0)>>>((aU&7)>>>0)<<2&4|(d[f+((a2>>>3)+2)|0]|0)>>>((a2&7)>>>0)<<3&8|(d[f+((aZ>>>3)+2)|0]|0)>>>((aZ&7)>>>0)<<4&16|(d[f+((aT>>>3)+2)|0]|0)>>>((aT&7)>>>0)<<5&32|(d[f+((a6>>>3)+2)|0]|0)>>>((a6&7)>>>0)<<6&64)+11|0;if((a8|0)==0){a3=aQ;a4=aS;a5=a7;break}else{a9=0;ba=aS}while(1){if(ba>>>0>=aL>>>0){a3=15;a4=ba;a5=a7;break L120}if(ba>>>0>>0){c[aA+(ba<<2)>>2]=0}else{c[aH+(ba-ab<<2)>>2]=0}a6=ba+1|0;aT=a9+1|0;if(aT>>>0>>0){a9=aT;ba=a6}else{a3=aQ;a4=a6;a5=a7;break}}}else if((aX|0)==(-1|0)){aW=aY;ao=111;break L105}else{aD=aH;aE=aA;aF=16;aG=aY;break L93}}while(0);if(a4>>>0>>0){aP=a4;aQ=a3;aR=a5}else{a_=a3;a$=a5;break}}if((ao|0)==111){ao=0;aD=aH;aE=aA;aF=aW>>>0>r>>>0?10:11;aG=aW;break}if((a_|0)!=0){aD=aH;aE=aA;aF=a_;aG=a$;break}if((c[X+1024>>2]|0)==0){aD=aH;aE=aA;aF=64;aG=a$;break}aR=db(1152)|0;aQ=aR;c[u>>2]=aQ;if((aR|0)==0){aD=aH;aE=aA;aF=83;aG=a$;break}c[aQ>>2]=c[aA>>2];c[aR+4>>2]=c[X+4>>2];aQ=aR+8|0;aR=X+8|0;dg(aQ|0,aR|0,1144)|0;c[y>>2]=288;c[H>>2]=15;aR=cz(l)|0;if((aR|0)!=0){aD=aH;aE=aA;aF=aR;aG=a$;break}aR=db(128)|0;aQ=aR;c[x>>2]=aQ;if((aR|0)==0){aD=aH;aE=aA;aF=83;aG=a$;break}c[aQ>>2]=c[aH>>2];c[aR+4>>2]=c[aI+4>>2];aQ=aR+8|0;aR=aI+8|0;dg(aQ|0,aR|0,120)|0;c[z>>2]=32;c[A>>2]=15;aD=aH;aE=aA;aF=cz(m)|0;aG=a$}}while(0);dc(ay);dc(aE);dc(aD);dc(c[C>>2]|0);dc(c[D>>2]|0);dc(c[E>>2]|0);if((aF|0)==0){an=aG;ao=120;break}aq=aF;ar=c[s>>2]|0;as=c[v>>2]|0;at=K;au=aG;av=L;aw=M;ax=N}else{an=U;ao=120}}while(0);L164:do{if((ao|0)==120){ao=0;U=c[s>>2]|0;V=c[y>>2]|0;ab=c[v>>2]|0;az=c[z>>2]|0;aB=K;Y=an;aC=L;T=M;p=N;L166:while(1){aa=Y;bb=aC;bc=T;bd=p;while(1){aR=0;aQ=aa;while(1){if(aQ>>>0>=r>>>0){be=aQ;break L166}bf=c[U+(((d[f+((aQ>>>3)+2)|0]|0)>>>((aQ&7)>>>0)&1|aR<<1)<<2)>>2]|0;bg=aQ+1|0;if(bf>>>0>>0){break}aP=bf-V|0;if(aP>>>0>>0){aR=aP;aQ=bg}else{be=bg;break L166}}if(bf>>>0<256>>>0){break}aQ=bf-257|0;if(aQ>>>0>=29>>>0){ao=156;break L166}if(bg>>>0>=r>>>0){aq=51;ar=U;as=ab;at=aB;au=bg;av=bb;aw=bc;ax=bd;break L164}aR=c[9672+(aQ<<2)>>2]|0;aP=c[9792+(aQ<<2)>>2]|0;if((bf-265|0)>>>0>19>>>0){bh=0;bi=bg}else{aQ=aR>>>0>1>>>0;aL=0;aO=0;aK=bg;while(1){bj=(((d[f+((aK>>>3)+2)|0]|0)>>>((aK&7)>>>0)&1)<>>0>>0){aL=bj;aO=aN;aK=aK+1|0}else{break}}bh=bj;bi=(aQ?aR:1)+bg|0}bk=bh+aP|0;aK=0;aO=bi;while(1){if(aO>>>0>=r>>>0){bl=aO;ao=142;break L166}bm=c[ab+(((d[f+((aO>>>3)+2)|0]|0)>>>((aO&7)>>>0)&1|aK<<1)<<2)>>2]|0;bn=aO+1|0;if(bm>>>0>>0){break}aL=bm-az|0;if(aL>>>0>>0){aK=aL;aO=bn}else{bl=bn;ao=142;break L166}}if(bm>>>0>29>>>0){bl=bn;ao=142;break L166}if(bn>>>0>=r>>>0){aq=51;ar=U;as=ab;at=aB;au=bn;av=bb;aw=bc;ax=bd;break L164}aO=c[10704+(bm<<2)>>2]|0;aK=c[10824+(bm<<2)>>2]|0;if(bm>>>0<4>>>0){bo=0;bp=bn}else{aP=aO>>>0>1>>>0;aR=0;aQ=0;aL=bn;while(1){bq=(((d[f+((aL>>>3)+2)|0]|0)>>>((aL&7)>>>0)&1)<>>0>>0){aR=bq;aQ=aN;aL=aL+1|0}else{break}}bo=bq;bp=(aP?aO:1)+bn|0}br=bo+aK|0;if(br>>>0>aB>>>0){aq=52;ar=U;as=ab;at=aB;au=bp;av=bb;aw=bc;ax=bd;break L164}bs=bk+aB|0;do{if(bs>>>0>>0){bt=bb;bu=bc;bv=bd}else{aL=bs<<1;if(bd>>>0>=aL>>>0){bt=bb;bu=aL;bv=bd;break}aQ=bs<<2;aR=dd(bb,aQ)|0;if((aR|0)==0){aq=83;ar=U;as=ab;at=aB;au=bp;av=bb;aw=bc;ax=bd;break L164}else{bt=aR;bu=aL;bv=aQ}}}while(0);if((bk|0)==0){aa=bp;bb=bt;bc=bu;bd=bv}else{ao=154;break}}if((ao|0)==154){ao=0;aa=aB-br|0;a[bt+aB|0]=a[bt+aa|0]|0;aA=aB+1|0;if(bk>>>0>1>>>0){bw=1;bx=aA;by=aa}else{aB=aA;Y=bp;aC=bt;T=bu;p=bv;continue}while(1){aA=by+1|0;aH=aA>>>0>>0?aA:aa;aA=bw+1|0;a[bt+bx|0]=a[bt+aH|0]|0;if(aA>>>0>>0){bw=aA;bx=bx+1|0;by=aH}else{aB=bs;Y=bp;aC=bt;T=bu;p=bv;continue L166}}}do{if(aB>>>0>>0){bz=bb;bA=bc;bB=bd}else{aa=(aB<<1)+2|0;if(bd>>>0>=aa>>>0){bz=bb;bA=aa;bB=bd;break}aH=aa<<1;aA=dd(bb,aH)|0;if((aA|0)==0){aq=83;ar=U;as=ab;at=aB;au=bg;av=bb;aw=bc;ax=bd;break L164}else{bz=aA;bA=aa;bB=aH}}}while(0);a[bz+aB|0]=bf&255;aB=aB+1|0;Y=bg;aC=bz;T=bA;p=bB}if((ao|0)==142){ao=0;if((bf|0)!=-1){aq=18;ar=U;as=ab;at=aB;au=bl;av=bb;aw=bc;ax=bd;break}aq=bl>>>0>r>>>0?10:11;ar=U;as=ab;at=aB;au=bl;av=bb;aw=bc;ax=bd;break}else if((ao|0)==156){ao=0;if((bf|0)==256){aq=0;ar=U;as=ab;at=aB;au=bg;av=bb;aw=bc;ax=bd;break}else{be=bg}}aq=be>>>0>r>>>0?10:11;ar=U;as=ab;at=aB;au=be;av=bb;aw=bc;ax=bd}}while(0);dc(ar);dc(c[t>>2]|0);dc(c[u>>2]|0);dc(as);dc(c[w>>2]|0);dc(c[x>>2]|0);if((aq|0)==0){ah=at;ai=au;aj=av;ak=aw;al=ax}else{O=aq;P=av;Q=aw;break}}if((R&1<>>0>=ah>>>0){O=0;P=aj;Q=ah;break}N=dd(aj,ah<<1)|0;M=(N|0)==0;O=M?83:0;P=M?aj:N;Q=M?ak:ah}}while(0);c[b>>2]=P;c[e>>2]=Q;bC=O}else{bC=b_[o&1](b,e,f+2|0,q,h)|0}if((bC|0)!=0){n=bC;i=j;return n|0}do{if((c[h>>2]|0)==0){bC=(d[f+(g-3)|0]|0)<<16|(d[f+(g-4)|0]|0)<<24|(d[f+q|0]|0)<<8|(d[f+(g-1)|0]|0);o=c[e>>2]|0;if((o|0)==0){bD=1;bE=0}else{O=c[b>>2]|0;Q=o;o=1;P=0;while(1){ah=Q>>>0>5550>>>0?5550:Q;ak=Q-ah|0;if((ah|0)==0){bF=O;bG=o;bH=P}else{aj=O;al=o;ao=P;M=ah;while(1){bI=(d[aj]|0)+al|0;bJ=bI+ao|0;N=M-1|0;if((N|0)==0){break}else{aj=aj+1|0;al=bI;ao=bJ;M=N}}bF=O+(Q>>>0<5550>>>0?Q:5550)|0;bG=bI;bH=bJ}bK=(bG>>>0)%65521|0;bL=(bH>>>0)%65521|0;if((Q|0)==(ah|0)){break}else{O=bF;Q=ak;o=bK;P=bL}}bD=bK;bE=bL<<16}if((bD|bE|0)==(bC|0)){break}else{n=58}i=j;return n|0}}while(0);n=0;i=j;return n|0}function cn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=b+64|0;g=b+60|0;h=dd(c[f>>2]|0,(c[g>>2]<<2)+4|0)|0;i=b+68|0;b=dd(c[i>>2]|0,(c[g>>2]<<2)+4|0)|0;if((h|0)==0|(b|0)==0){dc(h);dc(b);j=83;return j|0}k=h;h=c[g>>2]|0;c[g>>2]=h+1;c[f>>2]=k;c[i>>2]=b;b=k+(h<<2)|0;c[b>>2]=0;h=db(1)|0;if((h|0)!=0){a[h]=0;c[b>>2]=h}h=(c[f>>2]|0)+((c[g>>2]|0)-1<<2)|0;f=df(d|0)|0;b=dd(c[h>>2]|0,f+1|0)|0;do{if((b|0)!=0){a[b+f|0]=0;c[h>>2]=b;if((f|0)==0){break}a[b]=a[d]|0;if(f>>>0>1>>>0){l=1}else{break}do{a[(c[h>>2]|0)+l|0]=a[d+l|0]|0;l=l+1|0;}while(l>>>0>>0)}}while(0);f=(c[i>>2]|0)+((c[g>>2]|0)-1<<2)|0;c[f>>2]=0;l=db(1)|0;if((l|0)!=0){a[l]=0;c[f>>2]=l}l=(c[i>>2]|0)+((c[g>>2]|0)-1<<2)|0;g=df(e|0)|0;i=dd(c[l>>2]|0,g+1|0)|0;if((i|0)==0){j=0;return j|0}a[i+g|0]=0;c[l>>2]=i;if((g|0)==0){j=0;return j|0}a[i]=a[e]|0;if(g>>>0>1>>>0){m=1}else{j=0;return j|0}while(1){a[(c[l>>2]|0)+m|0]=a[e+m|0]|0;i=m+1|0;if(i>>>0>>0){m=i}else{j=0;break}}return j|0}function co(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=a+20|0;d=c[b>>2]|0;if((d|0)!=0){dc(d)}c[b>>2]=0;c[a+24>>2]=0;b=a+60|0;d=a+64|0;e=c[d>>2]|0;f=a+68|0;if((c[b>>2]|0)==0){g=e}else{h=0;i=e;while(1){e=i+(h<<2)|0;dc(c[e>>2]|0);c[e>>2]=0;e=(c[f>>2]|0)+(h<<2)|0;dc(c[e>>2]|0);c[e>>2]=0;e=h+1|0;j=c[d>>2]|0;if(e>>>0<(c[b>>2]|0)>>>0){h=e;i=j}else{g=j;break}}}dc(g);dc(c[f>>2]|0);f=a+72|0;g=a+76|0;i=c[g>>2]|0;h=a+80|0;b=a+84|0;d=a+88|0;if((c[f>>2]|0)==0){k=i}else{j=0;e=i;while(1){i=e+(j<<2)|0;dc(c[i>>2]|0);c[i>>2]=0;i=(c[h>>2]|0)+(j<<2)|0;dc(c[i>>2]|0);c[i>>2]=0;i=(c[b>>2]|0)+(j<<2)|0;dc(c[i>>2]|0);c[i>>2]=0;i=(c[d>>2]|0)+(j<<2)|0;dc(c[i>>2]|0);c[i>>2]=0;i=j+1|0;l=c[g>>2]|0;if(i>>>0<(c[f>>2]|0)>>>0){j=i;e=l}else{k=l;break}}}dc(k);dc(c[h>>2]|0);dc(c[b>>2]|0);dc(c[d>>2]|0);dc(c[a+136>>2]|0);dc(c[a+140>>2]|0);dc(c[a+144>>2]|0);return}function cp(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;j=(f|0)!=0;f=j?4:3;switch(c[h>>2]|0){case 4:{k=(e|0)==0;if((c[h+4>>2]|0)==8){if(k){l=0;return l|0}else{m=0;n=b}while(1){o=m<<1;p=a[g+o|0]|0;a[n+2|0]=p;a[n+1|0]=p;a[n]=p;if(j){a[n+3|0]=a[g+(o|1)|0]|0}o=m+1|0;if(o>>>0>>0){m=o;n=n+f|0}else{l=0;break}}return l|0}else{if(k){l=0;return l|0}else{q=0;r=b}while(1){k=q<<2;n=a[g+k|0]|0;a[r+2|0]=n;a[r+1|0]=n;a[r]=n;if(j){a[r+3|0]=a[g+(k|2)|0]|0}k=q+1|0;if(k>>>0>>0){q=k;r=r+f|0}else{l=0;break}}return l|0}break};case 3:{if((e|0)==0){l=0;return l|0}r=h+4|0;q=h+12|0;k=h+8|0;n=(i|0)==0;i=0;m=0;o=b;L308:while(1){p=c[r>>2]|0;s=(p|0)==8;do{if(s){t=d[g+m|0]|0;u=i}else{v=aZ(p|0,-1|0)|0;if(!D){t=0;u=i;break}w=0;x=v;v=i;while(1){y=v+1|0;z=(((d[g+(v>>>3)|0]|0)>>>((v&7^7)>>>0)&1)<>>0

>>0){w=z;x=A;v=y}else{t=z;u=y;break}}}}while(0);do{if(t>>>0<(c[q>>2]|0)>>>0){p=t<<2;a[o]=a[(c[k>>2]|0)+p|0]|0;a[o+1|0]=a[(c[k>>2]|0)+(p|1)|0]|0;a[o+2|0]=a[(c[k>>2]|0)+(p|2)|0]|0;if(!j){break}a[o+3|0]=a[(c[k>>2]|0)+(p|3)|0]|0}else{if(n){break L308}a[o+2|0]=0;a[o+1|0]=0;a[o]=0;if(!j){break}a[o+3|0]=-1}}while(0);p=m+1|0;if(p>>>0>>0){i=u;m=p;o=o+f|0}else{l=0;B=310;break}}if((B|0)==310){return l|0}l=s?46:47;return l|0};case 0:{s=h+4|0;B=c[s>>2]|0;if((B|0)==16){if((e|0)==0){l=0;return l|0}o=h+16|0;m=h+20|0;u=0;i=b;while(1){n=u<<1;k=g+n|0;t=a[k]|0;a[i+2|0]=t;a[i+1|0]=t;a[i]=t;if(j){if((c[o>>2]|0)==0){C=-1}else{C=(((d[k]|0)<<8|(d[g+(n|1)|0]|0)|0)!=(c[m>>2]|0))<<31>>31}a[i+3|0]=C}n=u+1|0;if(n>>>0>>0){u=n;i=i+f|0}else{l=0;break}}return l|0}else if((B|0)==8){if((e|0)==0){l=0;return l|0}i=h+16|0;u=h+20|0;if(j){E=0;F=b}else{C=0;m=b;while(1){o=a[g+C|0]|0;a[m+2|0]=o;a[m+1|0]=o;a[m]=o;o=C+1|0;if(o>>>0>>0){C=o;m=m+f|0}else{l=0;break}}return l|0}while(1){m=g+E|0;C=a[m]|0;a[F+2|0]=C;a[F+1|0]=C;a[F]=C;if((c[i>>2]|0)==0){G=-1}else{G=((d[m]|0|0)!=(c[u>>2]|0))<<31>>31}a[F+3|0]=G;m=E+1|0;if(m>>>0>>0){E=m;F=F+f|0}else{l=0;break}}return l|0}else{F=(1<>>3)|0]|0)>>>((B&7^7)>>>0)&1)<>>0>>0){o=t;n=q;B=k}else{H=t;I=k;break}}}else{H=0;I=u}B=(((H*255|0)>>>0)/(F>>>0)|0)&255;a[m+2|0]=B;a[m+1|0]=B;a[m]=B;if(j){if((c[E>>2]|0)==0){J=-1}else{J=((H|0)!=(c[G>>2]|0))<<31>>31}a[m+3|0]=J}if(i>>>0>=e>>>0){l=0;break}u=I;i=i+1|0;m=m+f|0;C=c[s>>2]|0}return l|0}break};case 2:{s=(e|0)==0;if((c[h+4>>2]|0)==8){if(s){l=0;return l|0}C=h+16|0;m=h+20|0;i=h+24|0;I=h+28|0;u=0;J=b;while(1){G=u*3|0;H=a[g+G|0]|0;a[J]=H;E=a[g+(G+1)|0]|0;a[J+1|0]=E;F=a[g+(G+2)|0]|0;a[J+2|0]=F;if(j){do{if((c[C>>2]|0)==0){K=-1}else{if((H&255|0)!=(c[m>>2]|0)){K=-1;break}if((E&255|0)!=(c[i>>2]|0)){K=-1;break}K=((F&255|0)!=(c[I>>2]|0))<<31>>31}}while(0);a[J+3|0]=K}F=u+1|0;if(F>>>0>>0){u=F;J=J+f|0}else{l=0;break}}return l|0}else{if(s){l=0;return l|0}s=h+16|0;J=h+20|0;u=h+24|0;K=h+28|0;I=0;i=b;while(1){m=I*6|0;C=g+m|0;a[i]=a[C]|0;F=g+(m+2)|0;a[i+1|0]=a[F]|0;E=g+(m+4)|0;a[i+2|0]=a[E]|0;if(j){do{if((c[s>>2]|0)==0){L=-1}else{if(((d[C]|0)<<8|(d[g+(m|1)|0]|0)|0)!=(c[J>>2]|0)){L=-1;break}if(((d[F]|0)<<8|(d[g+(m+3)|0]|0)|0)!=(c[u>>2]|0)){L=-1;break}L=(((d[E]|0)<<8|(d[g+(m+5)|0]|0)|0)!=(c[K>>2]|0))<<31>>31}}while(0);a[i+3|0]=L}m=I+1|0;if(m>>>0>>0){I=m;i=i+f|0}else{l=0;break}}return l|0}break};case 6:{i=(e|0)==0;if((c[h+4>>2]|0)==8){if(i){l=0;return l|0}else{M=0;N=b}while(1){h=M<<2;a[N]=a[g+h|0]|0;a[N+1|0]=a[g+(h|1)|0]|0;a[N+2|0]=a[g+(h|2)|0]|0;if(j){a[N+3|0]=a[g+(h|3)|0]|0}h=M+1|0;if(h>>>0>>0){M=h;N=N+f|0}else{l=0;break}}return l|0}else{if(i){l=0;return l|0}else{O=0;P=b}while(1){b=O<<3;a[P]=a[g+b|0]|0;a[P+1|0]=a[g+(b|2)|0]|0;a[P+2|0]=a[g+(b|4)|0]|0;if(j){a[P+3|0]=a[g+(b|6)|0]|0}b=O+1|0;if(b>>>0>>0){O=b;P=P+f|0}else{l=0;break}}return l|0}break};default:{l=0;return l|0}}return 0}function cq(a){a=a|0;var b=0,d=0,e=0;b=0;do{d=a+(b<<2)|0;e=c[d>>2]|0;if((e|0)!=0){cq(e);dc(c[d>>2]|0)}b=b+1|0;}while((b|0)<16);return}function cr(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bm=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0,bx=0,by=0,bz=0,bA=0,bB=0,bC=0,bD=0,bE=0,bF=0,bG=0,bH=0,bI=0,bJ=0,bK=0,bL=0,bM=0,bN=0,bO=0,bP=0,bQ=0,bR=0,bS=0,bT=0,bU=0,bV=0,bW=0,bX=0,bY=0,bZ=0,b$=0,b0=0,b1=0,b2=0,b3=0,b4=0,b5=0,b6=0,b7=0,b8=0,b9=0,ca=0,cb=0,cc=0,cd=0,ce=0,cf=0,cg=0,ch=0,ci=0,cj=0,ck=0,cl=0,cr=0,cs=0,ct=0,cu=0,cv=0,cw=0,cz=0,cA=0,cB=0,cC=0,cD=0,cE=0,cF=0,cG=0,cH=0,cI=0,cJ=0,cK=0,cL=0,cM=0,cN=0,cO=0,cP=0,cQ=0,cR=0,cS=0,cT=0,cU=0,cV=0,cW=0,cX=0,cY=0,cZ=0,c_=0,c$=0,c0=0,c1=0,c2=0,c3=0;k=i;i=i+440|0;l=k|0;m=k+72|0;n=k+88|0;o=k+104|0;p=k+136|0;q=k+168|0;r=k+200|0;s=k+232|0;t=k+264|0;u=k+296|0;v=k+328|0;w=k+360|0;x=k+392|0;y=k+424|0;c[b>>2]=0;z=g+132|0;L437:do{if((j|0)==0|(h|0)==0){c[g+292>>2]=48;A=48}else{if(j>>>0<29>>>0){c[g+292>>2]=27;A=27;break}co(z);B=g+160|0;C=g+144|0;dh(B|0,0,16);c[C>>2]=6;E=g+148|0;c[E>>2]=8;F=g+152|0;c[F>>2]=0;G=g+156|0;c[G>>2]=0;H=g+140|0;c[H>>2]=0;I=z|0;c[I>>2]=0;J=g+136|0;c[J>>2]=0;K=g+176|0;L=g+252|0;c[L>>2]=0;dh(g+268|0,0,24);dh(K|0,0,52);do{if((a[h]|0)==-119){if((a[h+1|0]|0)!=80){break}if((a[h+2|0]|0)!=78){break}if((a[h+3|0]|0)!=71){break}if((a[h+4|0]|0)!=13){break}if((a[h+5|0]|0)!=10){break}if((a[h+6|0]|0)!=26){break}if((a[h+7|0]|0)!=10){break}do{if((a[h+12|0]|0)==73){if((a[h+13|0]|0)!=72){break}if((a[h+14|0]|0)!=68){break}if((a[h+15|0]|0)!=82){break}c[e>>2]=d[h+17|0]<<16|d[h+16|0]<<24|d[h+18|0]<<8|d[h+19|0];c[f>>2]=d[h+21|0]<<16|d[h+20|0]<<24|d[h+22|0]<<8|d[h+23|0];M=a[h+24|0]|0;N=M&255;c[E>>2]=N;O=d[h+25|0]|0;c[C>>2]=O;P=a[h+26|0]|0;c[I>>2]=P&255;Q=a[h+27|0]|0;c[J>>2]=Q&255;R=a[h+28|0]|0;c[H>>2]=R&255;S=g+16|0;do{if((c[S>>2]|0)==0){T=d[h+29|0]|0;U=d[h+30|0]<<16;V=d[h+31|0]<<8;W=d[h+32|0]|0;X=-1;Y=0;do{X=c[632+((d[h+(Y+12)|0]^X&255)<<2)>>2]^X>>>8;Y=Y+1|0;}while(Y>>>0<17>>>0);if((U|T<<24|V|W|0)==(~X|0)){break}c[g+292>>2]=57;A=57;break L437}}while(0);if(P<<24>>24!=0){c[g+292>>2]=32;A=32;break L437}if(Q<<24>>24!=0){c[g+292>>2]=33;A=33;break L437}if((R&255)>>>0>1>>>0){c[g+292>>2]=34;A=34;break L437}switch(O|0){case 0:{if(!((N-1|0)>>>0<2>>>0|M<<24>>24==4|M<<24>>24==8|M<<24>>24==16)){Z=37;_=352}break};case 2:{if(!((N|0)==16|(N|0)==8)){Z=37;_=352}break};case 3:{if(!((N-1|0)>>>0<2>>>0|M<<24>>24==4|M<<24>>24==8)){Z=37;_=352}break};case 4:{if(!((N|0)==16|(N|0)==8)){Z=37;_=352}break};case 6:{if(!((N|0)==16|(N|0)==8)){Z=37;_=352}break};default:{Z=31;_=352}}if((_|0)==352){c[g+292>>2]=Z;aa=Z;i=k;return aa|0}Y=g+292|0;c[Y>>2]=0;ab=h;ac=g+172|0;ad=g+168|0;ae=g+164|0;af=g+188|0;ag=g+184|0;ah=g+180|0;ai=g+28|0;aj=g|0;ak=n|0;al=n+8|0;am=n+4|0;an=g+4|0;ao=m|0;ap=m+8|0;aq=m+4|0;ar=g+224|0;as=g+228|0;at=g+232|0;au=g+236|0;av=g+240|0;aw=g+244|0;ax=g+248|0;ay=g+256|0;az=g+260|0;aA=g+264|0;aB=g+32|0;aC=g+208|0;aD=g+204|0;aE=g+212|0;aF=g+216|0;aG=g+220|0;aH=h+33|0;aI=1;aJ=0;aK=0;aL=0;aM=0;L483:while(1){aN=aH-ab+12|0;aO=aN>>>0>j>>>0|aH>>>0>>0;aP=aH+1|0;aQ=aH+2|0;aR=aH+3|0;aS=aH+8|0;aT=aH+4|0;aU=aH+5|0;aV=aH+6|0;aW=aH+7|0;aX=aH+9|0;aY=aH+10|0;a_=aH+11|0;a$=aH+12|0;a0=aH+13|0;a1=aH+14|0;a2=aH+15|0;a3=aH+16|0;a4=0;a5=aI;a6=aK;a7=aL;a8=aM;while(1){a9=c[Y>>2]|0;if(!(a4<<24>>24==0&(a9|0)==0)){ba=a6;bb=a7;bc=a9;break L483}if(aO){_=357;break L483}a9=d[aP]<<16|d[aH]<<24|d[aQ]<<8|d[aR];if((a9|0)<0){_=359;break L483}if((a9+aN|0)>>>0>j>>>0){_=362;break L483}bd=a9+12|0;if((aH+bd|0)>>>0>>0){_=362;break L483}be=a[aT]|0;L492:do{if((be<<24>>24|0)==73){bf=a[aU]|0;if((bf<<24>>24|0)==69){if((a[aV]|0)!=78){bg=0;_=402;break}if((a[aW]|0)==68){bh=1;bi=a5;bj=a6;bk=a7;bl=a8;break}else{bg=0;_=402;break}}else if((bf<<24>>24|0)!=68){_=540;break L483}if((a[aV]|0)!=65){_=540;break L483}if((a[aW]|0)!=84){bg=0;_=402;break}bf=a9+a7|0;if(a8>>>0>>0){bm=bf<<1;bn=dd(a6,bm)|0;if((bn|0)==0){_=370;break L483}else{bo=bn;bp=bm}}else{bo=a6;bp=a8}if((a9|0)==0){bh=0;bi=3;bj=bo;bk=bf;bl=bp;break}else{bq=0}while(1){a[bo+(bq+a7)|0]=a[aH+(bq+8)|0]|0;bm=bq+1|0;if(bm>>>0>>0){bq=bm}else{bh=0;bi=3;bj=bo;bk=bf;bl=bp;break}}}else if((be<<24>>24|0)==80){if((a[aU]|0)!=76){_=540;break L483}do{if((a[aV]|0)==84){if((a[aW]|0)!=69){break}bf=c[F>>2]|0;if((bf|0)!=0){dc(bf)}bf=(a9>>>0)/3|0;c[G>>2]=bf;bm=db(bf<<2)|0;c[F>>2]=bm;L513:do{if((bm|0)==0){if(a9>>>0>=3>>>0){_=381;break L483}}else{if(a9>>>0>770>>>0){br=38;_=387;break L483}if(a9>>>0<3>>>0){break}else{bs=0;bt=0;bu=bm}while(1){bf=bt<<2;a[bu+bf|0]=a[aH+(bs+8)|0]|0;a[(c[F>>2]|0)+(bf|1)|0]=a[aH+(bs+9)|0]|0;a[(c[F>>2]|0)+(bf|2)|0]=a[aH+(bs+10)|0]|0;a[(c[F>>2]|0)+(bf|3)|0]=-1;bf=bt+1|0;if(bf>>>0>=(c[G>>2]|0)>>>0){break L513}bs=bs+3|0;bt=bf;bu=c[F>>2]|0}}}while(0);c[Y>>2]=0;bh=0;bi=2;bj=a6;bk=a7;bl=a8;break L492}}while(0);if(be<<24>>24==116){_=526}else{bg=0;_=402}}else if((be<<24>>24|0)==116){bm=a[aU]|0;if(bm<<24>>24!=82){bv=bm;_=417;break}if((a[aV]|0)!=78){bg=1;_=402;break}if((a[aW]|0)!=83){bg=1;_=402;break}bm=c[C>>2]|0;do{if((bm|0)==3){if((c[G>>2]|0)>>>0>>0){bw=38;_=401;break L483}if((a9|0)==0){break}else{bx=0}do{a[(c[F>>2]|0)+(bx<<2|3)|0]=a[aH+(bx+8)|0]|0;bx=bx+1|0;}while(bx>>>0>>0)}else if((bm|0)==0){if((a9|0)!=2){bw=30;_=401;break L483}c[B>>2]=1;bf=d[aS]<<8|d[aX];c[ac>>2]=bf;c[ad>>2]=bf;c[ae>>2]=bf}else if((bm|0)==2){if((a9|0)!=6){bw=41;_=401;break L483}c[B>>2]=1;c[ae>>2]=d[aS]<<8|d[aX];c[ad>>2]=d[aY]<<8|d[a_];c[ac>>2]=d[a$]<<8|d[a0]}else{bw=42;_=401;break L483}}while(0);c[Y>>2]=0;bh=0;bi=a5;bj=a6;bk=a7;bl=a8}else{bg=0;_=402}}while(0);L536:do{if((_|0)==402){_=0;do{if(be<<24>>24==98){if((a[aU]|0)!=75){break}if((a[aV]|0)!=71){break}if((a[aW]|0)!=68){break}switch(c[C>>2]|0){case 3:{if((a9|0)!=1){by=43;_=414;break L483}c[K>>2]=1;bm=d[aS]|0;c[af>>2]=bm;c[ag>>2]=bm;c[ah>>2]=bm;break};case 0:case 4:{if((a9|0)!=2){by=44;_=414;break L483}c[K>>2]=1;bm=d[aS]<<8|d[aX];c[af>>2]=bm;c[ag>>2]=bm;c[ah>>2]=bm;break};case 2:case 6:{if((a9|0)!=6){by=45;_=414;break L483}c[K>>2]=1;c[ah>>2]=d[aS]<<8|d[aX];c[ag>>2]=d[aY]<<8|d[a_];c[af>>2]=d[a$]<<8|d[a0];break};default:{}}c[Y>>2]=0;bh=0;bi=a5;bj=a6;bk=a7;bl=a8;break L536}}while(0);if(!bg){bz=0;_=430;break}bv=a[aU]|0;_=417}}while(0);do{if((_|0)==417){_=0;if(bv<<24>>24!=69){bz=1;_=430;break}if((a[aV]|0)!=88){bz=1;_=430;break}if((a[aW]|0)!=116){bz=1;_=430;break}if((c[ai>>2]|0)==0){bh=0;bi=a5;bj=a6;bk=a7;bl=a8;break}else{bA=0}while(1){if(bA>>>0>=a9>>>0){break}if((a[aH+(bA+8)|0]|0)==0){break}else{bA=bA+1|0}}do{if((bA|0)==0|bA>>>0>79>>>0){bB=89;bC=0;bD=0}else{bm=bA+1|0;bf=db(bm)|0;if((bf|0)==0){bB=83;bC=0;bD=0;break}a[bf+bA|0]=0;dg(bf|0,aS|0,bA)|0;bn=bm>>>0>a9>>>0?0:a9-bm|0;bE=db(bn+1|0)|0;if((bE|0)==0){bB=83;bC=0;bD=bf;break}a[bE+bn|0]=0;if((bn|0)!=0){bn=aH+(bA+9)|0;bF=(bm>>>0>>0?a9:bm)+~bA|0;dg(bE|0,bn|0,bF)|0}bB=cn(z,bf,bE)|0;bC=bE;bD=bf}}while(0);dc(bD);dc(bC);c[Y>>2]=bB;if((bB|0)==0){bh=0;bi=a5;bj=a6;bk=a7;bl=a8}else{ba=a6;bb=a7;bc=bB;break L483}}}while(0);L570:do{if((_|0)==430){_=0;do{if((be<<24>>24|0)==122){if((a[aU]|0)!=84){bG=bz;break}if((a[aV]|0)!=88){bG=bz;break}if((a[aW]|0)!=116){bG=bz;break}if((c[ai>>2]|0)==0){bh=0;bi=a5;bj=a6;bk=a7;bl=a8;break L570}c[ak>>2]=0;c[al>>2]=0;c[am>>2]=0;bf=0;while(1){if(bf>>>0>=a9>>>0){break}if((a[aH+(bf+8)|0]|0)==0){break}else{bf=bf+1|0}}bE=bf+2|0;do{if(bE>>>0>>0){if((bf|0)==0|bf>>>0>79>>>0){bH=0;bI=89;break}bF=db(bf+1|0)|0;if((bF|0)==0){bH=0;bI=83;break}a[bF+bf|0]=0;dg(bF|0,aS|0,bf)|0;if((a[aH+(bf+9)|0]|0)!=0){bH=bF;bI=72;break}if(bE>>>0>a9>>>0){bH=bF;bI=75;break}bn=a9-bE|0;bm=aH+(bf+10)|0;bJ=c[an>>2]|0;if((bJ|0)==0){bK=cm(ak,am,bm,bn,aj)|0}else{bK=b_[bJ&1](ak,am,bm,bn,aj)|0}if((bK|0)!=0){bH=bF;bI=bK;break}bn=c[am>>2]|0;bm=bn+1|0;do{if((c[al>>2]|0)>>>0>>0){bJ=bm<<1;bL=dd(c[ak>>2]|0,bJ)|0;if((bL|0)==0){break}c[al>>2]=bJ;c[ak>>2]=bL;bM=bL;_=451}else{bM=c[ak>>2]|0;_=451}}while(0);if((_|0)==451){_=0;c[am>>2]=bm;a[bM+bn|0]=0}bH=bF;bI=cn(z,bF,c[ak>>2]|0)|0}else{bH=0;bI=75}}while(0);dc(bH);c[al>>2]=0;c[am>>2]=0;dc(c[ak>>2]|0);c[Y>>2]=bI;if((bI|0)==0){bh=0;bi=a5;bj=a6;bk=a7;bl=a8;break L570}else{ba=a6;bb=a7;bc=bI;break L483}}else if((be<<24>>24|0)==105){if((a[aU]|0)!=84){bG=bz;break}if((a[aV]|0)!=88){bG=bz;break}if((a[aW]|0)!=116){bG=bz;break}if((c[ai>>2]|0)==0){bh=0;bi=a5;bj=a6;bk=a7;bl=a8;break L570}c[ao>>2]=0;c[ap>>2]=0;c[aq>>2]=0;L606:do{if(a9>>>0<5>>>0){bN=0;bO=0;bP=0;bQ=30}else{bf=0;while(1){if(bf>>>0>=a9>>>0){break}if((a[aH+(bf+8)|0]|0)==0){break}else{bf=bf+1|0}}bF=bf+3|0;if(bF>>>0>=a9>>>0){bN=0;bO=0;bP=0;bQ=75;break}if((bf|0)==0|bf>>>0>79>>>0){bN=0;bO=0;bP=0;bQ=89;break}bn=db(bf+1|0)|0;if((bn|0)==0){bN=0;bO=0;bP=0;bQ=83;break}a[bn+bf|0]=0;dg(bn|0,aS|0,bf)|0;bm=a[aH+(bf+9)|0]|0;if((a[aH+(bf+10)|0]|0)==0){bR=0;bS=bF}else{bN=0;bO=0;bP=bn;bQ=72;break}while(1){if(bS>>>0>=a9>>>0){_=466;break}bE=bR+1|0;if((a[aH+(bS+8)|0]|0)==0){bT=bE;break}else{bR=bE;bS=bS+1|0}}if((_|0)==466){_=0;bT=bR+1|0}bE=db(bT)|0;if((bE|0)==0){bN=0;bO=0;bP=bn;bQ=83;break}a[bE+bR|0]=0;if((bR|0)!=0){bL=aH+(bf+11)|0;dg(bE|0,bL|0,bR)|0}bL=bT+bF|0;bJ=0;bU=bL;while(1){if(bU>>>0>=a9>>>0){_=473;break}bV=bJ+1|0;if((a[aH+(bU+8)|0]|0)==0){bW=bV;break}else{bJ=bV;bU=bU+1|0}}if((_|0)==473){_=0;bW=bJ+1|0}bU=db(bW)|0;if((bU|0)==0){bN=0;bO=bE;bP=bn;bQ=83;break}a[bU+bJ|0]=0;if((bJ|0)!=0){bF=aH+(bf+11+bT)|0;dg(bU|0,bF|0,bJ)|0}bF=bW+bL|0;bV=bF>>>0>a9>>>0?0:a9-bF|0;L634:do{if(bm<<24>>24==0){bX=bV+1|0;if((bX|0)==0){bY=0}else{bZ=bX<<1;b$=db(bZ)|0;if((b$|0)==0){bN=bU;bO=bE;bP=bn;bQ=83;break L606}c[ap>>2]=bZ;c[ao>>2]=b$;bY=b$}c[aq>>2]=bX;a[bY+bV|0]=0;if((bV|0)==0){break}bX=bF+8|0;a[bY]=a[aH+bX|0]|0;if(bV>>>0<=1>>>0){break}a[bY+1|0]=a[aH+(bF+9)|0]|0;if(bV>>>0>2>>>0){b0=2;b1=bY}else{break}while(1){a[b1+b0|0]=a[aH+(b0+bX)|0]|0;b$=b0+1|0;if(b$>>>0>=bV>>>0){break L634}b0=b$;b1=c[ao>>2]|0}}else{bX=aH+(bF+8)|0;b$=c[an>>2]|0;if((b$|0)==0){b2=cm(ao,aq,bX,bV,aj)|0}else{b2=b_[b$&1](ao,aq,bX,bV,aj)|0}if((b2|0)!=0){bN=bU;bO=bE;bP=bn;bQ=b2;break L606}bX=c[ap>>2]|0;b$=c[aq>>2]|0;if(bX>>>0>>0){c[ap>>2]=b$;b3=b$}else{b3=bX}bX=b$+1|0;if(b3>>>0>>0){bZ=bX<<1;b4=dd(c[ao>>2]|0,bZ)|0;if((b4|0)==0){break}c[ap>>2]=bZ;c[ao>>2]=b4;b5=b4}else{b5=c[ao>>2]|0}c[aq>>2]=bX;a[b5+b$|0]=0}}while(0);bV=c[ao>>2]|0;bF=dd(c[aC>>2]|0,(c[aD>>2]<<2)+4|0)|0;bm=dd(c[aE>>2]|0,(c[aD>>2]<<2)+4|0)|0;bL=dd(c[aF>>2]|0,(c[aD>>2]<<2)+4|0)|0;bJ=dd(c[aG>>2]|0,(c[aD>>2]<<2)+4|0)|0;if((bF|0)==0|(bm|0)==0|(bL|0)==0|(bJ|0)==0){dc(bF);dc(bm);dc(bL);dc(bJ);bN=bU;bO=bE;bP=bn;bQ=83;break}bf=bF;bF=c[aD>>2]|0;c[aD>>2]=bF+1;c[aC>>2]=bf;c[aE>>2]=bm;c[aF>>2]=bL;c[aG>>2]=bJ;bJ=bf+(bF<<2)|0;c[bJ>>2]=0;bF=db(1)|0;if((bF|0)!=0){a[bF]=0;c[bJ>>2]=bF}bF=(c[aC>>2]|0)+((c[aD>>2]|0)-1<<2)|0;bJ=df(bn|0)|0;bf=dd(c[bF>>2]|0,bJ+1|0)|0;do{if((bf|0)!=0){a[bf+bJ|0]=0;c[bF>>2]=bf;if((bJ|0)==0){break}a[bf]=a[bn]|0;if(bJ>>>0>1>>>0){b6=1}else{break}do{a[(c[bF>>2]|0)+b6|0]=a[bn+b6|0]|0;b6=b6+1|0;}while(b6>>>0>>0)}}while(0);bJ=(c[aE>>2]|0)+((c[aD>>2]|0)-1<<2)|0;c[bJ>>2]=0;bF=db(1)|0;if((bF|0)!=0){a[bF]=0;c[bJ>>2]=bF}bF=(c[aE>>2]|0)+((c[aD>>2]|0)-1<<2)|0;bJ=df(bE|0)|0;bf=dd(c[bF>>2]|0,bJ+1|0)|0;do{if((bf|0)!=0){a[bf+bJ|0]=0;c[bF>>2]=bf;if((bJ|0)==0){break}a[bf]=a[bE]|0;if(bJ>>>0>1>>>0){b7=1}else{break}do{a[(c[bF>>2]|0)+b7|0]=a[bE+b7|0]|0;b7=b7+1|0;}while(b7>>>0>>0)}}while(0);bJ=(c[aF>>2]|0)+((c[aD>>2]|0)-1<<2)|0;c[bJ>>2]=0;bF=db(1)|0;if((bF|0)!=0){a[bF]=0;c[bJ>>2]=bF}bF=(c[aF>>2]|0)+((c[aD>>2]|0)-1<<2)|0;bJ=df(bU|0)|0;bf=dd(c[bF>>2]|0,bJ+1|0)|0;do{if((bf|0)!=0){a[bf+bJ|0]=0;c[bF>>2]=bf;if((bJ|0)==0){break}a[bf]=a[bU]|0;if(bJ>>>0>1>>>0){b8=1}else{break}do{a[(c[bF>>2]|0)+b8|0]=a[bU+b8|0]|0;b8=b8+1|0;}while(b8>>>0>>0)}}while(0);bJ=(c[aG>>2]|0)+((c[aD>>2]|0)-1<<2)|0;c[bJ>>2]=0;bF=db(1)|0;if((bF|0)!=0){a[bF]=0;c[bJ>>2]=bF}bF=(c[aG>>2]|0)+((c[aD>>2]|0)-1<<2)|0;bJ=df(bV|0)|0;bf=dd(c[bF>>2]|0,bJ+1|0)|0;if((bf|0)==0){bN=bU;bO=bE;bP=bn;bQ=0;break}a[bf+bJ|0]=0;c[bF>>2]=bf;if((bJ|0)==0){bN=bU;bO=bE;bP=bn;bQ=0;break}a[bf]=a[bV]|0;if(bJ>>>0>1>>>0){b9=1}else{bN=bU;bO=bE;bP=bn;bQ=0;break}while(1){a[(c[bF>>2]|0)+b9|0]=a[bV+b9|0]|0;bf=b9+1|0;if(bf>>>0>>0){b9=bf}else{bN=bU;bO=bE;bP=bn;bQ=0;break}}}}while(0);dc(bP);dc(bO);dc(bN);c[ap>>2]=0;c[aq>>2]=0;dc(c[ao>>2]|0);c[Y>>2]=bQ;if((bQ|0)==0){bh=0;bi=a5;bj=a6;bk=a7;bl=a8;break L570}else{ba=a6;bb=a7;bc=bQ;break L483}}else{bG=bz}}while(0);if(bG){_=526}else{_=532}}}while(0);do{if((_|0)==526){_=0;if((a[aU]|0)!=73){_=532;break}if((a[aV]|0)!=77){_=532;break}if((a[aW]|0)!=69){_=532;break}if((a9|0)!=7){_=530;break L483}c[ar>>2]=1;c[as>>2]=d[aS]<<8|d[aX];c[at>>2]=d[aY]|0;c[au>>2]=d[a_]|0;c[av>>2]=d[a$]|0;c[aw>>2]=d[a0]|0;c[ax>>2]=d[a1]|0;c[Y>>2]=0;bh=0;bi=a5;bj=a6;bk=a7;bl=a8}}while(0);if((_|0)==532){_=0;if(be<<24>>24!=112){_=539;break}if((a[aU]|0)!=72){_=541;break}if((a[aV]|0)!=89){_=541;break}if((a[aW]|0)!=115){_=541;break}if((a9|0)!=9){_=537;break L483}c[L>>2]=1;c[ay>>2]=d[aX]<<16|d[aS]<<24|d[aY]<<8|d[a_];c[az>>2]=d[a0]<<16|d[a$]<<24|d[a1]<<8|d[a2];c[aA>>2]=d[a3]|0;c[Y>>2]=0;bh=0;bi=a5;bj=a6;bk=a7;bl=a8}if((c[S>>2]|aJ|0)==0){bn=d[aP]<<16|d[aH]<<24|d[aQ]<<8|d[aR];bE=d[aH+(bn+9)|0]<<16|d[aH+(bn+8)|0]<<24|d[aH+(bn+10)|0]<<8|d[aH+(bn+11)|0];bU=bn+4|0;if((bU|0)==0){ca=0}else{bn=-1;bJ=0;do{bn=c[632+((d[aH+(bJ+4)|0]^bn&255)<<2)>>2]^bn>>>8;bJ=bJ+1|0;}while(bJ>>>0>>0);ca=~bn}if((bE|0)!=(ca|0)){_=553;break L483}}if(bh<<24>>24==0){cb=bi;cc=aJ;cd=bj;ce=bk;cf=bl;break}else{a4=bh;a5=bi;a6=bj;a7=bk;a8=bl}}if((_|0)==539){_=0;if((be&32)==0){_=540;break}else{_=541}}do{if((_|0)==541){_=0;if((c[aB>>2]|0)==0){cb=a5;cc=1;cd=a6;ce=a7;cf=a8;break}a4=a5-1|0;a3=g+268+(a4<<2)|0;a2=g+280+(a4<<2)|0;a4=c[a2>>2]|0;a1=aZ(a4|0,bd|0)|0;a$=a1;if(D|a$>>>0>>0){cg=77;_=547;break L483}a1=dd(c[a3>>2]|0,a$)|0;if((a1|0)==0){cg=83;_=547;break L483}c[a3>>2]=a1;c[a2>>2]=a$;if((bd|0)!=0){a$=0;do{a[a1+(a$+a4)|0]=a[aH+a$|0]|0;a$=a$+1|0;}while(a$>>>0>>0)}c[Y>>2]=0;cb=a5;cc=1;cd=a6;ce=a7;cf=a8}}while(0);aH=aH+((d[aP]<<16|d[aH]<<24|d[aQ]<<8|d[aR])+12)|0;aI=cb;aJ=cc;aK=cd;aL=ce;aM=cf}if((_|0)==530){c[Y>>2]=73;ba=a6;bb=a7;bc=73}else if((_|0)==537){c[Y>>2]=74;ba=a6;bb=a7;bc=74}else if((_|0)==540){c[Y>>2]=69;ba=a6;bb=a7;bc=69}else if((_|0)==547){c[Y>>2]=cg;ba=a6;bb=a7;bc=cg}else if((_|0)==553){c[Y>>2]=57;ba=bj;bb=bk;bc=57}else if((_|0)==357){c[Y>>2]=30;ba=a6;bb=a7;bc=30}else if((_|0)==359){c[Y>>2]=63;ba=a6;bb=a7;bc=63}else if((_|0)==362){c[Y>>2]=64;ba=a6;bb=a7;bc=64}else if((_|0)==370){c[Y>>2]=83;ba=a6;bb=a7;bc=83}else if((_|0)==381){c[G>>2]=0;br=83;_=387}else if((_|0)==401){c[Y>>2]=bw;ba=a6;bb=a7;bc=bw}else if((_|0)==414){c[Y>>2]=by;ba=a6;bb=a7;bc=by}if((_|0)==387){c[Y>>2]=br;ba=a6;bb=a7;bc=br}aM=y|0;c[aM>>2]=0;aL=y+8|0;c[aL>>2]=0;aK=y+4|0;c[aK>>2]=0;L749:do{if((bc|0)==0){aJ=c[f>>2]|0;switch(c[C>>2]|0){case 2:{ch=3;break};case 4:{ch=2;break};case 6:{ch=4;break};case 0:case 3:{ch=1;break};default:{ch=0}}aI=((($($($(aJ,c[e>>2]|0)|0,c[E>>2]|0)|0,ch)|0)+7|0)>>>3)+aJ|0;do{if((aI|0)==0){c[aK>>2]=0}else{aJ=aI<<1;aH=db(aJ)|0;if((aH|0)==0){c[Y>>2]=83;break L749}else{c[aL>>2]=aJ;c[aM>>2]=aH;aH=(c[Y>>2]|0)==0;c[aK>>2]=aI;if(aH){break}else{break L749}}}}while(0);aI=c[an>>2]|0;if((aI|0)==0){ci=cm(aM,aK,ba,bb,aj)|0}else{ci=b_[aI&1](aM,aK,ba,bb,aj)|0}c[Y>>2]=ci}}while(0);dc(ba);if((c[Y>>2]|0)==0){aj=c[e>>2]|0;an=c[f>>2]|0;aI=c[C>>2]|0;aR=c[E>>2]|0;switch(aI|0){case 2:{cj=3;break};case 4:{cj=2;break};case 6:{cj=4;break};case 0:case 3:{cj=1;break};default:{cj=0}}aQ=(($($($(an,aj)|0,aR)|0,cj)|0)+7|0)>>>3;do{if((aQ|0)==0){ck=0;cl=aj;cr=an;cs=aI;ct=aR;_=582}else{aP=db(aQ<<1)|0;if((aP|0)==0){c[Y>>2]=83;cu=0;break}dh(aP|0,0,aQ|0);if((c[Y>>2]|0)!=0){cu=aP;break}ck=aP;cl=c[e>>2]|0;cr=c[f>>2]|0;cs=c[C>>2]|0;ct=c[E>>2]|0;_=582}}while(0);if((_|0)==582){aQ=c[aM>>2]|0;switch(cs|0){case 2:{cv=3;break};case 4:{cv=2;break};case 6:{cv=4;break};case 0:case 3:{cv=1;break};default:{cv=0}}aR=$(cv,ct)|0;L791:do{if((aR|0)==0){cw=31}else{L793:do{if((c[H>>2]|0)==0){do{if(aR>>>0<8>>>0){aI=$(aR,cl)|0;an=aI+7&-8;if((aI|0)==(an|0)){break}aj=cy(aQ,aQ,cl,cr,aR)|0;if((aj|0)!=0){cw=aj;break L791}aj=an-aI|0;if((cr|0)==0){break L793}an=(aI|0)==0;aP=0;aH=0;aJ=0;while(1){if(an){cz=aP;cA=aH}else{aB=aP;S=aH;aA=0;while(1){az=1<<(S&7^7);if((1<<(aB&7^7)&d[aQ+(aB>>>3)|0]|0)==0){ay=ck+(S>>>3)|0;a[ay]=d[ay]&(az^255)&255}else{ay=ck+(S>>>3)|0;a[ay]=(d[ay]|az)&255}az=aA+1|0;if(az>>>0>>0){aB=aB+1|0;S=S+1|0;aA=az}else{break}}cz=aP+aI|0;cA=aH+aI|0}aA=aJ+1|0;if(aA>>>0>>0){aP=aj+cz|0;aH=cA;aJ=aA}else{break L793}}}}while(0);aJ=cy(ck,aQ,cl,cr,aR)|0;if((aJ|0)!=0){cw=aJ;break L791}}else{cx(t|0,u|0,v|0,w|0,x|0,cl,cr,aR);aJ=aR>>>0<8>>>0;aH=0;do{aj=c[w+(aH<<2)>>2]|0;aP=c[t+(aH<<2)>>2]|0;aI=c[u+(aH<<2)>>2]|0;an=cy(aQ+aj|0,aQ+(c[v+(aH<<2)>>2]|0)|0,aP,aI,aR)|0;if((an|0)!=0){cw=an;break L791}do{if(aJ){an=c[x+(aH<<2)>>2]|0;aA=$(aP,aR)|0;S=(aA+7&-8)-aA|0;if((aI|0)==0){break}aB=(aA|0)==0;az=0;ay=0;ax=0;while(1){if(aB){cB=az;cC=ay}else{aw=az;av=ay;au=0;while(1){at=1<<(av&7^7);if((1<<(aw&7^7)&d[aQ+((aw>>>3)+aj)|0]|0)==0){as=aQ+((av>>>3)+an)|0;a[as]=d[as]&(at^255)&255}else{as=aQ+((av>>>3)+an)|0;a[as]=(d[as]|at)&255}at=au+1|0;if(at>>>0>>0){aw=aw+1|0;av=av+1|0;au=at}else{break}}cB=az+aA|0;cC=ay+aA|0}au=ax+1|0;if(au>>>0>>0){az=S+cB|0;ay=cC;ax=au}else{break}}}}while(0);aH=aH+1|0;}while(aH>>>0<7>>>0);cx(o|0,p|0,q|0,r|0,s|0,cl,cr,aR);if(aR>>>0>7>>>0){aH=aR>>>3;aJ=(aH|0)==0;aI=0;while(1){aj=c[p+(aI<<2)>>2]|0;if((aj|0)!=0){aP=c[o+(aI<<2)>>2]|0;ax=(aP|0)==0;ay=s+(aI<<2)|0;S=11024+(aI<<2)|0;az=11088+(aI<<2)|0;aA=11056+(aI<<2)|0;an=11120+(aI<<2)|0;aB=0;do{if(!ax){au=c[ay>>2]|0;av=$(($(c[az>>2]|0,aB)|0)+(c[S>>2]|0)|0,cl)|0;aw=av+(c[aA>>2]|0)|0;av=c[an>>2]|0;at=$(aB,aP)|0;as=0;do{ar=($(as+at|0,aH)|0)+au|0;ao=$(aw+($(as,av)|0)|0,aH)|0;if(!aJ){aq=0;do{a[ck+(aq+ao)|0]=a[aQ+(ar+aq)|0]|0;aq=aq+1|0;}while(aq>>>0>>0)}as=as+1|0;}while(as>>>0>>0)}aB=aB+1|0;}while(aB>>>0>>0)}aI=aI+1|0;if(aI>>>0>=7>>>0){break L793}}}else{cD=0}do{aI=c[o+(cD<<2)>>2]|0;aH=c[p+(cD<<2)>>2]|0;if((aH|0)!=0){aJ=(aI|0)==0;aj=s+(cD<<2)|0;aB=11024+(cD<<2)|0;aP=11088+(cD<<2)|0;an=11056+(cD<<2)|0;aA=11120+(cD<<2)|0;S=0;do{if(!aJ){az=c[aj>>2]<<3;ay=$(S,aI)|0;ax=$(($(c[aP>>2]|0,S)|0)+(c[aB>>2]|0)|0,cl)|0;as=c[aA>>2]|0;av=ax+(c[an>>2]|0)|0;ax=0;do{aw=$(av+($(ax,as)|0)|0,aR)|0;au=($(ax+ay|0,aR)|0)+az|0;at=0;while(1){aq=(d[aQ+(au>>>3)|0]|0)>>>((au&7^7)>>>0)&1;if(aq<<24>>24!=0){ar=ck+(aw>>>3)|0;a[ar]=(d[ar]|(aq&255)<<(aw&7^7))&255}aq=at+1|0;if(aq>>>0>>0){aw=aw+1|0;au=au+1|0;at=aq}else{break}}ax=ax+1|0;}while(ax>>>0>>0)}S=S+1|0;}while(S>>>0>>0)}cD=cD+1|0;}while(cD>>>0<7>>>0)}}while(0);cw=0}}while(0);c[Y>>2]=cw;cu=ck}c[b>>2]=cu}c[aL>>2]=0;c[aK>>2]=0;dc(c[aM>>2]|0);c[aM>>2]=0;aR=c[Y>>2]|0;if((aR|0)!=0){aa=aR;i=k;return aa|0}aR=g+100|0;aQ=g+144|0;if((c[g+24>>2]|0)==0){aH=g+108|0;S=c[aH>>2]|0;if((S|0)!=0){dc(S)}S=aR;aI=aQ;dg(S|0,aI|0,32)|0;aI=c[F>>2]|0;L880:do{if((aI|0)!=0){S=db(1024)|0;c[aH>>2]=S;an=c[G>>2]|0;if((S|0)==0){aA=(an|0)==0?0:83;c[Y>>2]=aA;aa=aA;i=k;return aa|0}if((an&1073741823|0)==0){break}a[S]=a[aI]|0;if(an<<2>>>0>1>>>0){cE=1;cF=S;cG=aI}else{break}while(1){a[cF+cE|0]=a[cG+cE|0]|0;S=cE+1|0;if(S>>>0>=c[G>>2]<<2>>>0){break L880}cE=S;cF=c[aH>>2]|0;cG=c[F>>2]|0}}}while(0);c[Y>>2]=0;aa=0;i=k;return aa|0}aH=aR|0;aI=c[aH>>2]|0;aM=aQ|0;L893:do{if((aI|0)==(c[aM>>2]|0)){if((c[g+104>>2]|0)!=(c[E>>2]|0)){break}aK=c[g+116>>2]|0;if((aK|0)!=(c[B>>2]|0)){break}if((aK|0)!=0){if((c[g+120>>2]|0)!=(c[ae>>2]|0)){break}if((c[g+124>>2]|0)!=(c[ad>>2]|0)){break}if((c[g+128>>2]|0)!=(c[ac>>2]|0)){break}}aK=c[g+112>>2]|0;if((aK|0)!=(c[G>>2]|0)){break}aL=g+108|0;S=aK<<2;aK=0;while(1){if(aK>>>0>=S>>>0){aa=0;break}if((a[(c[aL>>2]|0)+aK|0]|0)==(a[(c[F>>2]|0)+aK|0]|0)){aK=aK+1|0}else{break L893}}i=k;return aa|0}}while(0);aR=c[b>>2]|0;do{if(!((aI|0)==2|(aI|0)==6)){if((c[g+104>>2]|0)==8){break}else{aa=56}i=k;return aa|0}}while(0);aK=g+104|0;switch(aI|0){case 2:{cH=3;break};case 4:{cH=2;break};case 6:{cH=4;break};case 0:case 3:{cH=1;break};default:{cH=0}}aL=db((($($($(c[f>>2]|0,c[e>>2]|0)|0,c[aK>>2]|0)|0,cH)|0)+7|0)>>>3)|0;c[b>>2]=aL;L918:do{if((aL|0)==0){cI=83}else{S=c[g+20>>2]|0;an=l;aA=$(c[f>>2]|0,c[e>>2]|0)|0;aB=c[aH>>2]|0;L920:do{if((aB|0)==(c[aM>>2]|0)){aP=c[aK>>2]|0;if((aP|0)!=(c[E>>2]|0)){break}aj=c[g+116>>2]|0;if((aj|0)!=(c[B>>2]|0)){break}if((aj|0)!=0){if((c[g+120>>2]|0)!=(c[ae>>2]|0)){break}if((c[g+124>>2]|0)!=(c[ad>>2]|0)){break}if((c[g+128>>2]|0)!=(c[ac>>2]|0)){break}}aj=c[g+112>>2]|0;if((aj|0)!=(c[G>>2]|0)){break}aJ=g+108|0;ax=aj<<2;aj=0;while(1){if(aj>>>0>=ax>>>0){break}if((a[(c[aJ>>2]|0)+aj|0]|0)==(a[(c[F>>2]|0)+aj|0]|0)){aj=aj+1|0}else{break L920}}switch(aB|0){case 2:{cJ=3;break};case 4:{cJ=2;break};case 6:{cJ=4;break};case 0:case 3:{cJ=1;break};default:{cJ=0}}aj=(($($(aP,aA)|0,cJ)|0)+7|0)>>>3;if((aj|0)==0){cI=0;break L918}else{cK=0}while(1){a[aL+cK|0]=a[aR+cK|0]|0;aJ=cK+1|0;if(aJ>>>0>>0){cK=aJ}else{cI=0;break L918}}}}while(0);do{if((aB|0)==3){aj=1<>2];aP=c[g+112>>2]|0;aJ=aP>>>0>>0?aP:aj;dh(an|0,0,64);c[l+64>>2]=-1;if((aJ|0)==0){break}aj=g+108|0;aP=0;do{ax=aP<<2;az=c[aj>>2]|0;ay=d[az+ax|0]|0;as=d[az+(ax|1)|0]|0;av=d[az+(ax|2)|0]|0;at=d[az+(ax|3)|0]|0;ax=0;az=l;while(1){au=az+((as>>>(ax>>>0)<<2&4|at>>>(ax>>>0)&1|ay>>>(ax>>>0)<<3&8|av>>>(ax>>>0)<<1&2)<<2)|0;aw=c[au>>2]|0;if((aw|0)==0){aq=db(68)|0;c[au>>2]=aq;dh(aq|0,0,64);c[aq+64>>2]=-1;cL=c[au>>2]|0}else{cL=aw}aw=ax+1|0;if((aw|0)<8){ax=aw;az=cL}else{break}}c[cL+64>>2]=aP;aP=aP+1|0;}while(aP>>>0>>0)}}while(0);an=c[aK>>2]|0;L955:do{if((c[E>>2]|0)==16&(an|0)==16){if((aA|0)==0){cM=0;break}else{cN=0;cO=1}while(1){if(!cO){cM=85;break L955}aB=c[aM>>2]|0;L960:do{if((aB|0)==0){aJ=cN<<1;aP=a[aR+aJ|0]|0;aj=a[aR+(aJ|1)|0]|0;if((c[B>>2]|0)!=0){if(((aP&255)<<8|aj&255|0)==(c[ae>>2]|0)){cP=0;cQ=0;cR=aP;cS=aj;cT=aP;cU=aj;cV=aP;cW=aj;break}}cP=-1;cQ=-1;cR=aP;cS=aj;cT=aP;cU=aj;cV=aP;cW=aj}else if((aB|0)==2){aj=cN*6|0;aP=a[aR+aj|0]|0;aJ=a[aR+(aj|1)|0]|0;az=a[aR+(aj+2)|0]|0;ax=a[aR+(aj+3)|0]|0;av=a[aR+(aj+4)|0]|0;ay=a[aR+(aj+5)|0]|0;do{if((c[B>>2]|0)!=0){if(((aP&255)<<8|aJ&255|0)!=(c[ae>>2]|0)){break}if(((az&255)<<8|ax&255|0)!=(c[ad>>2]|0)){break}if(((av&255)<<8|ay&255|0)==(c[ac>>2]|0)){cP=0;cQ=0;cR=av;cS=ay;cT=az;cU=ax;cV=aP;cW=aJ;break L960}}}while(0);cP=-1;cQ=-1;cR=av;cS=ay;cT=az;cU=ax;cV=aP;cW=aJ}else if((aB|0)==4){aj=cN<<2;at=a[aR+aj|0]|0;as=a[aR+(aj|1)|0]|0;cP=a[aR+(aj|2)|0]|0;cQ=a[aR+(aj|3)|0]|0;cR=at;cS=as;cT=at;cU=as;cV=at;cW=as}else if((aB|0)==6){as=cN<<3;cP=a[aR+(as|6)|0]|0;cQ=a[aR+(as|7)|0]|0;cR=a[aR+(as|4)|0]|0;cS=a[aR+(as|5)|0]|0;cT=a[aR+(as|2)|0]|0;cU=a[aR+(as|3)|0]|0;cV=a[aR+as|0]|0;cW=a[aR+(as|1)|0]|0}else{cM=85;break L955}}while(0);if((c[aK>>2]|0)!=16){cM=85;break L955}aB=c[aH>>2]|0;if((aB|0)==0){as=cN<<1;a[aL+as|0]=cV;a[aL+(as|1)|0]=cW}else if((aB|0)==2){as=cN*6|0;a[aL+as|0]=cV;a[aL+(as|1)|0]=cW;a[aL+(as+2)|0]=cT;a[aL+(as+3)|0]=cU;a[aL+(as+4)|0]=cR;a[aL+(as+5)|0]=cS}else if((aB|0)==4){as=cN<<2;a[aL+as|0]=cV;a[aL+(as|1)|0]=cW;a[aL+(as|2)|0]=cP;a[aL+(as|3)|0]=cQ}else if((aB|0)==6){aB=cN<<3;a[aL+aB|0]=cV;a[aL+(aB|1)|0]=cW;a[aL+(aB|2)|0]=cT;a[aL+(aB|3)|0]=cU;a[aL+(aB|4)|0]=cR;a[aL+(aB|5)|0]=cS;a[aL+(aB|6)|0]=cP;a[aL+(aB|7)|0]=cQ}aB=cN+1|0;if(aB>>>0>=aA>>>0){cM=0;break L955}cN=aB;cO=(c[E>>2]|0)==16}}else{do{if((an|0)==8){aB=c[aH>>2]|0;if((aB|0)==6){cM=cp(aL,aA,1,aR,aQ,S)|0;break L955}else if((aB|0)==2){cM=cp(aL,aA,0,aR,aQ,S)|0;break L955}else{break}}}while(0);if((aA|0)==0){cM=0;break}aB=(S|0)==0;as=0;at=0;aj=0;aw=0;au=0;L990:while(1){L992:do{switch(c[aM>>2]|0){case 0:{aq=c[E>>2]|0;if((aq|0)==8){ar=a[aR+as|0]|0;if((c[B>>2]|0)!=0){if((ar&255|0)==(c[ae>>2]|0)){cX=0;cY=ar;cZ=ar;c_=ar;break L992}}cX=-1;cY=ar;cZ=ar;c_=ar;break L992}else if((aq|0)==16){ar=as<<1;ao=a[aR+ar|0]|0;if((c[B>>2]|0)!=0){if(((ao&255)<<8|d[aR+(ar|1)|0]|0)==(c[ae>>2]|0)){cX=0;cY=ao;cZ=ao;c_=ao;break L992}}cX=-1;cY=ao;cZ=ao;c_=ao;break L992}else{ao=(1<>>3)|0]|0)>>>((ar&7^7)>>>0)&1)<>>0>>0){ap=aG;aD=aF;ar=ar+1|0}else{c$=aG;break}}}else{c$=0}ar=(((c$*255|0)>>>0)/(ao>>>0)|0)&255;if((c[B>>2]|0)!=0){if((c$|0)==(c[ae>>2]|0)){cX=0;cY=ar;cZ=ar;c_=ar;break L992}}cX=-1;cY=ar;cZ=ar;c_=ar;break L992}break};case 2:{if((c[E>>2]|0)==8){ar=as*3|0;aD=a[aR+ar|0]|0;ap=a[aR+(ar+1)|0]|0;aq=a[aR+(ar+2)|0]|0;do{if((c[B>>2]|0)!=0){if((aD&255|0)!=(c[ae>>2]|0)){break}if((ap&255|0)!=(c[ad>>2]|0)){break}if((aq&255|0)==(c[ac>>2]|0)){cX=0;cY=aq;cZ=ap;c_=aD;break L992}}}while(0);cX=-1;cY=aq;cZ=ap;c_=aD;break L992}else{ao=as*6|0;ar=a[aR+ao|0]|0;aJ=a[aR+(ao+2)|0]|0;aP=a[aR+(ao+4)|0]|0;do{if((c[B>>2]|0)!=0){if(((ar&255)<<8|d[aR+(ao|1)|0]|0)!=(c[ae>>2]|0)){break}if(((aJ&255)<<8|d[aR+(ao+3)|0]|0)!=(c[ad>>2]|0)){break}if(((aP&255)<<8|d[aR+(ao+5)|0]|0)==(c[ac>>2]|0)){cX=0;cY=aP;cZ=aJ;c_=ar;break L992}}}while(0);cX=-1;cY=aP;cZ=aJ;c_=ar;break L992}break};case 3:{ao=c[E>>2]|0;c0=(ao|0)==8;do{if(c0){c1=d[aR+as|0]|0}else{aD=aZ(ao|0,-1|0)|0;if(!D){c1=0;break}ap=0;aq=aD;aD=$(ao,as)|0;while(1){ax=(((d[aR+(aD>>>3)|0]|0)>>>((aD&7^7)>>>0)&1)<>>0>>0){ap=ax;aq=az;aD=aD+1|0}else{c1=ax;break}}}}while(0);if(c1>>>0<(c[G>>2]|0)>>>0){ao=c1<<2;ar=c[F>>2]|0;cX=a[ar+(ao|3)|0]|0;cY=a[ar+(ao|2)|0]|0;cZ=a[ar+(ao|1)|0]|0;c_=a[ar+ao|0]|0;break L992}else{if(aB){break L990}else{cX=-1;cY=0;cZ=0;c_=0;break L992}}break};case 4:{if((c[E>>2]|0)==8){ao=as<<1;ar=a[aR+ao|0]|0;cX=a[aR+(ao|1)|0]|0;cY=ar;cZ=ar;c_=ar;break L992}else{ar=as<<2;ao=a[aR+ar|0]|0;cX=a[aR+(ar|2)|0]|0;cY=ao;cZ=ao;c_=ao;break L992}break};case 6:{if((c[E>>2]|0)==8){ao=as<<2;cX=a[aR+(ao|3)|0]|0;cY=a[aR+(ao|2)|0]|0;cZ=a[aR+(ao|1)|0]|0;c_=a[aR+ao|0]|0;break L992}else{ao=as<<3;cX=a[aR+(ao|6)|0]|0;cY=a[aR+(ao|4)|0]|0;cZ=a[aR+(ao|2)|0]|0;c_=a[aR+ao|0]|0;break L992}break};default:{cX=at;cY=aj;cZ=aw;c_=au}}}while(0);L1046:do{switch(c[aH>>2]|0){case 0:{ao=c[aK>>2]|0;if((ao|0)==8){a[aL+as|0]=c_;break L1046}else if((ao|0)==16){ar=as<<1;a[aL+(ar|1)|0]=c_;a[aL+ar|0]=c_;break L1046}else{if((ao|0)==1){c2=7}else{c2=(ao|0)==2?3:1}ar=c2&as;aJ=((1<>>((8-ao|0)>>>0))<<($(c2-ar|0,ao)|0);if((ar|0)==0){a[aL+(($(ao,as)|0)>>>3)|0]=aJ&255;break L1046}else{ar=aL+(($(ao,as)|0)>>>3)|0;a[ar]=(d[ar]|aJ)&255;break L1046}}break};case 2:{if((c[aK>>2]|0)==8){aJ=as*3|0;a[aL+aJ|0]=c_;a[aL+(aJ+1)|0]=cZ;a[aL+(aJ+2)|0]=cY;break L1046}else{aJ=as*6|0;a[aL+(aJ|1)|0]=c_;a[aL+aJ|0]=c_;a[aL+(aJ+3)|0]=cZ;a[aL+(aJ+2)|0]=cZ;a[aL+(aJ+5)|0]=cY;a[aL+(aJ+4)|0]=cY;break L1046}break};case 3:{aJ=c_&255;ar=cZ&255;ao=cY&255;aP=cX&255;aD=0;aq=l;while(1){if((aD|0)>=8){break}ap=c[aq+((ar>>>(aD>>>0)<<2&4|aP>>>(aD>>>0)&1|aJ>>>(aD>>>0)<<3&8|ao>>>(aD>>>0)<<1&2)<<2)>>2]|0;if((ap|0)==0){cM=82;break L955}else{aD=aD+1|0;aq=ap}}if((aq|0)==0){cM=82;break L955}aD=c[aq+64>>2]|0;if((aD|0)<0){cM=82;break L955}ao=c[aK>>2]|0;if((ao|0)==8){a[aL+as|0]=aD&255;break L1046}else if((ao|0)==1){c3=7}else{c3=(ao|0)==2?3:1}aJ=c3&as;aP=((1<>>3)|0]=aP&255;break L1046}else{aJ=aL+(($(ao,as)|0)>>>3)|0;a[aJ]=(d[aJ]|aP)&255;break L1046}break};case 4:{aP=c[aK>>2]|0;if((aP|0)==8){aJ=as<<1;a[aL+aJ|0]=c_;a[aL+(aJ|1)|0]=cX;break L1046}else if((aP|0)==16){aP=as<<2;a[aL+(aP|1)|0]=c_;a[aL+aP|0]=c_;a[aL+(aP|3)|0]=cX;a[aL+(aP|2)|0]=cX;break L1046}else{break L1046}break};case 6:{if((c[aK>>2]|0)==8){aP=as<<2;a[aL+aP|0]=c_;a[aL+(aP|1)|0]=cZ;a[aL+(aP|2)|0]=cY;a[aL+(aP|3)|0]=cX;break L1046}else{aP=as<<3;a[aL+(aP|1)|0]=c_;a[aL+aP|0]=c_;a[aL+(aP|3)|0]=cZ;a[aL+(aP|2)|0]=cZ;a[aL+(aP|5)|0]=cY;a[aL+(aP|4)|0]=cY;a[aL+(aP|7)|0]=cX;a[aL+(aP|6)|0]=cX;break L1046}break};default:{}}}while(0);aP=as+1|0;if(aP>>>0>>0){as=aP;at=cX;aj=cY;aw=cZ;au=c_}else{cM=0;break L955}}cM=c0?46:47}}while(0);if((c[aH>>2]|0)!=3){cI=cM;break}cq(l);cI=cM}}while(0);c[Y>>2]=cI;dc(aR);aa=c[Y>>2]|0;i=k;return aa|0}}while(0);c[g+292>>2]=29;A=29;break L437}}while(0);c[g+292>>2]=28;A=28}}while(0);c[g+292>>2]=A;aa=A;i=k;return aa|0}function cs(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;a=i;i=i+8|0;b=a|0;d=c[3060]|0;if((d|0)==0){i=a;return}if((c[(c[2896]|0)+4>>2]|0)<1){i=a;return}e=c[d+20>>2]|0;if((e|0)==-1){f=c[d+12>>2]|0;g=c[d+16>>2]|0;h=c[d>>2]|0;aF(1,b|0);au(3553,c[b>>2]|0);bR(3553,10240,9729);bR(3553,10241,9729);bR(3553,10242,33071);bR(3553,10243,33071);au(3553,c[b>>2]|0);bS(3317,1);bw(3553,0,6408,f|0,g|0,0,6408,5121,h|0);h=c[b>>2]|0;c[(c[3060]|0)+20>>2]=h;j=h}else{j=e}au(3553,j|0);j=c[2896]|0;a1(34962,0,c[j+4>>2]<<5|0,c[j>>2]|0);aU(4,0,c[(c[2896]|0)+4>>2]|0);c[(c[2896]|0)+4>>2]=0;i=a;return}function ct(){var b=0,c=0,d=0.0,e=0.0;b=i;i=i+192|0;c=b|0;cs();dh(c|0,0,28);g[c+28>>2]=1.0;g[c+32>>2]=0.0;d=a[9592]|0?480.0:0.0;g[c+36>>2]=d;g[c+40>>2]=0.0;g[c+44>>2]=1.0;g[c+48>>2]=0.0;g[c+52>>2]=0.0;g[c+56>>2]=0.0;g[c+60>>2]=1.0;e=a[3728]|0?640.0:0.0;g[c+64>>2]=e;g[c+68>>2]=d;g[c+72>>2]=1.0;g[c+76>>2]=1.0;g[c+80>>2]=0.0;g[c+84>>2]=0.0;g[c+88>>2]=0.0;g[c+92>>2]=1.0;g[c+96>>2]=e;g[c+100>>2]=d;g[c+104>>2]=1.0;g[c+108>>2]=1.0;g[c+112>>2]=0.0;g[c+116>>2]=0.0;g[c+120>>2]=0.0;g[c+124>>2]=1.0;g[c+128>>2]=e;g[c+132>>2]=0.0;g[c+136>>2]=1.0;dh(c+140|0,0,16);g[c+156>>2]=1.0;dh(c+160|0,0,28);g[c+188>>2]=1.0;a1(34962,0,192,c|0);aU(4,0,6);i=b;return}function cu(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;b=i;i=i+56|0;d=b|0;e=b+8|0;L1107:do{if((bd(e|0)|0)!=0){f=e|0;g=e+16|0;while(1){h=c[f>>2]|0;L1111:do{switch(h|0){case 768:{if((c[g>>2]|0)!=27){break L1111}c[2914]=(c[2914]|0)==0?1:2;switch(h|0){case 1026:case 1793:case 1796:{j=824;break};case 1025:case 1792:case 1795:{j=823;break};default:{}}break};case 1026:case 1793:case 1796:{j=824;break};case 256:{c[2914]=(c[2914]|0)==0?1:2;break};case 1025:case 1792:case 1795:{j=823;break};default:{}}}while(0);if((j|0)==823){j=0;a[9576]=1;if((h|0)==1026|(h|0)==1793|(h|0)==1796){j=824}}if((j|0)==824){j=0;a[9576]=0}if((bd(e|0)|0)==0){break L1107}}}}while(0);do{if((c[2898]|0)!=0){e=c[3064]|0;j=c[3065]|0;g=0;if((j|0)>(g|0)|(j|0)==(g|0)&e>>>0>1e5>>>0){c[3064]=1e5;c[3065]=0;k=0;l=1e5}else{k=j;l=e}e=a[624]|0;j=e?0:0;if(!((k|0)>=(j|0)&((k|0)>(j|0)|l>>>0>=(e?66666:33333)>>>0)&a[9632])){break}do{e=bs(0)|0;do{if((a[e+122|0]|0)==0){c[2906]=0}else{if((c[2906]|0)==0){c[2906]=1;break}else{c[2906]=2;break}}}while(0);do{if((a[e+120|0]|0)==0){c[2907]=0}else{if((c[2907]|0)==0){c[2907]=1;break}else{c[2907]=2;break}}}while(0);do{if((a[e+1106|0]|0)==0){c[2908]=0}else{if((c[2908]|0)==0){c[2908]=1;break}else{c[2908]=2;break}}}while(0);do{if((a[e+1105|0]|0)==0){c[2909]=0}else{if((c[2909]|0)==0){c[2909]=1;break}else{c[2909]=2;break}}}while(0);do{if((a[e+1104|0]|0)==0){c[2910]=0}else{if((c[2910]|0)==0){c[2910]=1;break}else{c[2910]=2;break}}}while(0);do{if((a[e+1103|0]|0)==0){c[2911]=0}else{if((c[2911]|0)==0){c[2911]=1;break}else{c[2911]=2;break}}}while(0);do{if((a[e+32|0]|0)==0){c[2912]=0}else{if((c[2912]|0)==0){c[2912]=1;break}else{c[2912]=2;break}}}while(0);do{if(((a[e+1112|0]|a[e+13|0])&255|a[9576]&1|0)==0){c[2913]=0}else{if((c[2913]|0)==0){c[2913]=1;break}else{c[2913]=2;break}}}while(0);do{if((a[e+112|0]|0)==0){c[2915]=0}else{if((c[2915]|0)==0){c[2915]=1;break}else{c[2915]=2;break}}}while(0);bY[c[2898]&15](0);e=a[624]|0;h=e?66666:33333;j=e?0:0;e=dj(c[3064]|0,c[3065]|0,h,j)|0;g=D;c[3064]=e;c[3065]=g;c[2914]=0;}while((g|0)>=(j|0)&((g|0)>(j|0)|e>>>0>=h>>>0)&a[9632])}}while(0);l=c[3058]|0;if((l|0)==0){m=d;n=bm(d|0,0)|0;o=d|0;p=c[o>>2]|0;q=p;r=(p|0)<0|0?-1:0;s=1e6;t=0;u=dt(q,r,s,t)|0;v=D;w=d+4|0;x=c[w>>2]|0;y=x;z=(x|0)<0|0?-1:0;A=di(u,v,y,z)|0;B=D;C=11600;E=c[C>>2]|0;F=11604;G=c[F>>2]|0;H=dj(A,B,E,G)|0;I=D;J=12256;K=c[J>>2]|0;L=12260;M=c[L>>2]|0;N=di(H,I,K,M)|0;O=D;P=12256;c[P>>2]=N;Q=12260;c[Q>>2]=O;R=11600;c[R>>2]=A;S=11604;c[S>>2]=B;i=b;return}bW[l&7](0,(+((c[3064]|0)>>>0)+ +(c[3065]|0)*4294967296.0)/(a[624]|0?66666.0:33333.0));cs();m=d;n=bm(d|0,0)|0;o=d|0;p=c[o>>2]|0;q=p;r=(p|0)<0|0?-1:0;s=1e6;t=0;u=dt(q,r,s,t)|0;v=D;w=d+4|0;x=c[w>>2]|0;y=x;z=(x|0)<0|0?-1:0;A=di(u,v,y,z)|0;B=D;C=11600;E=c[C>>2]|0;F=11604;G=c[F>>2]|0;H=dj(A,B,E,G)|0;I=D;J=12256;K=c[J>>2]|0;L=12260;M=c[L>>2]|0;N=di(H,I,K,M)|0;O=D;P=12256;c[P>>2]=N;Q=12260;c[Q>>2]=O;R=11600;c[R>>2]=A;S=11604;c[S>>2]=B;i=b;return}function cv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;b=i;i=i+296|0;d=b|0;do{if((a|0)!=0){e=df(a|0)|0;if((e|0)<4){break}if((aK(a+(e-4)|0,3856,4)|0)!=0){if((aK(a+(e-4)|0,3848,4)|0)!=0){break}}e=db(24)|0;f=e+12|0;g=e+16|0;h=ba(a|0,9056)|0;L1203:do{if((h|0)==0){dc(0);j=78;k=961}else{bF(h|0,0,2)|0;l=aV(h|0)|0;bJ(h|0);m=db(l)|0;n=(l|0)==0;if(n|(m|0)==0){o=0}else{o=by(m|0,1,l|0,h|0)|0}as(h|0)|0;l=(m|0)!=0|n;n=l?0:83;if(l){c[d+24>>2]=1;c[d+28>>2]=1;c[d+32>>2]=0;dh(d|0,0,24);c[d+36>>2]=2;c[d+40>>2]=1;c[d+44>>2]=2048;c[d+48>>2]=3;c[d+52>>2]=128;c[d+56>>2]=1;c[d+60>>2]=0;c[d+64>>2]=0;c[d+68>>2]=0;c[d+76>>2]=1;c[d+80>>2]=1;c[d+72>>2]=2;c[d+88>>2]=0;c[d+84>>2]=0;c[d+92>>2]=0;c[d+96>>2]=1;l=d+108|0;dh(d+160|0,0,16);dh(l|0,0,24);c[d+144>>2]=6;c[d+148>>2]=8;c[d+152>>2]=0;c[d+156>>2]=0;c[d+140>>2]=0;c[d+132>>2]=0;c[d+136>>2]=0;c[d+252>>2]=0;dh(d+268|0,0,24);dh(d+176|0,0,52);c[d+292>>2]=1;c[d+100>>2]=6;c[d+104>>2]=8;p=cr(e,f,g,d,m,o)|0;q=c[l>>2]|0;if((q|0)!=0){dc(q)}c[l>>2]=0;c[d+112>>2]=0;co(d+132|0);r=p;s=m}else{r=n;s=0}dc(s);if((r|0)==0){c[e+4>>2]=(c[f>>2]|0)/-2|0;c[e+8>>2]=(c[g>>2]|0)/-2|0;c[e+20>>2]=-1;t=e;i=b;return t|0}else{u=r}switch(u|0){case 1:{v=6240;w=u;break L1203;break};case 10:{v=5304;w=u;break L1203;break};case 11:{v=4768;w=u;break L1203;break};case 13:{v=4120;w=u;break L1203;break};case 14:{v=4120;w=u;break L1203;break};case 15:{v=4120;w=u;break L1203;break};case 16:{v=3944;w=u;break L1203;break};case 17:{v=9520;w=u;break L1203;break};case 18:{v=9440;w=u;break L1203;break};case 19:{v=9520;w=u;break L1203;break};case 20:{v=9272;w=u;break L1203;break};case 21:{v=9064;w=u;break L1203;break};case 22:{v=9520;w=u;break L1203;break};case 23:{v=8976;w=u;break L1203;break};case 24:{v=8912;w=u;break L1203;break};case 25:{v=8808;w=u;break L1203;break};case 26:{v=8712;w=u;break L1203;break};case 27:{v=8640;w=u;break L1203;break};case 28:{v=8528;w=u;break L1203;break};case 29:{v=8448;w=u;break L1203;break};case 30:{v=8344;w=u;break L1203;break};case 31:{v=8240;w=u;break L1203;break};case 32:{v=8152;w=u;break L1203;break};case 33:{v=8088;w=u;break L1203;break};case 34:{v=8032;w=u;break L1203;break};case 35:{v=7944;w=u;break L1203;break};case 36:{v=7880;w=u;break L1203;break};case 37:{v=7808;w=u;break L1203;break};case 38:{v=7752;w=u;break L1203;break};case 39:{v=7640;w=u;break L1203;break};case 40:{v=7568;w=u;break L1203;break};case 41:{v=7480;w=u;break L1203;break};case 42:{v=7360;w=u;break L1203;break};case 43:{v=7288;w=u;break L1203;break};case 44:{v=7216;w=u;break L1203;break};case 45:{v=7152;w=u;break L1203;break};case 46:{v=7056;w=u;break L1203;break};case 47:{v=6984;w=u;break L1203;break};case 48:{v=6920;w=u;break L1203;break};case 49:{v=6824;w=u;break L1203;break};case 50:{v=6824;w=u;break L1203;break};case 51:{v=6768;w=u;break L1203;break};case 52:{v=6704;w=u;break L1203;break};case 53:{v=6648;w=u;break L1203;break};case 54:{v=6584;w=u;break L1203;break};case 55:{v=6536;w=u;break L1203;break};case 56:{v=6456;w=u;break L1203;break};case 57:{v=6400;w=u;break L1203;break};case 58:{v=6336;w=u;break L1203;break};case 59:{v=6264;w=u;break L1203;break};case 60:{v=6160;w=u;break L1203;break};case 61:{v=6072;w=u;break L1203;break};case 62:{v=5976;w=u;break L1203;break};case 63:{v=5872;w=u;break L1203;break};case 64:{v=5808;w=u;break L1203;break};case 66:{v=5712;w=u;break L1203;break};case 67:{v=5616;w=u;break L1203;break};case 68:{v=5520;w=u;break L1203;break};case 69:{v=5448;w=u;break L1203;break};case 71:{v=5360;w=u;break L1203;break};case 72:{v=5208;w=u;break L1203;break};case 73:{v=5184;w=u;break L1203;break};case 74:{v=5128;w=u;break L1203;break};case 75:{v=5064;w=u;break L1203;break};case 76:{v=5016;w=u;break L1203;break};case 77:{v=4984;w=u;break L1203;break};case 78:{j=u;k=961;break L1203;break};case 79:{v=4920;w=u;break L1203;break};case 80:{v=4880;w=u;break L1203;break};case 81:{v=4824;w=u;break L1203;break};case 82:{v=4696;w=u;break L1203;break};case 83:{v=4664;w=u;break L1203;break};case 84:{v=4576;w=u;break L1203;break};case 85:{v=4544;w=u;break L1203;break};case 86:{v=4488;w=u;break L1203;break};case 87:{v=4400;w=u;break L1203;break};case 88:{v=4320;w=u;break L1203;break};case 89:{v=4256;w=u;break L1203;break};case 90:{v=4216;w=u;break L1203;break};case 0:{v=6888;w=u;break L1203;break};default:{v=4168;w=u;break L1203}}}}while(0);if((k|0)==961){v=4952;w=j}a_(3800,(x=i,i=i+16|0,c[x>>2]=w,c[x+8>>2]=v,x)|0)|0;i=x;t=0;i=b;return t|0}}while(0);a_(3752,(x=i,i=i+8|0,c[x>>2]=a,x)|0)|0;i=x;t=0;i=b;return t|0}function cw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0;g=a[d]|0;if(g<<24>>24==0){return}h=b+16|0;i=b;j=b+4|0;k=b+12|0;b=e;e=d;d=g;while(1){g=d<<24>>24;if((g|0)<(c[h>>2]|0)){l=c[i>>2]|0;m=c[j>>2]|0;n=(c[l+4>>2]|0)+b|0;o=a[9592]|0?480:0;p=(c[l+8>>2]|0)+f|0;q=o-(c[l+16>>2]|0)-p|0;r=1.0/+(c[l+12>>2]|0);s=+(m|0);t=s*+(g-(c[k>>2]|0)|0)*r;if((c[3060]|0)!=(l|0)){cs();c[3060]=l}cl(c[2896]|0,+(n|0),+(o-p|0),t,+(n+m|0),+(q|0),s*r+t)}q=e+1|0;m=a[q]|0;if(m<<24>>24==0){break}b=(c[j>>2]|0)+b|0;e=q;d=m}return}function cx(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;j=g-1|0;g=h-1|0;h=0;do{k=c[11120+(h<<2)>>2]|0;l=a+(h<<2)|0;c[l>>2]=((j+k-(c[11056+(h<<2)>>2]|0)|0)>>>0)/(k>>>0)|0;k=c[11088+(h<<2)>>2]|0;m=((g+k-(c[11024+(h<<2)>>2]|0)|0)>>>0)/(k>>>0)|0;k=b+(h<<2)|0;c[k>>2]=m;if((c[l>>2]|0)==0){c[k>>2]=0;n=997}else{if((m|0)==0){n=997}}if((n|0)==997){n=0;c[l>>2]=0}h=h+1|0;}while(h>>>0<7>>>0);c[f>>2]=0;c[e>>2]=0;c[d>>2]=0;h=0;n=0;while(1){g=a+(h<<2)|0;j=c[g>>2]|0;l=b+(h<<2)|0;do{if((j|0)==0){o=0}else{m=c[l>>2]|0;if((m|0)==0){o=0;break}o=$(m,((($(j,i)|0)+7|0)>>>3)+1|0)|0}}while(0);j=h+1|0;m=d+(j<<2)|0;c[m>>2]=o+n;c[e+(j<<2)>>2]=($((($(c[g>>2]|0,i)|0)+7|0)>>>3,c[l>>2]|0)|0)+(c[e+(h<<2)>>2]|0);c[f+(j<<2)>>2]=((($($(c[l>>2]|0,i)|0,c[g>>2]|0)|0)+7|0)>>>3)+(c[f+(h<<2)>>2]|0);if(j>>>0>=7>>>0){break}h=j;n=c[m>>2]|0}return}function cy(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=(g+7|0)>>>3;i=(($(g,e)|0)+7|0)>>>3;if((f|0)==0){j=0;return j|0}e=i+1|0;g=(i|0)==0;k=(h|0)==0;l=h>>>0>>0;m=0;n=0;L1341:while(1){o=$(n,i)|0;p=$(n,e)|0;q=b+o|0;r=p+1|0;L1343:do{switch(d[c+p|0]|0|0){case 1:{if(!k){s=0;do{a[b+(s+o)|0]=a[c+(s+r)|0]|0;s=s+1|0;}while(s>>>0>>0)}if(!l){break L1343}s=o-h|0;t=h;do{a[b+(t+o)|0]=(a[b+(s+t)|0]|0)+(a[c+(t+r)|0]|0)&255;t=t+1|0;}while(t>>>0>>0);break};case 0:{if(g){break L1343}else{u=0}do{a[b+(u+o)|0]=a[c+(u+r)|0]|0;u=u+1|0;}while(u>>>0>>0);break};case 2:{if((m|0)==0){if(g){break L1343}else{v=0}do{a[b+(v+o)|0]=a[c+(v+r)|0]|0;v=v+1|0;}while(v>>>0>>0)}else{if(g){break L1343}else{w=0}do{a[b+(w+o)|0]=(a[m+w|0]|0)+(a[c+(w+r)|0]|0)&255;w=w+1|0;}while(w>>>0>>0)}break};case 3:{if((m|0)==0){if(!k){t=0;do{a[b+(t+o)|0]=a[c+(t+r)|0]|0;t=t+1|0;}while(t>>>0>>0)}if(!l){break L1343}t=o-h|0;s=h;do{a[b+(s+o)|0]=((d[b+(t+s)|0]|0)>>>1)+(a[c+(s+r)|0]|0)&255;s=s+1|0;}while(s>>>0>>0)}else{if(!k){s=0;do{a[b+(s+o)|0]=((d[m+s|0]|0)>>>1)+(a[c+(s+r)|0]|0)&255;s=s+1|0;}while(s>>>0>>0)}if(!l){break L1343}s=o-h|0;t=h;do{a[b+(t+o)|0]=(((d[m+t|0]|0)+(d[b+(s+t)|0]|0)|0)>>>1)+(d[c+(t+r)|0]|0)&255;t=t+1|0;}while(t>>>0>>0)}break};case 4:{if((m|0)==0){if(!k){t=0;do{a[b+(t+o)|0]=a[c+(t+r)|0]|0;t=t+1|0;}while(t>>>0>>0)}if(!l){break L1343}t=o-h|0;s=h;while(1){a[b+(s+o)|0]=(a[b+(t+s)|0]|0)+(a[c+(s+r)|0]|0)&255;s=s+1|0;if(s>>>0>=i>>>0){break L1343}}}if(!k){s=0;do{a[b+(s+o)|0]=(a[m+s|0]|0)+(a[c+(s+r)|0]|0)&255;s=s+1|0;}while(s>>>0>>0)}if(l){x=h}else{break L1343}do{s=x-h|0;t=a[b+(s+o)|0]|0;y=a[m+x|0]|0;z=a[m+s|0]|0;s=y&255;A=z&255;B=s-A|0;C=(B|0)>-1?B:-B|0;B=t&255;D=B-A|0;E=(D|0)>-1?D:-D|0;D=s+B+(A*-2|0)|0;A=((D|0)>-1?D:-D|0)<<16>>16;if((A|0)<(C|0)&(A|0)<(E|0)){F=z}else{F=(E|0)<(C|0)?y:t}a[b+(x+o)|0]=F+(a[c+(x+r)|0]|0)&255;x=x+1|0;}while(x>>>0>>0);break};default:{j=36;G=1047;break L1341}}}while(0);r=n+1|0;if(r>>>0>>0){m=q;n=r}else{j=0;G=1048;break}}if((G|0)==1047){return j|0}else if((G|0)==1048){return j|0}return 0}function cz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;b=a+16|0;d=db(c[b>>2]<<2)|0;e=a+4|0;c[e>>2]=d;f=(d|0)==0;d=f?83:0;g=a+12|0;h=c[g>>2]|0;i=h+1|0;do{if((i&1073741823|0)==0){j=0;k=1052}else{l=db(i<<3)|0;if((l|0)==0){m=0;n=0;o=83;break}j=l;k=1052}}while(0);do{if((k|0)==1052){l=j;if((i|0)!=0){dh(l|0,0,(h<<2)+4|0)}p=c[g>>2]|0;q=p+1|0;if((q&1073741823|0)==0){r=0}else{s=db(q<<3)|0;if((s|0)==0){m=j;n=0;o=83;break}r=s}s=r;if((q|0)!=0){dh(s|0,0,(p<<2)+4|0)}if(f){m=j;n=r;o=d;break}p=c[b>>2]|0;if((p|0)==0){t=0}else{q=c[a+8>>2]|0;u=0;while(1){v=j+(c[q+(u<<2)>>2]<<2)|0;c[v>>2]=(c[v>>2]|0)+1;v=u+1|0;if(v>>>0

>>0){u=v}else{t=p;break}}}p=c[g>>2]|0;if((p|0)!=0){u=1;q=c[r>>2]|0;do{q=(c[j+(u-1<<2)>>2]|0)+q<<1;c[r+(u<<2)>>2]=q;u=u+1|0;}while(u>>>0<=p>>>0)}if((t|0)!=0){p=a+8|0;u=0;q=t;while(1){v=c[(c[p>>2]|0)+(u<<2)>>2]|0;if((v|0)==0){w=q}else{x=r+(v<<2)|0;v=c[x>>2]|0;c[x>>2]=v+1;c[(c[e>>2]|0)+(u<<2)>>2]=v;w=c[b>>2]|0}v=u+1|0;if(v>>>0>>0){u=v;q=w}else{break}}}dc(l);dc(s);q=c[b>>2]|0;u=db(q<<3)|0;p=u;v=a|0;c[v>>2]=p;if((u|0)==0){y=83;return y|0}L1443:do{if((q&2147483647|0)==0){z=q}else{c[p>>2]=32767;if(q<<1>>>0>1>>>0){A=1;B=p}else{z=q;break}while(1){c[B+(A<<2)>>2]=32767;u=A+1|0;x=c[b>>2]|0;if(u>>>0>=x<<1>>>0){z=x;break L1443}A=u;B=c[v>>2]|0}}}while(0);if((z|0)==0){y=0;return y|0}q=a+8|0;p=0;s=0;l=0;u=c[q>>2]|0;x=z;L1452:while(1){C=c[u+(l<<2)>>2]|0;if((C|0)==0){D=p;E=s;F=u;G=x}else{H=p;I=s;J=0;K=C;C=x;while(1){if(I>>>0>(C-2|0)>>>0){y=55;k=1096;break L1452}L=(c[v>>2]|0)+(((c[(c[e>>2]|0)+(l<<2)>>2]|0)>>>((K+~J|0)>>>0)&1|I<<1)<<2)|0;M=c[L>>2]|0;do{if((M|0)==32767){N=J+1|0;if((N|0)==(K|0)){c[L>>2]=l;O=0;P=H;Q=K;break}else{R=H+1|0;c[L>>2]=R+C;O=R;P=R;Q=N;break}}else{O=M-C|0;P=H;Q=J+1|0}}while(0);M=c[q>>2]|0;L=c[M+(l<<2)>>2]|0;N=c[b>>2]|0;if(Q>>>0>>0){H=P;I=O;J=Q;K=L;C=N}else{D=P;E=O;F=M;G=N;break}}}C=l+1|0;if(C>>>0>>0){p=D;s=E;l=C;u=F;x=G}else{break}}if((k|0)==1096){return y|0}if((G&2147483647|0)==0){y=0;return y|0}else{S=0;T=G}while(1){x=(c[v>>2]|0)+(S<<2)|0;if((c[x>>2]|0)==32767){c[x>>2]=0;U=c[b>>2]|0}else{U=T}x=S+1|0;if(x>>>0>>0){S=x;T=U}else{y=0;break}}return y|0}}while(0);dc(m);dc(n);y=o;return y|0}function cA(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;a=(f|0)/4|0;dh(e|0,0,f|0);f=c[3062]|0;if((f|0)==0){return}g=e;e=f;f=0;L1483:while(1){h=f+12|0;L1485:do{if((f|0)==0){i=e|0;j=c[i>>2]|0;if((j|0)!=0){k=e;l=i;m=j;n=1106;break}j=e+12|0;i=c[j>>2]|0;c[j>>2]=c[3052];c[3052]=e;c[3062]=i;o=0;p=i}else{i=e;while(1){j=i|0;q=c[j>>2]|0;if((q|0)!=0){k=i;l=j;m=q;n=1106;break L1485}q=i+12|0;j=c[q>>2]|0;c[q>>2]=c[3052];c[3052]=i;c[h>>2]=j;if((j|0)==0){n=1126;break L1483}else{i=j}}}}while(0);if((n|0)==1106){n=0;h=k+4|0;i=c[h>>2]|0;j=(c[m+20>>2]|0)+(i<<1)|0;q=(c[m+16>>2]|0)-i|0;if((q|0)>(a|0)){r=a}else{c[l>>2]=0;r=q}if((r|0)>0){q=k+9|0;s=k+8|0;t=j;j=0;u=g;while(1){v=(($(d[q]|0,b[t>>1]|0)|0)>>8)+(b[u>>1]|0)|0;do{if((v|0)>16384){b[u>>1]=16384}else{if((v|0)<-16384){b[u>>1]=-16384;break}else{b[u>>1]=v&65535;break}}}while(0);v=u+2|0;w=(($(d[s]|0,b[t>>1]|0)|0)>>8)+(b[v>>1]|0)|0;do{if((w|0)>16384){b[v>>1]=16384}else{if((w|0)<-16384){b[v>>1]=-16384;break}else{b[v>>1]=w&65535;break}}}while(0);w=j+1|0;if((w|0)<(r|0)){t=t+2|0;j=w;u=u+4|0}else{break}}x=c[h>>2]|0}else{x=i}c[h>>2]=x+r;o=k;p=c[k+12>>2]|0}if((p|0)==0){n=1127;break}else{e=p;f=o}}if((n|0)==1126){return}else if((n|0)==1127){return}}function cB(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;i=i+56|0;e=d+8|0;f=d+16|0;g=d+24|0;h=d+32|0;j=d+40|0;k=d+48|0;l=d|0;dh(l|0,0,5);m=ba(a|0,9056)|0;if((m|0)==0){a2(352)|0;n=0;i=d;return n|0}by(l|0,4,1,m|0)|0;if((aI(l|0,5176)|0)!=0){a2(264)|0;as(m|0)|0;n=0;i=d;return n|0}bF(m|0,4,1)|0;by(l|0,4,1,m|0)|0;if((aI(l|0,4096)|0)!=0){a2(184)|0;as(m|0)|0;n=0;i=d;return n|0}by(l|0,1,4,m|0)|0;by(h|0,1,4,m|0)|0;a=c[h>>2]|0;if((a|0)<14){a2(128)|0;as(m|0)|0;n=0;i=d;return n|0}by(e|0,1,2,m|0)|0;if((b[e>>1]|0)!=1){a2(48)|0;as(m|0)|0;n=0;i=d;return n|0}by(f|0,1,2,m|0)|0;by(j|0,1,4,m|0)|0;bF(m|0,2,1)|0;bF(m|0,2,1)|0;by(g|0,1,2,m|0)|0;bF(m|0,a-14|0,1)|0;a=c[j>>2]|0;j=b[f>>1]|0;f=b[g>>1]|0;do{if((a|0)==44100&j<<16>>16==1){if(f<<16>>16!=2){o=1;p=f;break}L1545:do{if((by(l|0,1,4,m|0)|0)>=4){g=k;do{if((aI(l|0,9048)|0)==0){break L1545}by(g|0,1,4,m|0)|0;bF(m|0,c[k>>2]|0,1)|0;}while((by(l|0,1,4,m|0)|0)>=4)}}while(0);if((aI(l|0,9048)|0)==0){g=k;by(g|0,1,4,m|0)|0;g=c[k>>2]|0;e=db(g)|0;by(e|0,g|0,1,m|0)|0;as(m|0)|0;h=db(28)|0;c[h>>2]=44100;c[h+4>>2]=1;c[h+20>>2]=e;c[h+12>>2]=2;c[h+8>>2]=0;c[h+16>>2]=(g|0)/2|0;c[h+24>>2]=c[2890];c[2890]=h;n=h;i=d;return n|0}else{a2(8)|0;as(m|0)|0;n=0;i=d;return n|0}}else{o=j<<16>>16;p=f}}while(0);a_(9168,(f=i,i=i+24|0,c[f>>2]=a,c[f+8>>2]=o,c[f+16>>2]=p<<16>>16,f)|0)|0;i=f;as(m|0)|0;n=0;i=d;return n|0}function cC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0;f=c[b>>2]|0;if((f|0)!=0){g=c[f>>2]|0;h=c[f+4>>2]|0;i=g;j=(c[g+4>>2]|0)+d|0;k=a[9592]|0?480:0;l=(c[g+8>>2]|0)+e|0;m=k-(c[g+16>>2]|0)-l|0;n=1.0/+(c[g+12>>2]|0);o=+(h|0);p=o*+(((c[b+12>>2]|0)/(c[f+16>>2]|0)|0|0)%(c[f+12>>2]|0)|0|0)*n;if((c[3060]|0)!=(i|0)){cs();c[3060]=i}cl(c[2896]|0,+(j|0),+(k-l|0),p,+(j+h|0),+(m|0),o*n+p);return}m=c[b+4>>2]|0;if((m|0)==0){return}b=m;h=(c[m+4>>2]|0)+d|0;d=(a[9592]|0?480:0)-((c[m+8>>2]|0)+e)|0;p=+((c[m+12>>2]|0)+h|0);n=+(d-(c[m+16>>2]|0)|0);if((c[3060]|0)!=(b|0)){cs();c[3060]=b}cl(c[2896]|0,+(h|0),+(d|0),0.0,p,n,1.0);return}function cD(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0;b=c[3048]|0;if((b|0)==0){d=db(216)|0}else{c[3048]=c[b+212>>2];d=b}b=d+4|0;c[b>>2]=0;e=d+32|0;dh(d+16|0,0,16);c[e>>2]=9;f=d+36|0;c[f>>2]=1;h=d+40|0;i=d+68|0;dh(h|0,0,20);g[i>>2]=1.0;j=d+72|0;g[j>>2]=1.0;k=d+76|0;g[k>>2]=1.0;l=d+80|0;g[l>>2]=1.0;m=d+84|0;n=d+116|0;c[n>>2]=0;o=d+132|0;dh(m|0,0,28);g[o>>2]=1.0;p=d+128|0;g[p>>2]=1.0;q=d+124|0;g[q>>2]=1.0;r=d+120|0;g[r>>2]=1.0;s=d+148|0;g[s>>2]=1.0;t=d+144|0;g[t>>2]=1.0;u=d+140|0;g[u>>2]=1.0;v=d+136|0;g[v>>2]=1.0;w=d+152|0;c[d+212>>2]=0;dh(w|0,0,44);c[d>>2]=a;c[b>>2]=c[a+4>>2];x=+g[a+24>>2];g[d+24>>2]=x;y=+g[a+28>>2];g[d+28>>2]=y;c[e>>2]=c[a+32>>2];c[f>>2]=c[a+36>>2];g[h>>2]=+g[a+40>>2];z=+g[a+52>>2];g[d+52>>2]=z;A=+g[a+56>>2];g[d+56>>2]=A;B=+g[a+68>>2];g[i>>2]=B;C=+g[a+72>>2];g[j>>2]=C;D=+g[a+76>>2];g[k>>2]=D;g[l>>2]=+g[a+80>>2];g[m>>2]=+g[a+84>>2];g[d+88>>2]=+g[a+88>>2];g[d+92>>2]=+g[a+92>>2];g[d+96>>2]=+g[a+96>>2];g[d+100>>2]=+g[a+100>>2];c[d+108>>2]=c[a+108>>2];c[d+104>>2]=c[a+104>>2];c[n>>2]=c[a+116>>2];g[r>>2]=+g[a+120>>2];g[q>>2]=+g[a+124>>2];g[p>>2]=+g[a+128>>2];g[o>>2]=+g[a+132>>2];g[v>>2]=+g[a+136>>2];g[u>>2]=+g[a+140>>2];g[t>>2]=+g[a+144>>2];g[s>>2]=+g[a+148>>2];s=c[a+152>>2]|0;c[w>>2]=s;c[d+156>>2]=c[a+156>>2];c[d+160>>2]=c[a+160>>2];c[d+164>>2]=c[a+164>>2];c[d+168>>2]=c[a+168>>2];c[d+172>>2]=c[a+172>>2];c[d+176>>2]=c[a+176>>2];c[d+180>>2]=c[a+180>>2];c[d+184>>2]=c[a+184>>2];c[d+188>>2]=c[a+188>>2];c[d+192>>2]=c[a+192>>2];E=(D>B?D:B)*.5+10.0;D=(C>B?C:B)*.5+10.0;B=z+x;if(z>0.0){g[d+196>>2]=B+D;g[d+200>>2]=x-D}else{g[d+200>>2]=B-D;g[d+196>>2]=x+D}D=A+y;if(A>0.0){g[d+204>>2]=E+D;g[d+208>>2]=y-E}else{g[d+208>>2]=D-E;g[d+204>>2]=E+y}if((s|0)==0){return d|0}bY[s&15](d);return d|0}function cE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0;e=i;i=i+48|0;f=e|0;h=e+8|0;j=e+16|0;k=e+24|0;l=e+32|0;m=e+40|0;n=(c[b+32>>2]|c[a+32>>2])&6;if((n|0)==2){o=+g[a+80>>2];p=+g[b+80>>2];do{if(o<=0.0&p>0.0){q=a;r=b}else{if(p<=0.0&o>0.0){q=b;r=a;break}else{s=0}i=e;return s|0}}while(0);t=h|0;g[t>>2]=0.0;u=h+4|0;g[u>>2]=-1.0;o=(+g[r+76>>2]+ +g[q+76>>2])*.5;v=j|0;g[v>>2]=+g[q+24>>2]+o*0.0;g[j+4>>2]=+g[q+28>>2]+o*-1.0;if((ck(r+24|0,r+52|0,t,v,+g[q+72>>2]+ +g[r+72>>2],f)|0)==0){s=0;i=e;return s|0}o=+g[f>>2];if((d|0)==0){s=1;i=e;return s|0}v=c[d>>2]|0;j=c[3050]|0;if((j|0)==0){w=db(32)|0}else{c[3050]=c[j+28>>2];w=j}j=w+28|0;c[j>>2]=0;c[w>>2]=2;c[w+4>>2]=r;c[w+8>>2]=q;g[w+12>>2]=o;g[w+16>>2]=+g[t>>2];g[w+20>>2]=+g[u>>2];c[w+24>>2]=1;do{if((v|0)==0){x=0;y=1196}else{u=v;t=0;while(1){if(+g[u+12>>2]>=o){z=u;A=t;break}q=c[u+28>>2]|0;if((q|0)==0){z=0;A=u;break}else{t=u;u=q}}if((A|0)==0){x=z;y=1196;break}c[A+28>>2]=w;B=z}}while(0);if((y|0)==1196){c[d>>2]=w;B=x}c[j>>2]=B;s=1;i=e;return s|0}else if((n|0)==4){o=+g[a+80>>2];p=+g[b+80>>2];do{if(o<=0.0&p>0.0){C=a;D=b}else{if(p<=0.0&o>0.0){C=b;D=a;break}else{s=0}i=e;return s|0}}while(0);g[f>>2]=1.0;n=l|0;g[n>>2]=0.0;B=l+4|0;g[B>>2]=-1.0;l=D+76|0;j=C+76|0;o=(+g[l>>2]+ +g[j>>2])*.5;x=C+24|0;w=m|0;g[w>>2]=+g[x>>2]+o*0.0;z=C+28|0;A=m+4|0;g[A>>2]=+g[z>>2]+o*-1.0;m=C+72|0;v=D+72|0;u=D+24|0;t=D+52|0;do{if((ck(u,t,n,w,+g[m>>2]+ +g[v>>2],k)|0)!=0){o=+g[k>>2];if(o>=+g[f>>2]){break}g[h>>2]=+g[n>>2];g[h+4>>2]=+g[B>>2];g[f>>2]=o}}while(0);g[n>>2]=0.0;g[B>>2]=1.0;o=(+g[l>>2]+ +g[j>>2])*.5;g[w>>2]=+g[x>>2]+o*0.0;g[A>>2]=+g[z>>2]+o;do{if((ck(u,t,n,w,+g[m>>2]+ +g[v>>2],k)|0)!=0){o=+g[k>>2];if(o>=+g[f>>2]){break}g[h>>2]=+g[n>>2];g[h+4>>2]=+g[B>>2];g[f>>2]=o}}while(0);g[n>>2]=1.0;g[B>>2]=0.0;o=(+g[v>>2]+ +g[m>>2])*.5;g[w>>2]=+g[x>>2]+o;g[A>>2]=+g[z>>2]+o*0.0;do{if((ck(u,t,n,w,+g[j>>2]+ +g[l>>2],k)|0)==0){E=1}else{o=+g[k>>2];if(o>=+g[f>>2]){E=1;break}g[h>>2]=+g[n>>2];g[h+4>>2]=+g[B>>2];g[f>>2]=o;E=0}}while(0);g[n>>2]=-1.0;g[B>>2]=0.0;o=(+g[v>>2]+ +g[m>>2])*.5;g[w>>2]=+g[x>>2]+o*-1.0;g[A>>2]=+g[z>>2]+o*0.0;do{if((ck(u,t,n,w,+g[j>>2]+ +g[l>>2],k)|0)==0){F=E;G=+g[f>>2]}else{o=+g[k>>2];p=+g[f>>2];if(o>=p){F=E;G=p;break}g[h>>2]=+g[n>>2];g[h+4>>2]=+g[B>>2];g[f>>2]=o;F=0;G=o}}while(0);if(G>=1.0){s=0;i=e;return s|0}if((d|0)==0){s=1;i=e;return s|0}B=c[d>>2]|0;n=c[3050]|0;if((n|0)==0){H=db(32)|0}else{c[3050]=c[n+28>>2];H=n}n=H+28|0;c[n>>2]=0;c[H>>2]=2;c[H+4>>2]=D;c[H+8>>2]=C;g[H+12>>2]=G;g[H+16>>2]=+g[h>>2];g[H+20>>2]=+g[h+4>>2];c[H+24>>2]=F;do{if((B|0)==0){I=0;y=1223}else{F=B;C=0;while(1){if(+g[F+12>>2]>=G){J=F;K=C;break}D=c[F+28>>2]|0;if((D|0)==0){J=0;K=F;break}else{C=F;F=D}}if((K|0)==0){I=J;y=1223;break}c[K+28>>2]=H;L=J}}while(0);if((y|0)==1223){c[d>>2]=H;L=I}c[n>>2]=L;s=1;i=e;return s|0}else{G=+g[a+52>>2]- +g[b+52>>2];o=+g[a+56>>2]- +g[b+56>>2];L=h|0;p=+g[a+68>>2]+ +g[b+68>>2];M=+g[a+24>>2];N=M-p;O=p+M;if(G>0.0){Q=N;R=O+G}else{Q=N+G;R=O}O=+g[b+24>>2];if(OR){s=0;i=e;return s|0}R=+g[a+28>>2];Q=R-p;N=p+R;if(o>0.0){S=Q;T=N+o}else{S=Q+o;T=N}N=+g[b+28>>2];if(NT){s=0;i=e;return s|0}T=1.0/p;p=T*G;S=T*o;Q=p*p+S*S;if(Q==0.0){s=0;i=e;return s|0}U=T*M-T*O;V=T*R-N*T;W=(S*V+p*U)*2.0;p=W*W-Q*4.0*(V*V+U*U+-1.0);if(p<0.0){s=0;i=e;return s|0}U=Q*2.0;if(U==0.0){s=0;i=e;return s|0}Q=+P(p);p=(-0.0-W-Q)/U;V=(Q-W)/U;if(p<-0.0){y=1239}else{if(pV&V<=1.0){X=V;break}else{s=0}i=e;return s|0}}while(0);g[f>>2]=X;V=T*(X*G+M-O);g[L>>2]=V;O=T*(X*o+R-N);g[h+4>>2]=O;if((d|0)==0){s=1;i=e;return s|0}h=c[d>>2]|0;L=c[3050]|0;if((L|0)==0){Y=db(32)|0}else{c[3050]=c[L+28>>2];Y=L}L=Y+28|0;c[L>>2]=0;c[Y>>2]=1;c[Y+4>>2]=a;c[Y+8>>2]=b;g[Y+12>>2]=X;g[Y+16>>2]=V;g[Y+20>>2]=O;c[Y+24>>2]=0;do{if((h|0)==0){Z=0;y=1249}else{b=h;a=0;while(1){if(+g[b+12>>2]>=X){_=b;$=a;break}f=c[b+28>>2]|0;if((f|0)==0){_=0;$=b;break}else{a=b;b=f}}if(($|0)==0){Z=_;y=1249;break}c[$+28>>2]=Y;aa=_}}while(0);if((y|0)==1249){c[d>>2]=Y;aa=Z}c[L>>2]=aa;s=1;i=e;return s|0}return 0}function cF(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0.0,h=0,i=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0.0;c=+g[a+80>>2];do{if(c>0.0){e=b+80|0;f=+g[e>>2];if(f<=0.0){if(f>0.0){break}h=a+52|0;i=+g[h>>2];j=+g[d>>2];k=a+56|0;l=+g[k>>2];m=+g[d+4>>2];n=(+g[a+84>>2]+1.0)*(i*j+l*m);o=i-j*n;g[h>>2]=o;j=l-m*n;g[k>>2]=j;n=+g[a+76>>2];m=+g[a+68>>2];l=(n>m?n:m)*.5+10.0;n=+g[a+72>>2];i=(n>m?n:m)*.5+10.0;m=+g[a+24>>2];n=o+m;if(o>0.0){g[a+196>>2]=n+i;g[a+200>>2]=m-i}else{g[a+200>>2]=n-i;g[a+196>>2]=m+i}i=+g[a+28>>2];m=j+i;if(j>0.0){g[a+204>>2]=l+m;g[a+208>>2]=i-l;return}else{g[a+208>>2]=m-l;g[a+204>>2]=l+i;return}}i=c+f;k=a+52|0;l=+g[k>>2];m=+g[d>>2];h=a+56|0;j=+g[h>>2];p=d+4|0;n=+g[p>>2];o=+O(+(l*m+j*n));q=b+52|0;r=b+56|0;s=f*c*((c*+g[a+84>>2]+f*+g[b+84>>2])/i+1.0)*(o+ +O(+(m*+g[q>>2]+n*+g[r>>2])))/i;i=s/c;o=l-m*i;g[k>>2]=o;m=j-n*i;g[h>>2]=m;i=+g[a+76>>2];n=+g[a+68>>2];j=(i>n?i:n)*.5+10.0;i=+g[a+72>>2];l=(i>n?i:n)*.5+10.0;n=+g[a+24>>2];i=o+n;if(o>0.0){g[a+196>>2]=i+l;g[a+200>>2]=n-l}else{g[a+200>>2]=i-l;g[a+196>>2]=n+l}l=+g[a+28>>2];n=m+l;if(m>0.0){g[a+204>>2]=j+n;g[a+208>>2]=l-j}else{g[a+208>>2]=n-j;g[a+204>>2]=j+l}l=s/+g[e>>2];s=l*+g[p>>2];j=+g[d>>2]*l+ +g[q>>2];g[q>>2]=j;l=s+ +g[r>>2];g[r>>2]=l;s=+g[b+76>>2];n=+g[b+68>>2];m=(s>n?s:n)*.5+10.0;s=+g[b+72>>2];i=(s>n?s:n)*.5+10.0;n=+g[b+24>>2];s=j+n;if(j>0.0){g[b+196>>2]=s+i;g[b+200>>2]=n-i}else{g[b+200>>2]=s-i;g[b+196>>2]=n+i}i=+g[b+28>>2];n=l+i;if(l>0.0){g[b+204>>2]=m+n;g[b+208>>2]=i-m;return}else{g[b+208>>2]=n-m;g[b+204>>2]=m+i;return}}}while(0);do{if(c<=0.0){if(+g[b+80>>2]<=0.0){break}r=b+52|0;i=+g[r>>2];m=+g[d>>2];q=b+56|0;n=+g[q>>2];l=+g[d+4>>2];s=(+g[b+84>>2]+1.0)*(i*m+n*l);j=i+m*s;g[r>>2]=j;m=n+l*s;g[q>>2]=m;s=+g[b+76>>2];l=+g[b+68>>2];n=(s>l?s:l)*.5+10.0;s=+g[b+72>>2];i=(s>l?s:l)*.5+10.0;l=+g[b+24>>2];s=j+l;if(j>0.0){g[b+196>>2]=s+i;g[b+200>>2]=l-i}else{g[b+200>>2]=s-i;g[b+196>>2]=l+i}i=+g[b+28>>2];l=m+i;if(m>0.0){g[b+204>>2]=n+l;g[b+208>>2]=i-n;return}else{g[b+208>>2]=l-n;g[b+204>>2]=n+i;return}}}while(0);g[a+52>>2]=0.0;g[a+56>>2]=0.0;c=+g[a+76>>2];i=+g[a+68>>2];n=(c>i?c:i)*.5+10.0;c=+g[a+72>>2];l=(c>i?c:i)*.5+10.0;i=+g[a+24>>2];g[a+200>>2]=i+0.0-l;g[a+196>>2]=i+l;l=+g[a+28>>2];g[a+208>>2]=l+0.0-n;g[a+204>>2]=n+l;g[b+52>>2]=0.0;g[b+56>>2]=0.0;l=+g[b+76>>2];n=+g[b+68>>2];i=(l>n?l:n)*.5+10.0;l=+g[b+72>>2];c=(l>n?l:n)*.5+10.0;n=+g[b+24>>2];g[b+200>>2]=n+0.0-c;g[b+196>>2]=n+c;c=+g[b+28>>2];g[b+208>>2]=c+0.0-i;g[b+204>>2]=i+c;return}function cG(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0.0,f=0.0,h=0.0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0;e=+P(b*b+c*c);f=1.0/e;h=f*b;b=f*c;i=a+52|0;c=+g[i>>2];j=a+56|0;f=+g[j>>2];k=c*h+b*f;if(ke?e:l;l=c+h*k;g[i>>2]=l;h=b*k+f;g[j>>2]=h;m=l;n=h}else{m=c;n=f}f=+g[a+76>>2];c=+g[a+68>>2];h=(f>c?f:c)*.5+10.0;f=+g[a+72>>2];l=(f>c?f:c)*.5+10.0;c=+g[a+24>>2];f=m+c;if(m>0.0){g[a+196>>2]=f+l;g[a+200>>2]=c-l}else{g[a+200>>2]=f-l;g[a+196>>2]=c+l}l=+g[a+28>>2];c=n+l;if(n>0.0){g[a+204>>2]=h+c;g[a+208>>2]=l-h;return}else{g[a+208>>2]=c-h;g[a+204>>2]=h+l;return}}function cH(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0;b=c[2904]|0;d=c[2902]|0;if((b|0)<(d|0)){e=b;f=c[3056]|0;h=b;i=c[3054]|0}else{j=(d|0)==0?32:d<<1;c[2902]=j;d=j<<2;j=db(d)|0;k=db(d)|0;d=c[3056]|0;do{if((b|0)>0){l=c[3054]|0;m=0;while(1){c[j+(m<<2)>>2]=c[d+(m<<2)>>2];c[k+(m<<2)>>2]=c[l+(m<<2)>>2];n=m+1|0;if((n|0)<(b|0)){m=n}else{o=1326;break}}}else{if((d|0)!=0){o=1326;break}p=b;q=c[2904]|0}}while(0);if((o|0)==1326){dc(d);dc(c[3054]|0);d=c[2904]|0;p=d;q=d}c[3056]=j;c[3054]=k;e=p;f=j;h=q;i=k}c[f+(e<<2)>>2]=a;c[i+(h<<2)>>2]=1;i=h+1|0;c[2904]=i;h=a+32|0;e=c[h>>2]|0;do{if((e&16|0)==0){c[h>>2]=e|32;r=a+24|0}else{k=a+24|0;s=+g[k>>2];t=+g[a+8>>2];q=s>2];v=(q?s:t)-u;w=u+(q?t:s);s=+g[a+28>>2];t=+g[a+12>>2];q=s0){z=0}else{r=k;break}while(1){q=c[f+(z<<2)>>2]|0;s=+g[q+24>>2];do{if(!(v>s|w>2];if(x>t|y>2]=c[j>>2]|32}}while(0);q=z+1|0;if((q|0)<(i|0)){z=q}else{r=k;break}}}}while(0);y=+g[a+76>>2];x=+g[a+68>>2];w=(y>x?y:x)*.5+10.0;y=+g[a+72>>2];v=(y>x?y:x)*.5+10.0;x=+g[a+52>>2];y=+g[r>>2];s=x+y;if(x>0.0){g[a+196>>2]=s+v;g[a+200>>2]=y-v}else{g[a+200>>2]=s-v;g[a+196>>2]=v+y}y=+g[a+56>>2];v=+g[a+28>>2];s=y+v;if(y>0.0){g[a+204>>2]=w+s;g[a+208>>2]=v-w;return}else{g[a+208>>2]=s-w;g[a+204>>2]=w+v;return}}function cI(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0;d=c[2904]|0;e=c[3056]|0;f=0;while(1){if((f|0)>=(d|0)){h=0;i=1364;break}j=e+(f<<2)|0;if((c[j>>2]|0)==(b|0)){break}else{f=f+1|0}}if((i|0)==1364){return h|0}i=a[9616]|0;if(i){k=c[3054]|0;c[k+(f<<2)>>2]=-2;l=k}else{c[j>>2]=0;k=c[3054]|0;c[k+(f<<2)>>2]=0;l=k}a[9624]=1;k=b+32|0;m=c[k>>2]|0;do{if((m&16|0)==0){c[k>>2]=m|32}else{n=+g[b+24>>2];o=+g[b+8>>2];p=n>2];r=(p?n:o)-q;s=q+(p?o:n);n=+g[b+28>>2];o=+g[b+12>>2];p=n0){v=0}else{break}do{p=c[e+(v<<2)>>2]|0;n=+g[p+24>>2];do{if(!(r>n|s>2];if(t>o|u>2]=c[w>>2]|32}}while(0);v=v+1|0;}while((v|0)<(d|0))}}while(0);if((f|0)==-1){h=0;return h|0}if(i){c[j>>2]=b;c[l+(f<<2)>>2]=-1;h=1;return h|0}f=c[b+156>>2]|0;if((f|0)!=0){bY[f&15](b)}c[b+212>>2]=c[3048];c[3048]=b;h=1;return h|0}function cJ(b){b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,Q=0,R=0,S=0,T=0.0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0.0,af=0.0,ag=0.0,ah=0.0,ai=0.0,aj=0.0,ak=0.0,al=0.0,am=0.0,an=0.0,ao=0.0,ap=0.0,aq=0.0,ar=0.0,as=0.0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0,aH=0,aI=0,aJ=0,aK=0,aL=0,aM=0,aN=0,aO=0,aP=0,aQ=0,aR=0,aS=0,aT=0,aU=0,aV=0,aW=0,aX=0,aY=0.0,aZ=0.0,a_=0,a$=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,ba=0,bb=0,bc=0,bd=0,be=0,bf=0,bg=0,bh=0,bi=0,bj=0,bk=0,bl=0,bn=0,bo=0,bp=0,bq=0,br=0,bs=0,bt=0,bu=0,bv=0,bw=0;b=i;i=i+88|0;d=b|0;e=b+8|0;f=b+16|0;h=b+24|0;j=b+32|0;k=b+40|0;l=b+48|0;m=b+56|0;n=b+64|0;o=b+72|0;p=b+80|0;c[3046]=c[3042];c[3044]=c[3040];bm(o|0,0)|0;q=c[o>>2]|0;r=dt(q,(q|0)<0|0?-1:0,1e6,0)|0;q=c[o+4>>2]|0;o=di(r,D,q,(q|0)<0|0?-1:0)|0;q=D;r=c[2904]|0;if(a[9624]|0){if((r|0)>0){s=0;t=0;u=r;while(1){v=c[3056]|0;w=c[v+(s<<2)>>2]|0;do{if((w|0)==0){x=t;y=u}else{z=c[3054]|0;A=z+(s<<2)|0;B=c[A>>2]|0;if((B|0)==(-1|0)){C=c[w+156>>2]|0;if((C|0)==0){E=u}else{bY[C&15](w);E=c[2904]|0}c[w+212>>2]=c[3048];c[3048]=w;x=t;y=E;break}else if((B|0)==(-2|0)){x=t;y=u;break}else{if((s|0)>(t|0)){c[v+(t<<2)>>2]=w;c[z+(t<<2)>>2]=c[A>>2]}x=t+1|0;y=u;break}}}while(0);w=s+1|0;if((w|0)<(y|0)){s=w;t=x;u=y}else{F=x;break}}}else{F=0}c[2904]=F;a[9624]=0;a[9616]=0;G=F}else{G=r}a[9616]=1;do{if((G|0)>0){r=0;F=G;while(1){x=c[(c[3056]|0)+(r<<2)>>2]|0;do{if((x|0)==0){H=F}else{y=a[9584]|0;u=x+32|0;c[u>>2]=c[u>>2]&-65;u=c[x+160>>2]|0;if((u|0)==0){H=F;break}bZ[u&31](x,y?66:0);H=c[2904]|0}}while(0);x=r+1|0;if((x|0)<(H|0)){r=x;F=H}else{break}}if(!(a[9624]|0)){break}if((H|0)>0){F=0;r=0;x=H;while(1){y=c[3056]|0;u=c[y+(F<<2)>>2]|0;do{if((u|0)==0){I=r;J=x}else{t=c[3054]|0;s=t+(F<<2)|0;E=c[s>>2]|0;if((E|0)==(-2|0)){I=r;J=x;break}else if((E|0)==(-1|0)){E=c[u+156>>2]|0;if((E|0)==0){K=x}else{bY[E&15](u);K=c[2904]|0}c[u+212>>2]=c[3048];c[3048]=u;I=r;J=K;break}else{if((F|0)>(r|0)){c[y+(r<<2)>>2]=u;c[t+(r<<2)>>2]=c[s>>2]}I=r+1|0;J=x;break}}}while(0);u=F+1|0;if((u|0)<(J|0)){F=u;r=I;x=J}else{L=I;break}}}else{L=0}c[2904]=L;a[9624]=0;a[9616]=0}}while(0);bm(n|0,0)|0;L=c[n>>2]|0;I=dt(L,(L|0)<0|0?-1:0,1e6,0)|0;L=c[n+4>>2]|0;n=di(I,D,L,(L|0)<0|0?-1:0)|0;L=dj(n,D,o,q)|0;q=di(L,D,c[2790]|0,c[2791]|0)|0;c[2790]=q;c[2791]=D;bm(m|0,0)|0;q=c[m>>2]|0;L=dt(q,(q|0)<0|0?-1:0,1e6,0)|0;q=c[m+4>>2]|0;m=di(L,D,q,(q|0)<0|0?-1:0)|0;q=D;if(a[9624]|0){L=c[2904]|0;if((L|0)>0){o=0;n=0;I=L;while(1){L=c[3056]|0;J=c[L+(o<<2)>>2]|0;do{if((J|0)==0){M=n;N=I}else{K=c[3054]|0;H=K+(o<<2)|0;G=c[H>>2]|0;if((G|0)==(-2|0)){M=n;N=I;break}else if((G|0)==(-1|0)){G=c[J+156>>2]|0;if((G|0)==0){Q=I}else{bY[G&15](J);Q=c[2904]|0}c[J+212>>2]=c[3048];c[3048]=J;M=n;N=Q;break}else{if((o|0)>(n|0)){c[L+(n<<2)>>2]=J;c[K+(n<<2)>>2]=c[H>>2]}M=n+1|0;N=I;break}}}while(0);J=o+1|0;if((J|0)<(N|0)){o=J;n=M;I=N}else{R=M;break}}}else{R=0}c[2904]=R;a[9624]=0;a[9616]=0}a[9616]=1;R=j|0;M=j+4|0;j=k|0;N=k+4|0;k=1;while(1){c[p>>2]=0;I=c[2904]|0;L1902:do{if((I|0)>0){n=0;o=I;while(1){Q=c[3056]|0;J=c[Q+(n<<2)>>2]|0;L1905:do{if((c[J+32>>2]&1|0)==0){S=o}else{if(+g[J+80>>2]<0.0){S=o;break}T=+g[J+52>>2];if(T>0.0|T<-0.0){if((o|0)>0){U=0;V=Q;W=o}else{S=o;break}}else{T=+g[J+56>>2];if((T>0.0|T<-0.0)&(o|0)>0){U=0;V=Q;W=o}else{S=o;break}}while(1){L=c[V+(U<<2)>>2]|0;L1913:do{if((c[L+32>>2]&1|0)==0){X=W}else{H=c[V+(n<<2)>>2]|0;if(+g[H+196>>2]<+g[L+200>>2]){X=W;break}if(+g[H+200>>2]>+g[L+196>>2]){X=W;break}if(+g[H+204>>2]<+g[L+208>>2]){X=W;break}if(+g[H+208>>2]>+g[L+204>>2]){X=W;break}K=c[p>>2]|0;if((K|0)!=0){G=K;do{K=c[G+4>>2]|0;if((K|0)==(H|0)){if((c[G+8>>2]|0)==(L|0)){X=W;break L1913}}if((K|0)==(L|0)){if((c[G+8>>2]|0)==(H|0)){X=W;break L1913}}G=c[G+28>>2]|0;}while((G|0)!=0)}cE(H,L,p)|0;X=c[2904]|0}}while(0);L=U+1|0;if((L|0)>=(X|0)){S=X;break L1905}U=L;V=c[3056]|0;W=X}}}while(0);Q=n+1|0;if((Q|0)<(S|0)){n=Q;o=S}else{break}}o=c[p>>2]|0;if((o|0)==0){Y=0;break}else{Z=o}while(1){_=Z+16|0;g[R>>2]=+g[_>>2];$=Z+20|0;g[M>>2]=+g[$>>2];g[j>>2]=+g[_>>2]*-1.0;g[N>>2]=+g[$>>2]*-1.0;aa=Z+4|0;o=c[aa>>2]|0;n=c[o+168>>2]|0;ab=Z+8|0;if((n|0)==0){ac=1}else{Q=b2[n&7](o,c[ab>>2]|0,+g[Z+12>>2],R)|0;ac=(Q|0)>1?2:(Q|0)!=0|0}Q=c[ab>>2]|0;o=c[Q+168>>2]|0;if((o|0)==0){ad=ac}else{n=b2[o&7](Q,c[aa>>2]|0,+g[Z+12>>2],j)|0;ad=(n|0)>1?2:(n|0)==0?0:ac}if((ad|0)==1){break}else if((ad|0)==2){Y=1;break L1902}n=c[Z+28>>2]|0;if((n|0)==0){Y=0;break L1902}else{Z=n}}n=c[Z>>2]|0;if((n|0)==1){Q=c[aa>>2]|0;T=+g[Q+52>>2];ae=+g[Q+56>>2];o=c[ab>>2]|0;af=+g[o+52>>2];ag=+g[o+56>>2];if(T*T+ae*ae>af*af+ag*ag){cF(Q,o,0.0,j);Y=1;break}else{cF(o,Q,0.0,R);Y=1;break}}else if((n|0)!=2){Y=1;break}n=c[aa>>2]|0;Q=c[ab>>2]|0;ag=+g[Z+12>>2];af=(+g[n+96>>2]+ +g[Q+96>>2])*.5;ae=(+g[n+100>>2]+ +g[Q+100>>2])*.5;Q=n+52|0;T=+g[Q>>2];ah=1.0-ag;o=n+56|0;ai=+g[o>>2];aj=+g[_>>2];ak=+g[$>>2];al=-0.0-(ah*T*aj+ah*ai*ak);ah=+g[n+24>>2];am=+g[n+28>>2];an=T+ah+aj*al;ao=ai+am+ak*al;al=T*ag+ah;T=ai*ag+am;do{if((c[Z+24>>2]|0)==0){ap=ao;aq=an}else{ag=an-al;ai=ao-T;ar=+P(ag*ag+ai*ai);if(ar0.0){as=1.0-(ae+af/ar);ap=T+ai*as;aq=al+ag*as;break}else{as=1.0-ae;ap=T+as*ai;aq=al+as*ag;break}}}while(0);al=aq+aj*.10000000149011612-ah;g[Q>>2]=al;T=ap+ak*.10000000149011612-am;g[o>>2]=T;ae=+g[n+76>>2];af=+g[n+68>>2];ao=(ae>af?ae:af)*.5+10.0;ae=+g[n+72>>2];an=(ae>af?ae:af)*.5+10.0;af=al+ah;if(al>0.0){g[n+196>>2]=af+an;g[n+200>>2]=ah-an}else{g[n+200>>2]=af-an;g[n+196>>2]=ah+an}an=T+am;if(T>0.0){g[n+204>>2]=ao+an;g[n+208>>2]=am-ao;Y=1;break}else{g[n+208>>2]=an-ao;g[n+204>>2]=ao+am;Y=1;break}}else{Y=0}}while(0);I=c[p>>2]|0;if((I|0)!=0){J=I;I=c[3050]|0;while(1){L=J+28|0;G=c[L>>2]|0;c[L>>2]=I;c[3050]=J;if((G|0)==0){break}else{I=J;J=G}}c[p>>2]=0}if(!(Y&(k|0)<50)){break}k=k+1|0}do{if((k|0)==10){Y=c[2904]|0;if((Y|0)>0){at=0;au=Y}else{break}while(1){Y=c[3056]|0;p=c[Y+(at<<2)>>2]|0;L1976:do{if((c[p+32>>2]&1|0)==0){av=au}else{if(+g[p+80>>2]>=0.0&(au|0)>0){aw=0;ax=Y}else{av=au;break}while(1){Z=c[ax+(aw<<2)>>2]|0;do{if(!((c[Z+32>>2]&1|0)==0|(at|0)==(aw|0))){if((cE(c[ax+(at<<2)>>2]|0,Z,0)|0)==0){break}$=c[3056]|0;_=$+(at<<2)|0;g[(c[_>>2]|0)+52>>2]=0.0;g[(c[_>>2]|0)+56>>2]=0.0;ab=c[_>>2]|0;ap=+g[ab+76>>2];aq=+g[ab+68>>2];ao=(ap>aq?ap:aq)*.5+10.0;ap=+g[ab+72>>2];an=(ap>aq?ap:aq)*.5+10.0;aq=+g[ab+52>>2];ap=+g[ab+24>>2];T=aq+ap;if(aq>0.0){g[ab+196>>2]=T+an;g[ab+200>>2]=ap-an}else{g[ab+200>>2]=T-an;g[ab+196>>2]=an+ap}ap=+g[ab+56>>2];an=+g[ab+28>>2];T=ap+an;if(ap>0.0){g[ab+204>>2]=ao+T;g[ab+208>>2]=an-ao}else{g[ab+208>>2]=T-ao;g[ab+204>>2]=ao+an}ab=$+(aw<<2)|0;g[(c[ab>>2]|0)+52>>2]=0.0;g[(c[ab>>2]|0)+56>>2]=0.0;$=c[ab>>2]|0;an=+g[$+76>>2];ao=+g[$+68>>2];T=(an>ao?an:ao)*.5+10.0;an=+g[$+72>>2];ap=(an>ao?an:ao)*.5+10.0;ao=+g[$+52>>2];an=+g[$+24>>2];aq=ao+an;if(ao>0.0){g[$+196>>2]=aq+ap;g[$+200>>2]=an-ap}else{g[$+200>>2]=aq-ap;g[$+196>>2]=ap+an}an=+g[$+56>>2];ap=+g[$+28>>2];aq=an+ap;if(an>0.0){g[$+204>>2]=T+aq;g[$+208>>2]=ap-T;break}else{g[$+208>>2]=aq-T;g[$+204>>2]=T+ap;break}}}while(0);Z=aw+1|0;$=c[2904]|0;if((Z|0)>=($|0)){av=$;break L1976}aw=Z;ax=c[3056]|0}}}while(0);Y=at+1|0;if((Y|0)<(av|0)){at=Y;au=av}else{break}}}}while(0);if(a[9624]|0){av=c[2904]|0;if((av|0)>0){au=0;at=0;ax=av;while(1){av=c[3056]|0;aw=c[av+(au<<2)>>2]|0;do{if((aw|0)==0){ay=at;az=ax}else{k=c[3054]|0;Y=k+(au<<2)|0;p=c[Y>>2]|0;if((p|0)==(-1|0)){n=c[aw+156>>2]|0;if((n|0)==0){aA=ax}else{bY[n&15](aw);aA=c[2904]|0}c[aw+212>>2]=c[3048];c[3048]=aw;ay=at;az=aA;break}else if((p|0)==(-2|0)){ay=at;az=ax;break}else{if((au|0)>(at|0)){c[av+(at<<2)>>2]=aw;c[k+(at<<2)>>2]=c[Y>>2]}ay=at+1|0;az=ax;break}}}while(0);aw=au+1|0;if((aw|0)<(az|0)){au=aw;at=ay;ax=az}else{aB=ay;break}}}else{aB=0}c[2904]=aB;a[9624]=0;a[9616]=0}bm(h|0,0)|0;aB=c[h>>2]|0;ay=dt(aB,(aB|0)<0|0?-1:0,1e6,0)|0;aB=c[h+4>>2]|0;h=di(ay,D,aB,(aB|0)<0|0?-1:0)|0;aB=dj(h,D,m,q)|0;q=di(aB,D,c[2798]|0,c[2799]|0)|0;c[2798]=q;c[2799]=D;bm(f|0,0)|0;q=c[f>>2]|0;aB=dt(q,(q|0)<0|0?-1:0,1e6,0)|0;q=c[f+4>>2]|0;f=di(aB,D,q,(q|0)<0|0?-1:0)|0;q=D;aB=c[2904]|0;if(a[9624]|0){if((aB|0)>0){m=0;h=0;ay=aB;while(1){az=c[3056]|0;ax=c[az+(m<<2)>>2]|0;do{if((ax|0)==0){aC=h;aD=ay}else{at=c[3054]|0;au=at+(m<<2)|0;aA=c[au>>2]|0;if((aA|0)==(-1|0)){aw=c[ax+156>>2]|0;if((aw|0)==0){aE=ay}else{bY[aw&15](ax);aE=c[2904]|0}c[ax+212>>2]=c[3048];c[3048]=ax;aC=h;aD=aE;break}else if((aA|0)==(-2|0)){aC=h;aD=ay;break}else{if((m|0)>(h|0)){c[az+(h<<2)>>2]=ax;c[at+(h<<2)>>2]=c[au>>2]}aC=h+1|0;aD=ay;break}}}while(0);ax=m+1|0;if((ax|0)<(aD|0)){m=ax;h=aC;ay=aD}else{aF=aC;break}}}else{aF=0}c[2904]=aF;a[9624]=0;a[9616]=0;aG=aF}else{aG=aB}a[9616]=1;do{if((aG|0)>0){aB=0;aF=aG;while(1){aC=c[3056]|0;aD=c[aC+(aB<<2)>>2]|0;L2043:do{if((c[aD+32>>2]&8|0)==0){aH=aF}else{if(+g[aD+80>>2]>=0.0&(aF|0)>0){aI=0;aJ=aF;aK=aC}else{aH=aF;break}while(1){ay=c[aK+(aI<<2)>>2]|0;if((c[ay+32>>2]&8|0)==0|(aB|0)==(aI|0)){aL=aJ}else{h=c[aK+(aB<<2)>>2]|0;am=+O(+(+g[h+24>>2]- +g[ay+24>>2]));ah=+O(+(+g[h+28>>2]- +g[ay+28>>2]));m=c[h+172>>2]|0;do{if((m|0)!=0){ak=+g[h+68>>2];if(am>ak|ah>ak){break}bZ[m&31](h,ay)}}while(0);m=c[ay+172>>2]|0;do{if((m|0)!=0){ak=+g[ay+68>>2];if(am>ak|ah>ak){break}bZ[m&31](ay,h)}}while(0);aL=c[2904]|0}h=aI+1|0;if((h|0)>=(aL|0)){aH=aL;break L2043}aI=h;aJ=aL;aK=c[3056]|0}}}while(0);aC=aB+1|0;if((aC|0)<(aH|0)){aB=aC;aF=aH}else{break}}if(!(a[9624]|0)){break}if((aH|0)>0){aF=0;aB=0;aC=aH;while(1){aD=c[3056]|0;h=c[aD+(aF<<2)>>2]|0;do{if((h|0)==0){aM=aB;aN=aC}else{ay=c[3054]|0;m=ay+(aF<<2)|0;aE=c[m>>2]|0;if((aE|0)==(-1|0)){ax=c[h+156>>2]|0;if((ax|0)==0){aO=aC}else{bY[ax&15](h);aO=c[2904]|0}c[h+212>>2]=c[3048];c[3048]=h;aM=aB;aN=aO;break}else if((aE|0)==(-2|0)){aM=aB;aN=aC;break}else{if((aF|0)>(aB|0)){c[aD+(aB<<2)>>2]=h;c[ay+(aB<<2)>>2]=c[m>>2]}aM=aB+1|0;aN=aC;break}}}while(0);h=aF+1|0;if((h|0)<(aN|0)){aF=h;aB=aM;aC=aN}else{aP=aM;break}}}else{aP=0}c[2904]=aP;a[9624]=0;a[9616]=0}}while(0);bm(e|0,0)|0;aP=c[e>>2]|0;aM=dt(aP,(aP|0)<0|0?-1:0,1e6,0)|0;aP=c[e+4>>2]|0;e=di(aM,D,aP,(aP|0)<0|0?-1:0)|0;aP=dj(e,D,f,q)|0;q=di(aP,D,c[2794]|0,c[2795]|0)|0;c[2794]=q;c[2795]=D;q=c[2904]|0;while(1){if((q|0)<=1){break}aP=c[3056]|0;f=0;e=1;aM=c[aP>>2]|0;while(1){aN=aP+(e-1<<2)|0;aO=aP+(e<<2)|0;aH=c[aO>>2]|0;aK=c[aM+36>>2]|0;aL=c[aH+36>>2]|0;do{if((aK|0)>(aL|0)){aQ=1536}else{if((aK|0)<(aL|0)){aR=f;aS=aH;break}if(+g[aM+28>>2]+ +g[aM+40>>2]>+g[aH+28>>2]+ +g[aH+40>>2]){aQ=1536}else{aR=f;aS=aH}}}while(0);if((aQ|0)==1536){aQ=0;c[aO>>2]=aM;c[aN>>2]=aH;aR=e;aS=aM}aL=e+1|0;if((aL|0)<(q|0)){f=aR;e=aL;aM=aS}else{break}}if((aR|0)>0){q=aR}else{break}}bm(d|0,0)|0;aR=c[d>>2]|0;q=dt(aR,(aR|0)<0|0?-1:0,1e6,0)|0;aR=c[d+4>>2]|0;d=di(q,D,aR,(aR|0)<0|0?-1:0)|0;aR=D;q=c[2904]|0;if(a[9624]|0){if((q|0)>0){aS=0;aQ=0;aM=q;while(1){e=c[3056]|0;f=c[e+(aS<<2)>>2]|0;do{if((f|0)==0){aT=aQ;aU=aM}else{aP=c[3054]|0;aL=aP+(aS<<2)|0;aK=c[aL>>2]|0;if((aK|0)==(-1|0)){aJ=c[f+156>>2]|0;if((aJ|0)==0){aV=aM}else{bY[aJ&15](f);aV=c[2904]|0}c[f+212>>2]=c[3048];c[3048]=f;aT=aQ;aU=aV;break}else if((aK|0)==(-2|0)){aT=aQ;aU=aM;break}else{if((aS|0)>(aQ|0)){c[e+(aQ<<2)>>2]=f;c[aP+(aQ<<2)>>2]=c[aL>>2]}aT=aQ+1|0;aU=aM;break}}}while(0);f=aS+1|0;if((f|0)<(aU|0)){aS=f;aQ=aT;aM=aU}else{aW=aT;break}}}else{aW=0}c[2904]=aW;a[9624]=0;a[9616]=0;aX=aW}else{aX=q}a[9616]=1;if((aX|0)>0){aX=0;q=c[3056]|0;do{aW=c[q+(aX<<2)>>2]|0;aT=a[9584]|0?66:0;aU=aW+24|0;ah=+g[aU>>2];g[aW+16>>2]=ah;aM=aW+28|0;am=+g[aM>>2];g[aW+20>>2]=am;aQ=aW+52|0;ak=+g[aQ>>2];aS=aW+56|0;aj=+g[aS>>2];ap=ak*ak+aj*aj;do{if(ap>0.0){T=ak+ah;g[aU>>2]=T;aq=am+aj;g[aM>>2]=aq;an=+P(ap);ao=+g[aW+88>>2];if(an>2]=0.0;aY=0.0;aZ=0.0}else{af=1.0-(+g[aW+92>>2]+ao/an);an=ak*af;g[aQ>>2]=an;aY=aj*af;aZ=an}g[aS>>2]=aY;g[aW+8>>2]=T;g[aW+12>>2]=aq;aV=aW+32|0;c[aV>>2]=c[aV>>2]|64;an=+g[aW+76>>2];af=+g[aW+68>>2];ao=(an>af?an:af)*.5+10.0;an=+g[aW+72>>2];al=(an>af?an:af)*.5+10.0;af=aZ+T;if(aZ>0.0){g[aW+196>>2]=af+al;g[aW+200>>2]=T-al}else{g[aW+200>>2]=af-al;g[aW+196>>2]=T+al}al=aY+aq;if(aY>0.0){g[aW+204>>2]=ao+al;g[aW+208>>2]=aq-ao;break}else{g[aW+208>>2]=al-ao;g[aW+204>>2]=ao+aq;break}}}while(0);aS=c[aW+164>>2]|0;if((aS|0)!=0){bZ[aS&31](aW,aT)}do{if((c[aW+104>>2]|0)!=0){if((c[aW+112>>2]|0)!=0){break}aS=aW+116|0;c[aS>>2]=(c[aS>>2]|0)+aT}}while(0);q=c[3056]|0;aT=c[q+(aX<<2)>>2]|0;aW=aT+32|0;aS=c[aW>>2]|0;aQ=c[2904]|0;do{if((aS&64|0)==0){a_=aQ}else{if((aS&16|0)==0){c[aW>>2]=aS|32;a_=aQ;break}aj=+g[aT+24>>2];ak=+g[aT+8>>2];aM=aj>2];am=(aM?aj:ak)-ap;ah=ap+(aM?ak:aj);aj=+g[aT+28>>2];ak=+g[aT+12>>2];aM=aj0){a$=0}else{a_=aQ;break}while(1){aM=c[q+(a$<<2)>>2]|0;aj=+g[aM+24>>2];do{if(!(am>aj|ah>2];if(aq>ak|ao>2]=c[aU>>2]|32}}while(0);aM=a$+1|0;if((aM|0)<(aQ|0)){a$=aM}else{a_=aQ;break}}}}while(0);aX=aX+1|0;}while((aX|0)<(a_|0))}if((c[3036]|0)!=0){c8()}if(!(a[9624]|0)){a0=l;a1=bm(l|0,0)|0;a2=l|0;a3=c[a2>>2]|0;a4=a3;a5=(a3|0)<0|0?-1:0;a6=1e6;a7=0;a8=dt(a4,a5,a6,a7)|0;a9=D;ba=l+4|0;bb=c[ba>>2]|0;bc=bb;bd=(bb|0)<0|0?-1:0;be=di(a8,a9,bc,bd)|0;bf=D;bg=dj(be,bf,d,aR)|0;bh=D;bi=11168;bj=c[bi>>2]|0;bk=11172;bl=c[bk>>2]|0;bn=di(bg,bh,bj,bl)|0;bo=D;bp=11168;c[bp>>2]=bn;bq=11172;c[bq>>2]=bo;br=c[2838]|0;bs=br+1|0;c[2838]=bs;i=b;return}a_=c[2904]|0;if((a_|0)>0){aX=0;a$=0;q=a_;while(1){a_=c[3056]|0;aQ=c[a_+(aX<<2)>>2]|0;do{if((aQ|0)==0){bt=a$;bu=q}else{aT=c[3054]|0;aS=aT+(aX<<2)|0;aW=c[aS>>2]|0;if((aW|0)==(-1|0)){aH=c[aQ+156>>2]|0;if((aH|0)==0){bv=q}else{bY[aH&15](aQ);bv=c[2904]|0}c[aQ+212>>2]=c[3048];c[3048]=aQ;bt=a$;bu=bv;break}else if((aW|0)==(-2|0)){bt=a$;bu=q;break}else{if((aX|0)>(a$|0)){c[a_+(a$<<2)>>2]=aQ;c[aT+(a$<<2)>>2]=c[aS>>2]}bt=a$+1|0;bu=q;break}}}while(0);aQ=aX+1|0;if((aQ|0)<(bu|0)){aX=aQ;a$=bt;q=bu}else{bw=bt;break}}}else{bw=0}c[2904]=bw;a[9624]=0;a[9616]=0;a0=l;a1=bm(l|0,0)|0;a2=l|0;a3=c[a2>>2]|0;a4=a3;a5=(a3|0)<0|0?-1:0;a6=1e6;a7=0;a8=dt(a4,a5,a6,a7)|0;a9=D;ba=l+4|0;bb=c[ba>>2]|0;bc=bb;bd=(bb|0)<0|0?-1:0;be=di(a8,a9,bc,bd)|0;bf=D;bg=dj(be,bf,d,aR)|0;bh=D;bi=11168;bj=c[bi>>2]|0;bk=11172;bl=c[bk>>2]|0;bn=di(bg,bh,bj,bl)|0;bo=D;bp=11168;c[bp>>2]=bn;bq=11172;c[bq>>2]=bo;br=c[2838]|0;bs=br+1|0;c[2838]=bs;i=b;return}function cK(b,d){b=b|0;d=+d;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0,E=0,F=0.0,G=0.0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0,ab=0,ac=0,ad=0,ae=0;b=i;i=i+16|0;e=b|0;f=b+8|0;h=c[3046]|0;j=~~(+(h|0)+ +((c[3042]|0)-h|0)*d);h=c[3044]|0;k=~~(+(h|0)+ +((c[3040]|0)-h|0)*d);bm(f|0,0)|0;h=c[f>>2]|0;l=dt(h,(h|0)<0|0?-1:0,1e6,0)|0;h=c[f+4>>2]|0;f=di(l,D,h,(h|0)<0|0?-1:0)|0;h=D;ct();l=c[2904]|0;if(a[9624]|0){if((l|0)>0){m=0;n=0;o=l;while(1){p=c[3056]|0;q=c[p+(m<<2)>>2]|0;do{if((q|0)==0){r=n;s=o}else{t=c[3054]|0;u=t+(m<<2)|0;v=c[u>>2]|0;if((v|0)==(-1|0)){w=c[q+156>>2]|0;if((w|0)==0){x=o}else{bY[w&15](q);x=c[2904]|0}c[q+212>>2]=c[3048];c[3048]=q;r=n;s=x;break}else if((v|0)==(-2|0)){r=n;s=o;break}else{if((m|0)>(n|0)){c[p+(n<<2)>>2]=q;c[t+(n<<2)>>2]=c[u>>2]}r=n+1|0;s=o;break}}}while(0);q=m+1|0;if((q|0)<(s|0)){m=q;n=r;o=s}else{y=r;break}}}else{y=0}c[2904]=y;a[9624]=0;a[9616]=0;z=y}else{z=l}a[9616]=1;if((z|0)>0){A=+(-j|0);B=+(-k|0);l=0;y=0;r=0;s=z;while(1){z=c[3056]|0;o=c[z+(l<<2)>>2]|0;n=a[9608]|0?640:0;m=a[9600]|0?480:0;x=c[o+104>>2]|0;do{if((x|0)==0){q=c[o+108>>2]|0;if((q|0)==0){C=y;E=r;break}C=c[q+12>>2]|0;E=c[q+16>>2]|0}else{C=c[x+4>>2]|0;E=c[(c[x>>2]|0)+16>>2]|0}}while(0);x=k-E|0;q=m+k+E|0;F=+g[o+24>>2];do{if(F>=+(j-C|0)){if(F>+(n+j+C|0)){break}G=+g[o+28>>2];if(G<+(x|0)){break}if(G>+(q|0)){break}p=o+32|0;u=c[p>>2]|0;if((u&32|0)==0){H=u;I=+g[o+120>>2];J=+g[o+124>>2];K=+g[o+128>>2];L=+g[o+132>>2]}else{do{if((u&16|0)==0){M=+g[o+136>>2];N=+g[o+140>>2];O=+g[o+144>>2];t=o+120|0;g[t>>2]=M;v=o+124|0;g[v>>2]=N;w=o+128|0;g[w>>2]=O;P=o+132|0;g[P>>2]=1.0;if((s|0)>0){Q=0;R=M;S=N;T=O}else{U=M;V=N;W=O;break}while(1){X=c[z+(Q<<2)>>2]|0;do{if((X|0)==(o|0)){Y=R;Z=S;_=T}else{if((c[X+32>>2]&16|0)==0){Y=R;Z=S;_=T;break}O=F- +g[X+24>>2];N=G- +g[X+28>>2];M=O*O+N*N;N=+g[X+148>>2];O=N*N;if(M>=O){Y=R;Z=S;_=T;break}N=1.0-M/O;O=N*+g[X+140>>2];M=N*+g[X+144>>2];$=N*+g[X+136>>2]+R;N=$>1.0?1.0:$;g[t>>2]=N;$=O+S;O=$>1.0?1.0:$;g[v>>2]=O;$=M+T;M=$>1.0?1.0:$;g[w>>2]=M;g[P>>2]=1.0;Y=N;Z=O;_=M}}while(0);X=Q+1|0;if((X|0)<(s|0)){Q=X;R=Y;S=Z;T=_}else{U=Y;V=Z;W=_;break}}}else{g[o+120>>2]=1.0;g[o+124>>2]=1.0;g[o+128>>2]=1.0;g[o+132>>2]=1.0;U=1.0;V=1.0;W=1.0}}while(0);P=u&-33;c[p>>2]=P;H=P;I=U;J=V;K=W;L=1.0}g[2416]=I;g[2414]=J;g[2412]=K;g[2410]=L;if((H&64|0)==0){cC(o+104|0,~~(A+F),~~(B+G));break}else{M=+g[o+16>>2];O=+g[o+20>>2];cC(o+104|0,~~(A+(M-(M-F)*d)),~~(B+(O-(O-G)*d)));break}}}while(0);o=l+1|0;z=c[2904]|0;if((o|0)<(z|0)){l=o;y=C;r=E;s=z}else{break}}}g[2416]=1.0;g[2414]=1.0;g[2412]=1.0;g[2410]=1.0;if((c[3038]|0)!=0){c3(d)}if(a[9624]|0){s=c[2904]|0;if((s|0)>0){E=0;r=0;C=s;while(1){s=c[3056]|0;y=c[s+(E<<2)>>2]|0;do{if((y|0)==0){aa=r;ab=C}else{l=c[3054]|0;H=l+(E<<2)|0;Q=c[H>>2]|0;if((Q|0)==(-1|0)){j=c[y+156>>2]|0;if((j|0)==0){ac=C}else{bY[j&15](y);ac=c[2904]|0}c[y+212>>2]=c[3048];c[3048]=y;aa=r;ab=ac;break}else if((Q|0)==(-2|0)){aa=r;ab=C;break}else{if((E|0)>(r|0)){c[s+(r<<2)>>2]=y;c[l+(r<<2)>>2]=c[H>>2]}aa=r+1|0;ab=C;break}}}while(0);y=E+1|0;if((y|0)<(ab|0)){E=y;r=aa;C=ab}else{ad=aa;break}}}else{ad=0}c[2904]=ad;a[9624]=0;a[9616]=0}bm(e|0,0)|0;ad=c[e>>2]|0;aa=dt(ad,(ad|0)<0|0?-1:0,1e6,0)|0;ad=c[e+4>>2]|0;e=di(aa,D,ad,(ad|0)<0|0?-1:0)|0;ad=dj(e,D,f,h)|0;h=di(ad,D,c[2796]|0,c[2797]|0)|0;c[2796]=h;c[2797]=D;c[2842]=(c[2842]|0)+1;if((c[2915]|0)!=1){i=b;return}a2(392)|0;h=c[2838]|0;if((h|0)>0){ad=dr(c[2790]|0,c[2791]|0,h,(h|0)<0|0?-1:0)|0;h=D;f=9144;a_(f|0,(ae=i,i=i+16|0,c[ae>>2]=ad,c[ae+8>>2]=h,ae)|0)|0;i=ae;h=c[2838]|0;ad=dr(c[2798]|0,c[2799]|0,h,(h|0)<0|0?-1:0)|0;h=D;f=8184;a_(f|0,(ae=i,i=i+16|0,c[ae>>2]=ad,c[ae+8>>2]=h,ae)|0)|0;i=ae;h=c[2838]|0;ad=dr(c[2794]|0,c[2795]|0,h,(h|0)<0|0?-1:0)|0;h=D;f=7432;a_(f|0,(ae=i,i=i+16|0,c[ae>>2]=ad,c[ae+8>>2]=h,ae)|0)|0;i=ae;h=c[2838]|0;ad=dr(c[2792]|0,c[2793]|0,h,(h|0)<0|0?-1:0)|0;h=D;f=6680;a_(f|0,(ae=i,i=i+16|0,c[ae>>2]=ad,c[ae+8>>2]=h,ae)|0)|0;i=ae}h=c[2842]|0;if((h|0)>0){ad=dr(c[2796]|0,c[2797]|0,h,(h|0)<0|0?-1:0)|0;h=D;f=5952;a_(f|0,(ae=i,i=i+16|0,c[ae>>2]=ad,c[ae+8>>2]=h,ae)|0)|0;i=ae}c[2790]=0;c[2791]=0;c[2798]=0;c[2799]=0;c[2794]=0;c[2795]=0;c[2792]=0;c[2793]=0;c[2796]=0;c[2797]=0;c[2838]=0;c[2842]=0;i=b;return}function cL(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0.0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0;f=a[9608]|0;g=a[9600]|0?240:0;h=f?384.0:+(~~(+(g|0)*1.2000000476837158)|0);i=~~(h/10.0);j=d-((f?320:0)+(c[3042]|0))|0;k=+(j-i|0);l=+(e-(c[3040]|0)-g|0);m=l*l;l=1.0- +P(m+k*k)/h;k=+(j+i|0);n=1.0- +P(m+k*k)/h;h=n<0.0?0.0:n;n=l<0.0?0.0:l;if((h>0.0|n>0.0)^1|(b|0)==0){return}i=c[3052]|0;if((i|0)==0){j=db(16)|0;c[j+12>>2]=0;o=j}else{j=i+12|0;c[3052]=c[j>>2];c[j>>2]=0;o=i}c[o>>2]=b;c[o+4>>2]=0;a[o+8|0]=~~(n*255.0);a[o+9|0]=~~(h*255.0);c[o+12>>2]=c[3062];c[3062]=o;return}function cM(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=+f;var h=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0;h=a+32|0;i=c[h>>2]|0;if((i&16|0)==0){g[a+136>>2]=b;g[a+140>>2]=d;g[a+144>>2]=e;g[a+148>>2]=f;c[h>>2]=i|32;return}j=c[3056]|0;k=c[2904]|0;l=+g[a+24>>2];m=+g[a+8>>2];n=l>2];q=(n?l:m)-p;r=p+(n?m:l);l=+g[a+28>>2];m=+g[a+12>>2];n=l0){n=0;do{u=c[j+(n<<2)>>2]|0;l=+g[u+24>>2];do{if(!(q>l|r>2];if(s>m|t>2]=c[v>>2]|32}}while(0);n=n+1|0;}while((n|0)<(k|0));w=c[h>>2]|0}else{w=i}g[a+136>>2]=b;g[a+140>>2]=d;g[a+144>>2]=e;g[o>>2]=f;if((w&16|0)==0){c[h>>2]=w|32;return}e=+g[a+24>>2];d=+g[a+8>>2];w=e>2];d=+g[a+12>>2];a=e0){x=0}else{return}do{a=c[j+(x<<2)>>2]|0;f=+g[a+24>>2];do{if(!(b>f|t>2];if(s>e|r>2]=c[w>>2]|32}}while(0);x=x+1|0;}while((x|0)<(k|0));return}function cN(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0;d=i;i=i+16|0;e=d|0;f=d+8|0;do{if(a[1656]&(c[2912]|0)==1){h=b+32|0;j=c[h>>2]|0;if((j&1|0)==0){c[h>>2]=j|9;cM(b,.4000000059604645,.4000000059604645,.4000000059604645,160.0);break}else{c[h>>2]=j&-10;cM(b,.699999988079071,.699999988079071,.699999988079071,640.0);break}}}while(0);do{if((aw(e|0,f|0)|0)<<24>>24==0){k=(c[2908]|0)==0?0.0:-1.0;if((c[2909]|0)==0){l=k}else{l=k+1.0}k=(c[2910]|0)==0?0.0:-1.0;if((c[2911]|0)==0){m=k}else{m=k+1.0}k=m*m+l*l;if(k<=0.0){break}n=1.0/+P(k);o=m*n;p=n*l;q=1694}else{n=+((c[e>>2]|0)-(a[3728]|0?320:0)|0);k=+(c[f>>2]|0)-(a[9592]|0?240.0:0.0);r=1.0/+P(n*n+k*k);o=n*r;p=r*k;q=1694}}while(0);if((q|0)==1694){l=o*0.0+p*-1.0;m=o+p*0.0;do{if(+O(+l)<+O(+m)){q=b+104|0;if(m>0.0){f=c[2824]|0;c[q>>2]=0;c[b+108>>2]=f;c[b+116>>2]=0;break}else{f=c[2826]|0;c[q>>2]=0;c[b+108>>2]=f;c[b+116>>2]=0;break}}else{f=b+104|0;if(l>0.0){q=c[2822]|0;c[f>>2]=0;c[b+108>>2]=q;c[b+116>>2]=0;break}else{q=c[2828]|0;c[f>>2]=0;c[b+108>>2]=q;c[b+116>>2]=0;break}}}while(0);cG(b,o*7.0,p*7.0,15.0)}p=+(c[3042]|0);c[3042]=~~(p+(+g[b+24>>2]-(p+(a[9608]|0?320.0:0.0)))*.30000001192092896);p=+(c[3040]|0);c[3040]=~~(p+(+g[b+28>>2]-(p+(a[9600]|0?240.0:0.0)))*.30000001192092896);i=d;return}function cO(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0.0;if((c[b+4>>2]|0)!=1){f=1;return f|0}h=+g[a+52>>2];i=+g[a+56>>2];j=+P(h*h+i*i);if(j<=0.0){f=1;return f|0}k=1.0/j;j=+g[e>>2];l=e+4|0;m=+g[l>>2];if(h*k*j+i*k*m>=-.8999999761581421){f=1;return f|0}do{if(+O(+j)>+O(+m)){if(j<0.0){g[e>>2]=-1.0;g[l>>2]=0.0;break}else{g[e>>2]=1.0;g[l>>2]=0.0;break}}else{if(m<0.0){g[l>>2]=-1.0;g[e>>2]=0.0;break}else{g[l>>2]=1.0;g[e>>2]=0.0;break}}}while(0);cF(b,a,d,e);f=2;return f|0}function cP(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0,j=0;b=i;i=i+8|0;d=b|0;e=+g[a+52>>2];f=+g[a+56>>2];if(e*e+f*f<=0.0){i=b;return}bm(d|0,0)|0;h=c[d>>2]|0;j=dt(h,(h|0)<0|0?-1:0,1e6,0)|0;h=c[d+4>>2]|0;d=di(j,D,h,(h|0)<0|0?-1:0)|0;h=dr(d,D,1e3,0)|0;d=h;h=a+176|0;if((d-250|0)<=(c[h>>2]|0)){i=b;return}cL(c[2808]|0,~~+g[a+24>>2],~~+g[a+28>>2]);c[h>>2]=d;i=b;return}function cQ(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0;d=b+4|0;e=c[d>>2]|0;if((e|0)==1){c[a+172>>2]=0;f=cD(c[2858]|0)|0;g[f+24>>2]=+g[a+24>>2];g[f+28>>2]=+g[a+28>>2];cH(f);cL(c[2804]|0,~~+g[b+24>>2],~~+g[b+28>>2]);f=a;cI(f)|0;f=b;cI(f)|0;h=c[d>>2]|0}else{h=e}if((h|0)!=0){return}h=cD(c[2848]|0)|0;e=b+24|0;g[h+24>>2]=+g[e>>2];d=b+28|0;g[h+28>>2]=+g[d>>2];cH(h);cL(c[2810]|0,~~+g[e>>2],~~+g[d>>2]);cI(b)|0;c[2834]=1;return}function cR(a){a=a|0;var b=0,d=0;b=(a5()|0)%1e3|0;if((c[a+104>>2]|0)==0){return}if((c[a+112>>2]|0)!=0){return}d=a+116|0;c[d>>2]=(c[d>>2]|0)+b;return}function cS(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0;a=b+4|0;d=c[a>>2]|0;if((d|0)==1){e=cD(c[2868]|0)|0;f=b+24|0;g[e+24>>2]=+g[f>>2];h=b+28|0;g[e+28>>2]=+g[h>>2];cH(e);cL(c[2810]|0,~~+g[f>>2],~~+g[h>>2]);h=b;cI(h)|0;i=c[a>>2]|0}else{i=d}if((i|0)!=0){return}i=cD(c[2868]|0)|0;d=b+24|0;g[i+24>>2]=+g[d>>2];a=b+28|0;g[i+28>>2]=+g[a>>2];cH(i);i=cD(c[2848]|0)|0;g[i+24>>2]=+g[d>>2];g[i+28>>2]=+g[a>>2];cH(i);cL(c[2810]|0,~~+g[d>>2],~~+g[a>>2]);cI(b)|0;c[2834]=1;return}function cT(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0,i=0;if((c[a+164>>2]|0)!=0){return 0}e=c[b+4>>2]|0;if((e|0)==0){f=cD(c[2848]|0)|0;h=b+24|0;g[f+24>>2]=+g[h>>2];i=b+28|0;g[f+28>>2]=+g[i>>2];cH(f);f=b;cI(f)|0;cL(c[2810]|0,~~+g[h>>2],~~+g[i>>2]);c[2834]=1}else if((e|0)==7|(e|0)==8){return 0}cI(a)|0;cL(c[2812]|0,~~+g[a+24>>2],~~+g[a+28>>2]);return 0}function cU(a){a=a|0;c[a+176>>2]=(a5()|0)%15|0;return}function cV(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0;b=a+176|0;d=c[b>>2]|0;if((d|0)==0){e=cD(c[a+192>>2]|0)|0;f=a+24|0;g[e+24>>2]=+g[f>>2];h=a+28|0;g[e+28>>2]=+g[h>>2];cH(e);cL(c[2800]|0,~~+g[f>>2],~~+g[h>>2]);i=15;c[b>>2]=i;return}else{i=d-1|0;c[b>>2]=i;return}}function cW(a){a=a|0;if((c[2894]|0)!=(a|0)){return}c[2894]=0;return}function cX(a,b){a=a|0;b=b|0;var d=0,e=0;if((c[b+4>>2]|0)!=0){return}b=c[a+176>>2]|0;if((c[418]|0)!=(b|0)){c[418]=b;cL(c[2802]|0,~~+g[a+24>>2],~~+g[a+28>>2]);c9()}b=c[2894]|0;if((b|0)==(a|0)){return}d=c[2888]|0;c[a+112>>2]=0;e=a+104|0;if((c[e>>2]|0)!=(d|0)){c[e>>2]=d;c[a+108>>2]=0;c[a+116>>2]=0}cM(a,0.0,0.0,.5,128.0);if((b|0)!=0){d=c[2820]|0;c[b+104>>2]=0;c[b+108>>2]=d;c[b+116>>2]=0;cM(b,0.0,0.0,.5,64.0)}c[2894]=a;return}function cY(a,b){a=a|0;b=b|0;if((c[b+4>>2]|0)!=0){return}c[2836]=(c[2836]|0)+1;c[418]=1;c[2834]=2;cI(b)|0;cL(c[2806]|0,~~+g[a+24>>2],~~+g[a+28>>2]);c9();return}function cZ(a,b){a=a|0;b=b|0;if((c[b+4>>2]|0)!=0){return}c[2834]=3;cI(b)|0;cL(c[2806]|0,~~+g[a+24>>2],~~+g[a+28>>2]);c9();return}function c_(a,b){a=a|0;b=b|0;var d=0,e=0;b=a+176|0;d=c[b>>2]|0;if((d|0)==0){e=a;cI(e)|0;return}else{c[b>>2]=d-1;return}}function c$(a,b){a=a|0;b=b|0;var d=0;if((c[a+4>>2]|0)!=12){d=0;return d|0}d=(c[a+176>>2]|0)==(c[b>>2]|0)|0;return d|0}function c0(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0;d=a+176|0;a=c[2904]|0;if((a|0)<=0){return}e=c[3056]|0;f=0;while(1){h=c[e+(f<<2)>>2]|0;if((h|0)!=0){if((c$(h,d)|0)!=0){break}}i=f+1|0;if((i|0)<(a|0)){f=i}else{j=1809;break}}if((j|0)==1809){return}g[b+24>>2]=+g[h+24>>2];g[b+28>>2]=+g[h+28>>2];return}function c1(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0;e=i;i=i+1168|0;f=e+128|0;h=e+1152|0;j=e+1160|0;k=e|0;aX(k|0,9352,(l=i,i=i+8|0,c[l>>2]=b,l)|0)|0;i=l;b=ba(k|0,9400)|0;if((b|0)==0){m=0;i=e;return m|0}k=c[2904]|0;if((k|0)>0){n=0;o=k;while(1){k=c[(c[3056]|0)+(n<<2)>>2]|0;if((k|0)==0){p=o}else{q=c[k+156>>2]|0;if((q|0)==0){r=o}else{bY[q&15](k);r=c[2904]|0}c[k+212>>2]=c[3048];c[3048]=k;p=r}k=n+1|0;if((k|0)<(p|0)){n=k;o=p}else{break}}}c[2904]=0;p=f|0;dh(p|0,0,1024);o=0;L2463:while(1){while(1){s=aM(b|0)|0;if((s|0)==(-1|0)){t=1821;break L2463}else if((s|0)==10){t=1822;break L2463}else if((s|0)!=13){break}}a[f+o|0]=s&255;n=o+1|0;if((n|0)<1024){o=n}else{break}}if((t|0)==1821){a[f+o|0]=0}else if((t|0)==1822){a[f+o|0]=0}bv(p|0,8304,(l=i,i=i+16|0,c[l>>2]=h,c[l+8>>2]=j,l)|0)|0;i=l;if((c[j>>2]|0)>0){l=0;do{dh(p|0,0,1024);o=0;L2475:while(1){while(1){u=aM(b|0)|0;if((u|0)==(-1|0)){t=1828;break L2475}else if((u|0)==10){t=1829;break L2475}else if((u|0)!=13){break}}a[f+o|0]=u&255;s=o+1|0;if((s|0)<1024){o=s}else{break}}if((t|0)==1828){t=0;a[f+o|0]=0}else if((t|0)==1829){t=0;a[f+o|0]=0}s=c[h>>2]|0;L2484:do{if((s|0)>0){v=+(l<<5|16|0);n=0;r=s;while(1){k=n<<1;L2488:do{if((n|0)>0){switch(a[f+(k-2)|0]|0){case 46:case 35:case 109:case 66:case 83:case 69:case 70:case 65:case 86:case 60:case 62:case 114:case 84:case 68:case 108:{w=4;break L2488;break};default:{}}w=0}else{w=0}}while(0);if((n|0)<(r-1|0)){switch(a[f+(k+2)|0]|0){case 46:case 35:case 109:case 66:case 83:case 69:case 70:case 65:case 86:case 60:case 62:case 114:case 84:case 68:case 108:{x=0;break};default:{x=1}}y=(x|w)^1}else{y=w}q=a[f+k|0]|0;switch(q<<24>>24){case 46:case 35:case 109:case 66:case 83:case 69:case 70:case 65:case 86:case 60:case 62:case 114:case 84:case 68:case 108:{z=0;break};default:{z=1}}A=z?y:y|2;if((A|0)==7){B=cD(c[2866]|0)|0;C=+(n<<5|16|0);g[B+24>>2]=C;g[B+28>>2]=v;D=+g[B+76>>2];E=+g[B+68>>2];F=(D>E?D:E)*.5+10.0;D=+g[B+72>>2];G=(D>E?D:E)*.5+10.0;E=+g[B+52>>2];D=E+C;if(E>0.0){g[B+196>>2]=D+G;g[B+200>>2]=C-G}else{g[B+200>>2]=D-G;g[B+196>>2]=G+C}C=+g[B+56>>2];G=C+v;if(C>0.0){g[B+204>>2]=F+G;g[B+208>>2]=v-F}else{g[B+208>>2]=G-F;g[B+204>>2]=F+v}cH(B)}else if((A|0)==6){B=cD(c[2860]|0)|0;F=+(n<<5|16|0);g[B+24>>2]=F;g[B+28>>2]=v;G=+g[B+76>>2];C=+g[B+68>>2];D=(G>C?G:C)*.5+10.0;G=+g[B+72>>2];E=(G>C?G:C)*.5+10.0;C=+g[B+52>>2];G=C+F;if(C>0.0){g[B+196>>2]=G+E;g[B+200>>2]=F-E}else{g[B+200>>2]=G-E;g[B+196>>2]=E+F}F=+g[B+56>>2];E=F+v;if(F>0.0){g[B+204>>2]=D+E;g[B+208>>2]=v-D}else{g[B+208>>2]=E-D;g[B+204>>2]=D+v}cH(B)}else if((A|0)==3){B=cD(c[2862]|0)|0;D=+(n<<5|16|0);g[B+24>>2]=D;g[B+28>>2]=v;E=+g[B+76>>2];F=+g[B+68>>2];G=(E>F?E:F)*.5+10.0;E=+g[B+72>>2];C=(E>F?E:F)*.5+10.0;F=+g[B+52>>2];E=F+D;if(F>0.0){g[B+196>>2]=E+C;g[B+200>>2]=D-C}else{g[B+200>>2]=E-C;g[B+196>>2]=C+D}D=+g[B+56>>2];C=D+v;if(D>0.0){g[B+204>>2]=G+C;g[B+208>>2]=v-G}else{g[B+208>>2]=C-G;g[B+204>>2]=G+v}cH(B)}else if((A|0)==2){A=cD(c[2864]|0)|0;G=+(n<<5|16|0);g[A+24>>2]=G;g[A+28>>2]=v;C=+g[A+76>>2];D=+g[A+68>>2];E=(C>D?C:D)*.5+10.0;C=+g[A+72>>2];F=(C>D?C:D)*.5+10.0;D=+g[A+52>>2];C=D+G;if(D>0.0){g[A+196>>2]=C+F;g[A+200>>2]=G-F}else{g[A+200>>2]=C-F;g[A+196>>2]=F+G}G=+g[A+56>>2];F=G+v;if(G>0.0){g[A+204>>2]=E+F;g[A+208>>2]=v-E}else{g[A+208>>2]=F-E;g[A+204>>2]=E+v}cH(A)}switch(q<<24>>24){case 35:{q=cD(c[2876]|0)|0;E=+(n<<5|16|0);g[q+24>>2]=E;g[q+28>>2]=v;F=+g[q+76>>2];G=+g[q+68>>2];C=(F>G?F:G)*.5+10.0;F=+g[q+72>>2];D=(F>G?F:G)*.5+10.0;G=+g[q+52>>2];F=G+E;if(G>0.0){g[q+196>>2]=F+D;g[q+200>>2]=E-D}else{g[q+200>>2]=F-D;g[q+196>>2]=D+E}E=+g[q+56>>2];D=E+v;if(E>0.0){g[q+204>>2]=C+D;g[q+208>>2]=v-C}else{g[q+208>>2]=D-C;g[q+204>>2]=C+v}cH(q);break};case 109:{q=cD(c[2874]|0)|0;C=+(n<<5|16|0);g[q+24>>2]=C;g[q+28>>2]=v;D=+g[q+76>>2];E=+g[q+68>>2];F=(D>E?D:E)*.5+10.0;D=+g[q+72>>2];G=(D>E?D:E)*.5+10.0;E=+g[q+52>>2];D=E+C;if(E>0.0){g[q+196>>2]=D+G;g[q+200>>2]=C-G}else{g[q+200>>2]=D-G;g[q+196>>2]=G+C}C=+g[q+56>>2];G=C+v;if(C>0.0){g[q+204>>2]=F+G;g[q+208>>2]=v-F}else{g[q+208>>2]=G-F;g[q+204>>2]=F+v}cH(q);break};case 114:{q=cD(c[2846]|0)|0;F=+(n<<5|16|0);g[q+24>>2]=F;g[q+28>>2]=v;G=+g[q+76>>2];C=+g[q+68>>2];D=(G>C?G:C)*.5+10.0;G=+g[q+72>>2];E=(G>C?G:C)*.5+10.0;C=+g[q+52>>2];G=C+F;if(C>0.0){g[q+196>>2]=G+E;g[q+200>>2]=F-E}else{g[q+200>>2]=G-E;g[q+196>>2]=E+F}F=+g[q+56>>2];E=F+v;if(F>0.0){g[q+204>>2]=D+E;g[q+208>>2]=v-D}else{g[q+208>>2]=E-D;g[q+204>>2]=D+v}cH(q);break};case 108:{q=cD(c[2852]|0)|0;D=+(n<<5|16|0);g[q+24>>2]=D;g[q+28>>2]=v;E=+g[q+76>>2];F=+g[q+68>>2];G=(E>F?E:F)*.5+10.0;E=+g[q+72>>2];C=(E>F?E:F)*.5+10.0;F=+g[q+52>>2];E=F+D;if(F>0.0){g[q+196>>2]=E+C;g[q+200>>2]=D-C}else{g[q+200>>2]=E-C;g[q+196>>2]=C+D}D=+g[q+56>>2];C=D+v;if(D>0.0){g[q+204>>2]=G+C;g[q+208>>2]=v-G}else{g[q+208>>2]=C-G;g[q+204>>2]=G+v}cH(q);break};case 66:{q=cD(c[2878]|0)|0;G=+(n<<5|16|0);g[q+24>>2]=G;g[q+28>>2]=v;C=+g[q+76>>2];D=+g[q+68>>2];E=(C>D?C:D)*.5+10.0;C=+g[q+72>>2];F=(C>D?C:D)*.5+10.0;D=+g[q+52>>2];C=D+G;if(D>0.0){g[q+196>>2]=C+F;g[q+200>>2]=G-F}else{g[q+200>>2]=C-F;g[q+196>>2]=F+G}G=+g[q+56>>2];F=G+v;if(G>0.0){g[q+204>>2]=E+F;g[q+208>>2]=v-E}else{g[q+208>>2]=F-E;g[q+204>>2]=E+v}cH(q);break};case 124:{q=cD(c[2854]|0)|0;E=+(n<<5|16|0);g[q+24>>2]=E;g[q+28>>2]=v;F=+g[q+76>>2];G=+g[q+68>>2];C=(F>G?F:G)*.5+10.0;F=+g[q+72>>2];D=(F>G?F:G)*.5+10.0;G=+g[q+52>>2];F=G+E;if(G>0.0){g[q+196>>2]=F+D;g[q+200>>2]=E-D}else{g[q+200>>2]=F-D;g[q+196>>2]=D+E}E=+g[q+56>>2];D=E+v;if(E>0.0){g[q+204>>2]=C+D;g[q+208>>2]=v-C}else{g[q+208>>2]=D-C;g[q+204>>2]=C+v}cH(q);break};case 76:{q=cD(c[2856]|0)|0;C=+(n<<5|16|0);g[q+24>>2]=C;g[q+28>>2]=v;D=+g[q+76>>2];E=+g[q+68>>2];F=(D>E?D:E)*.5+10.0;D=+g[q+72>>2];G=(D>E?D:E)*.5+10.0;E=+g[q+52>>2];D=E+C;if(E>0.0){g[q+196>>2]=D+G;g[q+200>>2]=C-G}else{g[q+200>>2]=D-G;g[q+196>>2]=G+C}C=+g[q+56>>2];G=C+v;if(C>0.0){g[q+204>>2]=F+G;g[q+208>>2]=v-F}else{g[q+208>>2]=G-F;g[q+204>>2]=F+v}cH(q);break};case 83:{q=cD(c[2844]|0)|0;F=+(n<<5|16|0);g[q+24>>2]=F;g[q+28>>2]=v;G=+g[q+76>>2];C=+g[q+68>>2];D=(G>C?G:C)*.5+10.0;G=+g[q+72>>2];E=(G>C?G:C)*.5+10.0;C=+g[q+52>>2];G=C+F;if(C>0.0){g[q+196>>2]=G+E;g[q+200>>2]=F-E}else{g[q+200>>2]=G-E;g[q+196>>2]=E+F}F=+g[q+56>>2];E=F+v;if(F>0.0){g[q+204>>2]=D+E;g[q+208>>2]=v-D}else{g[q+208>>2]=E-D;g[q+204>>2]=D+v}cH(q);c[q+176>>2]=(a[f+(k|1)|0]|0)-48;break};case 69:{q=cD(c[2870]|0)|0;D=+(n<<5|16|0);g[q+24>>2]=D;g[q+28>>2]=v;E=+g[q+76>>2];F=+g[q+68>>2];G=(E>F?E:F)*.5+10.0;E=+g[q+72>>2];C=(E>F?E:F)*.5+10.0;F=+g[q+52>>2];E=F+D;if(F>0.0){g[q+196>>2]=E+C;g[q+200>>2]=D-C}else{g[q+200>>2]=E-C;g[q+196>>2]=C+D}D=+g[q+56>>2];C=D+v;if(D>0.0){g[q+204>>2]=G+C;g[q+208>>2]=v-G}else{g[q+208>>2]=C-G;g[q+204>>2]=G+v}cH(q);break};case 70:{q=cD(c[2872]|0)|0;G=+(n<<5|16|0);g[q+24>>2]=G;g[q+28>>2]=v;C=+g[q+76>>2];D=+g[q+68>>2];E=(C>D?C:D)*.5+10.0;C=+g[q+72>>2];F=(C>D?C:D)*.5+10.0;D=+g[q+52>>2];C=D+G;if(D>0.0){g[q+196>>2]=C+F;g[q+200>>2]=G-F}else{g[q+200>>2]=C-F;g[q+196>>2]=F+G}G=+g[q+56>>2];F=G+v;if(G>0.0){g[q+204>>2]=E+F;g[q+208>>2]=v-E}else{g[q+208>>2]=F-E;g[q+204>>2]=E+v}cH(q);break};case 62:{q=cD(c[2882]|0)|0;E=+(n<<5|16|0);g[q+24>>2]=E;g[q+28>>2]=v;F=+g[q+76>>2];G=+g[q+68>>2];C=(F>G?F:G)*.5+10.0;F=+g[q+72>>2];D=(F>G?F:G)*.5+10.0;G=+g[q+52>>2];F=G+E;if(G>0.0){g[q+196>>2]=F+D;g[q+200>>2]=E-D}else{g[q+200>>2]=F-D;g[q+196>>2]=D+E}E=+g[q+56>>2];D=E+v;if(E>0.0){g[q+204>>2]=C+D;g[q+208>>2]=v-C}else{g[q+208>>2]=D-C;g[q+204>>2]=C+v}cH(q);break};case 60:{q=cD(c[2884]|0)|0;C=+(n<<5|16|0);g[q+24>>2]=C;g[q+28>>2]=v;D=+g[q+76>>2];E=+g[q+68>>2];F=(D>E?D:E)*.5+10.0;D=+g[q+72>>2];G=(D>E?D:E)*.5+10.0;E=+g[q+52>>2];D=E+C;if(E>0.0){g[q+196>>2]=D+G;g[q+200>>2]=C-G}else{g[q+200>>2]=D-G;g[q+196>>2]=G+C}C=+g[q+56>>2];G=C+v;if(C>0.0){g[q+204>>2]=F+G;g[q+208>>2]=v-F}else{g[q+208>>2]=G-F;g[q+204>>2]=F+v}cH(q);break};case 86:{q=cD(c[2886]|0)|0;F=+(n<<5|16|0);g[q+24>>2]=F;g[q+28>>2]=v;G=+g[q+76>>2];C=+g[q+68>>2];D=(G>C?G:C)*.5+10.0;G=+g[q+72>>2];E=(G>C?G:C)*.5+10.0;C=+g[q+52>>2];G=C+F;if(C>0.0){g[q+196>>2]=G+E;g[q+200>>2]=F-E}else{g[q+200>>2]=G-E;g[q+196>>2]=E+F}F=+g[q+56>>2];E=F+v;if(F>0.0){g[q+204>>2]=D+E;g[q+208>>2]=v-D}else{g[q+208>>2]=E-D;g[q+204>>2]=D+v}cH(q);break};case 65:{q=cD(c[2880]|0)|0;D=+(n<<5|16|0);g[q+24>>2]=D;g[q+28>>2]=v;E=+g[q+76>>2];F=+g[q+68>>2];G=(E>F?E:F)*.5+10.0;E=+g[q+72>>2];C=(E>F?E:F)*.5+10.0;F=+g[q+52>>2];E=F+D;if(F>0.0){g[q+196>>2]=E+C;g[q+200>>2]=D-C}else{g[q+200>>2]=E-C;g[q+196>>2]=C+D}D=+g[q+56>>2];C=D+v;if(D>0.0){g[q+204>>2]=G+C;g[q+208>>2]=v-G}else{g[q+208>>2]=C-G;g[q+204>>2]=G+v}cH(q);break};default:{}}n=n+1|0;r=c[h>>2]|0;if((n|0)>=(r|0)){break L2484}}}}while(0);l=l+1|0;}while((l|0)<(c[j>>2]|0))}as(b|0)|0;c[2892]=d;b=c[2904]|0;if((b|0)<=0){m=1;i=e;return m|0}j=c[3056]|0;l=0;L2672:while(1){H=c[j+(l<<2)>>2]|0;do{if((H|0)!=0){if((c[H+4>>2]|0)!=9){break}if((c[H+176>>2]|0)==(d|0)){break L2672}}}while(0);h=l+1|0;if((h|0)<(b|0)){l=h}else{m=1;t=1983;break}}if((t|0)==1983){i=e;return m|0}t=cD(c[2850]|0)|0;g[t+24>>2]=+g[H+24>>2];g[t+28>>2]=+g[H+28>>2];cH(t);m=1;i=e;return m|0}function c2(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;b=i;i=i+8|0;d=b|0;e=(c[2912]|0)==1|(c[2913]|0)==1?1:0;if((c[2906]|0)==1){if(a[1664]|0){f=1987}else{g=0;f=1988}}else{h=a[1664]|0;if((c[2907]|0)==1&h){f=1987}else{g=h&1;f=1988}}do{if((f|0)==1988){if((e|0)==0){i=b;return}else{if((g|0)==0){f=1990;break}else{break}}}else if((f|0)==1987){a[1664]=0;f=1990}}while(0);if((f|0)==1990){c[3046]=0;c[3044]=0;c[3042]=0;c[3040]=0;c[2836]=0;c[418]=1;c[2834]=0;c1(0,1)|0;a[1664]=1}c[3034]=2;c[3036]=4;c[3038]=2;c[2790]=0;c[2791]=0;c[2798]=0;c[2799]=0;c[2794]=0;c[2795]=0;c[2792]=0;c[2793]=0;c[2796]=0;c[2797]=0;c[2838]=0;c[2842]=0;c[2898]=8;c[3058]=2;if(a[9632]|0){i=b;return}a[9632]=1;f=a[624]|0;c[3064]=f?66666:33333;c[3065]=f?0:0;bm(d|0,0)|0;f=c[d>>2]|0;g=dt(f,(f|0)<0|0?-1:0,1e6,0)|0;f=c[d+4>>2]|0;d=di(g,D,f,(f|0)<0|0?-1:0)|0;c[2900]=d;c[2901]=D;bO(6,0,1);i=b;return}function c3(b){b=+b;var d=0,e=0,f=0,h=0,j=0;d=i;i=i+1032|0;e=d|0;g[2416]=1.0;g[2414]=1.0;g[2412]=1.0;g[2410]=1.0;f=d+8|0;h=c[418]|0;aX(f|0,4080,(j=i,i=i+16|0,c[j>>2]=(c[2836]|0)+1,c[j+8>>2]=h,j)|0)|0;i=j;g[2416]=0.0;g[2414]=0.0;g[2412]=0.0;g[2410]=.5;cw(c[2840]|0,f,17,17);g[2416]=1.0;g[2414]=1.0;g[2412]=1.0;g[2410]=1.0;cw(c[2840]|0,f,16,16);f=c[2834]|0;if((f|0)==3){c[2898]=6;c[3058]=6;if(a[9632]|0){i=d;return}a[9632]=1;j=a[624]|0;c[3064]=j?66666:33333;c[3065]=j?0:0;bm(e|0,0)|0;j=c[e>>2]|0;h=dt(j,(j|0)<0|0?-1:0,1e6,0)|0;j=c[e+4>>2]|0;e=di(h,D,j,(j|0)<0|0?-1:0)|0;c[2900]=e;c[2901]=D;bO(6,0,1);i=d;return}else if((f|0)==1){g[2416]=0.0;g[2414]=0.0;g[2412]=0.0;g[2410]=.5;cw(c[2840]|0,9408,301,301);g[2416]=1.0;g[2414]=0.0;g[2412]=0.0;g[2410]=1.0;cw(c[2840]|0,9408,300,300);i=d;return}else if((f|0)==2){g[2416]=0.0;g[2414]=0.0;g[2412]=0.0;g[2410]=.5;cw(c[2840]|0,3904,301,301);g[2416]=1.0;g[2414]=1.0;g[2412]=0.0;g[2410]=1.0;cw(c[2840]|0,9504,300,300);i=d;return}else{i=d;return}}function c4(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,j=0;ct();g[2416]=1.0;g[2414]=1.0;g[2412]=1.0;g[2410]=1.0;b=c[2830]|0;e=b;f=(c[b+4>>2]|0)+320|0;h=(a[9592]|0?480:0)-((c[b+8>>2]|0)+150)|0;d=+((c[b+12>>2]|0)+f|0);i=+(h-(c[b+16>>2]|0)|0);if((c[3060]|0)!=(e|0)){cs();c[3060]=e}cl(c[2896]|0,+(f|0),+(h|0),0.0,d,i,1.0);h=c[2840]|0;if(a[1664]|0){cw(h,8272,300,300);cw(c[2840]|0,7520,300,316);j=c[2840]|0;cw(j,6744,200,440);return}else{cw(h,9376,300,300);j=c[2840]|0;cw(j,6744,200,440);return}}function c5(b){b=b|0;var d=0,e=0,f=0;b=i;i=i+8|0;d=b|0;if(!((c[2912]|0)==1|(c[2913]|0)==1|(c[2914]|0)==1)){i=b;return}a[1664]=0;c[2836]=0;c[418]=1;c[2834]=0;c[2898]=12;c[3058]=4;if(a[9632]|0){i=b;return}a[9632]=1;e=a[624]|0;c[3064]=e?66666:33333;c[3065]=e?0:0;bm(d|0,0)|0;e=c[d>>2]|0;f=dt(e,(e|0)<0|0?-1:0,1e6,0)|0;e=c[d+4>>2]|0;d=di(f,D,e,(e|0)<0|0?-1:0)|0;c[2900]=d;c[2901]=D;bO(6,0,1);i=b;return}function c6(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0;ct();g[2416]=1.0;g[2414]=1.0;g[2412]=1.0;g[2410]=1.0;b=c[2832]|0;e=b;f=(c[b+4>>2]|0)+320|0;h=(a[9592]|0?480:0)-((c[b+8>>2]|0)+150)|0;d=+((c[b+12>>2]|0)+f|0);i=+(h-(c[b+16>>2]|0)|0);if((c[3060]|0)!=(e|0)){cs();c[3060]=e}cl(c[2896]|0,+(f|0),+(h|0),0.0,d,i,1.0);cw(c[2840]|0,6032,250,320);cw(c[2840]|0,5152,250,350);cw(c[2840]|0,4640,300,400);return}function c7(){return}function c8(){var b=0,d=0,e=0,f=0,g=0,h=0;b=i;i=i+16|0;d=b|0;e=b+8|0;L2734:do{if((c[2834]|0)!=0){f=0;while(1){if((f|0)>=10){break L2734}if((c[11624+(f<<2)>>2]|0)==1){break}else{f=f+1|0}}if((c1(c[2836]|0,c[418]|0)|0)==0){c[2898]=6;c[3058]=6;if(a[9632]|0){break}a[9632]=1;f=a[624]|0;c[3064]=f?66666:33333;c[3065]=f?0:0;bm(d|0,0)|0;f=c[d>>2]|0;g=dt(f,(f|0)<0|0?-1:0,1e6,0)|0;f=c[d+4>>2]|0;h=di(g,D,f,(f|0)<0|0?-1:0)|0;c[2900]=h;c[2901]=D;bO(6,0,1);break}if((c[2834]|0)==2){c[3046]=0;c[3044]=0;c[3042]=0;c[3040]=0}c[2834]=0}}while(0);if((c[2914]|0)!=1){i=b;return}c[2898]=12;c[3058]=4;if(a[9632]|0){i=b;return}a[9632]=1;d=a[624]|0;c[3064]=d?66666:33333;c[3065]=d?0:0;bm(e|0,0)|0;d=c[e>>2]|0;h=dt(d,(d|0)<0|0?-1:0,1e6,0)|0;d=c[e+4>>2]|0;e=di(h,D,d,(d|0)<0|0?-1:0)|0;c[2900]=e;c[2901]=D;bO(6,0,1);i=b;return}function c9(){var a=0;be(9248)|0;a=ba(9256,8968)|0;if((a|0)==0){return}az(11344,1,4,a|0)|0;az(1672,1,4,a|0)|0;as(a|0)|0;bC(8880);return}function da(e,f){e=e|0;f=f|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0;h=i;i=i+160|0;j=h|0;k=h+8|0;l=h+32|0;m=h+56|0;n=h+64|0;o=h+72|0;p=h+80|0;q=h+88|0;r=h+96|0;bj(bT(0)|0);do{if((e|0)>1){if((aI(c[f+4>>2]|0,8800)|0)!=0){break}a[1656]=1;a2(520)|0}}while(0);a[624]=1;a[3728]=1;a[9592]=1;do{if((a3(32)|0)<0){a2(584)|0;f=bi()|0;a_(9424,(s=i,i=i+8|0,c[s>>2]=f,s)|0)|0;i=s}else{if((a9(640,480,32,201326593)|0)==0){a2(304)|0;f=bi()|0;a_(9424,(s=i,i=i+8|0,c[s>>2]=f,s)|0)|0;i=s;break}bn(8608,0);a2(224)|0;a2(168)|0;f=ay(7936)|0;a_(4064,(s=i,i=i+8|0,c[s>>2]=f,s)|0)|0;i=s;f=ay(7937)|0;a_(4048,(s=i,i=i+8|0,c[s>>2]=f,s)|0)|0;i=s;f=ay(7938)|0;a_(4032,(s=i,i=i+8|0,c[s>>2]=f,s)|0)|0;i=s;a2(88)|0;c[o>>2]=9912;f=aH(35633)|0;do{if((f|0)==0){t=0}else{a7(f|0,1,o|0,0);aC(f|0);a4(f|0,35713,p|0);if((c[p>>2]|0)!=0){t=f;break}bK(f|0);t=0}}while(0);c[m>>2]=10304;f=aH(35632)|0;do{if((f|0)==0){u=0}else{a7(f|0,1,m|0,0);aC(f|0);a4(f|0,35713,n|0);if((c[n>>2]|0)!=0){u=f;break}bK(f|0);u=0}}while(0);do{if((t|0)==0|(u|0)==0){v=0}else{f=bM()|0;aY(f|0,t|0);aY(f|0,u|0);at(f|0);aN(f|0,35714,q|0);if((c[q>>2]|0)!=0){v=f;break}aW(f|0);v=0}}while(0);bu(v|0);f=bI(v|0,4e3)|0;e=bI(v|0,3928)|0;w=bI(v|0,3920)|0;x=bz(v|0,3888)|0;y=bz(v|0,3864)|0;bH(1,11152);bg(34962,c[2788]|0);bk(34962,192e3,0,35048);bg(34962,c[2788]|0);aO(f|0,2,5126,0,32,0);aO(e|0,2,5126,0,32,8);aO(w|0,4,5126,0,32,16);bf(f|0);bf(e|0);bf(w|0);aJ(x|0,0);x=r|0;g[x>>2]=2.0/(a[3728]|0?640.0:0.0);g[r+4>>2]=0.0;g[r+8>>2]=0.0;g[r+12>>2]=-1.0;g[r+16>>2]=0.0;g[r+20>>2]=2.0/(a[9592]|0?480.0:0.0);g[r+24>>2]=0.0;g[r+28>>2]=-1.0;g[r+32>>2]=0.0;g[r+36>>2]=0.0;g[r+40>>2]=1.0;dh(r+44|0,0,16);g[r+60>>2]=1.0;bP(y|0,1,0,x|0);bD(3042);bL(770,771);x=db(12)|0;c[x>>2]=db(12800)|0;c[x+4>>2]=0;c[x+8>>2]=400;c[2896]=x;g[2416]=1.0;g[2414]=1.0;g[2412]=1.0;g[2410]=1.0;bh(512)|0;dh(11624,0,40);L2781:do{if((bh(16)|0)<0){a2(472)|0;x=bi()|0;a_(9424,(s=i,i=i+8|0,c[s>>2]=x,s)|0)|0;i=s}else{c[k>>2]=44100;b[k+4>>1]=-32752;a[k+6|0]=2;b[k+8>>1]=2048;c[k+16>>2]=2;if((bt(k|0,l|0)|0)<0){a2(544)|0;x=bi()|0;a_(9424,(s=i,i=i+8|0,c[s>>2]=x,s)|0)|0;i=s;break}do{if((b[l+4>>1]|0)==-32752){if((c[l>>2]|0)!=44100){break}if((a[l+6|0]|0)!=2){break}aG(0);break L2781}}while(0);a2(416)|0;bq()}}while(0);a[9608]=1;a[9600]=1;c[3046]=0;c[3044]=0;c[3042]=0;c[3040]=0;a[9584]=1}}while(0);c[2830]=cv(8512)|0;c[2832]=cv(8400)|0;l=db(20)|0;s=db(24)|0;k=db(65536)|0;c[s>>2]=k;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=2048;c[s+16>>2]=8;c[s+20>>2]=-1;r=0;do{v=r<<3;q=0;do{u=(q<<11)+v|0;t=d[1680+(q+v)|0]|0;n=0;do{m=u+n<<2;a[k+m|0]=-1;a[k+(m|1)|0]=-1;a[k+(m|2)|0]=-1;a[k+(m|3)|0]=((1<<7-n&t|0)!=0)<<31>>31;n=n+1|0;}while((n|0)<8);q=q+1|0;}while((q|0)<8);r=r+1|0;}while((r|0)<256);c[l>>2]=s;c[l+4>>2]=8;c[l+8>>2]=8;c[l+12>>2]=0;c[l+16>>2]=256;c[2840]=l;l=cv(4104)|0;c[l+4>>2]=-16;c[l+8>>2]=-32;s=cv(8616)|0;c[s+4>>2]=-16;c[s+8>>2]=-16;r=cv(7776)|0;c[r+4>>2]=-16;c[r+8>>2]=-16;k=cv(6960)|0;c[k+4>>2]=-16;c[k+8>>2]=-16;q=cv(6312)|0;c[q+4>>2]=-16;c[q+8>>2]=-16;v=cv(5424)|0;c[v+4>>2]=-16;c[v+8>>2]=-16;n=cv(4864)|0;c[n+4>>2]=-16;c[n+8>>2]=-80;t=cv(4192)|0;c[t+4>>2]=-16;c[t+8>>2]=-80;u=cv(4016)|0;c[u+4>>2]=-16;c[u+8>>2]=-32;m=cv(3736)|0;c[m+4>>2]=-16;c[m+8>>2]=-48;p=cv(9480)|0;c[p+4>>2]=-16;c[p+8>>2]=-16;o=cv(9328)|0;if((o|0)==0){bN();return 0}x=db(24)|0;c[x>>2]=o;c[x+4>>2]=32;g[x+8>>2]=5.0;c[x+12>>2]=2;c[x+16>>2]=200;c[x+20>>2]=400;c[o+4>>2]=-16;c[o+8>>2]=-16;o=cv(9120)|0;c[2822]=o;c[o+4>>2]=-16;c[o+8>>2]=-48;o=cv(9024)|0;c[2828]=o;c[o+4>>2]=-16;c[o+8>>2]=-48;o=cv(8944)|0;c[2826]=o;c[o+4>>2]=-16;c[o+8>>2]=-48;o=cv(8856)|0;c[2824]=o;c[o+4>>2]=-16;c[o+8>>2]=-48;o=cv(8776)|0;c[2820]=o;c[o+4>>2]=-16;c[o+8>>2]=-16;o=cv(8680)|0;if((o|0)==0){bN();return 0}y=db(24)|0;c[y>>2]=o;c[y+4>>2]=32;g[y+8>>2]=5.0;c[y+12>>2]=2;c[y+16>>2]=200;c[y+20>>2]=400;c[2888]=y;c[o+4>>2]=-16;c[o+8>>2]=-16;o=cv(8584)|0;if((o|0)==0){bN();return 0}y=db(24)|0;c[y>>2]=o;c[y+4>>2]=32;g[y+8>>2]=10.0;c[y+12>>2]=2;c[y+16>>2]=100;c[y+20>>2]=200;c[o+4>>2]=-16;c[o+8>>2]=-48;o=cv(8488)|0;c[o+4>>2]=-16;c[o+8>>2]=-32;w=cv(8416)|0;c[w+4>>2]=-16;c[w+8>>2]=-16;e=cv(8312)|0;c[e+4>>2]=-16;c[e+8>>2]=-16;f=cv(8208)|0;c[f+4>>2]=-16;c[f+8>>2]=-16;z=cv(8120)|0;c[z+4>>2]=-16;c[z+8>>2]=-16;A=cv(8064)|0;c[A+4>>2]=-16;c[A+8>>2]=-16;B=cv(8008)|0;c[B+4>>2]=-16;c[B+8>>2]=-16;C=cv(7920)|0;c[C+4>>2]=-16;c[C+8>>2]=-16;E=cv(7856)|0;c[E+4>>2]=-16;c[E+8>>2]=-16;F=cv(7792)|0;if((F|0)==0){bN();return 0}G=db(24)|0;c[G>>2]=F;c[G+4>>2]=32;g[G+8>>2]=5.0;c[G+12>>2]=3;c[G+16>>2]=200;c[G+20>>2]=600;c[F+4>>2]=-16;c[F+8>>2]=-48;F=cv(7728)|0;c[F+4>>2]=-16;c[F+8>>2]=-48;c[2812]=cB(7616)|0;c[2806]=cB(7544)|0;c[2802]=cB(7456)|0;c[2800]=cB(7336)|0;c[2810]=cB(7264)|0;c[2804]=cB(7192)|0;c[2808]=cB(7128)|0;H=c[3048]|0;if((H|0)==0){I=db(216)|0}else{c[3048]=c[H+212>>2];I=H}c[I>>2]=0;c[I+4>>2]=0;dh(I+16|0,0,16);c[I+36>>2]=1;dh(I+40|0,0,20);g[I+68>>2]=1.0;g[I+72>>2]=1.0;g[I+76>>2]=1.0;c[I+116>>2]=0;dh(I+84|0,0,28);g[I+132>>2]=1.0;g[I+128>>2]=1.0;g[I+124>>2]=1.0;g[I+120>>2]=1.0;c[I+212>>2]=0;dh(I+152|0,0,44);g[I+80>>2]=-1.0;c[I+32>>2]=0;g[I+136>>2]=0.0;g[I+140>>2]=0.0;g[I+144>>2]=0.0;g[I+148>>2]=1.0;H=cD(I)|0;c[2850]=H;c[H+4>>2]=0;g[H+68>>2]=16.0;g[H+72>>2]=24.0;g[H+76>>2]=24.0;g[H+80>>2]=30.0;g[H+88>>2]=2.5;g[H+92>>2]=.30000001192092896;c[H+32>>2]=25;g[H+136>>2]=.4000000059604645;g[H+140>>2]=.4000000059604645;g[H+144>>2]=.4000000059604645;g[H+148>>2]=96.0;J=c[2828]|0;c[H+104>>2]=0;c[H+108>>2]=J;c[H+116>>2]=0;c[H+160>>2]=12;c[H+168>>2]=2;H=cD(I)|0;c[2878]=H;c[H+4>>2]=1;c[H+32>>2]=9;g[H+68>>2]=16.0;g[H+72>>2]=24.0;g[H+76>>2]=24.0;g[H+80>>2]=25.0;g[H+88>>2]=2.0;g[H+92>>2]=.5;c[H+160>>2]=20;c[H+104>>2]=0;c[H+108>>2]=l;c[H+116>>2]=0;H=cD(I)|0;c[2876]=H;c[H+4>>2]=2;c[H+32>>2]=1;g[H+68>>2]=12.0;g[H+72>>2]=24.0;g[H+76>>2]=24.0;c[H+104>>2]=0;c[H+108>>2]=n;c[H+116>>2]=0;n=cD(H)|0;c[2874]=n;c[n+104>>2]=0;c[n+108>>2]=t;c[n+116>>2]=0;n=cD(c[2876]|0)|0;c[2846]=n;c[n+104>>2]=0;c[n+108>>2]=u;c[n+116>>2]=0;c[n+32>>2]=1;u=cD(n)|0;c[2852]=u;c[u+104>>2]=0;c[u+108>>2]=m;c[u+116>>2]=0;c[u+32>>2]=17;g[u+136>>2]=.4000000059604645;g[u+140>>2]=.4000000059604645;g[u+144>>2]=.4000000059604645;g[u+148>>2]=160.0;u=cD(I)|0;c[2866]=u;c[u+4>>2]=3;c[u+36>>2]=-1;c[u+32>>2]=0;c[u+104>>2]=0;c[u+108>>2]=r;c[u+116>>2]=0;r=cD(u)|0;c[2862]=r;c[r+104>>2]=0;c[r+108>>2]=k;c[r+116>>2]=0;r=cD(c[2866]|0)|0;c[2860]=r;c[r+104>>2]=0;c[r+108>>2]=q;c[r+116>>2]=0;r=cD(c[2866]|0)|0;c[2864]=r;c[r+104>>2]=0;c[r+108>>2]=v;c[r+116>>2]=0;r=cD(I)|0;c[2854]=r;c[r+4>>2]=4;c[r+36>>2]=-1;c[r+32>>2]=8;g[r+68>>2]=18.0;c[r+104>>2]=0;c[r+108>>2]=p;c[r+116>>2]=0;c[r+172>>2]=6;r=cD(I)|0;c[2858]=r;c[r+4>>2]=5;c[r+36>>2]=-1;c[r+32>>2]=0;c[r+104>>2]=0;c[r+108>>2]=s;c[r+116>>2]=0;r=cD(I)|0;c[2856]=r;c[r+4>>2]=6;c[r+36>>2]=-1;c[r+32>>2]=24;g[r+68>>2]=18.0;c[r+112>>2]=0;s=r+104|0;if((c[s>>2]|0)!=(x|0)){c[s>>2]=x;c[r+108>>2]=0;c[r+116>>2]=0}g[r+136>>2]=1.0;g[r+140>>2]=0.0;g[r+144>>2]=0.0;g[r+148>>2]=128.0;c[r+152>>2]=10;c[r+172>>2]=2;r=cD(I)|0;c[r+4>>2]=8;c[r+32>>2]=17;g[r+136>>2]=.20000000298023224;g[r+140>>2]=.20000000298023224;g[r+144>>2]=.20000000298023224;g[r+148>>2]=64.0;g[r+68>>2]=4.0;g[r+80>>2]=.10000000149011612;c[r+168>>2]=4;c[r+160>>2]=16;c[r+176>>2]=120;c[r+104>>2]=0;c[r+108>>2]=A;c[r+116>>2]=0;g[r+52>>2]=0.0;g[r+56>>2]=-16.0;A=cD(r)|0;c[A+104>>2]=0;c[A+108>>2]=B;c[A+116>>2]=0;g[A+52>>2]=0.0;g[A+56>>2]=16.0;B=cD(r)|0;c[B+104>>2]=0;c[B+108>>2]=C;c[B+116>>2]=0;g[B+52>>2]=-16.0;g[B+56>>2]=0.0;C=cD(r)|0;c[C+104>>2]=0;c[C+108>>2]=E;c[C+116>>2]=0;g[C+52>>2]=16.0;g[C+56>>2]=0.0;E=cD(I)|0;c[2880]=E;c[E+4>>2]=7;c[E+32>>2]=1;g[E+68>>2]=15.0;c[E+152>>2]=4;c[E+160>>2]=8;c[E+104>>2]=0;c[E+108>>2]=w;c[E+116>>2]=0;c[E+192>>2]=r;r=cD(E)|0;c[2886]=r;c[r+104>>2]=0;c[r+108>>2]=e;c[r+116>>2]=0;c[r+192>>2]=A;A=cD(c[2880]|0)|0;c[2884]=A;c[A+104>>2]=0;c[A+108>>2]=f;c[A+116>>2]=0;c[A+192>>2]=B;B=cD(c[2880]|0)|0;c[2882]=B;c[B+104>>2]=0;c[B+108>>2]=z;c[B+116>>2]=0;c[B+192>>2]=C;C=cD(I)|0;c[2844]=C;c[C+4>>2]=9;g[C+40>>2]=-5.0;c[C+32>>2]=24;g[C+68>>2]=20.0;g[C+136>>2]=0.0;g[C+140>>2]=0.0;g[C+144>>2]=.5;g[C+148>>2]=64.0;B=c[2820]|0;c[C+104>>2]=0;c[C+108>>2]=B;c[C+116>>2]=0;c[C+172>>2]=4;c[C+156>>2]=2;C=cD(I)|0;c[2870]=C;c[C+4>>2]=10;c[C+32>>2]=24;g[C+136>>2]=.5;g[C+140>>2]=.5;g[C+144>>2]=.5;g[C+148>>2]=160.0;g[C+68>>2]=20.0;c[C+112>>2]=0;B=C+104|0;if((c[B>>2]|0)!=(y|0)){c[B>>2]=y;c[C+108>>2]=0;c[C+116>>2]=0}c[C+172>>2]=14;y=cD(C)|0;c[2872]=y;c[y+104>>2]=0;c[y+108>>2]=o;c[y+116>>2]=0;c[y+172>>2]=10;y=cD(I)|0;c[y+36>>2]=0;c[y+4>>2]=11;c[y+32>>2]=24;g[y+136>>2]=.5;g[y+140>>2]=.5;g[y+144>>2]=.5;g[y+148>>2]=160.0;g[y+68>>2]=20.0;o=c[2820]|0;c[y+104>>2]=0;c[y+108>>2]=o;c[y+116>>2]=0;c[y+172>>2]=18;y=cD(I)|0;c[y+36>>2]=0;c[y+4>>2]=12;c[y+32>>2]=0;o=c[2820]|0;c[y+104>>2]=0;c[y+108>>2]=o;c[y+116>>2]=0;y=cD(I)|0;c[2868]=y;c[y+4>>2]=13;c[y+32>>2]=16;g[y+136>>2]=1.0;g[y+140>>2]=0.0;g[y+144>>2]=0.0;g[y+148>>2]=96.0;c[y+112>>2]=0;o=y+104|0;if((c[o>>2]|0)!=(G|0)){c[o>>2]=G;c[y+108>>2]=0;c[y+116>>2]=0}c[y+160>>2]=16;c[y+176>>2]=15;g[y+40>>2]=1.0;y=cD(I)|0;c[2848]=y;c[y+4>>2]=13;c[y+32>>2]=0;c[y+104>>2]=0;c[y+108>>2]=F;c[y+116>>2]=0;be(9248)|0;y=ba(9256,9056)|0;do{if((y|0)!=0){by(11344,1,4,y|0)|0;by(1672,1,4,y|0)|0;F=c[2836]|0;I=c[418]|0;if((F|0)==0&(I|0)==1){a[1664]=0;break}else{c1(F,I)|0;a[1664]=1;as(y|0)|0;break}}}while(0);c[2898]=12;c[3058]=4;if(a[9632]|0){i=h;return 0}a[9632]=1;y=a[624]|0;c[3064]=y?66666:33333;c[3065]=y?0:0;bm(j|0,0)|0;y=c[j>>2]|0;I=dt(y,(y|0)<0|0?-1:0,1e6,0)|0;y=c[j+4>>2]|0;j=di(I,D,y,(y|0)<0|0?-1:0)|0;c[2900]=j;c[2901]=D;bO(6,0,1);i=h;return 0}function db(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ab=0,ac=0,ad=0,ae=0,af=0,ag=0,ah=0,ai=0,aj=0,ak=0,al=0,am=0,an=0,ao=0,ap=0,aq=0,ar=0,as=0,at=0,au=0,av=0,aw=0,ax=0,ay=0,az=0,aA=0,aB=0,aC=0,aD=0,aE=0,aF=0,aG=0;do{if(a>>>0<245>>>0){if(a>>>0<11>>>0){b=16}else{b=a+11&-8}d=b>>>3;e=c[2916]|0;f=e>>>(d>>>0);if((f&3|0)!=0){g=(f&1^1)+d|0;h=g<<1;i=11704+(h<<2)|0;j=11704+(h+2<<2)|0;h=c[j>>2]|0;k=h+8|0;l=c[k>>2]|0;do{if((i|0)==(l|0)){c[2916]=e&~(1<>>0<(c[2920]|0)>>>0){bA();return 0}m=l+12|0;if((c[m>>2]|0)==(h|0)){c[m>>2]=i;c[j>>2]=l;break}else{bA();return 0}}}while(0);l=g<<3;c[h+4>>2]=l|3;j=h+(l|4)|0;c[j>>2]=c[j>>2]|1;n=k;return n|0}if(b>>>0<=(c[2918]|0)>>>0){o=b;break}if((f|0)!=0){j=2<>>12&16;i=j>>>(l>>>0);j=i>>>5&8;m=i>>>(j>>>0);i=m>>>2&4;p=m>>>(i>>>0);m=p>>>1&2;q=p>>>(m>>>0);p=q>>>1&1;r=(j|l|i|m|p)+(q>>>(p>>>0))|0;p=r<<1;q=11704+(p<<2)|0;m=11704+(p+2<<2)|0;p=c[m>>2]|0;i=p+8|0;l=c[i>>2]|0;do{if((q|0)==(l|0)){c[2916]=e&~(1<>>0<(c[2920]|0)>>>0){bA();return 0}j=l+12|0;if((c[j>>2]|0)==(p|0)){c[j>>2]=q;c[m>>2]=l;break}else{bA();return 0}}}while(0);l=r<<3;m=l-b|0;c[p+4>>2]=b|3;q=p;e=q+b|0;c[q+(b|4)>>2]=m|1;c[q+l>>2]=m;l=c[2918]|0;if((l|0)!=0){q=c[2921]|0;d=l>>>3;l=d<<1;f=11704+(l<<2)|0;k=c[2916]|0;h=1<>2]|0;if(g>>>0>=(c[2920]|0)>>>0){s=g;t=d;break}bA();return 0}}while(0);c[t>>2]=q;c[s+12>>2]=q;c[q+8>>2]=s;c[q+12>>2]=f}c[2918]=m;c[2921]=e;n=i;return n|0}l=c[2917]|0;if((l|0)==0){o=b;break}h=(l&-l)-1|0;l=h>>>12&16;k=h>>>(l>>>0);h=k>>>5&8;p=k>>>(h>>>0);k=p>>>2&4;r=p>>>(k>>>0);p=r>>>1&2;d=r>>>(p>>>0);r=d>>>1&1;g=c[11968+((h|l|k|p|r)+(d>>>(r>>>0))<<2)>>2]|0;r=g;d=g;p=(c[g+4>>2]&-8)-b|0;while(1){g=c[r+16>>2]|0;if((g|0)==0){k=c[r+20>>2]|0;if((k|0)==0){break}else{u=k}}else{u=g}g=(c[u+4>>2]&-8)-b|0;k=g>>>0

>>0;r=u;d=k?u:d;p=k?g:p}r=d;i=c[2920]|0;if(r>>>0>>0){bA();return 0}e=r+b|0;m=e;if(r>>>0>=e>>>0){bA();return 0}e=c[d+24>>2]|0;f=c[d+12>>2]|0;do{if((f|0)==(d|0)){q=d+20|0;g=c[q>>2]|0;if((g|0)==0){k=d+16|0;l=c[k>>2]|0;if((l|0)==0){v=0;break}else{w=l;x=k}}else{w=g;x=q}while(1){q=w+20|0;g=c[q>>2]|0;if((g|0)!=0){w=g;x=q;continue}q=w+16|0;g=c[q>>2]|0;if((g|0)==0){break}else{w=g;x=q}}if(x>>>0>>0){bA();return 0}else{c[x>>2]=0;v=w;break}}else{q=c[d+8>>2]|0;if(q>>>0>>0){bA();return 0}g=q+12|0;if((c[g>>2]|0)!=(d|0)){bA();return 0}k=f+8|0;if((c[k>>2]|0)==(d|0)){c[g>>2]=f;c[k>>2]=q;v=f;break}else{bA();return 0}}}while(0);L2917:do{if((e|0)!=0){f=d+28|0;i=11968+(c[f>>2]<<2)|0;do{if((d|0)==(c[i>>2]|0)){c[i>>2]=v;if((v|0)!=0){break}c[2917]=c[2917]&~(1<>2]);break L2917}else{if(e>>>0<(c[2920]|0)>>>0){bA();return 0}q=e+16|0;if((c[q>>2]|0)==(d|0)){c[q>>2]=v}else{c[e+20>>2]=v}if((v|0)==0){break L2917}}}while(0);if(v>>>0<(c[2920]|0)>>>0){bA();return 0}c[v+24>>2]=e;f=c[d+16>>2]|0;do{if((f|0)!=0){if(f>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[v+16>>2]=f;c[f+24>>2]=v;break}}}while(0);f=c[d+20>>2]|0;if((f|0)==0){break}if(f>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[v+20>>2]=f;c[f+24>>2]=v;break}}}while(0);if(p>>>0<16>>>0){e=p+b|0;c[d+4>>2]=e|3;f=r+(e+4)|0;c[f>>2]=c[f>>2]|1}else{c[d+4>>2]=b|3;c[r+(b|4)>>2]=p|1;c[r+(p+b)>>2]=p;f=c[2918]|0;if((f|0)!=0){e=c[2921]|0;i=f>>>3;f=i<<1;q=11704+(f<<2)|0;k=c[2916]|0;g=1<>2]|0;if(l>>>0>=(c[2920]|0)>>>0){y=l;z=i;break}bA();return 0}}while(0);c[z>>2]=e;c[y+12>>2]=e;c[e+8>>2]=y;c[e+12>>2]=q}c[2918]=p;c[2921]=m}f=d+8|0;if((f|0)==0){o=b;break}else{n=f}return n|0}else{if(a>>>0>4294967231>>>0){o=-1;break}f=a+11|0;g=f&-8;k=c[2917]|0;if((k|0)==0){o=g;break}r=-g|0;i=f>>>8;do{if((i|0)==0){A=0}else{if(g>>>0>16777215>>>0){A=31;break}f=(i+1048320|0)>>>16&8;l=i<>>16&4;j=l<>>16&2;B=14-(h|f|l)+(j<>>15)|0;A=g>>>((B+7|0)>>>0)&1|B<<1}}while(0);i=c[11968+(A<<2)>>2]|0;L2965:do{if((i|0)==0){C=0;D=r;E=0}else{if((A|0)==31){F=0}else{F=25-(A>>>1)|0}d=0;m=r;p=i;q=g<>2]&-8;l=B-g|0;if(l>>>0>>0){if((B|0)==(g|0)){C=p;D=l;E=p;break L2965}else{G=p;H=l}}else{G=d;H=m}l=c[p+20>>2]|0;B=c[p+16+(q>>>31<<2)>>2]|0;j=(l|0)==0|(l|0)==(B|0)?e:l;if((B|0)==0){C=G;D=H;E=j;break}else{d=G;m=H;p=B;q=q<<1;e=j}}}}while(0);if((E|0)==0&(C|0)==0){i=2<>>12&16;e=i>>>(r>>>0);i=e>>>5&8;q=e>>>(i>>>0);e=q>>>2&4;p=q>>>(e>>>0);q=p>>>1&2;m=p>>>(q>>>0);p=m>>>1&1;I=c[11968+((i|r|e|q|p)+(m>>>(p>>>0))<<2)>>2]|0}else{I=E}if((I|0)==0){J=D;K=C}else{p=I;m=D;q=C;while(1){e=(c[p+4>>2]&-8)-g|0;r=e>>>0>>0;i=r?e:m;e=r?p:q;r=c[p+16>>2]|0;if((r|0)!=0){p=r;m=i;q=e;continue}r=c[p+20>>2]|0;if((r|0)==0){J=i;K=e;break}else{p=r;m=i;q=e}}}if((K|0)==0){o=g;break}if(J>>>0>=((c[2918]|0)-g|0)>>>0){o=g;break}q=K;m=c[2920]|0;if(q>>>0>>0){bA();return 0}p=q+g|0;k=p;if(q>>>0>=p>>>0){bA();return 0}e=c[K+24>>2]|0;i=c[K+12>>2]|0;do{if((i|0)==(K|0)){r=K+20|0;d=c[r>>2]|0;if((d|0)==0){j=K+16|0;B=c[j>>2]|0;if((B|0)==0){L=0;break}else{M=B;N=j}}else{M=d;N=r}while(1){r=M+20|0;d=c[r>>2]|0;if((d|0)!=0){M=d;N=r;continue}r=M+16|0;d=c[r>>2]|0;if((d|0)==0){break}else{M=d;N=r}}if(N>>>0>>0){bA();return 0}else{c[N>>2]=0;L=M;break}}else{r=c[K+8>>2]|0;if(r>>>0>>0){bA();return 0}d=r+12|0;if((c[d>>2]|0)!=(K|0)){bA();return 0}j=i+8|0;if((c[j>>2]|0)==(K|0)){c[d>>2]=i;c[j>>2]=r;L=i;break}else{bA();return 0}}}while(0);L3015:do{if((e|0)!=0){i=K+28|0;m=11968+(c[i>>2]<<2)|0;do{if((K|0)==(c[m>>2]|0)){c[m>>2]=L;if((L|0)!=0){break}c[2917]=c[2917]&~(1<>2]);break L3015}else{if(e>>>0<(c[2920]|0)>>>0){bA();return 0}r=e+16|0;if((c[r>>2]|0)==(K|0)){c[r>>2]=L}else{c[e+20>>2]=L}if((L|0)==0){break L3015}}}while(0);if(L>>>0<(c[2920]|0)>>>0){bA();return 0}c[L+24>>2]=e;i=c[K+16>>2]|0;do{if((i|0)!=0){if(i>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[L+16>>2]=i;c[i+24>>2]=L;break}}}while(0);i=c[K+20>>2]|0;if((i|0)==0){break}if(i>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[L+20>>2]=i;c[i+24>>2]=L;break}}}while(0);do{if(J>>>0<16>>>0){e=J+g|0;c[K+4>>2]=e|3;i=q+(e+4)|0;c[i>>2]=c[i>>2]|1}else{c[K+4>>2]=g|3;c[q+(g|4)>>2]=J|1;c[q+(J+g)>>2]=J;i=J>>>3;if(J>>>0<256>>>0){e=i<<1;m=11704+(e<<2)|0;r=c[2916]|0;j=1<>2]|0;if(d>>>0>=(c[2920]|0)>>>0){O=d;P=i;break}bA();return 0}}while(0);c[P>>2]=k;c[O+12>>2]=k;c[q+(g+8)>>2]=O;c[q+(g+12)>>2]=m;break}e=p;j=J>>>8;do{if((j|0)==0){Q=0}else{if(J>>>0>16777215>>>0){Q=31;break}r=(j+1048320|0)>>>16&8;i=j<>>16&4;B=i<>>16&2;l=14-(d|r|i)+(B<>>15)|0;Q=J>>>((l+7|0)>>>0)&1|l<<1}}while(0);j=11968+(Q<<2)|0;c[q+(g+28)>>2]=Q;c[q+(g+20)>>2]=0;c[q+(g+16)>>2]=0;m=c[2917]|0;l=1<>2]=e;c[q+(g+24)>>2]=j;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break}if((Q|0)==31){R=0}else{R=25-(Q>>>1)|0}l=J<>2]|0;while(1){if((c[m+4>>2]&-8|0)==(J|0)){break}S=m+16+(l>>>31<<2)|0;j=c[S>>2]|0;if((j|0)==0){T=2256;break}else{l=l<<1;m=j}}if((T|0)==2256){if(S>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[S>>2]=e;c[q+(g+24)>>2]=m;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break}}l=m+8|0;j=c[l>>2]|0;i=c[2920]|0;if(m>>>0>>0){bA();return 0}if(j>>>0>>0){bA();return 0}else{c[j+12>>2]=e;c[l>>2]=e;c[q+(g+8)>>2]=j;c[q+(g+12)>>2]=m;c[q+(g+24)>>2]=0;break}}}while(0);q=K+8|0;if((q|0)==0){o=g;break}else{n=q}return n|0}}while(0);K=c[2918]|0;if(o>>>0<=K>>>0){S=K-o|0;J=c[2921]|0;if(S>>>0>15>>>0){R=J;c[2921]=R+o;c[2918]=S;c[R+(o+4)>>2]=S|1;c[R+K>>2]=S;c[J+4>>2]=o|3}else{c[2918]=0;c[2921]=0;c[J+4>>2]=K|3;S=J+(K+4)|0;c[S>>2]=c[S>>2]|1}n=J+8|0;return n|0}J=c[2919]|0;if(o>>>0>>0){S=J-o|0;c[2919]=S;J=c[2922]|0;K=J;c[2922]=K+o;c[K+(o+4)>>2]=S|1;c[J+4>>2]=o|3;n=J+8|0;return n|0}do{if((c[2814]|0)==0){J=bx(30)|0;if((J-1&J|0)==0){c[2816]=J;c[2815]=J;c[2817]=-1;c[2818]=-1;c[2819]=0;c[3027]=0;c[2814]=(bT(0)|0)&-16^1431655768;break}else{bA();return 0}}}while(0);J=o+48|0;S=c[2816]|0;K=o+47|0;R=S+K|0;Q=-S|0;S=R&Q;if(S>>>0<=o>>>0){n=0;return n|0}O=c[3026]|0;do{if((O|0)!=0){P=c[3024]|0;L=P+S|0;if(L>>>0<=P>>>0|L>>>0>O>>>0){n=0}else{break}return n|0}}while(0);L3107:do{if((c[3027]&4|0)==0){O=c[2922]|0;L3109:do{if((O|0)==0){T=2286}else{L=O;P=12112;while(1){U=P|0;M=c[U>>2]|0;if(M>>>0<=L>>>0){V=P+4|0;if((M+(c[V>>2]|0)|0)>>>0>L>>>0){break}}M=c[P+8>>2]|0;if((M|0)==0){T=2286;break L3109}else{P=M}}if((P|0)==0){T=2286;break}L=R-(c[2919]|0)&Q;if(L>>>0>=2147483647>>>0){W=0;break}m=bo(L|0)|0;e=(m|0)==((c[U>>2]|0)+(c[V>>2]|0)|0);X=e?m:-1;Y=e?L:0;Z=m;_=L;T=2295}}while(0);do{if((T|0)==2286){O=bo(0)|0;if((O|0)==-1){W=0;break}g=O;L=c[2815]|0;m=L-1|0;if((m&g|0)==0){$=S}else{$=S-g+(m+g&-L)|0}L=c[3024]|0;g=L+$|0;if(!($>>>0>o>>>0&$>>>0<2147483647>>>0)){W=0;break}m=c[3026]|0;if((m|0)!=0){if(g>>>0<=L>>>0|g>>>0>m>>>0){W=0;break}}m=bo($|0)|0;g=(m|0)==(O|0);X=g?O:-1;Y=g?$:0;Z=m;_=$;T=2295}}while(0);L3129:do{if((T|0)==2295){m=-_|0;if((X|0)!=-1){aa=Y;ab=X;T=2306;break L3107}do{if((Z|0)!=-1&_>>>0<2147483647>>>0&_>>>0>>0){g=c[2816]|0;O=K-_+g&-g;if(O>>>0>=2147483647>>>0){ac=_;break}if((bo(O|0)|0)==-1){bo(m|0)|0;W=Y;break L3129}else{ac=O+_|0;break}}else{ac=_}}while(0);if((Z|0)==-1){W=Y}else{aa=ac;ab=Z;T=2306;break L3107}}}while(0);c[3027]=c[3027]|4;ad=W;T=2303}else{ad=0;T=2303}}while(0);do{if((T|0)==2303){if(S>>>0>=2147483647>>>0){break}W=bo(S|0)|0;Z=bo(0)|0;if(!((Z|0)!=-1&(W|0)!=-1&W>>>0>>0)){break}ac=Z-W|0;Z=ac>>>0>(o+40|0)>>>0;Y=Z?W:-1;if((Y|0)!=-1){aa=Z?ac:ad;ab=Y;T=2306}}}while(0);do{if((T|0)==2306){ad=(c[3024]|0)+aa|0;c[3024]=ad;if(ad>>>0>(c[3025]|0)>>>0){c[3025]=ad}ad=c[2922]|0;L3149:do{if((ad|0)==0){S=c[2920]|0;if((S|0)==0|ab>>>0>>0){c[2920]=ab}c[3028]=ab;c[3029]=aa;c[3031]=0;c[2925]=c[2814];c[2924]=-1;S=0;do{Y=S<<1;ac=11704+(Y<<2)|0;c[11704+(Y+3<<2)>>2]=ac;c[11704+(Y+2<<2)>>2]=ac;S=S+1|0;}while(S>>>0<32>>>0);S=ab+8|0;if((S&7|0)==0){ae=0}else{ae=-S&7}S=aa-40-ae|0;c[2922]=ab+ae;c[2919]=S;c[ab+(ae+4)>>2]=S|1;c[ab+(aa-36)>>2]=40;c[2923]=c[2818]}else{S=12112;while(1){af=c[S>>2]|0;ag=S+4|0;ah=c[ag>>2]|0;if((ab|0)==(af+ah|0)){T=2318;break}ac=c[S+8>>2]|0;if((ac|0)==0){break}else{S=ac}}do{if((T|0)==2318){if((c[S+12>>2]&8|0)!=0){break}ac=ad;if(!(ac>>>0>=af>>>0&ac>>>0>>0)){break}c[ag>>2]=ah+aa;ac=c[2922]|0;Y=(c[2919]|0)+aa|0;Z=ac;W=ac+8|0;if((W&7|0)==0){ai=0}else{ai=-W&7}W=Y-ai|0;c[2922]=Z+ai;c[2919]=W;c[Z+(ai+4)>>2]=W|1;c[Z+(Y+4)>>2]=40;c[2923]=c[2818];break L3149}}while(0);if(ab>>>0<(c[2920]|0)>>>0){c[2920]=ab}S=ab+aa|0;Y=12112;while(1){aj=Y|0;if((c[aj>>2]|0)==(S|0)){T=2328;break}Z=c[Y+8>>2]|0;if((Z|0)==0){break}else{Y=Z}}do{if((T|0)==2328){if((c[Y+12>>2]&8|0)!=0){break}c[aj>>2]=ab;S=Y+4|0;c[S>>2]=(c[S>>2]|0)+aa;S=ab+8|0;if((S&7|0)==0){ak=0}else{ak=-S&7}S=ab+(aa+8)|0;if((S&7|0)==0){al=0}else{al=-S&7}S=ab+(al+aa)|0;Z=S;W=ak+o|0;ac=ab+W|0;_=ac;K=S-(ab+ak)-o|0;c[ab+(ak+4)>>2]=o|3;do{if((Z|0)==(c[2922]|0)){J=(c[2919]|0)+K|0;c[2919]=J;c[2922]=_;c[ab+(W+4)>>2]=J|1}else{if((Z|0)==(c[2921]|0)){J=(c[2918]|0)+K|0;c[2918]=J;c[2921]=_;c[ab+(W+4)>>2]=J|1;c[ab+(J+W)>>2]=J;break}J=aa+4|0;X=c[ab+(J+al)>>2]|0;if((X&3|0)==1){$=X&-8;V=X>>>3;L3184:do{if(X>>>0<256>>>0){U=c[ab+((al|8)+aa)>>2]|0;Q=c[ab+(aa+12+al)>>2]|0;R=11704+(V<<1<<2)|0;do{if((U|0)!=(R|0)){if(U>>>0<(c[2920]|0)>>>0){bA();return 0}if((c[U+12>>2]|0)==(Z|0)){break}bA();return 0}}while(0);if((Q|0)==(U|0)){c[2916]=c[2916]&~(1<>>0<(c[2920]|0)>>>0){bA();return 0}m=Q+8|0;if((c[m>>2]|0)==(Z|0)){am=m;break}bA();return 0}}while(0);c[U+12>>2]=Q;c[am>>2]=U}else{R=S;m=c[ab+((al|24)+aa)>>2]|0;P=c[ab+(aa+12+al)>>2]|0;do{if((P|0)==(R|0)){O=al|16;g=ab+(J+O)|0;L=c[g>>2]|0;if((L|0)==0){e=ab+(O+aa)|0;O=c[e>>2]|0;if((O|0)==0){an=0;break}else{ao=O;ap=e}}else{ao=L;ap=g}while(1){g=ao+20|0;L=c[g>>2]|0;if((L|0)!=0){ao=L;ap=g;continue}g=ao+16|0;L=c[g>>2]|0;if((L|0)==0){break}else{ao=L;ap=g}}if(ap>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[ap>>2]=0;an=ao;break}}else{g=c[ab+((al|8)+aa)>>2]|0;if(g>>>0<(c[2920]|0)>>>0){bA();return 0}L=g+12|0;if((c[L>>2]|0)!=(R|0)){bA();return 0}e=P+8|0;if((c[e>>2]|0)==(R|0)){c[L>>2]=P;c[e>>2]=g;an=P;break}else{bA();return 0}}}while(0);if((m|0)==0){break}P=ab+(aa+28+al)|0;U=11968+(c[P>>2]<<2)|0;do{if((R|0)==(c[U>>2]|0)){c[U>>2]=an;if((an|0)!=0){break}c[2917]=c[2917]&~(1<>2]);break L3184}else{if(m>>>0<(c[2920]|0)>>>0){bA();return 0}Q=m+16|0;if((c[Q>>2]|0)==(R|0)){c[Q>>2]=an}else{c[m+20>>2]=an}if((an|0)==0){break L3184}}}while(0);if(an>>>0<(c[2920]|0)>>>0){bA();return 0}c[an+24>>2]=m;R=al|16;P=c[ab+(R+aa)>>2]|0;do{if((P|0)!=0){if(P>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[an+16>>2]=P;c[P+24>>2]=an;break}}}while(0);P=c[ab+(J+R)>>2]|0;if((P|0)==0){break}if(P>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[an+20>>2]=P;c[P+24>>2]=an;break}}}while(0);aq=ab+(($|al)+aa)|0;ar=$+K|0}else{aq=Z;ar=K}J=aq+4|0;c[J>>2]=c[J>>2]&-2;c[ab+(W+4)>>2]=ar|1;c[ab+(ar+W)>>2]=ar;J=ar>>>3;if(ar>>>0<256>>>0){V=J<<1;X=11704+(V<<2)|0;P=c[2916]|0;m=1<>2]|0;if(U>>>0>=(c[2920]|0)>>>0){as=U;at=J;break}bA();return 0}}while(0);c[at>>2]=_;c[as+12>>2]=_;c[ab+(W+8)>>2]=as;c[ab+(W+12)>>2]=X;break}V=ac;m=ar>>>8;do{if((m|0)==0){au=0}else{if(ar>>>0>16777215>>>0){au=31;break}P=(m+1048320|0)>>>16&8;$=m<>>16&4;U=$<>>16&2;Q=14-(J|P|$)+(U<<$>>>15)|0;au=ar>>>((Q+7|0)>>>0)&1|Q<<1}}while(0);m=11968+(au<<2)|0;c[ab+(W+28)>>2]=au;c[ab+(W+20)>>2]=0;c[ab+(W+16)>>2]=0;X=c[2917]|0;Q=1<>2]=V;c[ab+(W+24)>>2]=m;c[ab+(W+12)>>2]=V;c[ab+(W+8)>>2]=V;break}if((au|0)==31){av=0}else{av=25-(au>>>1)|0}Q=ar<>2]|0;while(1){if((c[X+4>>2]&-8|0)==(ar|0)){break}aw=X+16+(Q>>>31<<2)|0;m=c[aw>>2]|0;if((m|0)==0){T=2401;break}else{Q=Q<<1;X=m}}if((T|0)==2401){if(aw>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[aw>>2]=V;c[ab+(W+24)>>2]=X;c[ab+(W+12)>>2]=V;c[ab+(W+8)>>2]=V;break}}Q=X+8|0;m=c[Q>>2]|0;$=c[2920]|0;if(X>>>0<$>>>0){bA();return 0}if(m>>>0<$>>>0){bA();return 0}else{c[m+12>>2]=V;c[Q>>2]=V;c[ab+(W+8)>>2]=m;c[ab+(W+12)>>2]=X;c[ab+(W+24)>>2]=0;break}}}while(0);n=ab+(ak|8)|0;return n|0}}while(0);Y=ad;W=12112;while(1){ax=c[W>>2]|0;if(ax>>>0<=Y>>>0){ay=c[W+4>>2]|0;az=ax+ay|0;if(az>>>0>Y>>>0){break}}W=c[W+8>>2]|0}W=ax+(ay-39)|0;if((W&7|0)==0){aA=0}else{aA=-W&7}W=ax+(ay-47+aA)|0;ac=W>>>0<(ad+16|0)>>>0?Y:W;W=ac+8|0;_=ab+8|0;if((_&7|0)==0){aB=0}else{aB=-_&7}_=aa-40-aB|0;c[2922]=ab+aB;c[2919]=_;c[ab+(aB+4)>>2]=_|1;c[ab+(aa-36)>>2]=40;c[2923]=c[2818];c[ac+4>>2]=27;c[W>>2]=c[3028];c[W+4>>2]=c[3029];c[W+8>>2]=c[3030];c[W+12>>2]=c[3031];c[3028]=ab;c[3029]=aa;c[3031]=0;c[3030]=W;W=ac+28|0;c[W>>2]=7;if((ac+32|0)>>>0>>0){_=W;while(1){W=_+4|0;c[W>>2]=7;if((_+8|0)>>>0>>0){_=W}else{break}}}if((ac|0)==(Y|0)){break}_=ac-ad|0;W=Y+(_+4)|0;c[W>>2]=c[W>>2]&-2;c[ad+4>>2]=_|1;c[Y+_>>2]=_;W=_>>>3;if(_>>>0<256>>>0){K=W<<1;Z=11704+(K<<2)|0;S=c[2916]|0;m=1<>2]|0;if(Q>>>0>=(c[2920]|0)>>>0){aC=Q;aD=W;break}bA();return 0}}while(0);c[aD>>2]=ad;c[aC+12>>2]=ad;c[ad+8>>2]=aC;c[ad+12>>2]=Z;break}K=ad;m=_>>>8;do{if((m|0)==0){aE=0}else{if(_>>>0>16777215>>>0){aE=31;break}S=(m+1048320|0)>>>16&8;Y=m<>>16&4;W=Y<>>16&2;Q=14-(ac|S|Y)+(W<>>15)|0;aE=_>>>((Q+7|0)>>>0)&1|Q<<1}}while(0);m=11968+(aE<<2)|0;c[ad+28>>2]=aE;c[ad+20>>2]=0;c[ad+16>>2]=0;Z=c[2917]|0;Q=1<>2]=K;c[ad+24>>2]=m;c[ad+12>>2]=ad;c[ad+8>>2]=ad;break}if((aE|0)==31){aF=0}else{aF=25-(aE>>>1)|0}Q=_<>2]|0;while(1){if((c[Z+4>>2]&-8|0)==(_|0)){break}aG=Z+16+(Q>>>31<<2)|0;m=c[aG>>2]|0;if((m|0)==0){T=2436;break}else{Q=Q<<1;Z=m}}if((T|0)==2436){if(aG>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[aG>>2]=K;c[ad+24>>2]=Z;c[ad+12>>2]=ad;c[ad+8>>2]=ad;break}}Q=Z+8|0;_=c[Q>>2]|0;m=c[2920]|0;if(Z>>>0>>0){bA();return 0}if(_>>>0>>0){bA();return 0}else{c[_+12>>2]=K;c[Q>>2]=K;c[ad+8>>2]=_;c[ad+12>>2]=Z;c[ad+24>>2]=0;break}}}while(0);ad=c[2919]|0;if(ad>>>0<=o>>>0){break}_=ad-o|0;c[2919]=_;ad=c[2922]|0;Q=ad;c[2922]=Q+o;c[Q+(o+4)>>2]=_|1;c[ad+4>>2]=o|3;n=ad+8|0;return n|0}}while(0);c[(bp()|0)>>2]=12;n=0;return n|0}function dc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;if((a|0)==0){return}b=a-8|0;d=b;e=c[2920]|0;if(b>>>0>>0){bA()}f=c[a-4>>2]|0;g=f&3;if((g|0)==1){bA()}h=f&-8;i=a+(h-8)|0;j=i;L3366:do{if((f&1|0)==0){k=c[b>>2]|0;if((g|0)==0){return}l=-8-k|0;m=a+l|0;n=m;o=k+h|0;if(m>>>0>>0){bA()}if((n|0)==(c[2921]|0)){p=a+(h-4)|0;if((c[p>>2]&3|0)!=3){q=n;r=o;break}c[2918]=o;c[p>>2]=c[p>>2]&-2;c[a+(l+4)>>2]=o|1;c[i>>2]=o;return}p=k>>>3;if(k>>>0<256>>>0){k=c[a+(l+8)>>2]|0;s=c[a+(l+12)>>2]|0;t=11704+(p<<1<<2)|0;do{if((k|0)!=(t|0)){if(k>>>0>>0){bA()}if((c[k+12>>2]|0)==(n|0)){break}bA()}}while(0);if((s|0)==(k|0)){c[2916]=c[2916]&~(1<>>0>>0){bA()}v=s+8|0;if((c[v>>2]|0)==(n|0)){u=v;break}bA()}}while(0);c[k+12>>2]=s;c[u>>2]=k;q=n;r=o;break}t=m;p=c[a+(l+24)>>2]|0;v=c[a+(l+12)>>2]|0;do{if((v|0)==(t|0)){w=a+(l+20)|0;x=c[w>>2]|0;if((x|0)==0){y=a+(l+16)|0;z=c[y>>2]|0;if((z|0)==0){A=0;break}else{B=z;C=y}}else{B=x;C=w}while(1){w=B+20|0;x=c[w>>2]|0;if((x|0)!=0){B=x;C=w;continue}w=B+16|0;x=c[w>>2]|0;if((x|0)==0){break}else{B=x;C=w}}if(C>>>0>>0){bA()}else{c[C>>2]=0;A=B;break}}else{w=c[a+(l+8)>>2]|0;if(w>>>0>>0){bA()}x=w+12|0;if((c[x>>2]|0)!=(t|0)){bA()}y=v+8|0;if((c[y>>2]|0)==(t|0)){c[x>>2]=v;c[y>>2]=w;A=v;break}else{bA()}}}while(0);if((p|0)==0){q=n;r=o;break}v=a+(l+28)|0;m=11968+(c[v>>2]<<2)|0;do{if((t|0)==(c[m>>2]|0)){c[m>>2]=A;if((A|0)!=0){break}c[2917]=c[2917]&~(1<>2]);q=n;r=o;break L3366}else{if(p>>>0<(c[2920]|0)>>>0){bA()}k=p+16|0;if((c[k>>2]|0)==(t|0)){c[k>>2]=A}else{c[p+20>>2]=A}if((A|0)==0){q=n;r=o;break L3366}}}while(0);if(A>>>0<(c[2920]|0)>>>0){bA()}c[A+24>>2]=p;t=c[a+(l+16)>>2]|0;do{if((t|0)!=0){if(t>>>0<(c[2920]|0)>>>0){bA()}else{c[A+16>>2]=t;c[t+24>>2]=A;break}}}while(0);t=c[a+(l+20)>>2]|0;if((t|0)==0){q=n;r=o;break}if(t>>>0<(c[2920]|0)>>>0){bA()}else{c[A+20>>2]=t;c[t+24>>2]=A;q=n;r=o;break}}else{q=d;r=h}}while(0);d=q;if(d>>>0>=i>>>0){bA()}A=a+(h-4)|0;e=c[A>>2]|0;if((e&1|0)==0){bA()}do{if((e&2|0)==0){if((j|0)==(c[2922]|0)){B=(c[2919]|0)+r|0;c[2919]=B;c[2922]=q;c[q+4>>2]=B|1;if((q|0)!=(c[2921]|0)){return}c[2921]=0;c[2918]=0;return}if((j|0)==(c[2921]|0)){B=(c[2918]|0)+r|0;c[2918]=B;c[2921]=q;c[q+4>>2]=B|1;c[d+B>>2]=B;return}B=(e&-8)+r|0;C=e>>>3;L3469:do{if(e>>>0<256>>>0){u=c[a+h>>2]|0;g=c[a+(h|4)>>2]|0;b=11704+(C<<1<<2)|0;do{if((u|0)!=(b|0)){if(u>>>0<(c[2920]|0)>>>0){bA()}if((c[u+12>>2]|0)==(j|0)){break}bA()}}while(0);if((g|0)==(u|0)){c[2916]=c[2916]&~(1<>>0<(c[2920]|0)>>>0){bA()}f=g+8|0;if((c[f>>2]|0)==(j|0)){D=f;break}bA()}}while(0);c[u+12>>2]=g;c[D>>2]=u}else{b=i;f=c[a+(h+16)>>2]|0;t=c[a+(h|4)>>2]|0;do{if((t|0)==(b|0)){p=a+(h+12)|0;v=c[p>>2]|0;if((v|0)==0){m=a+(h+8)|0;k=c[m>>2]|0;if((k|0)==0){E=0;break}else{F=k;G=m}}else{F=v;G=p}while(1){p=F+20|0;v=c[p>>2]|0;if((v|0)!=0){F=v;G=p;continue}p=F+16|0;v=c[p>>2]|0;if((v|0)==0){break}else{F=v;G=p}}if(G>>>0<(c[2920]|0)>>>0){bA()}else{c[G>>2]=0;E=F;break}}else{p=c[a+h>>2]|0;if(p>>>0<(c[2920]|0)>>>0){bA()}v=p+12|0;if((c[v>>2]|0)!=(b|0)){bA()}m=t+8|0;if((c[m>>2]|0)==(b|0)){c[v>>2]=t;c[m>>2]=p;E=t;break}else{bA()}}}while(0);if((f|0)==0){break}t=a+(h+20)|0;u=11968+(c[t>>2]<<2)|0;do{if((b|0)==(c[u>>2]|0)){c[u>>2]=E;if((E|0)!=0){break}c[2917]=c[2917]&~(1<>2]);break L3469}else{if(f>>>0<(c[2920]|0)>>>0){bA()}g=f+16|0;if((c[g>>2]|0)==(b|0)){c[g>>2]=E}else{c[f+20>>2]=E}if((E|0)==0){break L3469}}}while(0);if(E>>>0<(c[2920]|0)>>>0){bA()}c[E+24>>2]=f;b=c[a+(h+8)>>2]|0;do{if((b|0)!=0){if(b>>>0<(c[2920]|0)>>>0){bA()}else{c[E+16>>2]=b;c[b+24>>2]=E;break}}}while(0);b=c[a+(h+12)>>2]|0;if((b|0)==0){break}if(b>>>0<(c[2920]|0)>>>0){bA()}else{c[E+20>>2]=b;c[b+24>>2]=E;break}}}while(0);c[q+4>>2]=B|1;c[d+B>>2]=B;if((q|0)!=(c[2921]|0)){H=B;break}c[2918]=B;return}else{c[A>>2]=e&-2;c[q+4>>2]=r|1;c[d+r>>2]=r;H=r}}while(0);r=H>>>3;if(H>>>0<256>>>0){d=r<<1;e=11704+(d<<2)|0;A=c[2916]|0;E=1<>2]|0;if(h>>>0>=(c[2920]|0)>>>0){I=h;J=r;break}bA()}}while(0);c[J>>2]=q;c[I+12>>2]=q;c[q+8>>2]=I;c[q+12>>2]=e;return}e=q;I=H>>>8;do{if((I|0)==0){K=0}else{if(H>>>0>16777215>>>0){K=31;break}J=(I+1048320|0)>>>16&8;d=I<>>16&4;A=d<>>16&2;r=14-(E|J|d)+(A<>>15)|0;K=H>>>((r+7|0)>>>0)&1|r<<1}}while(0);I=11968+(K<<2)|0;c[q+28>>2]=K;c[q+20>>2]=0;c[q+16>>2]=0;r=c[2917]|0;d=1<>2]=e;c[q+24>>2]=I;c[q+12>>2]=q;c[q+8>>2]=q}else{if((K|0)==31){L=0}else{L=25-(K>>>1)|0}A=H<>2]|0;while(1){if((c[J+4>>2]&-8|0)==(H|0)){break}M=J+16+(A>>>31<<2)|0;E=c[M>>2]|0;if((E|0)==0){N=2613;break}else{A=A<<1;J=E}}if((N|0)==2613){if(M>>>0<(c[2920]|0)>>>0){bA()}else{c[M>>2]=e;c[q+24>>2]=J;c[q+12>>2]=q;c[q+8>>2]=q;break}}A=J+8|0;B=c[A>>2]|0;E=c[2920]|0;if(J>>>0>>0){bA()}if(B>>>0>>0){bA()}else{c[B+12>>2]=e;c[A>>2]=e;c[q+8>>2]=B;c[q+12>>2]=J;c[q+24>>2]=0;break}}}while(0);q=(c[2924]|0)-1|0;c[2924]=q;if((q|0)==0){O=12120}else{return}while(1){q=c[O>>2]|0;if((q|0)==0){break}else{O=q+8|0}}c[2924]=-1;return}function dd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;if((a|0)==0){d=db(b)|0;return d|0}if(b>>>0>4294967231>>>0){c[(bp()|0)>>2]=12;d=0;return d|0}if(b>>>0<11>>>0){e=16}else{e=b+11&-8}f=a-8|0;g=a-4|0;h=c[g>>2]|0;i=h&-8;j=i-8|0;k=a+j|0;l=k;m=c[2920]|0;if(f>>>0>>0){bA();return 0}n=h&3;if(!((n|0)!=1&(j|0)>-8)){bA();return 0}j=i|4;o=a+(j-8)|0;p=c[o>>2]|0;if((p&1|0)==0){bA();return 0}L3604:do{if((n|0)==0){if(e>>>0<256>>>0|i>>>0<(e|4)>>>0){break}if((i-e|0)>>>0>c[2816]<<1>>>0|(f|0)==0){break}else{d=a}return d|0}else{do{if(i>>>0>>0){if((l|0)==(c[2922]|0)){q=(c[2919]|0)+i|0;if(q>>>0<=e>>>0){break L3604}r=q-e|0;c[g>>2]=h&1|e|2;c[a+((e|4)-8)>>2]=r|1;c[2922]=a+(e-8);c[2919]=r;break}if((l|0)==(c[2921]|0)){r=(c[2918]|0)+i|0;if(r>>>0>>0){break L3604}q=r-e|0;if(q>>>0>15>>>0){c[g>>2]=h&1|e|2;c[a+((e|4)-8)>>2]=q|1;c[a+(r-8)>>2]=q;s=a+(r-4)|0;c[s>>2]=c[s>>2]&-2;t=a+(e-8)|0;u=q}else{c[g>>2]=h&1|r|2;q=a+(r-4)|0;c[q>>2]=c[q>>2]|1;t=0;u=0}c[2918]=u;c[2921]=t;break}if((p&2|0)!=0){break L3604}q=(p&-8)+i|0;if(q>>>0>>0){break L3604}r=q-e|0;s=p>>>3;L3625:do{if(p>>>0<256>>>0){v=c[a+i>>2]|0;w=c[a+j>>2]|0;x=11704+(s<<1<<2)|0;do{if((v|0)!=(x|0)){if(v>>>0>>0){bA();return 0}if((c[v+12>>2]|0)==(l|0)){break}bA();return 0}}while(0);if((w|0)==(v|0)){c[2916]=c[2916]&~(1<>>0>>0){bA();return 0}z=w+8|0;if((c[z>>2]|0)==(l|0)){y=z;break}bA();return 0}}while(0);c[v+12>>2]=w;c[y>>2]=v}else{x=k;z=c[a+(i+16)>>2]|0;A=c[a+j>>2]|0;do{if((A|0)==(x|0)){B=a+(i+12)|0;C=c[B>>2]|0;if((C|0)==0){D=a+(i+8)|0;E=c[D>>2]|0;if((E|0)==0){F=0;break}else{G=E;H=D}}else{G=C;H=B}while(1){B=G+20|0;C=c[B>>2]|0;if((C|0)!=0){G=C;H=B;continue}B=G+16|0;C=c[B>>2]|0;if((C|0)==0){break}else{G=C;H=B}}if(H>>>0>>0){bA();return 0}else{c[H>>2]=0;F=G;break}}else{B=c[a+i>>2]|0;if(B>>>0>>0){bA();return 0}C=B+12|0;if((c[C>>2]|0)!=(x|0)){bA();return 0}D=A+8|0;if((c[D>>2]|0)==(x|0)){c[C>>2]=A;c[D>>2]=B;F=A;break}else{bA();return 0}}}while(0);if((z|0)==0){break}A=a+(i+20)|0;v=11968+(c[A>>2]<<2)|0;do{if((x|0)==(c[v>>2]|0)){c[v>>2]=F;if((F|0)!=0){break}c[2917]=c[2917]&~(1<>2]);break L3625}else{if(z>>>0<(c[2920]|0)>>>0){bA();return 0}w=z+16|0;if((c[w>>2]|0)==(x|0)){c[w>>2]=F}else{c[z+20>>2]=F}if((F|0)==0){break L3625}}}while(0);if(F>>>0<(c[2920]|0)>>>0){bA();return 0}c[F+24>>2]=z;x=c[a+(i+8)>>2]|0;do{if((x|0)!=0){if(x>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[F+16>>2]=x;c[x+24>>2]=F;break}}}while(0);x=c[a+(i+12)>>2]|0;if((x|0)==0){break}if(x>>>0<(c[2920]|0)>>>0){bA();return 0}else{c[F+20>>2]=x;c[x+24>>2]=F;break}}}while(0);if(r>>>0>=16>>>0){c[g>>2]=c[g>>2]&1|e|2;c[a+((e|4)-8)>>2]=r|3;s=a+((q|4)-8)|0;c[s>>2]=c[s>>2]|1;de(a+(e-8)|0,r);break}c[g>>2]=q|c[g>>2]&1|2;s=a+((q|4)-8)|0;c[s>>2]=c[s>>2]|1;d=a;return d|0}else{s=i-e|0;if(s>>>0<=15>>>0){break}c[g>>2]=h&1|e|2;c[a+((e|4)-8)>>2]=s|3;c[o>>2]=c[o>>2]|1;de(a+(e-8)|0,s);d=a;return d|0}}while(0);if((f|0)==0){break}else{d=a}return d|0}}while(0);f=db(b)|0;if((f|0)==0){d=0;return d|0}e=c[g>>2]|0;g=(e&-8)-((e&3|0)==0?8:4)|0;e=g>>>0>>0?g:b;dg(f|0,a|0,e)|0;dc(a);d=f;return d|0}function de(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;d=a;e=d+b|0;f=e;g=c[a+4>>2]|0;L1:do{if((g&1|0)==0){h=c[a>>2]|0;if((g&3|0)==0){return}i=d+(-h|0)|0;j=i;k=h+b|0;l=c[2920]|0;if(i>>>0>>0){bA()}if((j|0)==(c[2921]|0)){m=d+(b+4)|0;if((c[m>>2]&3|0)!=3){n=j;o=k;break}c[2918]=k;c[m>>2]=c[m>>2]&-2;c[d+(4-h)>>2]=k|1;c[e>>2]=k;return}m=h>>>3;if(h>>>0<256>>>0){p=c[d+(8-h)>>2]|0;q=c[d+(12-h)>>2]|0;r=11704+(m<<1<<2)|0;do{if((p|0)!=(r|0)){if(p>>>0>>0){bA()}if((c[p+12>>2]|0)==(j|0)){break}bA()}}while(0);if((q|0)==(p|0)){c[2916]=c[2916]&~(1<>>0>>0){bA()}t=q+8|0;if((c[t>>2]|0)==(j|0)){s=t;break}bA()}}while(0);c[p+12>>2]=q;c[s>>2]=p;n=j;o=k;break}r=i;m=c[d+(24-h)>>2]|0;t=c[d+(12-h)>>2]|0;do{if((t|0)==(r|0)){u=16-h|0;v=d+(u+4)|0;w=c[v>>2]|0;if((w|0)==0){x=d+u|0;u=c[x>>2]|0;if((u|0)==0){y=0;break}else{z=u;A=x}}else{z=w;A=v}while(1){v=z+20|0;w=c[v>>2]|0;if((w|0)!=0){z=w;A=v;continue}v=z+16|0;w=c[v>>2]|0;if((w|0)==0){break}else{z=w;A=v}}if(A>>>0>>0){bA()}else{c[A>>2]=0;y=z;break}}else{v=c[d+(8-h)>>2]|0;if(v>>>0>>0){bA()}w=v+12|0;if((c[w>>2]|0)!=(r|0)){bA()}x=t+8|0;if((c[x>>2]|0)==(r|0)){c[w>>2]=t;c[x>>2]=v;y=t;break}else{bA()}}}while(0);if((m|0)==0){n=j;o=k;break}t=d+(28-h)|0;l=11968+(c[t>>2]<<2)|0;do{if((r|0)==(c[l>>2]|0)){c[l>>2]=y;if((y|0)!=0){break}c[2917]=c[2917]&~(1<>2]);n=j;o=k;break L1}else{if(m>>>0<(c[2920]|0)>>>0){bA()}i=m+16|0;if((c[i>>2]|0)==(r|0)){c[i>>2]=y}else{c[m+20>>2]=y}if((y|0)==0){n=j;o=k;break L1}}}while(0);if(y>>>0<(c[2920]|0)>>>0){bA()}c[y+24>>2]=m;r=16-h|0;t=c[d+r>>2]|0;do{if((t|0)!=0){if(t>>>0<(c[2920]|0)>>>0){bA()}else{c[y+16>>2]=t;c[t+24>>2]=y;break}}}while(0);t=c[d+(r+4)>>2]|0;if((t|0)==0){n=j;o=k;break}if(t>>>0<(c[2920]|0)>>>0){bA()}else{c[y+20>>2]=t;c[t+24>>2]=y;n=j;o=k;break}}else{n=a;o=b}}while(0);a=c[2920]|0;if(e>>>0>>0){bA()}y=d+(b+4)|0;z=c[y>>2]|0;do{if((z&2|0)==0){if((f|0)==(c[2922]|0)){A=(c[2919]|0)+o|0;c[2919]=A;c[2922]=n;c[n+4>>2]=A|1;if((n|0)!=(c[2921]|0)){return}c[2921]=0;c[2918]=0;return}if((f|0)==(c[2921]|0)){A=(c[2918]|0)+o|0;c[2918]=A;c[2921]=n;c[n+4>>2]=A|1;c[n+A>>2]=A;return}A=(z&-8)+o|0;s=z>>>3;L100:do{if(z>>>0<256>>>0){g=c[d+(b+8)>>2]|0;t=c[d+(b+12)>>2]|0;h=11704+(s<<1<<2)|0;do{if((g|0)!=(h|0)){if(g>>>0>>0){bA()}if((c[g+12>>2]|0)==(f|0)){break}bA()}}while(0);if((t|0)==(g|0)){c[2916]=c[2916]&~(1<>>0>>0){bA()}m=t+8|0;if((c[m>>2]|0)==(f|0)){B=m;break}bA()}}while(0);c[g+12>>2]=t;c[B>>2]=g}else{h=e;m=c[d+(b+24)>>2]|0;l=c[d+(b+12)>>2]|0;do{if((l|0)==(h|0)){i=d+(b+20)|0;p=c[i>>2]|0;if((p|0)==0){q=d+(b+16)|0;v=c[q>>2]|0;if((v|0)==0){C=0;break}else{D=v;E=q}}else{D=p;E=i}while(1){i=D+20|0;p=c[i>>2]|0;if((p|0)!=0){D=p;E=i;continue}i=D+16|0;p=c[i>>2]|0;if((p|0)==0){break}else{D=p;E=i}}if(E>>>0>>0){bA()}else{c[E>>2]=0;C=D;break}}else{i=c[d+(b+8)>>2]|0;if(i>>>0>>0){bA()}p=i+12|0;if((c[p>>2]|0)!=(h|0)){bA()}q=l+8|0;if((c[q>>2]|0)==(h|0)){c[p>>2]=l;c[q>>2]=i;C=l;break}else{bA()}}}while(0);if((m|0)==0){break}l=d+(b+28)|0;g=11968+(c[l>>2]<<2)|0;do{if((h|0)==(c[g>>2]|0)){c[g>>2]=C;if((C|0)!=0){break}c[2917]=c[2917]&~(1<>2]);break L100}else{if(m>>>0<(c[2920]|0)>>>0){bA()}t=m+16|0;if((c[t>>2]|0)==(h|0)){c[t>>2]=C}else{c[m+20>>2]=C}if((C|0)==0){break L100}}}while(0);if(C>>>0<(c[2920]|0)>>>0){bA()}c[C+24>>2]=m;h=c[d+(b+16)>>2]|0;do{if((h|0)!=0){if(h>>>0<(c[2920]|0)>>>0){bA()}else{c[C+16>>2]=h;c[h+24>>2]=C;break}}}while(0);h=c[d+(b+20)>>2]|0;if((h|0)==0){break}if(h>>>0<(c[2920]|0)>>>0){bA()}else{c[C+20>>2]=h;c[h+24>>2]=C;break}}}while(0);c[n+4>>2]=A|1;c[n+A>>2]=A;if((n|0)!=(c[2921]|0)){F=A;break}c[2918]=A;return}else{c[y>>2]=z&-2;c[n+4>>2]=o|1;c[n+o>>2]=o;F=o}}while(0);o=F>>>3;if(F>>>0<256>>>0){z=o<<1;y=11704+(z<<2)|0;C=c[2916]|0;b=1<>2]|0;if(d>>>0>=(c[2920]|0)>>>0){G=d;H=o;break}bA()}}while(0);c[H>>2]=n;c[G+12>>2]=n;c[n+8>>2]=G;c[n+12>>2]=y;return}y=n;G=F>>>8;do{if((G|0)==0){I=0}else{if(F>>>0>16777215>>>0){I=31;break}H=(G+1048320|0)>>>16&8;z=G<>>16&4;C=z<>>16&2;o=14-(b|H|z)+(C<>>15)|0;I=F>>>((o+7|0)>>>0)&1|o<<1}}while(0);G=11968+(I<<2)|0;c[n+28>>2]=I;c[n+20>>2]=0;c[n+16>>2]=0;o=c[2917]|0;z=1<>2]=y;c[n+24>>2]=G;c[n+12>>2]=n;c[n+8>>2]=n;return}if((I|0)==31){J=0}else{J=25-(I>>>1)|0}I=F<>2]|0;while(1){if((c[J+4>>2]&-8|0)==(F|0)){break}K=J+16+(I>>>31<<2)|0;G=c[K>>2]|0;if((G|0)==0){L=126;break}else{I=I<<1;J=G}}if((L|0)==126){if(K>>>0<(c[2920]|0)>>>0){bA()}c[K>>2]=y;c[n+24>>2]=J;c[n+12>>2]=n;c[n+8>>2]=n;return}K=J+8|0;L=c[K>>2]|0;I=c[2920]|0;if(J>>>0>>0){bA()}if(L>>>0>>0){bA()}c[L+12>>2]=y;c[K>>2]=y;c[n+8>>2]=L;c[n+12>>2]=J;c[n+24>>2]=0;return}function df(b){b=b|0;var c=0;c=b;while(a[c]|0){c=c+1|0}return c-b|0}function dg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=b|0;if((b&3)==(d&3)){while(b&3){if((e|0)==0)return f|0;a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function dh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=b+e|0;if((e|0)>=20){d=d&255;e=b&3;g=d|d<<8|d<<16|d<<24;h=f&~3;if(e){e=b+4-e|0;while((b|0)<(e|0)){a[b]=d;b=b+1|0}}while((b|0)<(h|0)){c[b>>2]=g;b=b+4|0}}while((b|0)<(f|0)){a[b]=d;b=b+1|0}}function di(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return(D=b+d+(e>>>0>>0|0)>>>0,e|0)|0}function dj(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return(D=e,a-c>>>0|0)|0}function dk(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b<>>32-c;return a<>>c;return a>>>c|(b&(1<>>c-32|0}function dm(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){D=b>>c;return a>>>c|(b&(1<>c-32|0}function dn(b){b=b|0;var c=0;c=a[n+(b>>>24)|0]|0;if((c|0)<8)return c|0;c=a[n+(b>>16&255)|0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>8&255)|0]|0;if((c|0)<8)return c+16|0;return(a[n+(b&255)|0]|0)+24|0}function dp(b){b=b|0;var c=0;c=a[m+(b&255)|0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)|0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)|0]|0;if((c|0)<8)return c+16|0;return(a[m+(b>>>24)|0]|0)+24|0}function dq(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=$(d,c)|0;f=a>>>16;a=(e>>>16)+($(d,f)|0)|0;d=b>>>16;b=$(d,c)|0;return(D=(a>>>16)+($(d,f)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|e&65535|0)|0}function dr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b>>31|((b|0)<0?-1:0)<<1;f=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;g=d>>31|((d|0)<0?-1:0)<<1;h=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;i=dj(e^a,f^b,e,f)|0;b=D;a=g^e;e=h^f;f=dj((dw(i,b,dj(g^c,h^d,g,h)|0,D,0)|0)^a,D^e,a,e)|0;return(D=D,f)|0}function ds(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;i=i+8|0;g=f|0;h=b>>31|((b|0)<0?-1:0)<<1;j=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;l=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;m=dj(h^a,j^b,h,j)|0;b=D;a=dj(k^d,l^e,k,l)|0;dw(m,b,a,D,g)|0;a=dj(c[g>>2]^h,c[g+4>>2]^j,h,j)|0;j=D;i=f;return(D=j,a)|0}function dt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=dq(e,a)|0;f=D;return(D=($(b,a)|0)+($(d,e)|0)+f|f&0,c|0|0)|0}function du(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=dw(a,b,c,d,0)|0;return(D=D,e)|0}function dv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+8|0;g=f|0;dw(a,b,d,e,g)|0;i=f;return(D=c[g+4>>2]|0,c[g>>2]|0)|0}function dw(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;g=a;h=b;i=h;j=d;k=e;l=k;if((i|0)==0){m=(f|0)!=0;if((l|0)==0){if(m){c[f>>2]=(g>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(g>>>0)/(j>>>0)>>>0;return(D=n,o)|0}else{if(!m){n=0;o=0;return(D=n,o)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;o=0;return(D=n,o)|0}}m=(l|0)==0;do{if((j|0)==0){if(m){if((f|0)!=0){c[f>>2]=(i>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(i>>>0)/(j>>>0)>>>0;return(D=n,o)|0}if((g|0)==0){if((f|0)!=0){c[f>>2]=0;c[f+4>>2]=(i>>>0)%(l>>>0)}n=0;o=(i>>>0)/(l>>>0)>>>0;return(D=n,o)|0}p=l-1|0;if((p&l|0)==0){if((f|0)!=0){c[f>>2]=a|0;c[f+4>>2]=p&i|b&0}n=0;o=i>>>((dp(l|0)|0)>>>0);return(D=n,o)|0}p=(dn(l|0)|0)-(dn(i|0)|0)|0;if(p>>>0<=30){q=p+1|0;r=31-p|0;s=q;t=i<>>(q>>>0);u=i>>>(q>>>0);v=0;w=g<>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(D=n,o)|0}else{if(!m){r=(dn(l|0)|0)-(dn(i|0)|0)|0;if(r>>>0<=31){q=r+1|0;p=31-r|0;x=r-31>>31;s=q;t=g>>>(q>>>0)&x|i<>>(q>>>0)&x;v=0;w=g<>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(D=n,o)|0}p=j-1|0;if((p&j|0)!=0){x=(dn(j|0)|0)+33-(dn(i|0)|0)|0;q=64-x|0;r=32-x|0;y=r>>31;z=x-32|0;A=z>>31;s=x;t=r-1>>31&i>>>(z>>>0)|(i<>>(x>>>0))&A;u=A&i>>>(x>>>0);v=g<>>(z>>>0))&y|g<>31;break}if((f|0)!=0){c[f>>2]=p&g;c[f+4>>2]=0}if((j|0)==1){n=h|b&0;o=a|0|0;return(D=n,o)|0}else{p=dp(j|0)|0;n=i>>>(p>>>0)|0;o=i<<32-p|g>>>(p>>>0)|0;return(D=n,o)|0}}}while(0);if((s|0)==0){B=w;C=v;E=u;F=t;G=0;H=0}else{g=d|0|0;d=k|e&0;e=di(g,d,-1,-1)|0;k=D;i=w;w=v;v=u;u=t;t=s;s=0;while(1){I=w>>>31|i<<1;J=s|w<<1;j=u<<1|i>>>31|0;a=u>>>31|v<<1|0;dj(e,k,j,a)|0;b=D;h=b>>31|((b|0)<0?-1:0)<<1;K=h&1;L=dj(j,a,h&g,(((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1)&d)|0;M=D;b=t-1|0;if((b|0)==0){break}else{i=I;w=J;v=M;u=L;t=b;s=K}}B=I;C=J;E=M;F=L;G=0;H=K}K=C;C=0;if((f|0)!=0){c[f>>2]=F;c[f+4>>2]=E}n=(K|0)>>>31|(B|C)<<1|(C<<1|K>>>31)&0|G;o=(K<<1|0>>>31)&-2|H;return(D=n,o)|0}function dx(a,b){a=a|0;b=b|0;return bV[a&1](b|0)|0}function dy(a,b,c){a=a|0;b=b|0;c=+c;bW[a&7](b|0,+c)}function dz(a,b){a=a|0;b=+b;bX[a&3](+b)}function dA(a,b){a=a|0;b=b|0;bY[a&15](b|0)}function dB(a,b,c){a=a|0;b=b|0;c=c|0;bZ[a&31](b|0,c|0)}function dC(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return b_[a&1](b|0,c|0,d|0,e|0,f|0)|0}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b$[a&3](b|0,c|0,d|0)}function dE(a){a=a|0;b0[a&7]()}function dF(a,b,c){a=a|0;b=b|0;c=c|0;return b1[a&1](b|0,c|0)|0}function dG(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return b2[a&7](b|0,c|0,+d,e|0)|0}function dH(a){a=a|0;aa(0);return 0}function dI(a,b){a=a|0;b=+b;aa(1)}function dJ(a){a=+a;aa(2)}function dK(a){a=a|0;aa(3)}function dL(a,b){a=a|0;b=b|0;aa(4)}function dM(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;aa(5);return 0}function dN(a,b,c){a=a|0;b=b|0;c=c|0;aa(6)}function dO(){aa(7)}function dP(a,b){a=a|0;b=b|0;aa(8);return 0}function dQ(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;aa(9);return 0} +function Bd(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0;e=i;i=i+1168|0;f=e;h=e+1040|0;j=e+16|0;k=e+8|0;l=e+12|0;c[f>>2]=b;Zd(h,11560,f);b=Pb(h|0,11584)|0;if((b|0)==0){m=0;i=e;return m|0}h=c[2456]|0;if((h|0)>0){n=h;h=0;while(1){o=c[(c[2452]|0)+(h<<2)>>2]|0;if((o|0)==0){p=n}else{q=c[o+156>>2]|0;if((q|0)==0){r=n}else{xc[q&7](o);r=c[2456]|0}c[o+212>>2]=c[2448];c[2448]=o;p=r}h=h+1|0;if((h|0)>=(p|0)){break}else{n=p}}}c[2456]=0;he(j|0,0,1024)|0;p=0;a:while(1){while(1){s=Jb(b|0)|0;if((s|0)==-1){t=11;break a}else if((s|0)==10){t=12;break a}else if((s|0)!=13){break}}a[j+p>>0]=s;n=p+1|0;if((n|0)<1024){p=n}else{break}}if((t|0)==11){a[j+p>>0]=0}else if((t|0)==12){a[j+p>>0]=0}c[f>>2]=k;c[f+4>>2]=l;Nd(j,11592,f);if((c[l>>2]|0)>0){f=0;do{he(j|0,0,1024)|0;p=0;b:while(1){while(1){u=Jb(b|0)|0;if((u|0)==-1){t=18;break b}else if((u|0)==10){t=19;break b}else if((u|0)!=13){break}}a[j+p>>0]=u;s=p+1|0;if((s|0)<1024){p=s}else{break}}if((t|0)==18){t=0;a[j+p>>0]=0}else if((t|0)==19){t=0;a[j+p>>0]=0}s=c[k>>2]|0;c:do{if((s|0)>0){v=+(f<<5|16|0);n=s;h=0;while(1){r=h<<1;d:do{if((h|0)>0){switch(a[j+(r+ -2)>>0]|0){case 108:case 68:case 84:case 114:case 62:case 60:case 86:case 65:case 70:case 69:case 83:case 66:case 109:case 35:case 46:{w=4;break d;break};default:{}}w=0}else{w=0}}while(0);if((h|0)<(n+ -1|0)){switch(a[j+(r+2)>>0]|0){case 108:case 68:case 84:case 114:case 62:case 60:case 86:case 65:case 70:case 69:case 83:case 66:case 109:case 35:case 46:{x=0;break};default:{x=1}}y=(x|w)^1}else{y=w}o=a[j+r>>0]|0;switch(o<<24>>24){case 108:case 68:case 84:case 114:case 62:case 60:case 86:case 65:case 70:case 69:case 83:case 66:case 109:case 35:case 46:{z=0;break};default:{z=1}}q=z?y:y|2;if((q|0)==6){A=bd(c[2854]|0)|0;B=+(h<<5|16|0);g[A+24>>2]=B;g[A+28>>2]=v;C=+g[A+76>>2];D=+g[A+68>>2];E=(C>D?C:D)*.5+10.0;C=+g[A+72>>2];F=(C>D?C:D)*.5+10.0;D=+g[A+52>>2];C=D+B;if(D>0.0){g[A+196>>2]=C+F;g[A+200>>2]=B-F}else{g[A+200>>2]=C-F;g[A+196>>2]=F+B}B=+g[A+56>>2];F=B+v;if(B>0.0){g[A+204>>2]=E+F;g[A+208>>2]=v-E}else{g[A+208>>2]=F-E;g[A+204>>2]=E+v}fd(A)}else if((q|0)==7){A=bd(c[2850]|0)|0;E=+(h<<5|16|0);g[A+24>>2]=E;g[A+28>>2]=v;F=+g[A+76>>2];B=+g[A+68>>2];C=(F>B?F:B)*.5+10.0;F=+g[A+72>>2];D=(F>B?F:B)*.5+10.0;B=+g[A+52>>2];F=B+E;if(B>0.0){g[A+196>>2]=F+D;g[A+200>>2]=E-D}else{g[A+200>>2]=F-D;g[A+196>>2]=D+E}E=+g[A+56>>2];D=E+v;if(E>0.0){g[A+204>>2]=C+D;g[A+208>>2]=v-C}else{g[A+208>>2]=D-C;g[A+204>>2]=C+v}fd(A)}else if((q|0)==3){A=bd(c[2852]|0)|0;C=+(h<<5|16|0);g[A+24>>2]=C;g[A+28>>2]=v;D=+g[A+76>>2];E=+g[A+68>>2];F=(D>E?D:E)*.5+10.0;D=+g[A+72>>2];B=(D>E?D:E)*.5+10.0;E=+g[A+52>>2];D=E+C;if(E>0.0){g[A+196>>2]=D+B;g[A+200>>2]=C-B}else{g[A+200>>2]=D-B;g[A+196>>2]=B+C}C=+g[A+56>>2];B=C+v;if(C>0.0){g[A+204>>2]=F+B;g[A+208>>2]=v-F}else{g[A+208>>2]=B-F;g[A+204>>2]=F+v}fd(A)}else if((q|0)==2){q=bd(c[2856]|0)|0;F=+(h<<5|16|0);g[q+24>>2]=F;g[q+28>>2]=v;B=+g[q+76>>2];C=+g[q+68>>2];D=(B>C?B:C)*.5+10.0;B=+g[q+72>>2];E=(B>C?B:C)*.5+10.0;C=+g[q+52>>2];B=C+F;if(C>0.0){g[q+196>>2]=B+E;g[q+200>>2]=F-E}else{g[q+200>>2]=B-E;g[q+196>>2]=E+F}F=+g[q+56>>2];E=F+v;if(F>0.0){g[q+204>>2]=D+E;g[q+208>>2]=v-D}else{g[q+208>>2]=E-D;g[q+204>>2]=D+v}fd(q)}do{switch(o<<24>>24){case 66:{q=bd(c[2840]|0)|0;D=+(h<<5|16|0);g[q+24>>2]=D;g[q+28>>2]=v;E=+g[q+76>>2];F=+g[q+68>>2];B=(E>F?E:F)*.5+10.0;E=+g[q+72>>2];C=(E>F?E:F)*.5+10.0;F=+g[q+52>>2];E=F+D;if(F>0.0){g[q+196>>2]=E+C;g[q+200>>2]=D-C}else{g[q+200>>2]=E-C;g[q+196>>2]=C+D}D=+g[q+56>>2];C=D+v;if(D>0.0){g[q+204>>2]=B+C;g[q+208>>2]=v-B}else{g[q+208>>2]=C-B;g[q+204>>2]=B+v}fd(q);break};case 109:{q=bd(c[2844]|0)|0;B=+(h<<5|16|0);g[q+24>>2]=B;g[q+28>>2]=v;C=+g[q+76>>2];D=+g[q+68>>2];E=(C>D?C:D)*.5+10.0;C=+g[q+72>>2];F=(C>D?C:D)*.5+10.0;D=+g[q+52>>2];C=D+B;if(D>0.0){g[q+196>>2]=C+F;g[q+200>>2]=B-F}else{g[q+200>>2]=C-F;g[q+196>>2]=F+B}B=+g[q+56>>2];F=B+v;if(B>0.0){g[q+204>>2]=E+F;g[q+208>>2]=v-E}else{g[q+208>>2]=F-E;g[q+204>>2]=E+v}fd(q);break};case 76:{q=bd(c[2860]|0)|0;E=+(h<<5|16|0);g[q+24>>2]=E;g[q+28>>2]=v;F=+g[q+76>>2];B=+g[q+68>>2];C=(F>B?F:B)*.5+10.0;F=+g[q+72>>2];D=(F>B?F:B)*.5+10.0;B=+g[q+52>>2];F=B+E;if(B>0.0){g[q+196>>2]=F+D;g[q+200>>2]=E-D}else{g[q+200>>2]=F-D;g[q+196>>2]=D+E}E=+g[q+56>>2];D=E+v;if(E>0.0){g[q+204>>2]=C+D;g[q+208>>2]=v-C}else{g[q+208>>2]=D-C;g[q+204>>2]=C+v}fd(q);break};case 108:{q=bd(c[2848]|0)|0;C=+(h<<5|16|0);g[q+24>>2]=C;g[q+28>>2]=v;D=+g[q+76>>2];E=+g[q+68>>2];F=(D>E?D:E)*.5+10.0;D=+g[q+72>>2];B=(D>E?D:E)*.5+10.0;E=+g[q+52>>2];D=E+C;if(E>0.0){g[q+196>>2]=D+B;g[q+200>>2]=C-B}else{g[q+200>>2]=D-B;g[q+196>>2]=B+C}C=+g[q+56>>2];B=C+v;if(C>0.0){g[q+204>>2]=F+B;g[q+208>>2]=v-F}else{g[q+208>>2]=B-F;g[q+204>>2]=F+v}fd(q);break};case 124:{q=bd(c[2858]|0)|0;F=+(h<<5|16|0);g[q+24>>2]=F;g[q+28>>2]=v;B=+g[q+76>>2];C=+g[q+68>>2];D=(B>C?B:C)*.5+10.0;B=+g[q+72>>2];E=(B>C?B:C)*.5+10.0;C=+g[q+52>>2];B=C+F;if(C>0.0){g[q+196>>2]=B+E;g[q+200>>2]=F-E}else{g[q+200>>2]=B-E;g[q+196>>2]=E+F}F=+g[q+56>>2];E=F+v;if(F>0.0){g[q+204>>2]=D+E;g[q+208>>2]=v-D}else{g[q+208>>2]=E-D;g[q+204>>2]=D+v}fd(q);break};case 83:{q=bd(c[2878]|0)|0;D=+(h<<5|16|0);g[q+24>>2]=D;g[q+28>>2]=v;E=+g[q+76>>2];F=+g[q+68>>2];B=(E>F?E:F)*.5+10.0;E=+g[q+72>>2];C=(E>F?E:F)*.5+10.0;F=+g[q+52>>2];E=F+D;if(F>0.0){g[q+196>>2]=E+C;g[q+200>>2]=D-C}else{g[q+200>>2]=E-C;g[q+196>>2]=C+D}D=+g[q+56>>2];C=D+v;if(D>0.0){g[q+204>>2]=B+C;g[q+208>>2]=v-B}else{g[q+208>>2]=C-B;g[q+204>>2]=B+v}fd(q);c[q+176>>2]=(a[j+(r|1)>>0]|0)+ -48;break};case 114:{q=bd(c[2846]|0)|0;B=+(h<<5|16|0);g[q+24>>2]=B;g[q+28>>2]=v;C=+g[q+76>>2];D=+g[q+68>>2];E=(C>D?C:D)*.5+10.0;C=+g[q+72>>2];F=(C>D?C:D)*.5+10.0;D=+g[q+52>>2];C=D+B;if(D>0.0){g[q+196>>2]=C+F;g[q+200>>2]=B-F}else{g[q+200>>2]=C-F;g[q+196>>2]=F+B}B=+g[q+56>>2];F=B+v;if(B>0.0){g[q+204>>2]=E+F;g[q+208>>2]=v-E}else{g[q+208>>2]=F-E;g[q+204>>2]=E+v}fd(q);break};case 86:{q=bd(c[2872]|0)|0;E=+(h<<5|16|0);g[q+24>>2]=E;g[q+28>>2]=v;F=+g[q+76>>2];B=+g[q+68>>2];C=(F>B?F:B)*.5+10.0;F=+g[q+72>>2];D=(F>B?F:B)*.5+10.0;B=+g[q+52>>2];F=B+E;if(B>0.0){g[q+196>>2]=F+D;g[q+200>>2]=E-D}else{g[q+200>>2]=F-D;g[q+196>>2]=D+E}E=+g[q+56>>2];D=E+v;if(E>0.0){g[q+204>>2]=C+D;g[q+208>>2]=v-C}else{g[q+208>>2]=D-C;g[q+204>>2]=C+v}fd(q);break};case 60:{q=bd(c[2874]|0)|0;C=+(h<<5|16|0);g[q+24>>2]=C;g[q+28>>2]=v;D=+g[q+76>>2];E=+g[q+68>>2];F=(D>E?D:E)*.5+10.0;D=+g[q+72>>2];B=(D>E?D:E)*.5+10.0;E=+g[q+52>>2];D=E+C;if(E>0.0){g[q+196>>2]=D+B;g[q+200>>2]=C-B}else{g[q+200>>2]=D-B;g[q+196>>2]=B+C}C=+g[q+56>>2];B=C+v;if(C>0.0){g[q+204>>2]=F+B;g[q+208>>2]=v-F}else{g[q+208>>2]=B-F;g[q+204>>2]=F+v}fd(q);break};case 70:{q=bd(c[2882]|0)|0;F=+(h<<5|16|0);g[q+24>>2]=F;g[q+28>>2]=v;B=+g[q+76>>2];C=+g[q+68>>2];D=(B>C?B:C)*.5+10.0;B=+g[q+72>>2];E=(B>C?B:C)*.5+10.0;C=+g[q+52>>2];B=C+F;if(C>0.0){g[q+196>>2]=B+E;g[q+200>>2]=F-E}else{g[q+200>>2]=B-E;g[q+196>>2]=E+F}F=+g[q+56>>2];E=F+v;if(F>0.0){g[q+204>>2]=D+E;g[q+208>>2]=v-D}else{g[q+208>>2]=E-D;g[q+204>>2]=D+v}fd(q);break};case 65:{q=bd(c[2870]|0)|0;D=+(h<<5|16|0);g[q+24>>2]=D;g[q+28>>2]=v;E=+g[q+76>>2];F=+g[q+68>>2];B=(E>F?E:F)*.5+10.0;E=+g[q+72>>2];C=(E>F?E:F)*.5+10.0;F=+g[q+52>>2];E=F+D;if(F>0.0){g[q+196>>2]=E+C;g[q+200>>2]=D-C}else{g[q+200>>2]=E-C;g[q+196>>2]=C+D}D=+g[q+56>>2];C=D+v;if(D>0.0){g[q+204>>2]=B+C;g[q+208>>2]=v-B}else{g[q+208>>2]=C-B;g[q+204>>2]=B+v}fd(q);break};case 62:{q=bd(c[2876]|0)|0;B=+(h<<5|16|0);g[q+24>>2]=B;g[q+28>>2]=v;C=+g[q+76>>2];D=+g[q+68>>2];E=(C>D?C:D)*.5+10.0;C=+g[q+72>>2];F=(C>D?C:D)*.5+10.0;D=+g[q+52>>2];C=D+B;if(D>0.0){g[q+196>>2]=C+F;g[q+200>>2]=B-F}else{g[q+200>>2]=C-F;g[q+196>>2]=F+B}B=+g[q+56>>2];F=B+v;if(B>0.0){g[q+204>>2]=E+F;g[q+208>>2]=v-E}else{g[q+208>>2]=F-E;g[q+204>>2]=E+v}fd(q);break};case 69:{q=bd(c[2880]|0)|0;E=+(h<<5|16|0);g[q+24>>2]=E;g[q+28>>2]=v;F=+g[q+76>>2];B=+g[q+68>>2];C=(F>B?F:B)*.5+10.0;F=+g[q+72>>2];D=(F>B?F:B)*.5+10.0;B=+g[q+52>>2];F=B+E;if(B>0.0){g[q+196>>2]=F+D;g[q+200>>2]=E-D}else{g[q+200>>2]=F-D;g[q+196>>2]=D+E}E=+g[q+56>>2];D=E+v;if(E>0.0){g[q+204>>2]=C+D;g[q+208>>2]=v-C}else{g[q+208>>2]=D-C;g[q+204>>2]=C+v}fd(q);break};case 35:{q=bd(c[2842]|0)|0;C=+(h<<5|16|0);g[q+24>>2]=C;g[q+28>>2]=v;D=+g[q+76>>2];E=+g[q+68>>2];F=(D>E?D:E)*.5+10.0;D=+g[q+72>>2];B=(D>E?D:E)*.5+10.0;E=+g[q+52>>2];D=E+C;if(E>0.0){g[q+196>>2]=D+B;g[q+200>>2]=C-B}else{g[q+200>>2]=D-B;g[q+196>>2]=B+C}C=+g[q+56>>2];B=C+v;if(C>0.0){g[q+204>>2]=F+B;g[q+208>>2]=v-F}else{g[q+208>>2]=B-F;g[q+204>>2]=F+v}fd(q);break};default:{}}}while(0);h=h+1|0;n=c[k>>2]|0;if((h|0)>=(n|0)){break c}}}}while(0);f=f+1|0}while((f|0)<(c[l>>2]|0))}Fb(b|0)|0;c[2888]=d;b=c[2456]|0;if((b|0)<=0){m=1;i=e;return m|0}l=c[2452]|0;f=0;while(1){G=c[l+(f<<2)>>2]|0;if(((G|0)!=0?(c[G+4>>2]|0)==9:0)?(c[G+176>>2]|0)==(d|0):0){break}f=f+1|0;if((f|0)>=(b|0)){m=1;t=169;break}}if((t|0)==169){i=e;return m|0}t=bd(c[2838]|0)|0;g[t+24>>2]=+g[G+24>>2];g[t+28>>2]=+g[G+28>>2];fd(t);m=1;i=e;return m|0}function Cd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;a=i;i=i+16|0;b=a;d=(c[9248>>2]|0)==1|(c[9252>>2]|0)==1?1:0;if((c[2306]|0)==1){if((c[2904]|0)==0){e=0;f=5}else{f=4}}else{g=c[2904]|0;if((c[9228>>2]|0)==1&(g|0)!=0){f=4}else{e=g;f=5}}do{if((f|0)==4){c[2904]=0;f=7}else if((f|0)==5){if((d|0)!=0){if((e|0)==0){f=7;break}else{break}}else{i=a;return}}}while(0);if((f|0)==7){c[2476]=0;c[2478]=0;c[2480]=0;c[2482]=0;c[2906]=0;c[2908]=1;c[2910]=0;Bd(0,1)|0;c[2904]=1}c[2464]=1;c[2466]=2;c[2468]=1;f=9944;c[f>>2]=0;c[f+4>>2]=0;f=9952;c[f>>2]=0;c[f+4>>2]=0;f=9960;c[f>>2]=0;c[f+4>>2]=0;f=9968;c[f>>2]=0;c[f+4>>2]=0;f=9984;c[f>>2]=0;c[f+4>>2]=0;c[2494]=0;c[2498]=0;c[1528]=1;c[1530]=1;if((c[1532]|0)!=0){i=a;return}c[1532]=1;f=5104;e=c[f+4>>2]|0;d=6136;c[d>>2]=c[f>>2];c[d+4>>2]=e;nb(b|0,0)|0;e=c[b>>2]|0;d=qe(e|0,((e|0)<0)<<31>>31|0,1e6,0)|0;e=c[b+4>>2]|0;b=ee(d|0,E|0,e|0,((e|0)<0)<<31>>31|0)|0;e=6144;c[e>>2]=b;c[e+4>>2]=E;hc(3,0,1);i=a;return}function Dd(a){a=+a;var b=0,d=0,e=0,f=0,h=0,j=0;b=i;i=i+1040|0;d=b;e=b+8|0;g[1566]=1.0;g[1568]=1.0;g[1570]=1.0;g[1572]=1.0;f=c[2908]|0;c[d>>2]=(c[2906]|0)+1;c[d+4>>2]=f;Zd(e,11864,d);g[1566]=0.0;g[1568]=0.0;g[1570]=0.0;g[1572]=.5;Wc(c[2914]|0,e,17,17);g[1566]=1.0;g[1568]=1.0;g[1570]=1.0;g[1572]=1.0;Wc(c[2914]|0,e,16,16);e=c[2910]|0;if((e|0)==1){g[1566]=0.0;g[1568]=0.0;g[1570]=0.0;g[1572]=.5;Wc(c[2914]|0,11912,301,301);g[1566]=1.0;g[1568]=0.0;g[1570]=0.0;g[1572]=1.0;Wc(c[2914]|0,11912,300,300);i=b;return}else if((e|0)==3){c[1528]=2;c[1530]=2;if((c[1532]|0)!=0){i=b;return}c[1532]=1;f=5104;h=c[f+4>>2]|0;j=6136;c[j>>2]=c[f>>2];c[j+4>>2]=h;nb(d|0,0)|0;h=c[d>>2]|0;j=qe(h|0,((h|0)<0)<<31>>31|0,1e6,0)|0;h=c[d+4>>2]|0;d=ee(j|0,E|0,h|0,((h|0)<0)<<31>>31|0)|0;h=6144;c[h>>2]=d;c[h+4>>2]=E;hc(3,0,1);i=b;return}else if((e|0)==2){g[1566]=0.0;g[1568]=0.0;g[1570]=0.0;g[1572]=.5;Wc(c[2914]|0,11880,301,301);g[1566]=1.0;g[1568]=1.0;g[1570]=0.0;g[1572]=1.0;Wc(c[2914]|0,11896,300,300);i=b;return}else{i=b;return}}function Ed(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0.0,j=0;a=i;Tc();g[1566]=1.0;g[1568]=1.0;g[1570]=1.0;g[1572]=1.0;d=c[2912]|0;e=(c[d+4>>2]|0)+320|0;f=(c[1284]|0)-((c[d+8>>2]|0)+150)|0;b=+((c[d+12>>2]|0)+e|0);h=+(f-(c[d+16>>2]|0)|0);if((c[1280]|0)!=(d|0)){Sc();c[1280]=d}Lc(c[1278]|0,+(e|0),+(f|0),0.0,b,h,1.0);f=c[2914]|0;if((c[2904]|0)==0){Wc(f,11664,300,300);j=c[2914]|0;Wc(j,11744,200,440);i=a;return}else{Wc(f,11688,300,300);Wc(c[2914]|0,11720,300,316);j=c[2914]|0;Wc(j,11744,200,440);i=a;return}}function Fd(a){a=a|0;var b=0,d=0,e=0,f=0;a=i;i=i+16|0;b=a;if(!((c[9248>>2]|0)==1|(c[9252>>2]|0)==1|(c[9256>>2]|0)==1)){i=a;return}c[2904]=0;c[2906]=0;c[2908]=1;c[2910]=0;c[1528]=3;c[1530]=3;if((c[1532]|0)!=0){i=a;return}c[1532]=1;d=5104;e=c[d+4>>2]|0;f=6136;c[f>>2]=c[d>>2];c[f+4>>2]=e;nb(b|0,0)|0;e=c[b>>2]|0;f=qe(e|0,((e|0)<0)<<31>>31|0,1e6,0)|0;e=c[b+4>>2]|0;b=ee(f|0,E|0,e|0,((e|0)<0)<<31>>31|0)|0;e=6144;c[e>>2]=b;c[e+4>>2]=E;hc(3,0,1);i=a;return}function Gd(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0.0;a=i;Tc();g[1566]=1.0;g[1568]=1.0;g[1570]=1.0;g[1572]=1.0;d=c[2942]|0;e=(c[d+4>>2]|0)+320|0;f=(c[1284]|0)-((c[d+8>>2]|0)+150)|0;b=+((c[d+12>>2]|0)+e|0);h=+(f-(c[d+16>>2]|0)|0);if((c[1280]|0)!=(d|0)){Sc();c[1280]=d}Lc(c[1278]|0,+(e|0),+(f|0),0.0,b,h,1.0);Wc(c[2914]|0,11776,250,320);Wc(c[2914]|0,11816,250,350);Wc(c[2914]|0,11840,300,400);i=a;return}function Hd(){return}function Id(){var a=0,b=0,d=0,e=0,f=0;a=i;i=i+16|0;b=a;a:do{if((c[2910]|0)!=0){d=0;while(1){if((c[9224+(d<<2)>>2]|0)==1){break}d=d+1|0;if((d|0)>=10){break a}}if((Bd(c[2906]|0,c[2908]|0)|0)==0){c[1528]=2;c[1530]=2;if((c[1532]|0)!=0){break}c[1532]=1;d=5104;e=c[d+4>>2]|0;f=6136;c[f>>2]=c[d>>2];c[f+4>>2]=e;nb(b|0,0)|0;e=c[b>>2]|0;f=qe(e|0,((e|0)<0)<<31>>31|0,1e6,0)|0;e=c[b+4>>2]|0;d=ee(f|0,E|0,e|0,((e|0)<0)<<31>>31|0)|0;e=6144;c[e>>2]=d;c[e+4>>2]=E;hc(3,0,1);break}if((c[2910]|0)==2){c[2476]=0;c[2478]=0;c[2480]=0;c[2482]=0}c[2910]=0}}while(0);if((c[9256>>2]|0)!=1){i=a;return}c[1528]=3;c[1530]=3;if((c[1532]|0)!=0){i=a;return}c[1532]=1;e=5104;d=c[e+4>>2]|0;f=6136;c[f>>2]=c[e>>2];c[f+4>>2]=d;nb(b|0,0)|0;d=c[b>>2]|0;f=qe(d|0,((d|0)<0)<<31>>31|0,1e6,0)|0;d=c[b+4>>2]|0;b=ee(f|0,E|0,d|0,((d|0)<0)<<31>>31|0)|0;d=6144;c[d>>2]=b;c[d+4>>2]=E;hc(3,0,1);i=a;return}function Jd(){var a=0,b=0;a=i;Ra(11928,511)|0;b=Pb(11600,11944)|0;if((b|0)==0){i=a;return}kb(11624,1,4,b|0)|0;kb(11632,1,4,b|0)|0;Fb(b|0)|0;xb(11952);i=a;return}function Kd(e,f){e=e|0;f=f|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;h=i;i=i+112|0;j=h;k=h+88|0;l=h+64|0;cb(Hb(0)|0);if((e|0)>1?(e=c[f+4>>2]|0,(a[e>>0]|0)==100):0){f=e;e=11984;do{f=f+1|0;e=e+1|0;m=a[f>>0]|0;n=a[e>>0]|0}while(!((m<<24>>24==0?1:m<<24>>24!=n<<24>>24)|n<<24>>24==0));if(m<<24>>24==n<<24>>24){c[2470]=1;Ja(12032)|0}}n=5104;c[n>>2]=66666;c[n+4>>2]=0;c[1282]=640;c[1284]=480;do{if((yb(32)|0)<0){Ja(9176)|0;c[j>>2]=ya()|0;eb(9288,j|0)|0}else{n=jb(640,480,32,201326593)|0;c[1274]=n;if((n|0)==0){Ja(9128)|0;c[j>>2]=ya()|0;eb(9288,j|0)|0;break}$b(11992,0);Ja(9032)|0;Ja(9072)|0;c[j>>2]=gb(7936)|0;eb(5144,j|0)|0;c[j>>2]=gb(7937)|0;eb(5160,j|0)|0;c[j>>2]=gb(7938)|0;eb(5176,j|0)|0;Ja(9088)|0;c[j>>2]=5192;n=Da(35633)|0;if((n|0)!=0){Oa(n|0,1,j|0,0);Kb(n|0);cc(n|0,35713,k|0);if((c[k>>2]|0)==0){Qb(n|0);o=0}else{o=n}}else{o=0}c[j>>2]=5584;n=Da(35632)|0;if((n|0)!=0){Oa(n|0,1,j|0,0);Kb(n|0);cc(n|0,35713,k|0);if((c[k>>2]|0)==0){Qb(n|0);p=0}else{p=n}}else{p=0}if(!((o|0)==0|(p|0)==0)){n=wa()|0;hb(n|0,o|0);hb(n|0,p|0);fc(n|0);Rb(n|0,35714,l|0);if((c[l>>2]|0)==0){ua(n|0);q=0}else{q=n}}else{q=0}pa(q|0);c[1500]=Ba(q|0,5984)|0;c[1506]=Ba(q|0,6008)|0;c[1510]=Ba(q|0,6032)|0;c[1516]=Xb(q|0,6048)|0;c[1524]=Xb(q|0,6072)|0;Na(1,6104);va(34962,c[1526]|0);Nb(34962,192e3,0,35048);va(34962,c[1526]|0);Ua(c[1500]|0,2,5126,0,32,0);Ua(c[1506]|0,2,5126,0,32,8);Ua(c[1510]|0,4,5126,0,32,16);Lb(c[1500]|0);Lb(c[1506]|0);Lb(c[1510]|0);zb(c[1516]|0,0);g[j>>2]=2.0/+(c[1282]|0);g[j+4>>2]=0.0;g[j+8>>2]=0.0;g[j+12>>2]=-1.0;g[j+16>>2]=0.0;g[j+20>>2]=2.0/+(c[1284]|0);g[j+24>>2]=0.0;g[j+28>>2]=-1.0;g[j+32>>2]=0.0;g[j+36>>2]=0.0;g[j+40>>2]=1.0;n=j+44|0;m=j+60|0;c[n+0>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;g[m>>2]=1.0;sa(c[1524]|0,1,0,j|0);db(3042);Aa(770,771);m=Pd(12)|0;c[m>>2]=Pd(12800)|0;c[m+4>>2]=0;c[m+8>>2]=400;c[1278]=m;g[1566]=1.0;g[1568]=1.0;g[1570]=1.0;g[1572]=1.0;Ga(512)|0;r=9224|0;s=r+40|0;do{c[r>>2]=0;r=r+4|0}while((r|0)<(s|0));do{if((Ga(16)|0)<0){Ja(9504)|0;c[j>>2]=ya()|0;eb(9288,j|0)|0}else{c[k>>2]=44100;b[k+4>>1]=-32752;a[k+6>>0]=2;b[k+8>>1]=2048;c[k+16>>2]=1;if((bb(k|0,l|0)|0)<0){Ja(9464)|0;c[j>>2]=ya()|0;eb(9288,j|0)|0;break}m=c[l+4>>2]|0;if(((m&65535)<<16>>16==-32752?(c[l>>2]|0)==44100:0)?(m&16711680|0)==131072:0){Vb(0);break}Ja(9408)|0;Sb()}}while(0);c[2472]=640;c[2474]=480;c[2476]=0;c[2478]=0;c[2480]=0;c[2482]=0;c[2484]=66}}while(0);c[2912]=Vc(12e3)|0;c[2942]=Vc(12016)|0;l=Pd(20)|0;k=Pd(24)|0;q=Pd(65536)|0;c[k>>2]=q;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=2048;c[k+16>>2]=8;c[k+20>>2]=-1;p=0;do{o=p<<3;m=0;do{n=(m<<11)+o|0;e=d[6296+(m+o)>>0]|0;f=0;do{t=n+f<<2;a[q+t>>0]=-1;a[q+(t|1)>>0]=-1;a[q+(t|2)>>0]=-1;a[q+(t|3)>>0]=((1<<7-f&e|0)!=0)<<31>>31;f=f+1|0}while((f|0)!=8);m=m+1|0}while((m|0)!=8);p=p+1|0}while((p|0)!=256);c[l>>2]=k;c[l+4>>2]=8;c[l+8>>2]=8;c[l+12>>2]=0;c[l+16>>2]=256;c[2914]=l;l=Vc(10280)|0;c[2574]=l;c[l+4>>2]=-16;c[l+8>>2]=-32;l=Vc(10304)|0;c[2582]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10336)|0;c[2588]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10360)|0;c[2596]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10392)|0;c[2604]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10424)|0;c[2612]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10456)|0;c[2618]=l;c[l+4>>2]=-16;c[l+8>>2]=-80;l=Vc(10480)|0;c[2626]=l;c[l+4>>2]=-16;c[l+8>>2]=-80;l=Vc(10512)|0;c[2632]=l;c[l+4>>2]=-16;c[l+8>>2]=-32;l=Vc(10536)|0;c[2638]=l;c[l+4>>2]=-16;c[l+8>>2]=-48;l=Vc(10560)|0;c[2646]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10592)|0;if((l|0)==0){Sa()}k=Pd(24)|0;c[k>>2]=l;c[k+4>>2]=32;g[k+8>>2]=5.0;c[k+12>>2]=2;c[k+16>>2]=200;c[k+20>>2]=400;c[2654]=k;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10624)|0;c[2536]=l;c[l+4>>2]=-16;c[l+8>>2]=-48;l=Vc(10648)|0;c[2538]=l;c[l+4>>2]=-16;c[l+8>>2]=-48;l=Vc(10672)|0;c[2542]=l;c[l+4>>2]=-16;c[l+8>>2]=-48;l=Vc(10696)|0;c[2540]=l;c[l+4>>2]=-16;c[l+8>>2]=-48;l=Vc(10720)|0;c[2566]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10744)|0;if((l|0)==0){Sa()}k=Pd(24)|0;c[k>>2]=l;c[k+4>>2]=32;g[k+8>>2]=5.0;c[k+12>>2]=2;c[k+16>>2]=200;c[k+20>>2]=400;c[2564]=k;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10776)|0;if((l|0)==0){Sa()}k=Pd(24)|0;c[k>>2]=l;c[k+4>>2]=32;g[k+8>>2]=10.0;c[k+12>>2]=2;c[k+16>>2]=100;c[k+20>>2]=200;c[2700]=k;c[l+4>>2]=-16;c[l+8>>2]=-48;l=Vc(10808)|0;c[2708]=l;c[l+4>>2]=-16;c[l+8>>2]=-32;l=Vc(10840)|0;c[2718]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10880)|0;c[2728]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10920)|0;c[2738]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(10960)|0;c[2748]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(11e3)|0;c[2756]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(11032)|0;c[2764]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(11064)|0;c[2772]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(11096)|0;c[2780]=l;c[l+4>>2]=-16;c[l+8>>2]=-16;l=Vc(11128)|0;if((l|0)==0){Sa()}k=Pd(24)|0;c[k>>2]=l;c[k+4>>2]=32;g[k+8>>2]=5.0;c[k+12>>2]=3;c[k+16>>2]=200;c[k+20>>2]=600;c[2786]=k;c[l+4>>2]=-16;c[l+8>>2]=-48;l=Vc(11152)|0;c[2794]=l;c[l+4>>2]=-16;c[l+8>>2]=-48;c[2556]=$c(11184)|0;c[2568]=$c(11208)|0;c[2562]=$c(11232)|0;c[2558]=$c(11256)|0;c[2552]=$c(11280)|0;c[2548]=$c(11304)|0;c[2544]=$c(11328)|0;l=c[2448]|0;if((l|0)==0){u=Pd(216)|0}else{c[2448]=c[l+212>>2];u=l}c[u>>2]=0;c[u+4>>2]=0;l=u+16|0;k=u+32|0;c[l+0>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[u+36>>2]=1;l=u+40|0;p=u+68|0;c[l+0>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;g[p>>2]=1.0;g[u+72>>2]=1.0;g[u+76>>2]=1.0;p=u+80|0;l=u+84|0;c[u+116>>2]=0;q=u+132|0;c[l+0>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[l+24>>2]=0;g[q>>2]=1.0;g[u+128>>2]=1.0;g[u+124>>2]=1.0;g[u+120>>2]=1.0;q=u+148|0;l=u+144|0;m=u+140|0;o=u+136|0;c[u+212>>2]=0;r=u+152|0;s=r+44|0;do{c[r>>2]=0;r=r+4|0}while((r|0)<(s|0));g[p>>2]=-1.0;c[k>>2]=0;g[o>>2]=0.0;g[m>>2]=0.0;g[l>>2]=0.0;g[q>>2]=1.0;q=bd(u)|0;c[2838]=q;c[q+4>>2]=0;g[q+68>>2]=16.0;g[q+72>>2]=24.0;g[q+76>>2]=24.0;g[q+80>>2]=30.0;g[q+88>>2]=2.5;g[q+92>>2]=.30000001192092896;c[q+32>>2]=25;g[q+136>>2]=.4000000059604645;g[q+140>>2]=.4000000059604645;g[q+144>>2]=.4000000059604645;g[q+148>>2]=96.0;l=c[2538]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;c[q+160>>2]=1;c[q+168>>2]=1;q=bd(u)|0;c[2840]=q;c[q+4>>2]=1;c[q+32>>2]=9;g[q+68>>2]=16.0;g[q+72>>2]=24.0;g[q+76>>2]=24.0;g[q+80>>2]=25.0;g[q+88>>2]=2.0;g[q+92>>2]=.5;c[q+160>>2]=2;l=c[2574]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;q=bd(u)|0;c[2842]=q;c[q+4>>2]=2;c[q+32>>2]=1;g[q+68>>2]=12.0;g[q+72>>2]=24.0;g[q+76>>2]=24.0;l=c[2618]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;l=bd(q)|0;c[2844]=l;q=c[2626]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;l=bd(c[2842]|0)|0;c[2846]=l;q=c[2632]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;c[l+32>>2]=1;q=bd(l)|0;c[2848]=q;l=c[2638]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;c[q+32>>2]=17;g[q+136>>2]=.4000000059604645;g[q+140>>2]=.4000000059604645;g[q+144>>2]=.4000000059604645;g[q+148>>2]=160.0;q=bd(u)|0;c[2850]=q;c[q+4>>2]=3;c[q+36>>2]=-1;c[q+32>>2]=0;l=c[2588]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;l=bd(q)|0;c[2852]=l;q=c[2596]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;l=bd(c[2850]|0)|0;c[2854]=l;q=c[2604]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;l=bd(c[2850]|0)|0;c[2856]=l;q=c[2612]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;l=bd(u)|0;c[2858]=l;c[l+4>>2]=4;c[l+36>>2]=-1;c[l+32>>2]=8;g[l+68>>2]=18.0;q=c[2646]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;c[l+172>>2]=3;l=bd(u)|0;c[2546]=l;c[l+4>>2]=5;c[l+36>>2]=-1;c[l+32>>2]=0;q=c[2582]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;l=bd(u)|0;c[2860]=l;c[l+4>>2]=6;c[l+36>>2]=-1;c[l+32>>2]=24;g[l+68>>2]=18.0;q=c[2654]|0;c[l+112>>2]=0;m=l+104|0;if((c[m>>2]|0)!=(q|0)){c[m>>2]=q;c[l+108>>2]=0;c[l+116>>2]=0}g[l+136>>2]=1.0;g[l+140>>2]=0.0;g[l+144>>2]=0.0;g[l+148>>2]=128.0;c[l+152>>2]=4;c[l+172>>2]=4;l=bd(u)|0;c[2862]=l;c[l+4>>2]=8;c[l+32>>2]=17;g[l+136>>2]=.20000000298023224;g[l+140>>2]=.20000000298023224;g[l+144>>2]=.20000000298023224;g[l+148>>2]=64.0;g[l+68>>2]=4.0;g[l+80>>2]=.10000000149011612;c[l+168>>2]=2;c[l+160>>2]=5;c[l+176>>2]=120;q=c[2756]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;g[l+52>>2]=0.0;g[l+56>>2]=-16.0;q=bd(l)|0;c[2864]=q;l=c[2764]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;g[q+52>>2]=0.0;g[q+56>>2]=16.0;q=bd(c[2862]|0)|0;c[2866]=q;l=c[2772]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;g[q+52>>2]=-16.0;g[q+56>>2]=0.0;q=bd(c[2862]|0)|0;c[2868]=q;l=c[2780]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;g[q+52>>2]=16.0;g[q+56>>2]=0.0;q=bd(u)|0;c[2870]=q;c[q+4>>2]=7;c[q+32>>2]=1;g[q+68>>2]=15.0;c[q+152>>2]=5;c[q+160>>2]=6;l=c[2718]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;c[q+192>>2]=c[2862];l=bd(q)|0;c[2872]=l;q=c[2728]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;c[l+192>>2]=c[2864];l=bd(c[2870]|0)|0;c[2874]=l;q=c[2738]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;c[l+192>>2]=c[2866];l=bd(c[2870]|0)|0;c[2876]=l;q=c[2748]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;c[l+192>>2]=c[2868];l=bd(u)|0;c[2878]=l;c[l+4>>2]=9;g[l+40>>2]=-5.0;c[l+32>>2]=24;g[l+68>>2]=20.0;g[l+136>>2]=0.0;g[l+140>>2]=0.0;g[l+144>>2]=.5;g[l+148>>2]=64.0;q=c[2566]|0;c[l+104>>2]=0;c[l+108>>2]=q;c[l+116>>2]=0;c[l+172>>2]=7;c[l+156>>2]=6;l=bd(u)|0;c[2880]=l;c[l+4>>2]=10;c[l+32>>2]=24;g[l+136>>2]=.5;g[l+140>>2]=.5;g[l+144>>2]=.5;g[l+148>>2]=160.0;g[l+68>>2]=20.0;q=c[2700]|0;c[l+112>>2]=0;m=l+104|0;if((c[m>>2]|0)!=(q|0)){c[m>>2]=q;c[l+108>>2]=0;c[l+116>>2]=0}c[l+172>>2]=8;q=bd(l)|0;c[2882]=q;l=c[2708]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;c[q+172>>2]=9;q=bd(u)|0;c[2884]=q;c[q+36>>2]=0;c[q+4>>2]=11;c[q+32>>2]=24;g[q+136>>2]=.5;g[q+140>>2]=.5;g[q+144>>2]=.5;g[q+148>>2]=160.0;g[q+68>>2]=20.0;l=c[2566]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;c[q+172>>2]=10;q=bd(u)|0;c[2886]=q;c[q+36>>2]=0;c[q+4>>2]=12;c[q+32>>2]=0;l=c[2566]|0;c[q+104>>2]=0;c[q+108>>2]=l;c[q+116>>2]=0;q=bd(u)|0;c[2554]=q;c[q+4>>2]=13;c[q+32>>2]=16;g[q+136>>2]=1.0;g[q+140>>2]=0.0;g[q+144>>2]=0.0;g[q+148>>2]=96.0;l=c[2786]|0;c[q+112>>2]=0;m=q+104|0;if((c[m>>2]|0)!=(l|0)){c[m>>2]=l;c[q+108>>2]=0;c[q+116>>2]=0}c[q+160>>2]=5;c[q+176>>2]=15;g[q+40>>2]=1.0;q=bd(u)|0;c[2550]=q;c[q+4>>2]=13;c[q+32>>2]=0;u=c[2794]|0;c[q+104>>2]=0;c[q+108>>2]=u;c[q+116>>2]=0;Ra(11928,511)|0;q=Pb(11600,11936)|0;do{if((q|0)!=0){ra(11624,1,4,q|0)|0;ra(11632,1,4,q|0)|0;u=c[2906]|0;l=c[2908]|0;if((u|0)==0&(l|0)==1){c[2904]=0;break}else{Bd(u,l)|0;c[2904]=1;Fb(q|0)|0;break}}}while(0);c[1528]=3;c[1530]=3;if((c[1532]|0)!=0){i=h;return 0}c[1532]=1;q=5104;l=c[q+4>>2]|0;u=6136;c[u>>2]=c[q>>2];c[u+4>>2]=l;nb(j|0,0)|0;l=c[j>>2]|0;u=qe(l|0,((l|0)<0)<<31>>31|0,1e6,0)|0;l=c[j+4>>2]|0;j=ee(u|0,E|0,l|0,((l|0)<0)<<31>>31|0)|0;l=6144;c[l>>2]=j;c[l+4>>2]=E;hc(3,0,1);i=h;return 0}function Ld(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=i;i=i+16|0;g=f;c[g>>2]=b;h=(e|0)==0?12264:e;e=c[h>>2]|0;a:do{if((d|0)==0){if((e|0)==0){j=0;i=f;return j|0}}else{if((b|0)==0){c[g>>2]=g;k=g}else{k=b}l=a[d>>0]|0;m=l&255;b:do{if((e|0)==0){if(l<<24>>24>-1){c[k>>2]=m;j=l<<24>>24!=0&1;i=f;return j|0}else{n=m+ -194|0;if(n>>>0>50){break a}o=c[12056+(n<<2)>>2]|0;break}}else{n=m>>>3;if((n+ -16|n+(e>>26))>>>0>7){break a}else{p=1;q=l;r=e;s=d}while(1){s=s+1|0;r=(q&255)+ -128|r<<6;n=p+ -1|0;if((r|0)>=0){break}if((n|0)==0){o=r;break b}q=a[s>>0]|0;if(((q&255)+ -128|0)>>>0>63){break a}else{p=n}}c[h>>2]=0;c[k>>2]=r;j=2-p|0;i=f;return j|0}}while(0);c[h>>2]=o;j=-2;i=f;return j|0}}while(0);c[h>>2]=0;c[(ic()|0)>>2]=84;j=-1;i=f;return j|0}function Md(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;f=i;g=b+84|0;h=c[g>>2]|0;j=e+256|0;k=h;l=(j|0)==0;a:do{if((k&3|0)==0|l){m=j;n=l;o=h;p=4}else{q=j;r=h;while(1){if((a[r>>0]|0)==0){s=q;t=r;break a}u=r+1|0;v=q+ -1|0;w=(v|0)==0;if((u&3|0)==0|w){m=v;n=w;o=u;p=4;break}else{q=v;r=u}}}}while(0);b:do{if((p|0)==4){if(!n){if((a[o>>0]|0)!=0){c:do{if(m>>>0>3){l=m;r=o;while(1){q=c[r>>2]|0;if(((q&-2139062144^-2139062144)&q+ -16843009|0)!=0){x=l;y=r;break c}q=r+4|0;u=l+ -4|0;if(u>>>0>3){l=u;r=q}else{x=u;y=q;break}}}else{x=m;y=o}}while(0);if((x|0)==0){s=0;t=y}else{r=x;l=y;while(1){if((a[l>>0]|0)==0){s=r;t=l;break b}q=l+1|0;r=r+ -1|0;if((r|0)==0){s=0;t=q;break}else{l=q}}}}else{s=m;t=o}}else{s=0;t=o}}}while(0);o=(s|0)!=0?t:0;if((o|0)==0){z=j}else{z=o-k|0}k=z>>>0>>0?z:e;ie(d|0,h|0,k|0)|0;c[b+4>>2]=h+k;d=h+z|0;c[b+8>>2]=d;c[g>>2]=d;i=f;return k|0}function Nd(e,f,j){e=e|0;f=f|0;j=j|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0.0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0.0,zb=0,Ab=0.0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0.0,Ob=0,Pb=0.0,Qb=0,Rb=0,Sb=0.0,Tb=0,Ub=0.0,Vb=0.0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0.0,$b=0,ac=0.0,bc=0,cc=0,dc=0,ec=0.0,fc=0,gc=0,hc=0.0,jc=0.0,kc=0.0,mc=0,nc=0.0,oc=0,pc=0.0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Md=0,Nd=0,Od=0,Sd=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0.0,ae=0,be=0,ce=0,fe=0.0,ie=0,ke=0.0,le=0.0,me=0.0,ne=0.0,oe=0.0,pe=0.0,te=0.0,ue=0,ve=0,we=0.0,xe=0,ye=0.0,ze=0,Ae=0.0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0;l=i;i=i+944|0;m=l+160|0;n=l;o=l+16|0;p=l+673|0;q=l+40|0;r=l+672|0;s=l+48|0;v=l+24|0;c[v>>2]=j;j=s+0|0;w=j+112|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(w|0));c[s+32>>2]=2;c[s+44>>2]=e;c[s+76>>2]=-1;c[s+84>>2]=e;e=a[f>>0]|0;if(e<<24>>24==0){i=l;return}j=s+4|0;w=s+100|0;x=s+108|0;y=s+8|0;z=p+10|0;A=p+33|0;B=o+4|0;C=p+46|0;D=p+94|0;F=s+104|0;G=m+496|0;H=e;e=0;I=f;f=0;J=0;K=0;a:while(1){b:do{if(!(H<<24>>24==32)?!(((H&255)+ -9|0)>>>0<5):0){L=H<<24>>24==37;c:do{if(L){M=I+1|0;N=a[M>>0]|0;do{if(N<<24>>24==42){O=0;Q=I+2|0}else if(N<<24>>24==37){break c}else{R=(N&255)+ -48|0;if(R>>>0<10?(a[I+2>>0]|0)==36:0){c[n>>2]=c[v>>2];S=R;while(1){R=c[n>>2]|0;T=c[R>>2]|0;c[n>>2]=R+4;if(S>>>0>1){S=S+ -1|0}else{break}}O=T;Q=I+3|0;break}S=c[v>>2]|0;R=c[S>>2]|0;c[v>>2]=S+4;O=R;Q=M}}while(0);M=a[Q>>0]|0;N=M&255;if((N+ -48|0)>>>0<10){R=N;N=Q;S=0;while(1){U=(S*10|0)+ -48+R|0;V=N+1|0;W=a[V>>0]|0;R=W&255;if(!((R+ -48|0)>>>0<10)){X=W;Y=V;Z=U;break}else{N=V;S=U}}}else{X=M;Y=Q;Z=0}if(X<<24>>24==109){S=Y+1|0;_=a[S>>0]|0;$=(O|0)!=0&1;ba=S}else{_=X;$=0;ba=Y}S=ba+1|0;switch(_&255|0){case 104:{N=(a[S>>0]|0)==104;ca=N?ba+2|0:S;da=N?-2:-1;break};case 76:{ca=S;da=2;break};case 116:case 122:{ca=S;da=1;break};case 106:{ca=S;da=3;break};case 108:{N=(a[S>>0]|0)==108;ca=N?ba+2|0:S;da=N?3:1;break};case 110:case 112:case 67:case 83:case 91:case 99:case 115:case 88:case 71:case 70:case 69:case 65:case 103:case 102:case 101:case 97:case 120:case 117:case 111:case 105:case 100:{ca=ba;da=0;break};default:{ea=J;fa=K;ga=527;break a}}N=d[ca>>0]|0;S=(N&47|0)==3;R=S?N|32:N;N=S?1:da;if((R|0)==110){if((O|0)==0){ha=e;ia=ca;ja=f;ka=J;la=K;break b}switch(N|0){case-2:{a[O>>0]=f;ha=e;ia=ca;ja=f;ka=J;la=K;break b;break};case-1:{b[O>>1]=f;ha=e;ia=ca;ja=f;ka=J;la=K;break b;break};case 0:{c[O>>2]=f;ha=e;ia=ca;ja=f;ka=J;la=K;break b;break};case 1:{c[O>>2]=f;ha=e;ia=ca;ja=f;ka=J;la=K;break b;break};case 3:{S=O;c[S>>2]=f;c[S+4>>2]=((f|0)<0)<<31>>31;ha=e;ia=ca;ja=f;ka=J;la=K;break b;break};default:{ha=e;ia=ca;ja=f;ka=J;la=K;break b}}}else if((R|0)==99){ma=f;na=(Z|0)<1?1:Z}else if((R|0)==91){ma=f;na=Z}else{c[F>>2]=0;S=c[y>>2]|0;U=c[j>>2]|0;c[x>>2]=S-U;c[w>>2]=S;V=U;U=S;while(1){if(V>>>0>>0){c[j>>2]=V+1;oa=d[V>>0]|0}else{oa=Ud(s)|0}if(!((oa|0)==32|(oa+ -9|0)>>>0<5)){break}V=c[j>>2]|0;U=c[w>>2]|0}U=c[j>>2]|0;if((c[w>>2]|0)==0){pa=U}else{V=U+ -1|0;c[j>>2]=V;pa=V}ma=(c[x>>2]|0)+f+pa-(c[y>>2]|0)|0;na=Z}c[F>>2]=na;V=c[y>>2]|0;U=c[j>>2]|0;M=V-U|0;c[x>>2]=M;if((na|0)!=0&(M|0)>(na|0)){qa=U+na|0}else{qa=V}c[w>>2]=qa;if(U>>>0>>0){c[j>>2]=U+1;ra=qa}else{if((Ud(s)|0)<0){ea=J;fa=K;ga=527;break a}ra=c[w>>2]|0}if((ra|0)!=0){c[j>>2]=(c[j>>2]|0)+ -1}d:do{switch(R|0){case 91:case 99:case 115:{U=(R|0)==99;e:do{if((R&239|0)==99){he(p|0,-1,257)|0;a[p>>0]=0;if((R|0)==115){a[A>>0]=0;a[z+0>>0]=0;a[z+1>>0]=0;a[z+2>>0]=0;a[z+3>>0]=0;a[z+4>>0]=0;sa=ca}else{sa=ca}}else{V=ca+1|0;M=(a[V>>0]|0)==94;S=M&1;W=M?ca+2|0:V;he(p|0,M&1|0,257)|0;a[p>>0]=0;M=a[W>>0]|0;if(M<<24>>24==93){V=(S^1)&255;a[D>>0]=V;ta=V;ua=W+1|0}else if(M<<24>>24==45){M=(S^1)&255;a[C>>0]=M;ta=M;ua=W+1|0}else{ta=(S^1)&255;ua=W}W=ua;while(1){S=a[W>>0]|0;if(S<<24>>24==93){sa=W;break e}else if(S<<24>>24==45){M=W+1|0;V=a[M>>0]|0;if(!(V<<24>>24==93|V<<24>>24==0)){va=a[W+ -1>>0]|0;if((va&255)<(V&255)){wa=va&255;do{wa=wa+1|0;a[p+wa>>0]=ta;va=a[M>>0]|0}while((wa|0)<(va&255|0));xa=va;ya=M}else{xa=V;ya=M}}else{xa=45;ya=W}}else if(S<<24>>24==0){ea=J;fa=K;ga=527;break a}else{xa=S;ya=W}a[p+((xa&255)+1)>>0]=ta;W=ya+1|0}}}while(0);W=U?na+1|0:31;wa=(N|0)==1;va=($|0)!=0;f:do{if(wa){if(va){za=Pd(W<<2)|0;if((za|0)==0){ea=0;fa=za;ga=527;break a}else{Aa=za}}else{Aa=O}c[o>>2]=0;c[B>>2]=0;za=0;Ba=W;Ca=Aa;g:while(1){if((Ca|0)==0){Da=va&(za|0)==(Ba|0);while(1){Ea=c[j>>2]|0;if(Ea>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Ea+1;Fa=d[Ea>>0]|0}else{Fa=Ud(s)|0}if((a[p+(Fa+1)>>0]|0)==0){Ga=za;Ha=0;break g}a[r>>0]=Fa;Ea=Ld(q,r,o)|0;if((Ea|0)==-2){continue}else if((Ea|0)==-1){ea=0;fa=0;ga=527;break a}if(Da){Ia=za;break}}}else{if(va){Ja=za}else{Ka=za;ga=104;break}while(1){while(1){Da=c[j>>2]|0;if(Da>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Da+1;La=d[Da>>0]|0}else{La=Ud(s)|0}if((a[p+(La+1)>>0]|0)==0){Ga=Ja;Ha=Ca;break g}a[r>>0]=La;Da=Ld(q,r,o)|0;if((Da|0)==-1){ea=0;fa=Ca;ga=527;break a}else if(!((Da|0)==-2)){break}}c[Ca+(Ja<<2)>>2]=c[q>>2];Ja=Ja+1|0;if((Ja|0)==(Ba|0)){Ia=Ba;break}}}Da=Ba<<1|1;S=Rd(Ca,Da<<2)|0;if((S|0)==0){ea=0;fa=Ca;ga=527;break a}za=Ia;Ba=Da;Ca=S}h:do{if((ga|0)==104){while(1){ga=0;while(1){Ba=c[j>>2]|0;if(Ba>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Ba+1;Ma=d[Ba>>0]|0}else{Ma=Ud(s)|0}if((a[p+(Ma+1)>>0]|0)==0){Ga=Ka;Ha=Ca;break h}a[r>>0]=Ma;Ba=Ld(q,r,o)|0;if((Ba|0)==-1){ga=529;break a}else if(!((Ba|0)==-2)){break}}c[Ca+(Ka<<2)>>2]=c[q>>2];Ka=Ka+1|0;ga=104}}}while(0);if((c[o>>2]|0)==0){Na=Ga;Oa=0;Pa=Ha}else{ea=0;fa=Ha;ga=527;break a}}else{if(va){Ca=Pd(W)|0;if((Ca|0)==0){ea=0;fa=0;ga=527;break a}else{Qa=0;Ra=W;Sa=Ca}while(1){Ca=Qa;do{Ba=c[j>>2]|0;if(Ba>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Ba+1;Ua=d[Ba>>0]|0}else{Ua=Ud(s)|0}if((a[p+(Ua+1)>>0]|0)==0){Na=Ca;Oa=Sa;Pa=0;break f}a[Sa+Ca>>0]=Ua;Ca=Ca+1|0}while((Ca|0)!=(Ra|0));Ca=Ra<<1|1;Ba=Rd(Sa,Ca)|0;if((Ba|0)==0){ea=Sa;fa=0;ga=527;break a}else{za=Ra;Ra=Ca;Sa=Ba;Qa=za}}}if((O|0)==0){za=ra;while(1){Ba=c[j>>2]|0;if(Ba>>>0>>0){c[j>>2]=Ba+1;Va=d[Ba>>0]|0}else{Va=Ud(s)|0}if((a[p+(Va+1)>>0]|0)==0){Na=0;Oa=0;Pa=0;break f}za=c[w>>2]|0}}else{za=ra;Ba=0;while(1){Ca=c[j>>2]|0;if(Ca>>>0>>0){c[j>>2]=Ca+1;Wa=d[Ca>>0]|0}else{Wa=Ud(s)|0}if((a[p+(Wa+1)>>0]|0)==0){Na=Ba;Oa=O;Pa=0;break f}a[O+Ba>>0]=Wa;za=c[w>>2]|0;Ba=Ba+1|0}}}}while(0);W=c[j>>2]|0;if((c[w>>2]|0)==0){Xa=W}else{Ba=W+ -1|0;c[j>>2]=Ba;Xa=Ba}Ba=Xa-(c[y>>2]|0)+(c[x>>2]|0)|0;if((Ba|0)==0){ea=Oa;fa=Pa;ga=527;break a}if(!((Ba|0)==(na|0)|U^1)){ea=Oa;fa=Pa;ga=527;break a}do{if(va){if(wa){c[O>>2]=Pa;break}else{c[O>>2]=Oa;break}}}while(0);if(U){Ya=sa;Za=Oa;_a=Pa}else{if((Pa|0)!=0){c[Pa+(Na<<2)>>2]=0}if((Oa|0)==0){Ya=sa;Za=0;_a=Pa;break d}a[Oa+Na>>0]=0;Ya=sa;Za=Oa;_a=Pa}break};case 120:case 88:case 112:{$a=16;ga=150;break};case 117:case 100:{$a=10;ga=150;break};case 111:{$a=8;ga=150;break};case 105:{$a=0;ga=150;break};case 71:case 103:case 70:case 102:case 69:case 101:case 65:case 97:{if((N|0)==1){ab=53;bb=-1074;ga=240}else if((N|0)==2){ab=53;bb=-1074;ga=240}else if((N|0)==0){ab=24;bb=-149;ga=240}else{cb=0.0}i:do{if((ga|0)==240){ga=0;wa=ra;while(1){va=c[j>>2]|0;if(va>>>0>>0){c[j>>2]=va+1;db=d[va>>0]|0}else{db=Ud(s)|0}if(!((db|0)==32|(db+ -9|0)>>>0<5)){break}wa=c[w>>2]|0}do{if((db|0)==43|(db|0)==45){wa=1-(((db|0)==45&1)<<1)|0;va=c[j>>2]|0;if(va>>>0<(c[w>>2]|0)>>>0){c[j>>2]=va+1;eb=d[va>>0]|0;fb=wa;break}else{eb=Ud(s)|0;fb=wa;break}}else{eb=db;fb=1}}while(0);wa=eb;va=0;while(1){if((wa|32|0)!=(a[13048+va>>0]|0)){gb=wa;hb=va;break}do{if(va>>>0<7){Ba=c[j>>2]|0;if(Ba>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Ba+1;ib=d[Ba>>0]|0;break}else{ib=Ud(s)|0;break}}else{ib=wa}}while(0);Ba=va+1|0;if(Ba>>>0<8){wa=ib;va=Ba}else{gb=ib;hb=Ba;break}}j:do{if((hb|0)==0){va=gb;wa=0;while(1){if((va|32|0)!=(a[13632+wa>>0]|0)){jb=va;kb=wa;break j}do{if(wa>>>0<2){Ba=c[j>>2]|0;if(Ba>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Ba+1;lb=d[Ba>>0]|0;break}else{lb=Ud(s)|0;break}}else{lb=va}}while(0);Ba=wa+1|0;if(Ba>>>0<3){va=lb;wa=Ba}else{jb=lb;kb=Ba;break}}}else if((hb|0)==3){if((c[w>>2]|0)==0){ga=260}else{c[j>>2]=(c[j>>2]|0)+ -1;ga=260}}else if((hb|0)==8){ga=260}else{jb=gb;kb=hb}}while(0);if((ga|0)==260){ga=0;cb=+(fb|0)*u;break}if((kb|0)==0){do{if((jb|0)==48){wa=c[j>>2]|0;if(wa>>>0<(c[w>>2]|0)>>>0){c[j>>2]=wa+1;mb=d[wa>>0]|0}else{mb=Ud(s)|0}if((mb|32|0)!=120){if((c[w>>2]|0)==0){nb=48;break}c[j>>2]=(c[j>>2]|0)+ -1;nb=48;break}wa=c[j>>2]|0;if(wa>>>0<(c[w>>2]|0)>>>0){c[j>>2]=wa+1;ob=d[wa>>0]|0;pb=0}else{ob=Ud(s)|0;pb=0}while(1){if((ob|0)==46){ga=298;break}else if((ob|0)!=48){qb=0;rb=0;sb=0;tb=0;ub=ob;vb=pb;wb=0;xb=0;yb=1.0;zb=0;Ab=0.0;break}wa=c[j>>2]|0;if(wa>>>0<(c[w>>2]|0)>>>0){c[j>>2]=wa+1;ob=d[wa>>0]|0;pb=1;continue}else{ob=Ud(s)|0;pb=1;continue}}k:do{if((ga|0)==298){ga=0;wa=c[j>>2]|0;if(wa>>>0<(c[w>>2]|0)>>>0){c[j>>2]=wa+1;Bb=d[wa>>0]|0}else{Bb=Ud(s)|0}if((Bb|0)==48){Cb=-1;Db=-1}else{qb=0;rb=0;sb=0;tb=0;ub=Bb;vb=pb;wb=1;xb=0;yb=1.0;zb=0;Ab=0.0;break}while(1){wa=c[j>>2]|0;if(wa>>>0<(c[w>>2]|0)>>>0){c[j>>2]=wa+1;Eb=d[wa>>0]|0}else{Eb=Ud(s)|0}if((Eb|0)!=48){qb=0;rb=0;sb=Cb;tb=Db;ub=Eb;vb=1;wb=1;xb=0;yb=1.0;zb=0;Ab=0.0;break k}wa=ee(Cb|0,Db|0,-1,-1)|0;Cb=wa;Db=E}}}while(0);l:while(1){wa=ub+ -48|0;do{if(!(wa>>>0<10)){va=ub|32;Ba=(ub|0)==46;if(!((va+ -97|0)>>>0<6|Ba)){Fb=ub;break l}if(Ba){if((wb|0)==0){Gb=rb;Hb=qb;Ib=rb;Jb=qb;Kb=vb;Lb=1;Mb=xb;Nb=yb;Ob=zb;Pb=Ab;break}else{Fb=46;break l}}else{Qb=(ub|0)>57?va+ -87|0:wa;ga=312;break}}else{Qb=wa;ga=312}}while(0);if((ga|0)==312){ga=0;do{if((qb|0)<0|(qb|0)==0&rb>>>0<8){Rb=xb;Sb=yb;Tb=Qb+(zb<<4)|0;Ub=Ab}else{if((qb|0)<0|(qb|0)==0&rb>>>0<14){Vb=yb*.0625;Rb=xb;Sb=Vb;Tb=zb;Ub=Ab+Vb*+(Qb|0);break}if(!((Qb|0)!=0&(xb|0)==0)){Rb=xb;Sb=yb;Tb=zb;Ub=Ab;break}Rb=1;Sb=yb;Tb=zb;Ub=Ab+yb*.5}}while(0);wa=ee(rb|0,qb|0,1,0)|0;Gb=sb;Hb=tb;Ib=wa;Jb=E;Kb=1;Lb=wb;Mb=Rb;Nb=Sb;Ob=Tb;Pb=Ub}wa=c[j>>2]|0;if(wa>>>0<(c[w>>2]|0)>>>0){c[j>>2]=wa+1;qb=Jb;rb=Ib;sb=Gb;tb=Hb;ub=d[wa>>0]|0;vb=Kb;wb=Lb;xb=Mb;yb=Nb;zb=Ob;Ab=Pb;continue}else{qb=Jb;rb=Ib;sb=Gb;tb=Hb;ub=Ud(s)|0;vb=Kb;wb=Lb;xb=Mb;yb=Nb;zb=Ob;Ab=Pb;continue}}if((vb|0)==0){wa=c[j>>2]|0;if((c[w>>2]|0)==0){Wb=wa}else{va=wa+ -1|0;c[j>>2]=va;Wb=va}c[F>>2]=0;va=c[y>>2]|0;c[x>>2]=va-Wb;c[w>>2]=va;cb=+(fb|0)*0.0;break i}va=(wb|0)==0;wa=va?rb:sb;Ba=va?qb:tb;if((qb|0)<0|(qb|0)==0&rb>>>0<8){va=rb;W=qb;za=zb;while(1){Ca=za<<4;va=ee(va|0,W|0,1,0)|0;W=E;if(!((W|0)<0|(W|0)==0&va>>>0<8)){Xb=Ca;break}else{za=Ca}}}else{Xb=zb}do{if((Fb|32|0)==112){za=Td(s,0)|0;va=E;if(!((za|0)==0&(va|0)==-2147483648)){Yb=za;Zb=va;break}c[F>>2]=0;va=c[y>>2]|0;c[x>>2]=va-(c[j>>2]|0);c[w>>2]=va;cb=0.0;break i}else{if((c[w>>2]|0)==0){Yb=0;Zb=0;break}c[j>>2]=(c[j>>2]|0)+ -1;Yb=0;Zb=0}}while(0);va=je(wa|0,Ba|0,2)|0;za=ee(va|0,E|0,-32,-1)|0;va=ee(za|0,E|0,Yb|0,Zb|0)|0;za=E;if((Xb|0)==0){cb=+(fb|0)*0.0;break i}if((za|0)>0|(za|0)==0&va>>>0>(0-bb|0)>>>0){c[(ic()|0)>>2]=34;cb=+(fb|0)*1.7976931348623157e+308*1.7976931348623157e+308;break i}W=bb+ -106|0;Ca=((W|0)<0)<<31>>31;if((za|0)<(Ca|0)|(za|0)==(Ca|0)&va>>>0>>0){c[(ic()|0)>>2]=34;cb=+(fb|0)*2.2250738585072014e-308*2.2250738585072014e-308;break i}if((Xb|0)>-1){W=va;Ca=za;S=Xb;Vb=Ab;while(1){Da=S<<1;if(!(Vb>=.5)){_b=Vb;$b=Da}else{_b=Vb+-1.0;$b=Da|1}ac=Vb+_b;Da=ee(W|0,Ca|0,-1,-1)|0;M=E;if(($b|0)>-1){W=Da;Ca=M;S=$b;Vb=ac}else{bc=Da;cc=M;dc=$b;ec=ac;break}}}else{bc=va;cc=za;dc=Xb;ec=Ab}S=de(32,0,bb|0,((bb|0)<0)<<31>>31|0)|0;Ca=ee(bc|0,cc|0,S|0,E|0)|0;S=E;if(0>(S|0)|0==(S|0)&ab>>>0>Ca>>>0){fc=(Ca|0)<0?0:Ca}else{fc=ab}do{if((fc|0)<53){Ca=84-fc|0;do{if((Ca|0)>1023){S=Ca+ -1023|0;if((S|0)<=1023){gc=S;hc=8.98846567431158e+307;break}S=Ca+ -2046|0;gc=(S|0)>1023?1023:S;hc=u}else{if(!((Ca|0)<-1022)){gc=Ca;hc=1.0;break}S=Ca+1022|0;if(!((S|0)<-1022)){gc=S;hc=2.2250738585072014e-308;break}S=Ca+2044|0;gc=(S|0)<-1022?-1022:S;hc=0.0}}while(0);Ca=je(gc+1023|0,0,52)|0;S=E;c[k>>2]=Ca;c[k+4>>2]=S;Vb=+(fb|0);ac=+lc(+(hc*+h[k>>3]),+Vb);if(!((fc|0)<32&ec!=0.0)){jc=Vb;kc=ac;mc=dc;nc=ec;break}S=dc&1;jc=Vb;kc=ac;mc=(S^1)+dc|0;nc=(S|0)==0?0.0:ec}else{jc=+(fb|0);kc=0.0;mc=dc;nc=ec}}while(0);ac=jc*nc+(kc+jc*+(mc>>>0))-kc;if(!(ac!=0.0)){c[(ic()|0)>>2]=34}do{if((bc|0)>1023){Vb=ac*8.98846567431158e+307;za=bc+ -1023|0;if((za|0)<=1023){oc=za;pc=Vb;break}za=bc+ -2046|0;oc=(za|0)>1023?1023:za;pc=Vb*8.98846567431158e+307}else{if(!((bc|0)<-1022)){oc=bc;pc=ac;break}Vb=ac*2.2250738585072014e-308;za=bc+1022|0;if(!((za|0)<-1022)){oc=za;pc=Vb;break}za=bc+2044|0;oc=(za|0)<-1022?-1022:za;pc=Vb*2.2250738585072014e-308}}while(0);za=je(oc+1023|0,0,52)|0;va=E;c[k>>2]=za;c[k+4>>2]=va;cb=pc*+h[k>>3];break i}else{nb=jb}}while(0);va=bb+ab|0;za=0-va|0;S=nb;Ca=0;while(1){if((S|0)==46){ga=371;break}else if((S|0)!=48){qc=S;rc=0;sc=0;tc=Ca;uc=0;break}W=c[j>>2]|0;if(W>>>0<(c[w>>2]|0)>>>0){c[j>>2]=W+1;S=d[W>>0]|0;Ca=1;continue}else{S=Ud(s)|0;Ca=1;continue}}m:do{if((ga|0)==371){ga=0;S=c[j>>2]|0;if(S>>>0<(c[w>>2]|0)>>>0){c[j>>2]=S+1;vc=d[S>>0]|0}else{vc=Ud(s)|0}if((vc|0)==48){S=-1;W=-1;while(1){Ba=c[j>>2]|0;if(Ba>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Ba+1;wc=d[Ba>>0]|0}else{wc=Ud(s)|0}if((wc|0)!=48){qc=wc;rc=S;sc=W;tc=1;uc=1;break m}Ba=ee(S|0,W|0,-1,-1)|0;S=Ba;W=E}}else{qc=vc;rc=0;sc=0;tc=Ca;uc=1}}}while(0);c[m>>2]=0;Ca=qc+ -48|0;W=(qc|0)==46;n:do{if(Ca>>>0<10|W){S=qc;Ba=W;wa=Ca;M=rc;Da=sc;V=0;Ea=0;xc=tc;yc=uc;zc=0;Ac=0;Bc=0;while(1){do{if(Ba){if((yc|0)==0){Cc=V;Dc=Ea;Ec=V;Fc=Ea;Gc=xc;Hc=1;Ic=zc;Jc=Ac;Kc=Bc}else{Lc=S;Mc=M;Nc=Da;Oc=V;Pc=Ea;Qc=xc;Rc=zc;Sc=Ac;Tc=Bc;break n}}else{Uc=ee(V|0,Ea|0,1,0)|0;Vc=E;Wc=(S|0)!=48;if((Ac|0)>=125){if(!Wc){Cc=M;Dc=Da;Ec=Uc;Fc=Vc;Gc=xc;Hc=yc;Ic=zc;Jc=Ac;Kc=Bc;break}c[G>>2]=c[G>>2]|1;Cc=M;Dc=Da;Ec=Uc;Fc=Vc;Gc=xc;Hc=yc;Ic=zc;Jc=Ac;Kc=Bc;break}Xc=m+(Ac<<2)|0;if((zc|0)==0){Yc=wa}else{Yc=S+ -48+((c[Xc>>2]|0)*10|0)|0}c[Xc>>2]=Yc;Xc=zc+1|0;Zc=(Xc|0)==9;Cc=M;Dc=Da;Ec=Uc;Fc=Vc;Gc=1;Hc=yc;Ic=Zc?0:Xc;Jc=(Zc&1)+Ac|0;Kc=Wc?Uc:Bc}}while(0);Uc=c[j>>2]|0;if(Uc>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Uc+1;_c=d[Uc>>0]|0}else{_c=Ud(s)|0}wa=_c+ -48|0;Ba=(_c|0)==46;if(!(wa>>>0<10|Ba)){$c=_c;ad=Ec;bd=Cc;cd=Fc;dd=Dc;ed=Gc;fd=Hc;gd=Ic;hd=Jc;id=Kc;ga=393;break}else{S=_c;M=Cc;Da=Dc;V=Ec;Ea=Fc;xc=Gc;yc=Hc;zc=Ic;Ac=Jc;Bc=Kc}}}else{$c=qc;ad=0;bd=rc;cd=0;dd=sc;ed=tc;fd=uc;gd=0;hd=0;id=0;ga=393}}while(0);if((ga|0)==393){ga=0;Ca=(fd|0)==0;Lc=$c;Mc=Ca?ad:bd;Nc=Ca?cd:dd;Oc=ad;Pc=cd;Qc=ed;Rc=gd;Sc=hd;Tc=id}Ca=(Qc|0)!=0;do{if(Ca){if((Lc|32|0)!=101){ga=399;break}W=Td(s,0)|0;Bc=E;if((W|0)==0&(Bc|0)==-2147483648){c[F>>2]=0;Ac=c[y>>2]|0;c[x>>2]=Ac-(c[j>>2]|0);c[w>>2]=Ac;cb=0.0;break i}else{Ac=ee(W|0,Bc|0,Mc|0,Nc|0)|0;jd=Ac;kd=E;break}}else{ga=399}}while(0);do{if((ga|0)==399){ga=0;if(!((Lc|0)>-1)){jd=Mc;kd=Nc;break}if((c[w>>2]|0)==0){jd=Mc;kd=Nc;break}c[j>>2]=(c[j>>2]|0)+ -1;jd=Mc;kd=Nc}}while(0);if(!Ca){c[(ic()|0)>>2]=22;c[F>>2]=0;Ac=c[y>>2]|0;c[x>>2]=Ac-(c[j>>2]|0);c[w>>2]=Ac;cb=0.0;break}Ac=c[m>>2]|0;if((Ac|0)==0){cb=+(fb|0)*0.0;break}do{if((jd|0)==(Oc|0)&(kd|0)==(Pc|0)&((Pc|0)<0|(Pc|0)==0&Oc>>>0<10)){if(!(ab>>>0>30)?(Ac>>>ab|0)!=0:0){break}cb=+(fb|0)*+(Ac>>>0);break i}}while(0);Ac=(bb|0)/-2|0;Ca=((Ac|0)<0)<<31>>31;if((kd|0)>(Ca|0)|(kd|0)==(Ca|0)&jd>>>0>Ac>>>0){c[(ic()|0)>>2]=34;cb=+(fb|0)*1.7976931348623157e+308*1.7976931348623157e+308;break}Ac=bb+ -106|0;Ca=((Ac|0)<0)<<31>>31;if((kd|0)<(Ca|0)|(kd|0)==(Ca|0)&jd>>>0>>0){c[(ic()|0)>>2]=34;cb=+(fb|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((Rc|0)==0){ld=Sc}else{if((Rc|0)<9){Ac=m+(Sc<<2)|0;Ca=c[Ac>>2]|0;Bc=Rc;do{Ca=Ca*10|0;Bc=Bc+1|0}while((Bc|0)!=9);c[Ac>>2]=Ca}ld=Sc+1|0}do{if((Tc|0)<9){if(!((Tc|0)<=(jd|0)&(jd|0)<18)){break}if((jd|0)==9){cb=+(fb|0)*+((c[m>>2]|0)>>>0);break i}if((jd|0)<9){cb=+(fb|0)*+((c[m>>2]|0)>>>0)/+(c[13072+(8-jd<<2)>>2]|0);break i}Bc=ab+27+(aa(jd,-3)|0)|0;W=c[m>>2]|0;if((Bc|0)<=30?(W>>>Bc|0)!=0:0){break}cb=+(fb|0)*+(W>>>0)*+(c[13072+(jd+ -10<<2)>>2]|0);break i}}while(0);Ca=(jd|0)%9|0;if((Ca|0)==0){md=0;nd=0;od=jd;pd=ld}else{Ac=(jd|0)>-1?Ca:Ca+9|0;Ca=c[13072+(8-Ac<<2)>>2]|0;do{if((ld|0)==0){qd=0;rd=jd;sd=0}else{W=1e9/(Ca|0)|0;Bc=0;zc=0;yc=0;xc=jd;while(1){Ea=m+(yc<<2)|0;V=c[Ea>>2]|0;Da=((V>>>0)/(Ca>>>0)|0)+zc|0;c[Ea>>2]=Da;zc=aa((V>>>0)%(Ca>>>0)|0,W)|0;V=yc;yc=yc+1|0;if((V|0)==(Bc|0)&(Da|0)==0){td=yc&127;ud=xc+ -9|0}else{td=Bc;ud=xc}if((yc|0)==(ld|0)){break}else{Bc=td;xc=ud}}if((zc|0)==0){qd=td;rd=ud;sd=ld;break}c[m+(ld<<2)>>2]=zc;qd=td;rd=ud;sd=ld+1|0}}while(0);md=qd;nd=0;od=9-Ac+rd|0;pd=sd}o:while(1){Ca=m+(md<<2)|0;if((od|0)<18){xc=nd;Bc=pd;while(1){yc=0;W=Bc+127|0;Da=Bc;while(1){V=W&127;Ea=m+(V<<2)|0;M=je(c[Ea>>2]|0,0,29)|0;S=ee(M|0,E|0,yc|0,0)|0;M=E;if(M>>>0>0|(M|0)==0&S>>>0>1e9){Ba=re(S|0,M|0,1e9,0)|0;wa=se(S|0,M|0,1e9,0)|0;vd=wa;wd=Ba}else{vd=S;wd=0}c[Ea>>2]=vd;Ea=(V|0)==(md|0);if((V|0)!=(Da+127&127|0)|Ea){xd=Da}else{xd=(vd|0)==0?V:Da}if(Ea){break}else{yc=wd;W=V+ -1|0;Da=xd}}Da=xc+ -29|0;if((wd|0)==0){xc=Da;Bc=xd}else{yd=Da;zd=wd;Ad=xd;break}}}else{if((od|0)==18){Bd=nd;Cd=pd}else{Dd=md;Ed=nd;Fd=od;Gd=pd;break}while(1){if(!((c[Ca>>2]|0)>>>0<9007199)){Dd=md;Ed=Bd;Fd=18;Gd=Cd;break o}Bc=0;xc=Cd+127|0;zc=Cd;while(1){Da=xc&127;W=m+(Da<<2)|0;yc=je(c[W>>2]|0,0,29)|0;V=ee(yc|0,E|0,Bc|0,0)|0;yc=E;if(yc>>>0>0|(yc|0)==0&V>>>0>1e9){Ea=re(V|0,yc|0,1e9,0)|0;S=se(V|0,yc|0,1e9,0)|0;Hd=S;Id=Ea}else{Hd=V;Id=0}c[W>>2]=Hd;W=(Da|0)==(md|0);if((Da|0)!=(zc+127&127|0)|W){Jd=zc}else{Jd=(Hd|0)==0?Da:zc}if(W){break}else{Bc=Id;xc=Da+ -1|0;zc=Jd}}zc=Bd+ -29|0;if((Id|0)==0){Bd=zc;Cd=Jd}else{yd=zc;zd=Id;Ad=Jd;break}}}Ca=md+127&127;if((Ca|0)==(Ad|0)){zc=Ad+127&127;xc=m+((Ad+126&127)<<2)|0;c[xc>>2]=c[xc>>2]|c[m+(zc<<2)>>2];Kd=zc}else{Kd=Ad}c[m+(Ca<<2)>>2]=zd;md=Ca;nd=yd;od=od+9|0;pd=Kd}p:while(1){Md=Gd+1&127;Ac=m+((Gd+127&127)<<2)|0;Ca=Dd;zc=Ed;xc=Fd;while(1){Bc=(xc|0)==18;Da=(xc|0)>27?9:1;Nd=Ca;Od=zc;while(1){W=0;while(1){V=W+Nd&127;if((V|0)==(Gd|0)){Sd=2;break}Ea=c[m+(V<<2)>>2]|0;V=c[13064+(W<<2)>>2]|0;if(Ea>>>0>>0){Sd=2;break}S=W+1|0;if(Ea>>>0>V>>>0){Sd=W;break}if((S|0)<2){W=S}else{Sd=S;break}}if((Sd|0)==2&Bc){break p}Vd=Da+Od|0;if((Nd|0)==(Gd|0)){Nd=Gd;Od=Vd}else{break}}Bc=(1<>>Da;Wd=Nd;Xd=0;S=Nd;Yd=xc;do{V=m+(S<<2)|0;Ea=c[V>>2]|0;yc=(Ea>>>Da)+Xd|0;c[V>>2]=yc;Xd=aa(Ea&Bc,W)|0;Ea=(S|0)==(Wd|0)&(yc|0)==0;S=S+1&127;Yd=Ea?Yd+ -9|0:Yd;Wd=Ea?S:Wd}while((S|0)!=(Gd|0));if((Xd|0)==0){Ca=Wd;zc=Vd;xc=Yd;continue}if((Md|0)!=(Wd|0)){break}c[Ac>>2]=c[Ac>>2]|1;Ca=Wd;zc=Vd;xc=Yd}c[m+(Gd<<2)>>2]=Xd;Dd=Wd;Ed=Vd;Fd=Yd;Gd=Md}xc=Nd&127;if((xc|0)==(Gd|0)){c[m+(Md+ -1<<2)>>2]=0;Zd=Md}else{Zd=Gd}ac=+((c[m+(xc<<2)>>2]|0)>>>0);xc=Nd+1&127;if((xc|0)==(Zd|0)){zc=Zd+1&127;c[m+(zc+ -1<<2)>>2]=0;_d=zc}else{_d=Zd}Vb=+(fb|0);$d=Vb*(ac*1.0e9+ +((c[m+(xc<<2)>>2]|0)>>>0));xc=Od+53|0;zc=xc-bb|0;if((zc|0)<(ab|0)){ae=(zc|0)<0?0:zc;be=1}else{ae=ab;be=0}if((ae|0)<53){Ca=105-ae|0;do{if((Ca|0)>1023){Ac=Ca+ -1023|0;if((Ac|0)<=1023){ce=Ac;fe=8.98846567431158e+307;break}Ac=Ca+ -2046|0;ce=(Ac|0)>1023?1023:Ac;fe=u}else{if(!((Ca|0)<-1022)){ce=Ca;fe=1.0;break}Ac=Ca+1022|0;if(!((Ac|0)<-1022)){ce=Ac;fe=2.2250738585072014e-308;break}Ac=Ca+2044|0;ce=(Ac|0)<-1022?-1022:Ac;fe=0.0}}while(0);Ca=je(ce+1023|0,0,52)|0;Ac=E;c[k>>2]=Ca;c[k+4>>2]=Ac;ac=+lc(+(fe*+h[k>>3]),+$d);Ac=53-ae|0;do{if((Ac|0)>1023){Ca=Ac+ -1023|0;if((Ca|0)<=1023){ie=Ca;ke=8.98846567431158e+307;break}Ca=Ac+ -2046|0;ie=(Ca|0)>1023?1023:Ca;ke=u}else{if(!((Ac|0)<-1022)){ie=Ac;ke=1.0;break}Ca=Ac+1022|0;if(!((Ca|0)<-1022)){ie=Ca;ke=2.2250738585072014e-308;break}Ca=Ac+2044|0;ie=(Ca|0)<-1022?-1022:Ca;ke=0.0}}while(0);Ac=je(ie+1023|0,0,52)|0;Ca=E;c[k>>2]=Ac;c[k+4>>2]=Ca;le=+Ta(+$d,+(ke*+h[k>>3]));me=ac;ne=le;oe=ac+($d-le)}else{me=0.0;ne=0.0;oe=$d}Ca=Nd+2&127;do{if((Ca|0)==(_d|0)){pe=ne}else{Ac=c[m+(Ca<<2)>>2]|0;do{if(!(Ac>>>0<5e8)){if(Ac>>>0>5e8){te=Vb*.75+ne;break}if((Nd+3&127|0)==(_d|0)){te=Vb*.5+ne;break}else{te=Vb*.75+ne;break}}else{if((Ac|0)==0?(Nd+3&127|0)==(_d|0):0){te=ne;break}te=Vb*.25+ne}}while(0);if((53-ae|0)<=1){pe=te;break}if(+Ta(+te,1.0)!=0.0){pe=te;break}pe=te+1.0}}while(0);Vb=oe+pe-me;do{if((xc&2147483647|0)>(-2-va|0)){if(!(+P(+Vb)>=9007199254740992.0)){ue=be;ve=Od;we=Vb}else{ue=(be|0)!=0&(ae|0)==(zc|0)?0:be;ve=Od+1|0;we=Vb*.5}if((ve+50|0)<=(za|0)?!((ue|0)!=0&pe!=0.0):0){xe=ve;ye=we;break}c[(ic()|0)>>2]=34;xe=ve;ye=we}else{xe=Od;ye=Vb}}while(0);do{if((xe|0)>1023){Vb=ye*8.98846567431158e+307;za=xe+ -1023|0;if((za|0)<=1023){ze=za;Ae=Vb;break}za=xe+ -2046|0;ze=(za|0)>1023?1023:za;Ae=Vb*8.98846567431158e+307}else{if(!((xe|0)<-1022)){ze=xe;Ae=ye;break}Vb=ye*2.2250738585072014e-308;za=xe+1022|0;if(!((za|0)<-1022)){ze=za;Ae=Vb;break}za=xe+2044|0;ze=(za|0)<-1022?-1022:za;Ae=Vb*2.2250738585072014e-308}}while(0);za=je(ze+1023|0,0,52)|0;zc=E;c[k>>2]=za;c[k+4>>2]=zc;cb=Ae*+h[k>>3];break}else if((kb|0)==3){zc=c[j>>2]|0;if(zc>>>0<(c[w>>2]|0)>>>0){c[j>>2]=zc+1;Be=d[zc>>0]|0}else{Be=Ud(s)|0}if((Be|0)!=40){if((c[w>>2]|0)==0){cb=t;break}c[j>>2]=(c[j>>2]|0)+ -1;cb=t;break}while(1){zc=c[j>>2]|0;if(zc>>>0<(c[w>>2]|0)>>>0){c[j>>2]=zc+1;Ce=d[zc>>0]|0}else{Ce=Ud(s)|0}if((Ce+ -48|0)>>>0<10|(Ce+ -65|0)>>>0<26){continue}if(!((Ce+ -97|0)>>>0<26|(Ce|0)==95)){break}}if((Ce|0)==41){cb=t;break}zc=c[j>>2]|0;if((c[w>>2]|0)==0){De=zc}else{za=zc+ -1|0;c[j>>2]=za;De=za}c[(ic()|0)>>2]=22;c[F>>2]=0;za=c[y>>2]|0;c[x>>2]=za-De;c[w>>2]=za;cb=0.0;break}else{za=c[j>>2]|0;if((c[w>>2]|0)==0){Ee=za}else{zc=za+ -1|0;c[j>>2]=zc;Ee=zc}c[(ic()|0)>>2]=22;c[F>>2]=0;zc=c[y>>2]|0;c[x>>2]=zc-Ee;c[w>>2]=zc;cb=0.0;break}}}while(0);if((c[x>>2]|0)==((c[y>>2]|0)-(c[j>>2]|0)|0)){ea=J;fa=K;ga=527;break a}if((O|0)!=0){if((N|0)==1){h[O>>3]=cb;Ya=ca;Za=J;_a=K;break d}else if((N|0)==0){g[O>>2]=cb;Ya=ca;Za=J;_a=K;break d}else if((N|0)==2){h[O>>3]=cb;Ya=ca;Za=J;_a=K;break d}else{Ya=ca;Za=J;_a=K;break d}}else{Ya=ca;Za=J;_a=K}break};default:{Ya=ca;Za=J;_a=K}}}while(0);q:do{if((ga|0)==150){ga=0;U=ra;while(1){zc=c[j>>2]|0;if(zc>>>0>>0){c[j>>2]=zc+1;Fe=d[zc>>0]|0}else{Fe=Ud(s)|0}if(!((Fe|0)==32|(Fe+ -9|0)>>>0<5)){break}U=c[w>>2]|0}do{if((Fe|0)==43|(Fe|0)==45){U=((Fe|0)==45)<<31>>31;zc=c[j>>2]|0;if(zc>>>0<(c[w>>2]|0)>>>0){c[j>>2]=zc+1;Ge=d[zc>>0]|0;He=U;break}else{Ge=Ud(s)|0;He=U;break}}else{Ge=Fe;He=0}}while(0);U=($a|0)==0;do{if(($a&10|0)==0&(Ge|0)==48){zc=c[j>>2]|0;if(zc>>>0<(c[w>>2]|0)>>>0){c[j>>2]=zc+1;Ie=d[zc>>0]|0}else{Ie=Ud(s)|0}if((Ie|32|0)!=120){Je=U?8:$a;Ke=Ie;ga=177;break}zc=c[j>>2]|0;if(zc>>>0<(c[w>>2]|0)>>>0){c[j>>2]=zc+1;Le=d[zc>>0]|0}else{Le=Ud(s)|0}if((d[Le+12769>>0]|0)>15){zc=c[j>>2]|0;if((c[w>>2]|0)==0){Me=zc}else{za=zc+ -1|0;c[j>>2]=za;Me=za}c[F>>2]=0;za=c[y>>2]|0;c[x>>2]=za-Me;c[w>>2]=za;Ne=Me;Oe=za;Pe=0;Qe=0}else{Re=16;Se=Le;ga=192}}else{za=U?10:$a;if((d[Ge+12769>>0]|0)>>>0>>0){Je=za;Ke=Ge;ga=177}else{za=c[j>>2]|0;if((c[w>>2]|0)==0){Te=za}else{zc=za+ -1|0;c[j>>2]=zc;Te=zc}c[F>>2]=0;zc=c[y>>2]|0;c[x>>2]=zc-Te;c[w>>2]=zc;c[(ic()|0)>>2]=22;Ne=Te;Oe=zc;Pe=0;Qe=0}}}while(0);if((ga|0)==177){ga=0;if((Je|0)==10){U=Ke+ -48|0;if(U>>>0<10){zc=U;U=0;while(1){Ue=U+zc|0;za=c[j>>2]|0;if(za>>>0<(c[w>>2]|0)>>>0){c[j>>2]=za+1;Ve=d[za>>0]|0}else{Ve=Ud(s)|0}za=Ve+ -48|0;if(!(za>>>0<10&Ue>>>0<429496729)){break}zc=za;U=Ue*10|0}We=Ue;Xe=0;Ye=Ve}else{We=0;Xe=0;Ye=Ke}U=Ye+ -48|0;if(U>>>0<10){zc=We;za=Xe;va=U;U=Ye;while(1){xc=qe(zc|0,za|0,10,0)|0;Ca=E;Ac=((va|0)<0)<<31>>31;S=~Ac;if(Ca>>>0>S>>>0|(Ca|0)==(S|0)&xc>>>0>~va>>>0){Ze=va;_e=zc;$e=za;af=U;break}S=ee(xc|0,Ca|0,va|0,Ac|0)|0;Ac=E;Ca=c[j>>2]|0;if(Ca>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Ca+1;bf=d[Ca>>0]|0}else{bf=Ud(s)|0}Ca=bf+ -48|0;if(Ca>>>0<10&(Ac>>>0<429496729|(Ac|0)==429496729&S>>>0<2576980378)){zc=S;za=Ac;va=Ca;U=bf}else{Ze=Ca;_e=S;$e=Ac;af=bf;break}}if(Ze>>>0>9){cf=_e;df=$e;ga=224}else{ef=10;ff=_e;gf=$e;hf=af;ga=218}}else{cf=We;df=Xe;ga=224}}else{Re=Je;Se=Ke;ga=192}}r:do{if((ga|0)==192){ga=0;if((Re+ -1&Re|0)==0){U=a[13032+((Re*23|0)>>>5&7)>>0]|0;va=a[Se+12769>>0]|0;za=va&255;if(za>>>0>>0){zc=za;za=0;do{za=zc|za<>2]|0;if(Ac>>>0<(c[w>>2]|0)>>>0){c[j>>2]=Ac+1;jf=d[Ac>>0]|0}else{jf=Ud(s)|0}kf=a[jf+12769>>0]|0;zc=kf&255}while(zc>>>0>>0&za>>>0<134217728);lf=kf;mf=0;nf=za;of=jf}else{lf=va;mf=0;nf=0;of=Se}zc=ge(-1,-1,U|0)|0;Ac=E;if((lf&255)>>>0>=Re>>>0|(mf>>>0>Ac>>>0|(mf|0)==(Ac|0)&nf>>>0>zc>>>0)){ef=Re;ff=nf;gf=mf;hf=of;ga=218;break}else{pf=nf;qf=mf;rf=lf}while(1){S=je(pf|0,qf|0,U|0)|0;Ca=E;xc=rf&255|S;S=c[j>>2]|0;if(S>>>0<(c[w>>2]|0)>>>0){c[j>>2]=S+1;sf=d[S>>0]|0}else{sf=Ud(s)|0}rf=a[sf+12769>>0]|0;if((rf&255)>>>0>=Re>>>0|(Ca>>>0>Ac>>>0|(Ca|0)==(Ac|0)&xc>>>0>zc>>>0)){ef=Re;ff=xc;gf=Ca;hf=sf;ga=218;break r}else{pf=xc;qf=Ca}}}zc=a[Se+12769>>0]|0;Ac=zc&255;if(Ac>>>0>>0){U=Ac;Ac=0;do{Ac=U+(aa(Ac,Re)|0)|0;va=c[j>>2]|0;if(va>>>0<(c[w>>2]|0)>>>0){c[j>>2]=va+1;tf=d[va>>0]|0}else{tf=Ud(s)|0}uf=a[tf+12769>>0]|0;U=uf&255}while(U>>>0>>0&Ac>>>0<119304647);vf=Ac;wf=0;xf=uf;yf=tf}else{vf=0;wf=0;xf=zc;yf=Se}if((xf&255)>>>0>>0){U=re(-1,-1,Re|0,0)|0;va=E;za=wf;Ca=vf;xc=xf;S=yf;while(1){if(za>>>0>va>>>0|(za|0)==(va|0)&Ca>>>0>U>>>0){ef=Re;ff=Ca;gf=za;hf=S;ga=218;break r}W=qe(Ca|0,za|0,Re|0,0)|0;Bc=E;Da=xc&255;if(Bc>>>0>4294967295|(Bc|0)==-1&W>>>0>~Da>>>0){ef=Re;ff=Ca;gf=za;hf=S;ga=218;break r}Ea=ee(Da|0,0,W|0,Bc|0)|0;Bc=E;W=c[j>>2]|0;if(W>>>0<(c[w>>2]|0)>>>0){c[j>>2]=W+1;zf=d[W>>0]|0}else{zf=Ud(s)|0}xc=a[zf+12769>>0]|0;if(!((xc&255)>>>0>>0)){ef=Re;ff=Ea;gf=Bc;hf=zf;ga=218;break}else{za=Bc;Ca=Ea;S=zf}}}else{ef=Re;ff=vf;gf=wf;hf=yf;ga=218}}}while(0);if((ga|0)==218){ga=0;if((d[hf+12769>>0]|0)>>>0>>0){do{S=c[j>>2]|0;if(S>>>0<(c[w>>2]|0)>>>0){c[j>>2]=S+1;Af=d[S>>0]|0}else{Af=Ud(s)|0}}while((d[Af+12769>>0]|0)>>>0>>0);c[(ic()|0)>>2]=34;cf=-1;df=-1;ga=224}else{cf=ff;df=gf;ga=224}}if((ga|0)==224){ga=0;S=c[j>>2]|0;if((c[w>>2]|0)==0){Bf=S}else{Ca=S+ -1|0;c[j>>2]=Ca;Bf=Ca}Ca=((He|0)<0)<<31>>31;S=de(cf^He|0,df^Ca|0,He|0,Ca|0)|0;Ne=Bf;Oe=c[y>>2]|0;Pe=S;Qe=E}if((c[x>>2]|0)==(Oe-Ne|0)){ea=J;fa=K;ga=527;break a}S=(O|0)==0;if(!((R|0)!=112|S)){c[O>>2]=Pe;Ya=ca;Za=J;_a=K;break}if(S){Ya=ca;Za=J;_a=K}else{switch(N|0){case-2:{a[O>>0]=Pe;Ya=ca;Za=J;_a=K;break q;break};case-1:{b[O>>1]=Pe;Ya=ca;Za=J;_a=K;break q;break};case 3:{S=O;c[S>>2]=Pe;c[S+4>>2]=Qe;Ya=ca;Za=J;_a=K;break q;break};case 1:{c[O>>2]=Pe;Ya=ca;Za=J;_a=K;break q;break};case 0:{c[O>>2]=Pe;Ya=ca;Za=J;_a=K;break q;break};default:{Ya=ca;Za=J;_a=K;break q}}}}}while(0);ha=((O|0)!=0&1)+e|0;ia=Ya;ja=(c[x>>2]|0)+ma+(c[j>>2]|0)-(c[y>>2]|0)|0;ka=Za;la=_a;break b}}while(0);N=I+(L&1)|0;c[F>>2]=0;R=c[y>>2]|0;S=c[j>>2]|0;c[x>>2]=R-S;c[w>>2]=R;if(S>>>0>>0){c[j>>2]=S+1;Cf=d[S>>0]|0}else{Cf=Ud(s)|0}if((Cf|0)!=(d[N>>0]|0)){ga=22;break a}ha=e;ia=N;ja=f+1|0;ka=J;la=K}else{Df=I;ga=5}}while(0);if((ga|0)==5){while(1){ga=0;N=Df+1|0;S=a[N>>0]|0;if(S<<24>>24==32){Df=N;ga=5;continue}if(((S&255)+ -9|0)>>>0<5){Df=N;ga=5}else{break}}c[F>>2]=0;N=c[y>>2]|0;S=c[j>>2]|0;c[x>>2]=N-S;c[w>>2]=N;R=S;S=N;while(1){if(R>>>0>>0){c[j>>2]=R+1;Ef=d[R>>0]|0}else{Ef=Ud(s)|0}if(!((Ef|0)==32|(Ef+ -9|0)>>>0<5)){break}R=c[j>>2]|0;S=c[w>>2]|0}S=c[j>>2]|0;if((c[w>>2]|0)==0){Ff=S}else{R=S+ -1|0;c[j>>2]=R;Ff=R}ha=e;ia=Df;ja=(c[x>>2]|0)+f+Ff-(c[y>>2]|0)|0;ka=J;la=K}I=ia+1|0;H=a[I>>0]|0;if(H<<24>>24==0){ga=529;break}else{e=ha;f=ja;J=ka;K=la}}if((ga|0)==22){if((c[w>>2]|0)==0){i=l;return}c[j>>2]=(c[j>>2]|0)+ -1;i=l;return}else if((ga|0)==527){if(($|0)==0){i=l;return}Qd(ea);Qd(fa);i=l;return}else if((ga|0)==529){i=l;return}}function Od(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=i;e=Md(a,b,c)|0;i=d;return e|0}function Pd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,Aa=0,Ba=0,Ca=0,Da=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0;b=i;do{if(a>>>0<245){if(a>>>0<11){d=16}else{d=a+11&-8}e=d>>>3;f=c[3068]|0;g=f>>>e;if((g&3|0)!=0){h=(g&1^1)+e|0;j=h<<1;k=12312+(j<<2)|0;l=12312+(j+2<<2)|0;j=c[l>>2]|0;m=j+8|0;n=c[m>>2]|0;do{if((k|0)!=(n|0)){if(n>>>0<(c[12288>>2]|0)>>>0){Mb()}o=n+12|0;if((c[o>>2]|0)==(j|0)){c[o>>2]=k;c[l>>2]=n;break}else{Mb()}}else{c[3068]=f&~(1<>2]=n|3;l=j+(n|4)|0;c[l>>2]=c[l>>2]|1;p=m;i=b;return p|0}if(d>>>0>(c[12280>>2]|0)>>>0){if((g|0)!=0){l=2<>>12&16;k=l>>>n;l=k>>>5&8;o=k>>>l;k=o>>>2&4;q=o>>>k;o=q>>>1&2;r=q>>>o;q=r>>>1&1;s=(l|n|k|o|q)+(r>>>q)|0;q=s<<1;r=12312+(q<<2)|0;o=12312+(q+2<<2)|0;q=c[o>>2]|0;k=q+8|0;n=c[k>>2]|0;do{if((r|0)!=(n|0)){if(n>>>0<(c[12288>>2]|0)>>>0){Mb()}l=n+12|0;if((c[l>>2]|0)==(q|0)){c[l>>2]=r;c[o>>2]=n;break}else{Mb()}}else{c[3068]=f&~(1<>2]=d|3;o=q+d|0;c[q+(d|4)>>2]=n|1;c[q+f>>2]=n;f=c[12280>>2]|0;if((f|0)!=0){r=c[12292>>2]|0;e=f>>>3;f=e<<1;g=12312+(f<<2)|0;m=c[3068]|0;j=1<>2]|0;if(h>>>0<(c[12288>>2]|0)>>>0){Mb()}else{t=e;u=h}}else{c[3068]=m|j;t=12312+(f+2<<2)|0;u=g}c[t>>2]=r;c[u+12>>2]=r;c[r+8>>2]=u;c[r+12>>2]=g}c[12280>>2]=n;c[12292>>2]=o;p=k;i=b;return p|0}o=c[12276>>2]|0;if((o|0)!=0){n=(o&0-o)+ -1|0;o=n>>>12&16;g=n>>>o;n=g>>>5&8;r=g>>>n;g=r>>>2&4;f=r>>>g;r=f>>>1&2;j=f>>>r;f=j>>>1&1;m=c[12576+((n|o|g|r|f)+(j>>>f)<<2)>>2]|0;f=(c[m+4>>2]&-8)-d|0;j=m;r=m;while(1){m=c[j+16>>2]|0;if((m|0)==0){g=c[j+20>>2]|0;if((g|0)==0){break}else{v=g}}else{v=m}m=(c[v+4>>2]&-8)-d|0;g=m>>>0>>0;f=g?m:f;j=v;r=g?v:r}j=c[12288>>2]|0;if(r>>>0>>0){Mb()}k=r+d|0;if(!(r>>>0>>0)){Mb()}q=c[r+24>>2]|0;s=c[r+12>>2]|0;do{if((s|0)==(r|0)){g=r+20|0;m=c[g>>2]|0;if((m|0)==0){o=r+16|0;n=c[o>>2]|0;if((n|0)==0){w=0;break}else{x=n;y=o}}else{x=m;y=g}while(1){g=x+20|0;m=c[g>>2]|0;if((m|0)!=0){x=m;y=g;continue}g=x+16|0;m=c[g>>2]|0;if((m|0)==0){break}else{x=m;y=g}}if(y>>>0>>0){Mb()}else{c[y>>2]=0;w=x;break}}else{g=c[r+8>>2]|0;if(g>>>0>>0){Mb()}m=g+12|0;if((c[m>>2]|0)!=(r|0)){Mb()}o=s+8|0;if((c[o>>2]|0)==(r|0)){c[m>>2]=s;c[o>>2]=g;w=s;break}else{Mb()}}}while(0);do{if((q|0)!=0){s=c[r+28>>2]|0;j=12576+(s<<2)|0;if((r|0)==(c[j>>2]|0)){c[j>>2]=w;if((w|0)==0){c[12276>>2]=c[12276>>2]&~(1<>>0<(c[12288>>2]|0)>>>0){Mb()}s=q+16|0;if((c[s>>2]|0)==(r|0)){c[s>>2]=w}else{c[q+20>>2]=w}if((w|0)==0){break}}if(w>>>0<(c[12288>>2]|0)>>>0){Mb()}c[w+24>>2]=q;s=c[r+16>>2]|0;do{if((s|0)!=0){if(s>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[w+16>>2]=s;c[s+24>>2]=w;break}}}while(0);s=c[r+20>>2]|0;if((s|0)!=0){if(s>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[w+20>>2]=s;c[s+24>>2]=w;break}}}}while(0);if(f>>>0<16){q=f+d|0;c[r+4>>2]=q|3;s=r+(q+4)|0;c[s>>2]=c[s>>2]|1}else{c[r+4>>2]=d|3;c[r+(d|4)>>2]=f|1;c[r+(f+d)>>2]=f;s=c[12280>>2]|0;if((s|0)!=0){q=c[12292>>2]|0;j=s>>>3;s=j<<1;g=12312+(s<<2)|0;o=c[3068]|0;m=1<>2]|0;if(n>>>0<(c[12288>>2]|0)>>>0){Mb()}else{z=j;A=n}}else{c[3068]=o|m;z=12312+(s+2<<2)|0;A=g}c[z>>2]=q;c[A+12>>2]=q;c[q+8>>2]=A;c[q+12>>2]=g}c[12280>>2]=f;c[12292>>2]=k}p=r+8|0;i=b;return p|0}else{B=d}}else{B=d}}else{if(!(a>>>0>4294967231)){g=a+11|0;q=g&-8;s=c[12276>>2]|0;if((s|0)!=0){m=0-q|0;o=g>>>8;if((o|0)!=0){if(q>>>0>16777215){C=31}else{g=(o+1048320|0)>>>16&8;n=o<>>16&4;j=n<>>16&2;h=14-(o|g|n)+(j<>>15)|0;C=q>>>(h+7|0)&1|h<<1}}else{C=0}h=c[12576+(C<<2)>>2]|0;a:do{if((h|0)==0){D=m;E=0;F=0}else{if((C|0)==31){G=0}else{G=25-(C>>>1)|0}n=m;j=0;g=q<>2]&-8;H=l-q|0;if(H>>>0>>0){if((l|0)==(q|0)){D=H;E=o;F=o;break a}else{I=H;J=o}}else{I=n;J=e}H=c[o+20>>2]|0;o=c[o+(g>>>31<<2)+16>>2]|0;l=(H|0)==0|(H|0)==(o|0)?j:H;if((o|0)==0){D=I;E=l;F=J;break}else{n=I;j=l;g=g<<1;e=J}}}}while(0);if((E|0)==0&(F|0)==0){h=2<>>12&16;r=h>>>m;h=r>>>5&8;k=r>>>h;r=k>>>2&4;f=k>>>r;k=f>>>1&2;e=f>>>k;f=e>>>1&1;K=c[12576+((h|m|r|k|f)+(e>>>f)<<2)>>2]|0}else{K=E}if((K|0)==0){L=D;M=F}else{f=D;e=K;k=F;while(1){r=(c[e+4>>2]&-8)-q|0;m=r>>>0>>0;h=m?r:f;r=m?e:k;m=c[e+16>>2]|0;if((m|0)!=0){f=h;e=m;k=r;continue}e=c[e+20>>2]|0;if((e|0)==0){L=h;M=r;break}else{f=h;k=r}}}if((M|0)!=0?L>>>0<((c[12280>>2]|0)-q|0)>>>0:0){k=c[12288>>2]|0;if(M>>>0>>0){Mb()}f=M+q|0;if(!(M>>>0>>0)){Mb()}e=c[M+24>>2]|0;s=c[M+12>>2]|0;do{if((s|0)==(M|0)){r=M+20|0;h=c[r>>2]|0;if((h|0)==0){m=M+16|0;g=c[m>>2]|0;if((g|0)==0){N=0;break}else{O=g;P=m}}else{O=h;P=r}while(1){r=O+20|0;h=c[r>>2]|0;if((h|0)!=0){O=h;P=r;continue}r=O+16|0;h=c[r>>2]|0;if((h|0)==0){break}else{O=h;P=r}}if(P>>>0>>0){Mb()}else{c[P>>2]=0;N=O;break}}else{r=c[M+8>>2]|0;if(r>>>0>>0){Mb()}h=r+12|0;if((c[h>>2]|0)!=(M|0)){Mb()}m=s+8|0;if((c[m>>2]|0)==(M|0)){c[h>>2]=s;c[m>>2]=r;N=s;break}else{Mb()}}}while(0);do{if((e|0)!=0){s=c[M+28>>2]|0;k=12576+(s<<2)|0;if((M|0)==(c[k>>2]|0)){c[k>>2]=N;if((N|0)==0){c[12276>>2]=c[12276>>2]&~(1<>>0<(c[12288>>2]|0)>>>0){Mb()}s=e+16|0;if((c[s>>2]|0)==(M|0)){c[s>>2]=N}else{c[e+20>>2]=N}if((N|0)==0){break}}if(N>>>0<(c[12288>>2]|0)>>>0){Mb()}c[N+24>>2]=e;s=c[M+16>>2]|0;do{if((s|0)!=0){if(s>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[N+16>>2]=s;c[s+24>>2]=N;break}}}while(0);s=c[M+20>>2]|0;if((s|0)!=0){if(s>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[N+20>>2]=s;c[s+24>>2]=N;break}}}}while(0);b:do{if(!(L>>>0<16)){c[M+4>>2]=q|3;c[M+(q|4)>>2]=L|1;c[M+(L+q)>>2]=L;e=L>>>3;if(L>>>0<256){s=e<<1;k=12312+(s<<2)|0;r=c[3068]|0;m=1<>2]|0;if(!(h>>>0<(c[12288>>2]|0)>>>0)){Q=e;R=h;break}Mb()}}while(0);c[Q>>2]=f;c[R+12>>2]=f;c[M+(q+8)>>2]=R;c[M+(q+12)>>2]=k;break}s=L>>>8;if((s|0)!=0){if(L>>>0>16777215){S=31}else{m=(s+1048320|0)>>>16&8;r=s<>>16&4;h=r<>>16&2;e=14-(s|m|r)+(h<>>15)|0;S=L>>>(e+7|0)&1|e<<1}}else{S=0}e=12576+(S<<2)|0;c[M+(q+28)>>2]=S;c[M+(q+20)>>2]=0;c[M+(q+16)>>2]=0;r=c[12276>>2]|0;h=1<>2]=r|h;c[e>>2]=f;c[M+(q+24)>>2]=e;c[M+(q+12)>>2]=f;c[M+(q+8)>>2]=f;break}h=c[e>>2]|0;if((S|0)==31){T=0}else{T=25-(S>>>1)|0}c:do{if((c[h+4>>2]&-8|0)!=(L|0)){e=L<>>31<<2)+16|0;m=c[U>>2]|0;if((m|0)==0){break}if((c[m+4>>2]&-8|0)==(L|0)){V=m;break c}else{e=e<<1;r=m}}if(U>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[U>>2]=f;c[M+(q+24)>>2]=r;c[M+(q+12)>>2]=f;c[M+(q+8)>>2]=f;break b}}else{V=h}}while(0);h=V+8|0;k=c[h>>2]|0;e=c[12288>>2]|0;if(V>>>0>>0){Mb()}if(k>>>0>>0){Mb()}else{c[k+12>>2]=f;c[h>>2]=f;c[M+(q+8)>>2]=k;c[M+(q+12)>>2]=V;c[M+(q+24)>>2]=0;break}}else{k=L+q|0;c[M+4>>2]=k|3;h=M+(k+4)|0;c[h>>2]=c[h>>2]|1}}while(0);p=M+8|0;i=b;return p|0}else{B=q}}else{B=q}}else{B=-1}}}while(0);M=c[12280>>2]|0;if(!(B>>>0>M>>>0)){L=M-B|0;V=c[12292>>2]|0;if(L>>>0>15){c[12292>>2]=V+B;c[12280>>2]=L;c[V+(B+4)>>2]=L|1;c[V+M>>2]=L;c[V+4>>2]=B|3}else{c[12280>>2]=0;c[12292>>2]=0;c[V+4>>2]=M|3;L=V+(M+4)|0;c[L>>2]=c[L>>2]|1}p=V+8|0;i=b;return p|0}V=c[12284>>2]|0;if(B>>>0>>0){L=V-B|0;c[12284>>2]=L;V=c[12296>>2]|0;c[12296>>2]=V+B;c[V+(B+4)>>2]=L|1;c[V+4>>2]=B|3;p=V+8|0;i=b;return p|0}do{if((c[3186]|0)==0){V=Ea(30)|0;if((V+ -1&V|0)==0){c[12752>>2]=V;c[12748>>2]=V;c[12756>>2]=-1;c[12760>>2]=-1;c[12764>>2]=0;c[12716>>2]=0;c[3186]=(lb(0)|0)&-16^1431655768;break}else{Mb()}}}while(0);V=B+48|0;L=c[12752>>2]|0;M=B+47|0;U=L+M|0;T=0-L|0;L=U&T;if(!(L>>>0>B>>>0)){p=0;i=b;return p|0}S=c[12712>>2]|0;if((S|0)!=0?(R=c[12704>>2]|0,Q=R+L|0,Q>>>0<=R>>>0|Q>>>0>S>>>0):0){p=0;i=b;return p|0}d:do{if((c[12716>>2]&4|0)==0){S=c[12296>>2]|0;e:do{if((S|0)!=0){Q=12720|0;while(1){R=c[Q>>2]|0;if(!(R>>>0>S>>>0)?(W=Q+4|0,(R+(c[W>>2]|0)|0)>>>0>S>>>0):0){break}R=c[Q+8>>2]|0;if((R|0)==0){X=182;break e}else{Q=R}}if((Q|0)!=0){R=U-(c[12284>>2]|0)&T;if(R>>>0<2147483647){N=za(R|0)|0;O=(N|0)==((c[Q>>2]|0)+(c[W>>2]|0)|0);Y=N;Z=R;_=O?N:-1;$=O?R:0;X=191}else{aa=0}}else{X=182}}else{X=182}}while(0);do{if((X|0)==182){S=za(0)|0;if((S|0)!=(-1|0)){q=S;R=c[12748>>2]|0;O=R+ -1|0;if((O&q|0)==0){ba=L}else{ba=L-q+(O+q&0-R)|0}R=c[12704>>2]|0;q=R+ba|0;if(ba>>>0>B>>>0&ba>>>0<2147483647){O=c[12712>>2]|0;if((O|0)!=0?q>>>0<=R>>>0|q>>>0>O>>>0:0){aa=0;break}O=za(ba|0)|0;q=(O|0)==(S|0);Y=O;Z=ba;_=q?S:-1;$=q?ba:0;X=191}else{aa=0}}else{aa=0}}}while(0);f:do{if((X|0)==191){q=0-Z|0;if((_|0)!=(-1|0)){ca=_;da=$;X=202;break d}do{if((Y|0)!=(-1|0)&Z>>>0<2147483647&Z>>>0>>0?(S=c[12752>>2]|0,O=M-Z+S&0-S,O>>>0<2147483647):0){if((za(O|0)|0)==(-1|0)){za(q|0)|0;aa=$;break f}else{ea=O+Z|0;break}}else{ea=Z}}while(0);if((Y|0)==(-1|0)){aa=$}else{ca=Y;da=ea;X=202;break d}}}while(0);c[12716>>2]=c[12716>>2]|4;fa=aa;X=199}else{fa=0;X=199}}while(0);if((((X|0)==199?L>>>0<2147483647:0)?(aa=za(L|0)|0,L=za(0)|0,(L|0)!=(-1|0)&(aa|0)!=(-1|0)&aa>>>0>>0):0)?(ea=L-aa|0,L=ea>>>0>(B+40|0)>>>0,L):0){ca=aa;da=L?ea:fa;X=202}if((X|0)==202){fa=(c[12704>>2]|0)+da|0;c[12704>>2]=fa;if(fa>>>0>(c[12708>>2]|0)>>>0){c[12708>>2]=fa}fa=c[12296>>2]|0;g:do{if((fa|0)!=0){ea=12720|0;while(1){ga=c[ea>>2]|0;ha=ea+4|0;ia=c[ha>>2]|0;if((ca|0)==(ga+ia|0)){X=214;break}L=c[ea+8>>2]|0;if((L|0)==0){break}else{ea=L}}if(((X|0)==214?(c[ea+12>>2]&8|0)==0:0)?fa>>>0>=ga>>>0&fa>>>0>>0:0){c[ha>>2]=ia+da;L=(c[12284>>2]|0)+da|0;aa=fa+8|0;if((aa&7|0)==0){ja=0}else{ja=0-aa&7}aa=L-ja|0;c[12296>>2]=fa+ja;c[12284>>2]=aa;c[fa+(ja+4)>>2]=aa|1;c[fa+(L+4)>>2]=40;c[12300>>2]=c[12760>>2];break}if(ca>>>0<(c[12288>>2]|0)>>>0){c[12288>>2]=ca}L=ca+da|0;aa=12720|0;while(1){if((c[aa>>2]|0)==(L|0)){X=224;break}Y=c[aa+8>>2]|0;if((Y|0)==0){break}else{aa=Y}}if((X|0)==224?(c[aa+12>>2]&8|0)==0:0){c[aa>>2]=ca;L=aa+4|0;c[L>>2]=(c[L>>2]|0)+da;L=ca+8|0;if((L&7|0)==0){ka=0}else{ka=0-L&7}L=ca+(da+8)|0;if((L&7|0)==0){la=0}else{la=0-L&7}L=ca+(la+da)|0;ea=ka+B|0;Y=ca+ea|0;$=L-(ca+ka)-B|0;c[ca+(ka+4)>>2]=B|3;h:do{if((L|0)!=(c[12296>>2]|0)){if((L|0)==(c[12292>>2]|0)){Z=(c[12280>>2]|0)+$|0;c[12280>>2]=Z;c[12292>>2]=Y;c[ca+(ea+4)>>2]=Z|1;c[ca+(Z+ea)>>2]=Z;break}Z=da+4|0;M=c[ca+(Z+la)>>2]|0;if((M&3|0)==1){V=M&-8;_=M>>>3;i:do{if(!(M>>>0<256)){ba=c[ca+((la|24)+da)>>2]|0;W=c[ca+(da+12+la)>>2]|0;do{if((W|0)==(L|0)){T=la|16;U=ca+(Z+T)|0;q=c[U>>2]|0;if((q|0)==0){Q=ca+(T+da)|0;T=c[Q>>2]|0;if((T|0)==0){ma=0;break}else{na=T;oa=Q}}else{na=q;oa=U}while(1){U=na+20|0;q=c[U>>2]|0;if((q|0)!=0){na=q;oa=U;continue}U=na+16|0;q=c[U>>2]|0;if((q|0)==0){break}else{na=q;oa=U}}if(oa>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[oa>>2]=0;ma=na;break}}else{U=c[ca+((la|8)+da)>>2]|0;if(U>>>0<(c[12288>>2]|0)>>>0){Mb()}q=U+12|0;if((c[q>>2]|0)!=(L|0)){Mb()}Q=W+8|0;if((c[Q>>2]|0)==(L|0)){c[q>>2]=W;c[Q>>2]=U;ma=W;break}else{Mb()}}}while(0);if((ba|0)==0){break}W=c[ca+(da+28+la)>>2]|0;r=12576+(W<<2)|0;do{if((L|0)!=(c[r>>2]|0)){if(ba>>>0<(c[12288>>2]|0)>>>0){Mb()}U=ba+16|0;if((c[U>>2]|0)==(L|0)){c[U>>2]=ma}else{c[ba+20>>2]=ma}if((ma|0)==0){break i}}else{c[r>>2]=ma;if((ma|0)!=0){break}c[12276>>2]=c[12276>>2]&~(1<>>0<(c[12288>>2]|0)>>>0){Mb()}c[ma+24>>2]=ba;W=la|16;r=c[ca+(W+da)>>2]|0;do{if((r|0)!=0){if(r>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[ma+16>>2]=r;c[r+24>>2]=ma;break}}}while(0);r=c[ca+(Z+W)>>2]|0;if((r|0)==0){break}if(r>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[ma+20>>2]=r;c[r+24>>2]=ma;break}}else{r=c[ca+((la|8)+da)>>2]|0;ba=c[ca+(da+12+la)>>2]|0;U=12312+(_<<1<<2)|0;do{if((r|0)!=(U|0)){if(r>>>0<(c[12288>>2]|0)>>>0){Mb()}if((c[r+12>>2]|0)==(L|0)){break}Mb()}}while(0);if((ba|0)==(r|0)){c[3068]=c[3068]&~(1<<_);break}do{if((ba|0)==(U|0)){pa=ba+8|0}else{if(ba>>>0<(c[12288>>2]|0)>>>0){Mb()}W=ba+8|0;if((c[W>>2]|0)==(L|0)){pa=W;break}Mb()}}while(0);c[r+12>>2]=ba;c[pa>>2]=r}}while(0);qa=ca+((V|la)+da)|0;ra=V+$|0}else{qa=L;ra=$}_=qa+4|0;c[_>>2]=c[_>>2]&-2;c[ca+(ea+4)>>2]=ra|1;c[ca+(ra+ea)>>2]=ra;_=ra>>>3;if(ra>>>0<256){Z=_<<1;M=12312+(Z<<2)|0;U=c[3068]|0;W=1<<_;do{if((U&W|0)==0){c[3068]=U|W;sa=12312+(Z+2<<2)|0;ta=M}else{_=12312+(Z+2<<2)|0;Q=c[_>>2]|0;if(!(Q>>>0<(c[12288>>2]|0)>>>0)){sa=_;ta=Q;break}Mb()}}while(0);c[sa>>2]=Y;c[ta+12>>2]=Y;c[ca+(ea+8)>>2]=ta;c[ca+(ea+12)>>2]=M;break}Z=ra>>>8;do{if((Z|0)==0){ua=0}else{if(ra>>>0>16777215){ua=31;break}W=(Z+1048320|0)>>>16&8;U=Z<>>16&4;Q=U<>>16&2;_=14-(V|W|U)+(Q<>>15)|0;ua=ra>>>(_+7|0)&1|_<<1}}while(0);Z=12576+(ua<<2)|0;c[ca+(ea+28)>>2]=ua;c[ca+(ea+20)>>2]=0;c[ca+(ea+16)>>2]=0;M=c[12276>>2]|0;_=1<>2]=M|_;c[Z>>2]=Y;c[ca+(ea+24)>>2]=Z;c[ca+(ea+12)>>2]=Y;c[ca+(ea+8)>>2]=Y;break}_=c[Z>>2]|0;if((ua|0)==31){va=0}else{va=25-(ua>>>1)|0}j:do{if((c[_+4>>2]&-8|0)!=(ra|0)){Z=ra<>>31<<2)+16|0;U=c[wa>>2]|0;if((U|0)==0){break}if((c[U+4>>2]&-8|0)==(ra|0)){xa=U;break j}else{Z=Z<<1;M=U}}if(wa>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[wa>>2]=Y;c[ca+(ea+24)>>2]=M;c[ca+(ea+12)>>2]=Y;c[ca+(ea+8)>>2]=Y;break h}}else{xa=_}}while(0);_=xa+8|0;Z=c[_>>2]|0;r=c[12288>>2]|0;if(xa>>>0>>0){Mb()}if(Z>>>0>>0){Mb()}else{c[Z+12>>2]=Y;c[_>>2]=Y;c[ca+(ea+8)>>2]=Z;c[ca+(ea+12)>>2]=xa;c[ca+(ea+24)>>2]=0;break}}else{Z=(c[12284>>2]|0)+$|0;c[12284>>2]=Z;c[12296>>2]=Y;c[ca+(ea+4)>>2]=Z|1}}while(0);p=ca+(ka|8)|0;i=b;return p|0}ea=12720|0;while(1){ya=c[ea>>2]|0;if(!(ya>>>0>fa>>>0)?(Aa=c[ea+4>>2]|0,Ba=ya+Aa|0,Ba>>>0>fa>>>0):0){break}ea=c[ea+8>>2]|0}ea=ya+(Aa+ -39)|0;if((ea&7|0)==0){Ca=0}else{Ca=0-ea&7}ea=ya+(Aa+ -47+Ca)|0;Y=ea>>>0<(fa+16|0)>>>0?fa:ea;ea=Y+8|0;$=ca+8|0;if(($&7|0)==0){Da=0}else{Da=0-$&7}$=da+ -40-Da|0;c[12296>>2]=ca+Da;c[12284>>2]=$;c[ca+(Da+4)>>2]=$|1;c[ca+(da+ -36)>>2]=40;c[12300>>2]=c[12760>>2];c[Y+4>>2]=27;c[ea+0>>2]=c[12720>>2];c[ea+4>>2]=c[12724>>2];c[ea+8>>2]=c[12728>>2];c[ea+12>>2]=c[12732>>2];c[12720>>2]=ca;c[12724>>2]=da;c[12732>>2]=0;c[12728>>2]=ea;ea=Y+28|0;c[ea>>2]=7;if((Y+32|0)>>>0>>0){$=ea;do{ea=$;$=$+4|0;c[$>>2]=7}while((ea+8|0)>>>0>>0)}if((Y|0)!=(fa|0)){$=Y-fa|0;ea=fa+($+4)|0;c[ea>>2]=c[ea>>2]&-2;c[fa+4>>2]=$|1;c[fa+$>>2]=$;ea=$>>>3;if($>>>0<256){L=ea<<1;aa=12312+(L<<2)|0;Z=c[3068]|0;_=1<>2]|0;if(!(r>>>0<(c[12288>>2]|0)>>>0)){Fa=ea;Ga=r;break}Mb()}}while(0);c[Fa>>2]=fa;c[Ga+12>>2]=fa;c[fa+8>>2]=Ga;c[fa+12>>2]=aa;break}L=$>>>8;if((L|0)!=0){if($>>>0>16777215){Ha=31}else{_=(L+1048320|0)>>>16&8;Z=L<<_;L=(Z+520192|0)>>>16&4;Y=Z<>>16&2;r=14-(L|_|Z)+(Y<>>15)|0;Ha=$>>>(r+7|0)&1|r<<1}}else{Ha=0}r=12576+(Ha<<2)|0;c[fa+28>>2]=Ha;c[fa+20>>2]=0;c[fa+16>>2]=0;Z=c[12276>>2]|0;Y=1<>2]=Z|Y;c[r>>2]=fa;c[fa+24>>2]=r;c[fa+12>>2]=fa;c[fa+8>>2]=fa;break}Y=c[r>>2]|0;if((Ha|0)==31){Ia=0}else{Ia=25-(Ha>>>1)|0}k:do{if((c[Y+4>>2]&-8|0)!=($|0)){r=$<>>31<<2)+16|0;_=c[Ja>>2]|0;if((_|0)==0){break}if((c[_+4>>2]&-8|0)==($|0)){Ka=_;break k}else{r=r<<1;Z=_}}if(Ja>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[Ja>>2]=fa;c[fa+24>>2]=Z;c[fa+12>>2]=fa;c[fa+8>>2]=fa;break g}}else{Ka=Y}}while(0);Y=Ka+8|0;$=c[Y>>2]|0;aa=c[12288>>2]|0;if(Ka>>>0>>0){Mb()}if($>>>0>>0){Mb()}else{c[$+12>>2]=fa;c[Y>>2]=fa;c[fa+8>>2]=$;c[fa+12>>2]=Ka;c[fa+24>>2]=0;break}}}else{$=c[12288>>2]|0;if(($|0)==0|ca>>>0<$>>>0){c[12288>>2]=ca}c[12720>>2]=ca;c[12724>>2]=da;c[12732>>2]=0;c[12308>>2]=c[3186];c[12304>>2]=-1;$=0;do{Y=$<<1;aa=12312+(Y<<2)|0;c[12312+(Y+3<<2)>>2]=aa;c[12312+(Y+2<<2)>>2]=aa;$=$+1|0}while(($|0)!=32);$=ca+8|0;if(($&7|0)==0){La=0}else{La=0-$&7}$=da+ -40-La|0;c[12296>>2]=ca+La;c[12284>>2]=$;c[ca+(La+4)>>2]=$|1;c[ca+(da+ -36)>>2]=40;c[12300>>2]=c[12760>>2]}}while(0);da=c[12284>>2]|0;if(da>>>0>B>>>0){ca=da-B|0;c[12284>>2]=ca;da=c[12296>>2]|0;c[12296>>2]=da+B;c[da+(B+4)>>2]=ca|1;c[da+4>>2]=B|3;p=da+8|0;i=b;return p|0}}c[(ic()|0)>>2]=12;p=0;i=b;return p|0}function Qd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;b=i;if((a|0)==0){i=b;return}d=a+ -8|0;e=c[12288>>2]|0;if(d>>>0>>0){Mb()}f=c[a+ -4>>2]|0;g=f&3;if((g|0)==1){Mb()}h=f&-8;j=a+(h+ -8)|0;do{if((f&1|0)==0){k=c[d>>2]|0;if((g|0)==0){i=b;return}l=-8-k|0;m=a+l|0;n=k+h|0;if(m>>>0>>0){Mb()}if((m|0)==(c[12292>>2]|0)){o=a+(h+ -4)|0;if((c[o>>2]&3|0)!=3){p=m;q=n;break}c[12280>>2]=n;c[o>>2]=c[o>>2]&-2;c[a+(l+4)>>2]=n|1;c[j>>2]=n;i=b;return}o=k>>>3;if(k>>>0<256){k=c[a+(l+8)>>2]|0;r=c[a+(l+12)>>2]|0;s=12312+(o<<1<<2)|0;if((k|0)!=(s|0)){if(k>>>0>>0){Mb()}if((c[k+12>>2]|0)!=(m|0)){Mb()}}if((r|0)==(k|0)){c[3068]=c[3068]&~(1<>>0>>0){Mb()}s=r+8|0;if((c[s>>2]|0)==(m|0)){t=s}else{Mb()}}else{t=r+8|0}c[k+12>>2]=r;c[t>>2]=k;p=m;q=n;break}k=c[a+(l+24)>>2]|0;r=c[a+(l+12)>>2]|0;do{if((r|0)==(m|0)){s=a+(l+20)|0;o=c[s>>2]|0;if((o|0)==0){u=a+(l+16)|0;v=c[u>>2]|0;if((v|0)==0){w=0;break}else{x=v;y=u}}else{x=o;y=s}while(1){s=x+20|0;o=c[s>>2]|0;if((o|0)!=0){x=o;y=s;continue}s=x+16|0;o=c[s>>2]|0;if((o|0)==0){break}else{x=o;y=s}}if(y>>>0>>0){Mb()}else{c[y>>2]=0;w=x;break}}else{s=c[a+(l+8)>>2]|0;if(s>>>0>>0){Mb()}o=s+12|0;if((c[o>>2]|0)!=(m|0)){Mb()}u=r+8|0;if((c[u>>2]|0)==(m|0)){c[o>>2]=r;c[u>>2]=s;w=r;break}else{Mb()}}}while(0);if((k|0)!=0){r=c[a+(l+28)>>2]|0;s=12576+(r<<2)|0;if((m|0)==(c[s>>2]|0)){c[s>>2]=w;if((w|0)==0){c[12276>>2]=c[12276>>2]&~(1<>>0<(c[12288>>2]|0)>>>0){Mb()}r=k+16|0;if((c[r>>2]|0)==(m|0)){c[r>>2]=w}else{c[k+20>>2]=w}if((w|0)==0){p=m;q=n;break}}if(w>>>0<(c[12288>>2]|0)>>>0){Mb()}c[w+24>>2]=k;r=c[a+(l+16)>>2]|0;do{if((r|0)!=0){if(r>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[w+16>>2]=r;c[r+24>>2]=w;break}}}while(0);r=c[a+(l+20)>>2]|0;if((r|0)!=0){if(r>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[w+20>>2]=r;c[r+24>>2]=w;p=m;q=n;break}}else{p=m;q=n}}else{p=m;q=n}}else{p=d;q=h}}while(0);if(!(p>>>0>>0)){Mb()}d=a+(h+ -4)|0;w=c[d>>2]|0;if((w&1|0)==0){Mb()}if((w&2|0)==0){if((j|0)==(c[12296>>2]|0)){e=(c[12284>>2]|0)+q|0;c[12284>>2]=e;c[12296>>2]=p;c[p+4>>2]=e|1;if((p|0)!=(c[12292>>2]|0)){i=b;return}c[12292>>2]=0;c[12280>>2]=0;i=b;return}if((j|0)==(c[12292>>2]|0)){e=(c[12280>>2]|0)+q|0;c[12280>>2]=e;c[12292>>2]=p;c[p+4>>2]=e|1;c[p+e>>2]=e;i=b;return}e=(w&-8)+q|0;x=w>>>3;do{if(!(w>>>0<256)){y=c[a+(h+16)>>2]|0;t=c[a+(h|4)>>2]|0;do{if((t|0)==(j|0)){g=a+(h+12)|0;f=c[g>>2]|0;if((f|0)==0){r=a+(h+8)|0;k=c[r>>2]|0;if((k|0)==0){z=0;break}else{A=k;B=r}}else{A=f;B=g}while(1){g=A+20|0;f=c[g>>2]|0;if((f|0)!=0){A=f;B=g;continue}g=A+16|0;f=c[g>>2]|0;if((f|0)==0){break}else{A=f;B=g}}if(B>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[B>>2]=0;z=A;break}}else{g=c[a+h>>2]|0;if(g>>>0<(c[12288>>2]|0)>>>0){Mb()}f=g+12|0;if((c[f>>2]|0)!=(j|0)){Mb()}r=t+8|0;if((c[r>>2]|0)==(j|0)){c[f>>2]=t;c[r>>2]=g;z=t;break}else{Mb()}}}while(0);if((y|0)!=0){t=c[a+(h+20)>>2]|0;n=12576+(t<<2)|0;if((j|0)==(c[n>>2]|0)){c[n>>2]=z;if((z|0)==0){c[12276>>2]=c[12276>>2]&~(1<>>0<(c[12288>>2]|0)>>>0){Mb()}t=y+16|0;if((c[t>>2]|0)==(j|0)){c[t>>2]=z}else{c[y+20>>2]=z}if((z|0)==0){break}}if(z>>>0<(c[12288>>2]|0)>>>0){Mb()}c[z+24>>2]=y;t=c[a+(h+8)>>2]|0;do{if((t|0)!=0){if(t>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[z+16>>2]=t;c[t+24>>2]=z;break}}}while(0);t=c[a+(h+12)>>2]|0;if((t|0)!=0){if(t>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[z+20>>2]=t;c[t+24>>2]=z;break}}}}else{t=c[a+h>>2]|0;y=c[a+(h|4)>>2]|0;n=12312+(x<<1<<2)|0;if((t|0)!=(n|0)){if(t>>>0<(c[12288>>2]|0)>>>0){Mb()}if((c[t+12>>2]|0)!=(j|0)){Mb()}}if((y|0)==(t|0)){c[3068]=c[3068]&~(1<>>0<(c[12288>>2]|0)>>>0){Mb()}n=y+8|0;if((c[n>>2]|0)==(j|0)){C=n}else{Mb()}}else{C=y+8|0}c[t+12>>2]=y;c[C>>2]=t}}while(0);c[p+4>>2]=e|1;c[p+e>>2]=e;if((p|0)==(c[12292>>2]|0)){c[12280>>2]=e;i=b;return}else{D=e}}else{c[d>>2]=w&-2;c[p+4>>2]=q|1;c[p+q>>2]=q;D=q}q=D>>>3;if(D>>>0<256){w=q<<1;d=12312+(w<<2)|0;e=c[3068]|0;C=1<>2]|0;if(j>>>0<(c[12288>>2]|0)>>>0){Mb()}else{E=q;F=j}}else{c[3068]=e|C;E=12312+(w+2<<2)|0;F=d}c[E>>2]=p;c[F+12>>2]=p;c[p+8>>2]=F;c[p+12>>2]=d;i=b;return}d=D>>>8;if((d|0)!=0){if(D>>>0>16777215){G=31}else{F=(d+1048320|0)>>>16&8;E=d<>>16&4;w=E<>>16&2;C=14-(d|F|E)+(w<>>15)|0;G=D>>>(C+7|0)&1|C<<1}}else{G=0}C=12576+(G<<2)|0;c[p+28>>2]=G;c[p+20>>2]=0;c[p+16>>2]=0;E=c[12276>>2]|0;w=1<>2]|0;if((G|0)==31){H=0}else{H=25-(G>>>1)|0}b:do{if((c[F+4>>2]&-8|0)!=(D|0)){d=D<>>31<<2)+16|0;j=c[I>>2]|0;if((j|0)==0){break}if((c[j+4>>2]&-8|0)==(D|0)){J=j;break b}else{d=d<<1;e=j}}if(I>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[I>>2]=p;c[p+24>>2]=e;c[p+12>>2]=p;c[p+8>>2]=p;break a}}else{J=F}}while(0);F=J+8|0;d=c[F>>2]|0;j=c[12288>>2]|0;if(J>>>0>>0){Mb()}if(d>>>0>>0){Mb()}else{c[d+12>>2]=p;c[F>>2]=p;c[p+8>>2]=d;c[p+12>>2]=J;c[p+24>>2]=0;break}}else{c[12276>>2]=E|w;c[C>>2]=p;c[p+24>>2]=C;c[p+12>>2]=p;c[p+8>>2]=p}}while(0);p=(c[12304>>2]|0)+ -1|0;c[12304>>2]=p;if((p|0)==0){K=12728|0}else{i=b;return}while(1){p=c[K>>2]|0;if((p|0)==0){break}else{K=p+8|0}}c[12304>>2]=-1;i=b;return}function Rd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=i;if((a|0)==0){e=Pd(b)|0;i=d;return e|0}if(b>>>0>4294967231){c[(ic()|0)>>2]=12;e=0;i=d;return e|0}if(b>>>0<11){f=16}else{f=b+11&-8}g=a+ -4|0;h=c[g>>2]|0;j=h&-8;k=j+ -8|0;l=a+k|0;m=c[12288>>2]|0;if((a+ -8|0)>>>0>>0){Mb()}n=h&3;if(!((n|0)!=1&(k|0)>-8)){Mb()}k=j|4;o=a+(k+ -8)|0;p=c[o>>2]|0;if((p&1|0)==0){Mb()}do{if((n|0)==0){if(!(f>>>0<256|j>>>0<(f|4)>>>0)?!((j-f|0)>>>0>c[12752>>2]<<1>>>0):0){e=a;i=d;return e|0}}else{if(!(j>>>0>>0)){q=j-f|0;if(!(q>>>0>15)){e=a;i=d;return e|0}c[g>>2]=h&1|f|2;c[a+((f|4)+ -8)>>2]=q|3;c[o>>2]=c[o>>2]|1;Sd(a+(f+ -8)|0,q);e=a;i=d;return e|0}if((l|0)==(c[12296>>2]|0)){q=(c[12284>>2]|0)+j|0;if(!(q>>>0>f>>>0)){break}r=q-f|0;c[g>>2]=h&1|f|2;c[a+((f|4)+ -8)>>2]=r|1;c[12296>>2]=a+(f+ -8);c[12284>>2]=r;e=a;i=d;return e|0}if((l|0)==(c[12292>>2]|0)){r=(c[12280>>2]|0)+j|0;if(r>>>0>>0){break}q=r-f|0;if(q>>>0>15){c[g>>2]=h&1|f|2;c[a+((f|4)+ -8)>>2]=q|1;c[a+(r+ -8)>>2]=q;s=a+(r+ -4)|0;c[s>>2]=c[s>>2]&-2;t=a+(f+ -8)|0;u=q}else{c[g>>2]=h&1|r|2;q=a+(r+ -4)|0;c[q>>2]=c[q>>2]|1;t=0;u=0}c[12280>>2]=u;c[12292>>2]=t;e=a;i=d;return e|0}if((p&2|0)==0?(q=(p&-8)+j|0,!(q>>>0>>0)):0){r=q-f|0;s=p>>>3;do{if(!(p>>>0<256)){v=c[a+(j+16)>>2]|0;w=c[a+k>>2]|0;do{if((w|0)==(l|0)){x=a+(j+12)|0;y=c[x>>2]|0;if((y|0)==0){z=a+(j+8)|0;A=c[z>>2]|0;if((A|0)==0){B=0;break}else{C=A;D=z}}else{C=y;D=x}while(1){x=C+20|0;y=c[x>>2]|0;if((y|0)!=0){C=y;D=x;continue}x=C+16|0;y=c[x>>2]|0;if((y|0)==0){break}else{C=y;D=x}}if(D>>>0>>0){Mb()}else{c[D>>2]=0;B=C;break}}else{x=c[a+j>>2]|0;if(x>>>0>>0){Mb()}y=x+12|0;if((c[y>>2]|0)!=(l|0)){Mb()}z=w+8|0;if((c[z>>2]|0)==(l|0)){c[y>>2]=w;c[z>>2]=x;B=w;break}else{Mb()}}}while(0);if((v|0)!=0){w=c[a+(j+20)>>2]|0;x=12576+(w<<2)|0;if((l|0)==(c[x>>2]|0)){c[x>>2]=B;if((B|0)==0){c[12276>>2]=c[12276>>2]&~(1<>>0<(c[12288>>2]|0)>>>0){Mb()}w=v+16|0;if((c[w>>2]|0)==(l|0)){c[w>>2]=B}else{c[v+20>>2]=B}if((B|0)==0){break}}if(B>>>0<(c[12288>>2]|0)>>>0){Mb()}c[B+24>>2]=v;w=c[a+(j+8)>>2]|0;do{if((w|0)!=0){if(w>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[B+16>>2]=w;c[w+24>>2]=B;break}}}while(0);w=c[a+(j+12)>>2]|0;if((w|0)==0){break}if(w>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[B+20>>2]=w;c[w+24>>2]=B;break}}}else{w=c[a+j>>2]|0;v=c[a+k>>2]|0;x=12312+(s<<1<<2)|0;if((w|0)!=(x|0)){if(w>>>0>>0){Mb()}if((c[w+12>>2]|0)!=(l|0)){Mb()}}if((v|0)==(w|0)){c[3068]=c[3068]&~(1<>>0>>0){Mb()}z=v+8|0;if((c[z>>2]|0)==(l|0)){E=z;break}Mb()}}while(0);c[w+12>>2]=v;c[E>>2]=w}}while(0);if(r>>>0<16){c[g>>2]=q|c[g>>2]&1|2;s=a+((q|4)+ -8)|0;c[s>>2]=c[s>>2]|1;e=a;i=d;return e|0}else{c[g>>2]=c[g>>2]&1|f|2;c[a+((f|4)+ -8)>>2]=r|3;s=a+((q|4)+ -8)|0;c[s>>2]=c[s>>2]|1;Sd(a+(f+ -8)|0,r);e=a;i=d;return e|0}}}}while(0);f=Pd(b)|0;if((f|0)==0){e=0;i=d;return e|0}E=c[g>>2]|0;g=(E&-8)-((E&3|0)==0?8:4)|0;ie(f|0,a|0,(g>>>0>>0?g:b)|0)|0;Qd(a);e=f;i=d;return e|0}function Sd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=i;e=a+b|0;f=c[a+4>>2]|0;do{if((f&1|0)==0){g=c[a>>2]|0;if((f&3|0)==0){i=d;return}h=a+(0-g)|0;j=g+b|0;k=c[12288>>2]|0;if(h>>>0>>0){Mb()}if((h|0)==(c[12292>>2]|0)){l=a+(b+4)|0;if((c[l>>2]&3|0)!=3){m=h;n=j;break}c[12280>>2]=j;c[l>>2]=c[l>>2]&-2;c[a+(4-g)>>2]=j|1;c[e>>2]=j;i=d;return}l=g>>>3;if(g>>>0<256){o=c[a+(8-g)>>2]|0;p=c[a+(12-g)>>2]|0;q=12312+(l<<1<<2)|0;if((o|0)!=(q|0)){if(o>>>0>>0){Mb()}if((c[o+12>>2]|0)!=(h|0)){Mb()}}if((p|0)==(o|0)){c[3068]=c[3068]&~(1<>>0>>0){Mb()}q=p+8|0;if((c[q>>2]|0)==(h|0)){r=q}else{Mb()}}else{r=p+8|0}c[o+12>>2]=p;c[r>>2]=o;m=h;n=j;break}o=c[a+(24-g)>>2]|0;p=c[a+(12-g)>>2]|0;do{if((p|0)==(h|0)){q=16-g|0;l=a+(q+4)|0;s=c[l>>2]|0;if((s|0)==0){t=a+q|0;q=c[t>>2]|0;if((q|0)==0){u=0;break}else{v=q;w=t}}else{v=s;w=l}while(1){l=v+20|0;s=c[l>>2]|0;if((s|0)!=0){v=s;w=l;continue}l=v+16|0;s=c[l>>2]|0;if((s|0)==0){break}else{v=s;w=l}}if(w>>>0>>0){Mb()}else{c[w>>2]=0;u=v;break}}else{l=c[a+(8-g)>>2]|0;if(l>>>0>>0){Mb()}s=l+12|0;if((c[s>>2]|0)!=(h|0)){Mb()}t=p+8|0;if((c[t>>2]|0)==(h|0)){c[s>>2]=p;c[t>>2]=l;u=p;break}else{Mb()}}}while(0);if((o|0)!=0){p=c[a+(28-g)>>2]|0;k=12576+(p<<2)|0;if((h|0)==(c[k>>2]|0)){c[k>>2]=u;if((u|0)==0){c[12276>>2]=c[12276>>2]&~(1<>>0<(c[12288>>2]|0)>>>0){Mb()}p=o+16|0;if((c[p>>2]|0)==(h|0)){c[p>>2]=u}else{c[o+20>>2]=u}if((u|0)==0){m=h;n=j;break}}if(u>>>0<(c[12288>>2]|0)>>>0){Mb()}c[u+24>>2]=o;p=16-g|0;k=c[a+p>>2]|0;do{if((k|0)!=0){if(k>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[u+16>>2]=k;c[k+24>>2]=u;break}}}while(0);k=c[a+(p+4)>>2]|0;if((k|0)!=0){if(k>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[u+20>>2]=k;c[k+24>>2]=u;m=h;n=j;break}}else{m=h;n=j}}else{m=h;n=j}}else{m=a;n=b}}while(0);u=c[12288>>2]|0;if(e>>>0>>0){Mb()}v=a+(b+4)|0;w=c[v>>2]|0;if((w&2|0)==0){if((e|0)==(c[12296>>2]|0)){r=(c[12284>>2]|0)+n|0;c[12284>>2]=r;c[12296>>2]=m;c[m+4>>2]=r|1;if((m|0)!=(c[12292>>2]|0)){i=d;return}c[12292>>2]=0;c[12280>>2]=0;i=d;return}if((e|0)==(c[12292>>2]|0)){r=(c[12280>>2]|0)+n|0;c[12280>>2]=r;c[12292>>2]=m;c[m+4>>2]=r|1;c[m+r>>2]=r;i=d;return}r=(w&-8)+n|0;f=w>>>3;do{if(!(w>>>0<256)){k=c[a+(b+24)>>2]|0;g=c[a+(b+12)>>2]|0;do{if((g|0)==(e|0)){o=a+(b+20)|0;l=c[o>>2]|0;if((l|0)==0){t=a+(b+16)|0;s=c[t>>2]|0;if((s|0)==0){x=0;break}else{y=s;z=t}}else{y=l;z=o}while(1){o=y+20|0;l=c[o>>2]|0;if((l|0)!=0){y=l;z=o;continue}o=y+16|0;l=c[o>>2]|0;if((l|0)==0){break}else{y=l;z=o}}if(z>>>0>>0){Mb()}else{c[z>>2]=0;x=y;break}}else{o=c[a+(b+8)>>2]|0;if(o>>>0>>0){Mb()}l=o+12|0;if((c[l>>2]|0)!=(e|0)){Mb()}t=g+8|0;if((c[t>>2]|0)==(e|0)){c[l>>2]=g;c[t>>2]=o;x=g;break}else{Mb()}}}while(0);if((k|0)!=0){g=c[a+(b+28)>>2]|0;j=12576+(g<<2)|0;if((e|0)==(c[j>>2]|0)){c[j>>2]=x;if((x|0)==0){c[12276>>2]=c[12276>>2]&~(1<>>0<(c[12288>>2]|0)>>>0){Mb()}g=k+16|0;if((c[g>>2]|0)==(e|0)){c[g>>2]=x}else{c[k+20>>2]=x}if((x|0)==0){break}}if(x>>>0<(c[12288>>2]|0)>>>0){Mb()}c[x+24>>2]=k;g=c[a+(b+16)>>2]|0;do{if((g|0)!=0){if(g>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[x+16>>2]=g;c[g+24>>2]=x;break}}}while(0);g=c[a+(b+20)>>2]|0;if((g|0)!=0){if(g>>>0<(c[12288>>2]|0)>>>0){Mb()}else{c[x+20>>2]=g;c[g+24>>2]=x;break}}}}else{g=c[a+(b+8)>>2]|0;k=c[a+(b+12)>>2]|0;j=12312+(f<<1<<2)|0;if((g|0)!=(j|0)){if(g>>>0>>0){Mb()}if((c[g+12>>2]|0)!=(e|0)){Mb()}}if((k|0)==(g|0)){c[3068]=c[3068]&~(1<>>0>>0){Mb()}j=k+8|0;if((c[j>>2]|0)==(e|0)){A=j}else{Mb()}}else{A=k+8|0}c[g+12>>2]=k;c[A>>2]=g}}while(0);c[m+4>>2]=r|1;c[m+r>>2]=r;if((m|0)==(c[12292>>2]|0)){c[12280>>2]=r;i=d;return}else{B=r}}else{c[v>>2]=w&-2;c[m+4>>2]=n|1;c[m+n>>2]=n;B=n}n=B>>>3;if(B>>>0<256){w=n<<1;v=12312+(w<<2)|0;r=c[3068]|0;A=1<>2]|0;if(e>>>0<(c[12288>>2]|0)>>>0){Mb()}else{C=n;D=e}}else{c[3068]=r|A;C=12312+(w+2<<2)|0;D=v}c[C>>2]=m;c[D+12>>2]=m;c[m+8>>2]=D;c[m+12>>2]=v;i=d;return}v=B>>>8;if((v|0)!=0){if(B>>>0>16777215){E=31}else{D=(v+1048320|0)>>>16&8;C=v<>>16&4;w=C<>>16&2;A=14-(v|D|C)+(w<>>15)|0;E=B>>>(A+7|0)&1|A<<1}}else{E=0}A=12576+(E<<2)|0;c[m+28>>2]=E;c[m+20>>2]=0;c[m+16>>2]=0;C=c[12276>>2]|0;w=1<>2]=C|w;c[A>>2]=m;c[m+24>>2]=A;c[m+12>>2]=m;c[m+8>>2]=m;i=d;return}w=c[A>>2]|0;if((E|0)==31){F=0}else{F=25-(E>>>1)|0}a:do{if((c[w+4>>2]&-8|0)==(B|0)){G=w}else{E=B<>>31<<2)+16|0;C=c[H>>2]|0;if((C|0)==0){break}if((c[C+4>>2]&-8|0)==(B|0)){G=C;break a}else{E=E<<1;A=C}}if(H>>>0<(c[12288>>2]|0)>>>0){Mb()}c[H>>2]=m;c[m+24>>2]=A;c[m+12>>2]=m;c[m+8>>2]=m;i=d;return}}while(0);H=G+8|0;B=c[H>>2]|0;w=c[12288>>2]|0;if(G>>>0>>0){Mb()}if(B>>>0>>0){Mb()}c[B+12>>2]=m;c[H>>2]=m;c[m+8>>2]=B;c[m+12>>2]=G;c[m+24>>2]=0;i=d;return}function Td(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=i;f=a+4|0;g=c[f>>2]|0;h=a+100|0;if(g>>>0<(c[h>>2]|0)>>>0){c[f>>2]=g+1;j=d[g>>0]|0}else{j=Ud(a)|0}if((j|0)==43|(j|0)==45){g=(j|0)==45&1;k=c[f>>2]|0;if(k>>>0<(c[h>>2]|0)>>>0){c[f>>2]=k+1;l=d[k>>0]|0}else{l=Ud(a)|0}if(!((l+ -48|0)>>>0<10|(b|0)==0)?(c[h>>2]|0)!=0:0){c[f>>2]=(c[f>>2]|0)+ -1;m=l;n=g}else{m=l;n=g}}else{m=j;n=0}if((m+ -48|0)>>>0>9){if((c[h>>2]|0)==0){o=-2147483648;p=0;E=o;i=e;return p|0}c[f>>2]=(c[f>>2]|0)+ -1;o=-2147483648;p=0;E=o;i=e;return p|0}else{q=m;r=0}while(1){s=q+ -48+r|0;m=c[f>>2]|0;if(m>>>0<(c[h>>2]|0)>>>0){c[f>>2]=m+1;t=d[m>>0]|0}else{t=Ud(a)|0}u=(t+ -48|0)>>>0<10;if(!(u&(s|0)<214748364)){break}q=t;r=s*10|0}r=((s|0)<0)<<31>>31;if(u){u=s;q=r;m=t;while(1){j=qe(u|0,q|0,10,0)|0;g=E;l=ee(m|0,((m|0)<0)<<31>>31|0,-48,-1)|0;b=ee(l|0,E|0,j|0,g|0)|0;g=E;j=c[f>>2]|0;if(j>>>0<(c[h>>2]|0)>>>0){c[f>>2]=j+1;v=d[j>>0]|0}else{v=Ud(a)|0}if((v+ -48|0)>>>0<10&((g|0)<21474836|(g|0)==21474836&b>>>0<2061584302)){u=b;q=g;m=v}else{w=b;x=g;y=v;break}}}else{w=s;x=r;y=t}if((y+ -48|0)>>>0<10){do{y=c[f>>2]|0;if(y>>>0<(c[h>>2]|0)>>>0){c[f>>2]=y+1;z=d[y>>0]|0}else{z=Ud(a)|0}}while((z+ -48|0)>>>0<10)}if((c[h>>2]|0)!=0){c[f>>2]=(c[f>>2]|0)+ -1}f=(n|0)!=0;n=de(0,0,w|0,x|0)|0;o=f?E:x;p=f?n:w;E=o;i=e;return p|0}function Ud(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;e=i;f=b+104|0;g=c[f>>2]|0;if(!((g|0)!=0?(c[b+108>>2]|0)>=(g|0):0)){h=3}if((h|0)==3?(g=Xd(b)|0,(g|0)>=0):0){j=c[f>>2]|0;f=c[b+8>>2]|0;k=c[b+4>>2]|0;if((j|0)!=0?(l=j-(c[b+108>>2]|0)+ -1|0,(f-k|0)>(l|0)):0){c[b+100>>2]=k+l;m=k}else{n=k;h=8}if((h|0)==8){c[b+100>>2]=f;m=n}if((f|0)!=0){n=b+108|0;c[n>>2]=f+1-m+(c[n>>2]|0)}n=m+ -1|0;if((d[n>>0]|0|0)==(g|0)){o=g;i=e;return o|0}a[n>>0]=g;o=g;i=e;return o|0}c[b+100>>2]=0;o=-1;i=e;return o|0}function Vd(a,b){a=+a;b=b|0;var d=0,e=0,f=0,g=0,j=0,l=0.0,m=0.0,n=0.0,o=0;d=i;h[k>>3]=a;e=c[k>>2]|0;f=c[k+4>>2]|0;g=ge(e|0,f|0,52)|0;j=g&2047;if((j|0)==2047){l=a;i=d;return+l}else if((j|0)==0){if(a!=0.0){m=+Vd(a*18446744073709552000.0,b);n=m;o=(c[b>>2]|0)+ -64|0}else{n=a;o=0}c[b>>2]=o;l=n;i=d;return+l}else{c[b>>2]=j+ -1022;c[k>>2]=e;c[k+4>>2]=f&-2146435073|1071644672;l=+h[k>>3];i=d;return+l}return 0.0}function Wd(b,d){b=b|0;d=d|0;var e=0,f=0;e=i;if((b|0)==0){f=0;i=e;return f|0}if(d>>>0<128){a[b>>0]=d;f=1;i=e;return f|0}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;f=2;i=e;return f|0}if(d>>>0<55296|(d+ -57344|0)>>>0<8192){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;f=3;i=e;return f|0}if((d+ -65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;f=4;i=e;return f|0}else{c[(ic()|0)>>2]=84;f=-1;i=e;return f|0}return 0}function Xd(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;e=i;i=i+16|0;f=e;g=b+8|0;do{if((c[g>>2]|0)==0){h=b+74|0;j=a[h>>0]|0;a[h>>0]=j+255|j;j=b+20|0;h=b+44|0;if((c[j>>2]|0)>>>0>(c[h>>2]|0)>>>0){zc[c[b+36>>2]&3](b,0,0)|0}c[b+16>>2]=0;c[b+28>>2]=0;c[j>>2]=0;j=c[b>>2]|0;if((j&20|0)==0){k=c[h>>2]|0;c[g>>2]=k;c[b+4>>2]=k;break}if((j&4|0)==0){l=-1;i=e;return l|0}c[b>>2]=j|32;l=-1;i=e;return l|0}}while(0);if((zc[c[b+32>>2]&3](b,f,1)|0)!=1){l=-1;i=e;return l|0}l=d[f>>0]|0;i=e;return l|0}function Yd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=i;g=e+16|0;h=c[g>>2]|0;do{if((h|0)==0){j=e+74|0;k=a[j>>0]|0;a[j>>0]=k+255|k;k=c[e>>2]|0;if((k&8|0)==0){c[e+8>>2]=0;c[e+4>>2]=0;j=c[e+44>>2]|0;c[e+28>>2]=j;c[e+20>>2]=j;l=j+(c[e+48>>2]|0)|0;c[g>>2]=l;m=l;n=j;break}c[e>>2]=k|32;i=f;return}else{m=h;n=c[e+20>>2]|0}}while(0);h=e+20|0;if((m-n|0)>>>0>>0){zc[c[e+36>>2]&3](e,b,d)|0;i=f;return}a:do{if((a[e+75>>0]|0)>-1){m=d;while(1){if((m|0)==0){o=d;p=b;q=n;break a}g=m+ -1|0;if((a[b+g>>0]|0)==10){break}else{m=g}}if((zc[c[e+36>>2]&3](e,b,m)|0)>>>0>>0){i=f;return}else{o=d-m|0;p=b+m|0;q=c[h>>2]|0;break}}else{o=d;p=b;q=n}}while(0);ie(q|0,p|0,o|0)|0;c[h>>2]=(c[h>>2]|0)+o;i=f;return}function Zd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=i;i=i+352|0;g=f+248|0;h=f+80|0;j=f;k=f+264|0;l=f+136|0;m=f+120|0;c[m>>2]=e;e=l+0|0;n=13672|0;o=e+112|0;do{c[e>>2]=c[n>>2];e=e+4|0;n=n+4|0}while((e|0)<(o|0));n=-2-b|0;p=n>>>0<2147483647?n:2147483647;n=l+48|0;c[n>>2]=p;q=l+20|0;c[q>>2]=b;r=l+44|0;c[r>>2]=b;s=b+p|0;b=l+16|0;c[b>>2]=s;t=l+28|0;c[t>>2]=s;e=h+0|0;o=e+40|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(o|0));c[g>>2]=c[m>>2];if((_d(0,d,g,j,h)|0)>=0){if((c[n>>2]|0)==0){m=c[r>>2]|0;c[r>>2]=k;c[t>>2]=k;c[q>>2]=k;c[n>>2]=80;c[b>>2]=k+80;_d(l,d,g,j,h)|0;if((m|0)!=0){zc[c[l+36>>2]&3](l,0,0)|0;c[r>>2]=m;c[n>>2]=0;c[b>>2]=0;c[t>>2]=0;c[q>>2]=0}}else{_d(l,d,g,j,h)|0}}if((p|0)==0){i=f;return}p=c[q>>2]|0;a[p+(((p|0)==(c[b>>2]|0))<<31>>31)>>0]=0;i=f;return}function _d(e,f,g,j,l){e=e|0;f=f|0;g=g|0;j=j|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0.0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0.0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0.0,Bb=0.0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0.0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0.0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,jc=0,kc=0,lc=0,mc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0.0,zc=0.0,Ac=0.0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0;m=i;i=i+832|0;n=m+16|0;o=m;p=m+808|0;q=p;r=m+792|0;s=m+496|0;t=m+752|0;u=m+8|0;v=m+804|0;w=(e|0)!=0;x=t+40|0;y=x;z=t+39|0;t=u+4|0;A=r+12|0;B=r+11|0;r=A;C=r-q|0;D=-2-q|0;F=r+2|0;G=n+264|0;H=p+9|0;I=H;J=p+8|0;K=0;L=0;M=f;f=0;N=0;O=0;a:while(1){do{if((f|0)>-1){if((N|0)>(2147483647-f|0)){c[(ic()|0)>>2]=75;P=-1;break}else{P=N+f|0;break}}else{P=f}}while(0);Q=a[M>>0]|0;if(Q<<24>>24==0){R=351;break}else{S=Q;T=M}while(1){if(S<<24>>24==0){U=T;V=T;break}else if(S<<24>>24==37){W=T;X=T;R=9;break}Q=T+1|0;S=a[Q>>0]|0;T=Q}b:do{if((R|0)==9){while(1){R=0;if((a[W+1>>0]|0)!=37){U=W;V=X;break b}Q=X+1|0;Y=W+2|0;if((a[Y>>0]|0)==37){W=Y;X=Q;R=9}else{U=Y;V=Q;break}}}}while(0);Q=V-M|0;if(w){Yd(M,Q,e)}if((V|0)!=(M|0)){Z=L;_=K;M=U;f=P;N=Q;L=Z;K=_;continue}Y=U+1|0;$=a[Y>>0]|0;ba=($<<24>>24)+ -48|0;if(ba>>>0<10?(a[U+2>>0]|0)==36:0){ca=U+3|0;da=a[ca>>0]|0;ea=ba;fa=1;ga=ca}else{da=$;ea=-1;fa=O;ga=Y}Y=da<<24>>24;c:do{if((Y+ -32|0)>>>0<32){$=Y;ca=da;ba=0;ha=ga;while(1){if((1<<$+ -32&75913|0)==0){ia=ca;ja=ba;ka=ha;break c}la=1<<(ca<<24>>24)+ -32|ba;ma=ha+1|0;na=a[ma>>0]|0;$=na<<24>>24;if(!(($+ -32|0)>>>0<32)){ia=na;ja=la;ka=ma;break}else{ca=na;ba=la;ha=ma}}}else{ia=da;ja=0;ka=ga}}while(0);do{if(ia<<24>>24==42){Y=ka+1|0;ha=(a[Y>>0]|0)+ -48|0;if(ha>>>0<10?(a[ka+2>>0]|0)==36:0){c[l+(ha<<2)>>2]=10;oa=1;pa=ka+3|0;qa=c[j+((a[Y>>0]|0)+ -48<<3)>>2]|0}else{if((fa|0)!=0){ra=-1;R=370;break a}if(!w){sa=Y;ta=ja;ua=0;va=0;break}ha=c[g>>2]|0;ba=c[ha>>2]|0;c[g>>2]=ha+4;oa=0;pa=Y;qa=ba}if((qa|0)<0){sa=pa;ta=ja|8192;ua=oa;va=0-qa|0}else{sa=pa;ta=ja;ua=oa;va=qa}}else{ba=ia<<24>>24;if((ba+ -48|0)>>>0<10){Y=ba;ba=ka;ha=0;do{ha=Y+ -48+(ha*10|0)|0;ba=ba+1|0;Y=a[ba>>0]|0}while((Y+ -48|0)>>>0<10);if((ha|0)<0){ra=-1;R=370;break a}else{sa=ba;ta=ja;ua=fa;va=ha}}else{sa=ka;ta=ja;ua=fa;va=0}}}while(0);d:do{if((a[sa>>0]|0)==46){Y=sa+1|0;ca=a[Y>>0]|0;if(!(ca<<24>>24==42)){$=ca<<24>>24;if(($+ -48|0)>>>0<10){wa=$;xa=Y;ya=0}else{za=Y;Aa=0;break}while(1){Y=wa+ -48+(ya*10|0)|0;$=xa+1|0;wa=a[$>>0]|0;if(!((wa+ -48|0)>>>0<10)){za=$;Aa=Y;break d}else{xa=$;ya=Y}}}ha=sa+2|0;ba=(a[ha>>0]|0)+ -48|0;if(ba>>>0<10?(a[sa+3>>0]|0)==36:0){c[l+(ba<<2)>>2]=10;za=sa+4|0;Aa=c[j+((a[ha>>0]|0)+ -48<<3)>>2]|0;break}if((ua|0)!=0){ra=-1;R=370;break a}if(w){ba=c[g>>2]|0;Y=c[ba>>2]|0;c[g>>2]=ba+4;za=ha;Aa=Y}else{za=ha;Aa=0}}else{za=sa;Aa=-1}}while(0);ha=za;Y=0;while(1){Ba=a[ha>>0]|0;ba=(Ba<<24>>24)+ -65|0;if(ba>>>0>57){ra=-1;R=370;break a}Ca=ha+1|0;Da=a[13104+(Y*58|0)+ba>>0]|0;Ea=Da&255;if((Ea+ -1|0)>>>0<8){ha=Ca;Y=Ea}else{break}}if(Da<<24>>24==0){ra=-1;R=370;break}ba=(ea|0)>-1;e:do{if(Da<<24>>24==19){if(ba){ra=-1;R=370;break a}if(w){Fa=Ba;Ga=L;Ha=K}else{Z=L;_=K;M=Ca;f=P;N=Q;O=ua;L=Z;K=_;continue a}}else{f:do{if(ba){c[l+(ea<<2)>>2]=Ea;$=j+(ea<<3)|0;ca=c[$+4>>2]|0;ma=c[$>>2]|0;if(w){Ia=ma;Ja=ca}else{K=ca;L=ma;M=Ca;f=P;N=Q;O=ua;continue a}}else{if(!w){ra=0;R=370;break a}if((Da&255)>20){Fa=Ba;Ga=L;Ha=K;break e}do{switch(Ea|0){case 10:{ma=c[g>>2]|0;ca=c[ma>>2]|0;c[g>>2]=ma+4;Ia=ca;Ja=((ca|0)<0)<<31>>31;break f;break};case 12:{ca=c[g>>2]|0;ma=ca;$=c[ma>>2]|0;la=c[ma+4>>2]|0;c[g>>2]=ca+8;Ia=$;Ja=la;break f;break};case 9:{la=c[g>>2]|0;$=c[la>>2]|0;c[g>>2]=la+4;Ia=$;Ja=K;break f;break};case 14:{$=c[g>>2]|0;la=c[$>>2]|0;c[g>>2]=$+4;Ia=la&65535;Ja=0;break f;break};case 15:{la=c[g>>2]|0;$=c[la>>2]|0;c[g>>2]=la+4;Ia=$<<24>>24;Ja=((($&255)<<24>>24|0)<0)<<31>>31;break f;break};case 11:{$=c[g>>2]|0;la=c[$>>2]|0;c[g>>2]=$+4;Ia=la;Ja=0;break f;break};case 13:{la=c[g>>2]|0;$=c[la>>2]|0;c[g>>2]=la+4;Ia=$<<16>>16;Ja=((($&65535)<<16>>16|0)<0)<<31>>31;break f;break};case 18:{$=c[g>>2]|0;c[k>>2]=c[$>>2];c[k+4>>2]=c[$+4>>2];Ka=+h[k>>3];c[g>>2]=$+8;h[k>>3]=Ka;Ia=c[k>>2]|0;Ja=c[k+4>>2]|0;break f;break};case 16:{$=c[g>>2]|0;la=c[$>>2]|0;c[g>>2]=$+4;Ia=la&255;Ja=0;break f;break};case 17:{la=c[g>>2]|0;c[k>>2]=c[la>>2];c[k+4>>2]=c[la+4>>2];Ka=+h[k>>3];c[g>>2]=la+8;h[k>>3]=Ka;Ia=c[k>>2]|0;Ja=c[k+4>>2]|0;break f;break};default:{Ia=L;Ja=K;break f}}}while(0)}}while(0);Fa=a[ha>>0]|0;Ga=Ia;Ha=Ja}}while(0);ha=Fa<<24>>24;if((Y|0)==0){La=ha}else{La=(ha&15|0)==3?ha&-33:ha}ha=ta&-65537;ba=(ta&8192|0)==0?ta:ha;g:do{switch(La|0){case 99:{a[z>>0]=Ga;Ma=Ha;Na=Ga;Oa=z;Pa=ha;Qa=1;Ra=0;Sa=13568;Ta=x;break};case 88:case 120:{Ua=ba;Va=Aa;Wa=La;R=77;break};case 109:{Xa=nc(c[(ic()|0)>>2]|0)|0;R=99;break};case 115:{Xa=(Ga|0)==0?13584:Ga;R=99;break};case 110:{switch(Y|0){case 0:{c[Ga>>2]=P;K=Ha;L=Ga;M=Ca;f=P;N=Q;O=ua;continue a;break};case 2:{la=Ga;c[la>>2]=P;c[la+4>>2]=((P|0)<0)<<31>>31;K=Ha;L=Ga;M=Ca;f=P;N=Q;O=ua;continue a;break};case 1:{c[Ga>>2]=P;K=Ha;L=Ga;M=Ca;f=P;N=Q;O=ua;continue a;break};case 4:{a[Ga>>0]=P;K=Ha;L=Ga;M=Ca;f=P;N=Q;O=ua;continue a;break};case 6:{c[Ga>>2]=P;K=Ha;L=Ga;M=Ca;f=P;N=Q;O=ua;continue a;break};case 3:{b[Ga>>1]=P;K=Ha;L=Ga;M=Ca;f=P;N=Q;O=ua;continue a;break};case 7:{la=Ga;c[la>>2]=P;c[la+4>>2]=((P|0)<0)<<31>>31;K=Ha;L=Ga;M=Ca;f=P;N=Q;O=ua;continue a;break};default:{K=Ha;L=Ga;M=Ca;f=P;N=Q;O=ua;continue a}}break};case 112:{Ua=ba|8;Va=Aa>>>0>8?Aa:8;Wa=120;R=77;break};case 67:{c[u>>2]=Ga;c[t>>2]=0;Ya=u;Za=u;_a=-1;R=115;break};case 83:{if((Aa|0)==0){$a=Ga;ab=Ga;bb=0;R=122}else{Ya=Ga;Za=Ga;_a=Aa;R=115}break};case 111:{la=Ga;$=(la|0)==0&(Ha|0)==0;if($){cb=x}else{ca=x;ma=la;la=Ha;while(1){na=ca+ -1|0;a[na>>0]=ma&7|48;ma=ge(ma|0,la|0,3)|0;la=E;if((ma|0)==0&(la|0)==0){cb=na;break}else{ca=na}}}if((ba&8|0)==0){db=Ga;eb=Ha;fb=cb;gb=ba;hb=Aa;ib=0;jb=13568;R=94}else{db=Ga;eb=Ha;fb=cb;gb=ba;hb=Aa;ib=$&1^1;jb=$?13568:13573|0;R=94}break};case 105:case 100:{if((Ha|0)<0){ca=de(0,0,Ga|0,Ha|0)|0;kb=ca;lb=E;mb=1;nb=13568;R=89;break g}if((ba&2048|0)==0){ca=ba&1;kb=Ga;lb=Ha;mb=ca;nb=(ca|0)==0?13568:13570|0;R=89}else{kb=Ga;lb=Ha;mb=1;nb=13569|0;R=89}break};case 117:{kb=Ga;lb=Ha;mb=0;nb=13568;R=89;break};case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{c[k>>2]=Ga;c[k+4>>2]=Ha;Ka=+h[k>>3];c[o>>2]=0;if((Ha|0)>=0){if((ba&2048|0)==0){ca=ba&1;ob=Ka;pb=ca;qb=(ca|0)==0?13593|0:13598|0}else{ob=Ka;pb=1;qb=13595|0}}else{ob=-Ka;pb=1;qb=13592}h[k>>3]=ob;ca=c[k+4>>2]&2146435072;if(!(ca>>>0<2146435072|(ca|0)==2146435072&0<0)){ca=(La&32|0)!=0;if(ob!=ob|0.0!=0.0){rb=0;sb=ca?13632:13640}else{rb=pb;sb=ca?13616:13624}ca=rb+3|0;la=(ca|0)<(va|0);if((ba&8192|0)==0&la){ma=va-ca|0;he(s|0,32,(ma>>>0>256?256:ma)|0)|0;if(ma>>>0>255){na=ma;while(1){Yd(s,256,e);tb=na+ -256|0;if(tb>>>0>255){na=tb}else{ub=tb;break}}}else{ub=ma}Yd(s,ub,e)}Yd(qb,rb,e);Yd(sb,3,e);if((ba&73728|0)==8192&la){na=va-ca|0;he(s|0,32,(na>>>0>256?256:na)|0)|0;if(na>>>0>255){$=na;while(1){Yd(s,256,e);tb=$+ -256|0;if(tb>>>0>255){$=tb}else{vb=tb;break}}}else{vb=na}Yd(s,vb,e)}K=Ha;L=Ga;M=Ca;f=P;N=la?va:ca;O=ua;continue a}Ka=+Vd(ob,o)*2.0;$=Ka!=0.0;if($){c[o>>2]=(c[o>>2]|0)+ -1}ma=La|32;if((ma|0)==97){tb=La&32;wb=(tb|0)==0?qb:qb+9|0;xb=pb|2;yb=Aa>>>0>11?0:12-Aa|0;do{if((yb|0)!=0){zb=yb;Ab=8.0;do{zb=zb+ -1|0;Ab=Ab*16.0}while((zb|0)!=0);if((a[wb>>0]|0)==45){Bb=-(Ab+(-Ka-Ab));break}else{Bb=Ka+Ab-Ab;break}}else{Bb=Ka}}while(0);yb=c[o>>2]|0;ca=(yb|0)<0?0-yb|0:yb;if((ca|0)<0){yb=A;la=ca;na=((ca|0)<0)<<31>>31;while(1){zb=se(la|0,na|0,10,0)|0;yb=yb+ -1|0;a[yb>>0]=zb|48;zb=la;la=re(la|0,na|0,10,0)|0;if(!(na>>>0>9|(na|0)==9&zb>>>0>4294967295)){break}else{na=E}}Cb=yb;Db=la}else{Cb=A;Db=ca}if((Db|0)==0){Eb=Cb}else{na=Cb;zb=Db;while(1){Fb=na+ -1|0;a[Fb>>0]=(zb>>>0)%10|0|48;if(zb>>>0<10){Eb=Fb;break}else{na=Fb;zb=(zb>>>0)/10|0}}}if((Eb|0)==(A|0)){a[B>>0]=48;Gb=B}else{Gb=Eb}a[Gb+ -1>>0]=(c[o>>2]>>31&2)+43;zb=Gb+ -2|0;a[zb>>0]=La+15;na=(ba&8|0)==0;if((Aa|0)>0){if(na){Hb=Bb;ca=p;while(1){la=~~Hb;yb=ca+1|0;a[ca>>0]=d[13648+la>>0]|tb;Hb=(Hb- +(la|0))*16.0;if((yb-q|0)==1){a[yb>>0]=46;Ib=ca+2|0}else{Ib=yb}if(!(Hb!=0.0)){Jb=Ib;break}else{ca=Ib}}}else{Hb=Bb;ca=p;while(1){yb=~~Hb;la=ca+1|0;a[ca>>0]=d[13648+yb>>0]|tb;Hb=(Hb- +(yb|0))*16.0;if((la-q|0)==1){a[la>>0]=46;Kb=ca+2|0}else{Kb=la}if(!(Hb!=0.0)){Jb=Kb;break}else{ca=Kb}}}}else{if(na){Hb=Bb;ca=p;while(1){la=~~Hb;yb=ca+1|0;a[ca>>0]=d[13648+la>>0]|tb;Hb=(Hb- +(la|0))*16.0;la=Hb!=0.0;if((yb-q|0)==1&la){a[yb>>0]=46;Lb=ca+2|0}else{Lb=yb}if(!la){Jb=Lb;break}else{ca=Lb}}}else{Hb=Bb;ca=p;while(1){na=~~Hb;la=ca+1|0;a[ca>>0]=d[13648+na>>0]|tb;Hb=(Hb- +(na|0))*16.0;if((la-q|0)==1){a[la>>0]=46;Mb=ca+2|0}else{Mb=la}if(!(Hb!=0.0)){Jb=Mb;break}else{ca=Mb}}}}ca=Jb;do{if((Aa|0)==0){R=186}else{if((D+ca|0)>=(Aa|0)){R=186;break}Nb=F+Aa-zb|0}}while(0);if((R|0)==186){R=0;Nb=C-zb+ca|0}tb=Nb+xb|0;la=ba&73728;na=(tb|0)<(va|0);if((la|0)==0&na){yb=va-tb|0;he(s|0,32,(yb>>>0>256?256:yb)|0)|0;if(yb>>>0>255){Fb=yb;while(1){Yd(s,256,e);Ob=Fb+ -256|0;if(Ob>>>0>255){Fb=Ob}else{Pb=Ob;break}}}else{Pb=yb}Yd(s,Pb,e)}Yd(wb,xb,e);if((la|0)==65536&na){Fb=va-tb|0;he(s|0,48,(Fb>>>0>256?256:Fb)|0)|0;if(Fb>>>0>255){Ob=Fb;while(1){Yd(s,256,e);Qb=Ob+ -256|0;if(Qb>>>0>255){Ob=Qb}else{Rb=Qb;break}}}else{Rb=Fb}Yd(s,Rb,e)}Ob=ca-q|0;Yd(p,Ob,e);xb=r-zb|0;wb=Nb-xb-Ob|0;if((wb|0)>0){he(s|0,48,(wb>>>0>256?256:wb)|0)|0;if(wb>>>0>255){Ob=wb;while(1){Yd(s,256,e);yb=Ob+ -256|0;if(yb>>>0>255){Ob=yb}else{Sb=yb;break}}}else{Sb=wb}Yd(s,Sb,e)}Yd(zb,xb,e);if((la|0)==8192&na){Ob=va-tb|0;he(s|0,32,(Ob>>>0>256?256:Ob)|0)|0;if(Ob>>>0>255){ca=Ob;while(1){Yd(s,256,e);Fb=ca+ -256|0;if(Fb>>>0>255){ca=Fb}else{Tb=Fb;break}}}else{Tb=Ob}Yd(s,Tb,e)}K=Ha;L=Ga;M=Ca;f=P;N=na?va:tb;O=ua;continue a}ca=(Aa|0)<0?6:Aa;if($){la=(c[o>>2]|0)+ -28|0;c[o>>2]=la;Ub=Ka*268435456.0;Vb=la}else{Ub=Ka;Vb=c[o>>2]|0}la=(Vb|0)<0?n:G;Hb=Ub;xb=la;do{zb=~~Hb>>>0;c[xb>>2]=zb;xb=xb+4|0;Hb=(Hb- +(zb>>>0))*1.0e9}while(Hb!=0.0);$=c[o>>2]|0;if(($|0)>0){tb=$;na=la;Ob=xb;while(1){zb=(tb|0)>29?29:tb;wb=Ob+ -4|0;do{if(wb>>>0>>0){Wb=na;Xb=(c[wb>>2]|0)==0&Ob>>>0>na>>>0?wb:Ob}else{Fb=0;yb=wb;do{Qb=je(c[yb>>2]|0,0,zb|0)|0;Yb=ee(Qb|0,E|0,Fb|0,0)|0;Qb=E;Zb=se(Yb|0,Qb|0,1e9,0)|0;c[yb>>2]=Zb;Fb=re(Yb|0,Qb|0,1e9,0)|0;yb=yb+ -4|0}while(!(yb>>>0>>0));yb=(c[wb>>2]|0)==0&Ob>>>0>na>>>0?wb:Ob;if((Fb|0)==0){Wb=na;Xb=yb;break}Qb=na+ -4|0;c[Qb>>2]=Fb;Wb=Qb;Xb=yb}}while(0);wb=(c[o>>2]|0)-zb|0;c[o>>2]=wb;if((wb|0)>0){tb=wb;na=Wb;Ob=Xb}else{_b=wb;$b=Wb;ac=Xb;break}}}else{_b=$;$b=la;ac=xb}h:do{if((_b|0)<0){Ob=((ca|0)/9|0)+2|0;if((ma|0)==102){na=la;tb=la+(Ob<<2)|0;wb=_b;yb=$b;Qb=ac;while(1){Yb=0-wb|0;Zb=(Yb|0)>9?9:Yb;do{if(yb>>>0>>0){Yb=(1<>>Zb;cc=0;dc=yb;do{ec=c[dc>>2]|0;c[dc>>2]=(ec>>>Zb)+cc;cc=aa(ec&Yb,bc)|0;dc=dc+4|0}while(dc>>>0>>0);dc=(c[yb>>2]|0)==0?yb+4|0:yb;if((cc|0)==0){fc=dc;gc=Qb;break}c[Qb>>2]=cc;fc=dc;gc=Qb+4|0}else{fc=(c[yb>>2]|0)==0?yb+4|0:yb;gc=Qb}}while(0);Fb=(gc-na>>2|0)>(Ob|0)?tb:gc;wb=(c[o>>2]|0)+Zb|0;c[o>>2]=wb;if((wb|0)>=0){hc=fc;jc=Fb;break h}else{yb=fc;Qb=Fb}}}else{kc=_b;lc=$b;mc=ac}while(1){Qb=0-kc|0;yb=(Qb|0)>9?9:Qb;do{if(lc>>>0>>0){Qb=(1<>>yb;tb=0;na=lc;do{zb=c[na>>2]|0;c[na>>2]=(zb>>>yb)+tb;tb=aa(zb&Qb,wb)|0;na=na+4|0}while(na>>>0>>0);na=(c[lc>>2]|0)==0?lc+4|0:lc;if((tb|0)==0){oc=na;pc=mc;break}c[mc>>2]=tb;oc=na;pc=mc+4|0}else{oc=(c[lc>>2]|0)==0?lc+4|0:lc;pc=mc}}while(0);if((pc-oc>>2|0)>(Ob|0)){qc=oc+(Ob<<2)|0}else{qc=pc}kc=(c[o>>2]|0)+yb|0;c[o>>2]=kc;if((kc|0)>=0){hc=oc;jc=qc;break}else{lc=oc;mc=qc}}}else{hc=$b;jc=ac}}while(0);xb=la;do{if(hc>>>0>>0){$=(xb-hc>>2)*9|0;Ob=c[hc>>2]|0;if(Ob>>>0<10){rc=$;break}else{sc=$;tc=10}while(1){tc=tc*10|0;$=sc+1|0;if(Ob>>>0>>0){rc=$;break}else{sc=$}}}else{rc=0}}while(0);Ob=(ma|0)==103;$=ca-((ma|0)!=102?rc:0)+((Ob&(ca|0)!=0)<<31>>31)|0;if(($|0)<(((jc-xb>>2)*9|0)+ -9|0)){Zb=$+9216|0;$=(Zb|0)/9|0;na=la+($+ -1023<<2)|0;wb=((Zb|0)%9|0)+1|0;if((wb|0)<9){Zb=10;Qb=wb;while(1){wb=Zb*10|0;Qb=Qb+1|0;if((Qb|0)==9){uc=wb;break}else{Zb=wb}}}else{uc=10}Zb=c[na>>2]|0;Qb=(Zb>>>0)%(uc>>>0)|0;if((Qb|0)==0?(la+($+ -1022<<2)|0)==(jc|0):0){vc=hc;wc=na;xc=rc}else{R=244}do{if((R|0)==244){R=0;Ab=(((Zb>>>0)/(uc>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;ma=(uc|0)/2|0;do{if(Qb>>>0>>0){yc=.5}else{if((Qb|0)==(ma|0)?(la+($+ -1022<<2)|0)==(jc|0):0){yc=1.0;break}yc=1.5}}while(0);do{if((pb|0)==0){zc=Ab;Ac=yc}else{if((a[qb>>0]|0)!=45){zc=Ab;Ac=yc;break}zc=Ab*-1.0;Ac=yc*-1.0}}while(0);ma=Zb-Qb|0;c[na>>2]=ma;if(!(zc+Ac!=zc)){vc=hc;wc=na;xc=rc;break}wb=ma+uc|0;c[na>>2]=wb;if(wb>>>0>999999999){wb=na;while(1){ma=wb+ -4|0;c[wb>>2]=0;cc=(c[ma>>2]|0)+1|0;c[ma>>2]=cc;if(cc>>>0>999999999){wb=ma}else{Bc=ma;break}}}else{Bc=na}wb=Bc>>>0>>0?Bc:hc;ma=(xb-wb>>2)*9|0;cc=c[wb>>2]|0;if(cc>>>0<10){vc=wb;wc=Bc;xc=ma;break}else{Cc=ma;Dc=10}while(1){Dc=Dc*10|0;ma=Cc+1|0;if(cc>>>0>>0){vc=wb;wc=Bc;xc=ma;break}else{Cc=ma}}}}while(0);na=wc+4|0;Qb=jc>>>0>na>>>0?na:jc;while(1){na=Qb+ -4|0;if((c[na>>2]|0)==0&Qb>>>0>vc>>>0){Qb=na}else{Ec=vc;Fc=xc;Gc=Qb;break}}}else{Ec=hc;Fc=rc;Gc=jc}Qb=0-Fc|0;do{if(Ob){na=((ca|0)==0&1)+ca|0;if((na|0)>(Fc|0)&(Fc|0)>-5){Hc=La+ -1|0;Ic=na+ -1-Fc|0}else{Hc=La+ -2|0;Ic=na+ -1|0}if((ba&8|0)!=0){Jc=Hc;Kc=Ic;break}do{if(Gc>>>0>Ec>>>0){na=c[Gc+ -4>>2]|0;if((na|0)==0){Lc=9;break}if(((na>>>0)%10|0|0)==0){Mc=10;Nc=0}else{Lc=0;break}while(1){Mc=Mc*10|0;Zb=Nc+1|0;if(((na>>>0)%(Mc>>>0)|0|0)!=0){Lc=Zb;break}else{Nc=Zb}}}else{Lc=9}}while(0);na=((Gc-xb>>2)*9|0)+ -9|0;if((Hc|32|0)==102){yb=na-Lc|0;Zb=(yb|0)<0?0:yb;Jc=Hc;Kc=(Ic|0)<(Zb|0)?Ic:Zb;break}else{Zb=na+Fc-Lc|0;na=(Zb|0)<0?0:Zb;Jc=Hc;Kc=(Ic|0)<(na|0)?Ic:na;break}}else{Jc=La;Kc=ca}}while(0);ca=(Kc|0)!=0;if(ca){Oc=1}else{Oc=(ba&8|0)!=0}xb=Oc&1;Ob=(Jc|32|0)==102;if(Ob){Pc=(Fc|0)>0?Fc:0;Qc=0}else{na=(Fc|0)<0?Qb:Fc;if((na|0)<0){Zb=A;yb=na;$=((na|0)<0)<<31>>31;while(1){wb=se(yb|0,$|0,10,0)|0;Zb=Zb+ -1|0;a[Zb>>0]=wb|48;wb=yb;yb=re(yb|0,$|0,10,0)|0;if(!($>>>0>9|($|0)==9&wb>>>0>4294967295)){break}else{$=E}}Rc=Zb;Sc=yb}else{Rc=A;Sc=na}if((Sc|0)==0){Tc=Rc}else{$=Rc;Qb=Sc;while(1){wb=$+ -1|0;a[wb>>0]=(Qb>>>0)%10|0|48;if(Qb>>>0<10){Tc=wb;break}else{$=wb;Qb=(Qb>>>0)/10|0}}}if((r-Tc|0)<2){Qb=Tc;while(1){$=Qb+ -1|0;a[$>>0]=48;if((r-$|0)<2){Qb=$}else{Uc=$;break}}}else{Uc=Tc}a[Uc+ -1>>0]=(Fc>>31&2)+43;Qb=Uc+ -2|0;a[Qb>>0]=Jc;Pc=r-Qb|0;Qc=Qb}Qb=pb+1+Kc+xb+Pc|0;$=ba&73728;na=(Qb|0)<(va|0);if(($|0)==0&na){yb=va-Qb|0;he(s|0,32,(yb>>>0>256?256:yb)|0)|0;if(yb>>>0>255){Zb=yb;while(1){Yd(s,256,e);wb=Zb+ -256|0;if(wb>>>0>255){Zb=wb}else{Vc=wb;break}}}else{Vc=yb}Yd(s,Vc,e)}Yd(qb,pb,e);if(($|0)==65536&na){Zb=va-Qb|0;he(s|0,48,(Zb>>>0>256?256:Zb)|0)|0;if(Zb>>>0>255){xb=Zb;while(1){Yd(s,256,e);wb=xb+ -256|0;if(wb>>>0>255){xb=wb}else{Wc=wb;break}}}else{Wc=Zb}Yd(s,Wc,e)}do{if(Ob){xb=Ec>>>0>la>>>0?la:Ec;yb=xb;do{wb=c[yb>>2]|0;if((wb|0)==0){Xc=H}else{cc=H;ma=wb;while(1){wb=cc+ -1|0;a[wb>>0]=(ma>>>0)%10|0|48;if(ma>>>0<10){Xc=wb;break}else{cc=wb;ma=(ma>>>0)/10|0}}}do{if((yb|0)==(xb|0)){if((Xc|0)!=(H|0)){Yc=Xc;break}a[J>>0]=48;Yc=J}else{if(Xc>>>0>p>>>0){Zc=Xc}else{Yc=Xc;break}while(1){ma=Zc+ -1|0;a[ma>>0]=48;if(ma>>>0>p>>>0){Zc=ma}else{Yc=ma;break}}}}while(0);Yd(Yc,I-Yc|0,e);yb=yb+4|0}while(!(yb>>>0>la>>>0));if(!ca?(ba&8|0)==0:0){break}Yd(13664,1,e);if(yb>>>0>>0&(Kc|0)>0){xb=Kc;tb=yb;while(1){ma=c[tb>>2]|0;if((ma|0)!=0){cc=H;wb=ma;while(1){cc=cc+ -1|0;a[cc>>0]=(wb>>>0)%10|0|48;if(wb>>>0<10){break}else{wb=(wb>>>0)/10|0}}if(cc>>>0>p>>>0){_c=cc;R=307}else{$c=cc}}else{_c=H;R=307}if((R|0)==307){while(1){R=0;wb=_c+ -1|0;a[wb>>0]=48;if(wb>>>0>p>>>0){_c=wb;R=307}else{$c=wb;break}}}Yd($c,(xb|0)>9?9:xb,e);tb=tb+4|0;cc=xb+ -9|0;if(!(tb>>>0>>0&(cc|0)>0)){ad=cc;break}else{xb=cc}}}else{ad=Kc}if((ad|0)<=0){break}he(s|0,48,(ad>>>0>256?256:ad)|0)|0;if(ad>>>0>255){xb=ad;while(1){Yd(s,256,e);tb=xb+ -256|0;if(tb>>>0>255){xb=tb}else{bd=tb;break}}}else{bd=ad}Yd(s,bd,e)}else{xb=Gc>>>0>Ec>>>0?Gc:Ec+4|0;do{if((Kc|0)>-1){tb=(ba&8|0)!=0;yb=Kc;cc=Ec;do{wb=c[cc>>2]|0;if((wb|0)!=0){ma=H;zb=wb;while(1){ma=ma+ -1|0;a[ma>>0]=(zb>>>0)%10|0|48;if(zb>>>0<10){break}else{zb=(zb>>>0)/10|0}}if((ma|0)!=(H|0)){cd=ma}else{R=318}}else{R=318}if((R|0)==318){R=0;a[J>>0]=48;cd=J}do{if((cc|0)==(Ec|0)){zb=cd+1|0;Yd(cd,1,e);if(!((yb|0)>0|tb)){dd=zb;break}Yd(13664,1,e);dd=zb}else{if(cd>>>0>p>>>0){ed=cd}else{dd=cd;break}while(1){zb=ed+ -1|0;a[zb>>0]=48;if(zb>>>0>p>>>0){ed=zb}else{dd=zb;break}}}}while(0);ma=I-dd|0;Yd(dd,(ma|0)<(yb|0)?ma:yb,e);yb=yb-ma|0;cc=cc+4|0}while(cc>>>0>>0&(yb|0)>-1);if((yb|0)<=0){break}he(s|0,48,(yb>>>0>256?256:yb)|0)|0;if(yb>>>0>255){cc=yb;while(1){Yd(s,256,e);tb=cc+ -256|0;if(tb>>>0>255){cc=tb}else{fd=tb;break}}}else{fd=yb}Yd(s,fd,e)}}while(0);Yd(Qc,r-Qc|0,e)}}while(0);if(($|0)==8192&na){ca=va-Qb|0;he(s|0,32,(ca>>>0>256?256:ca)|0)|0;if(ca>>>0>255){la=ca;while(1){Yd(s,256,e);Ob=la+ -256|0;if(Ob>>>0>255){la=Ob}else{gd=Ob;break}}}else{gd=ca}Yd(s,gd,e)}K=Ha;L=Ga;M=Ca;f=P;N=na?va:Qb;O=ua;continue a;break};default:{Ma=Ha;Na=Ga;Oa=M;Pa=ba;Qa=Aa;Ra=0;Sa=13568;Ta=x}}}while(0);i:do{if((R|0)==77){R=0;Q=Ga;Y=Wa&32;if(!((Q|0)==0&(Ha|0)==0)){la=x;$=Q;Q=Ha;do{la=la+ -1|0;a[la>>0]=d[13648+($&15)>>0]|Y;$=ge($|0,Q|0,4)|0;Q=E}while(!(($|0)==0&(Q|0)==0));if((Ua&8|0)==0){db=Ga;eb=Ha;fb=la;gb=Ua;hb=Va;ib=0;jb=13568;R=94}else{db=Ga;eb=Ha;fb=la;gb=Ua;hb=Va;ib=2;jb=13568+(Wa>>4)|0;R=94}}else{db=Ga;eb=Ha;fb=x;gb=Ua;hb=Va;ib=0;jb=13568;R=94}}else if((R|0)==89){R=0;Q=kb;if(lb>>>0>0|(lb|0)==0&Q>>>0>4294967295){$=x;Y=Q;Qb=lb;while(1){na=se(Y|0,Qb|0,10,0)|0;$=$+ -1|0;a[$>>0]=na|48;na=Y;Y=re(Y|0,Qb|0,10,0)|0;if(!(Qb>>>0>9|(Qb|0)==9&na>>>0>4294967295)){break}else{Qb=E}}hd=$;id=Y}else{hd=x;id=Q}if((id|0)==0){db=kb;eb=lb;fb=hd;gb=ba;hb=Aa;ib=mb;jb=nb;R=94}else{Qb=hd;la=id;while(1){na=Qb+ -1|0;a[na>>0]=(la>>>0)%10|0|48;if(la>>>0<10){db=kb;eb=lb;fb=na;gb=ba;hb=Aa;ib=mb;jb=nb;R=94;break}else{Qb=na;la=(la>>>0)/10|0}}}}else if((R|0)==99){R=0;la=Xa;Qb=(Aa|0)==0;j:do{if((la&3|0)==0|Qb){jd=Aa;kd=Qb;ld=Xa;R=102}else{Q=Aa;Y=Xa;while(1){if((a[Y>>0]|0)==0){md=Q;nd=Y;break j}$=Y+1|0;na=Q+ -1|0;ca=(na|0)==0;if(($&3|0)==0|ca){jd=na;kd=ca;ld=$;R=102;break}else{Q=na;Y=$}}}}while(0);k:do{if((R|0)==102){R=0;if(!kd){if((a[ld>>0]|0)!=0){l:do{if(jd>>>0>3){Qb=jd;Y=ld;while(1){Q=c[Y>>2]|0;if(((Q&-2139062144^-2139062144)&Q+ -16843009|0)!=0){od=Qb;pd=Y;break l}Q=Y+4|0;$=Qb+ -4|0;if($>>>0>3){Qb=$;Y=Q}else{od=$;pd=Q;break}}}else{od=jd;pd=ld}}while(0);if((od|0)==0){md=0;nd=pd}else{Y=od;Qb=pd;while(1){if((a[Qb>>0]|0)==0){md=Y;nd=Qb;break k}yb=Qb+1|0;Y=Y+ -1|0;if((Y|0)==0){md=0;nd=yb;break}else{Qb=yb}}}}else{md=jd;nd=ld}}else{md=0;nd=ld}}}while(0);Qb=(md|0)!=0?nd:0;if((Qb|0)==0){Ma=Ha;Na=Ga;Oa=Xa;Pa=ha;Qa=Aa;Ra=0;Sa=13568;Ta=Xa+Aa|0;break}else{Ma=Ha;Na=Ga;Oa=Xa;Pa=ha;Qa=Qb-la|0;Ra=0;Sa=13568;Ta=Qb;break}}else if((R|0)==115){R=0;Qb=0;Y=0;yb=Ya;while(1){Q=c[yb>>2]|0;if((Q|0)==0){qd=Qb;rd=Y;break}$=Wd(v,Q)|0;if(!(($|0)>-1)){ra=-1;R=370;break a}Q=$+Qb|0;if($>>>0>(_a-Qb|0)>>>0){$a=Ya;ab=Za;bb=Qb;R=122;break i}if(!(Q>>>0<_a>>>0)){qd=Q;rd=$;break}Qb=Q;Y=$;yb=yb+4|0}if((rd|0)<0){ra=-1;R=370;break a}else{$a=Ya;ab=Za;bb=qd;R=122}}}while(0);if((R|0)==94){R=0;ha=(hb|0)>-1?gb&-65537:gb;yb=(db|0)==0&(eb|0)==0;if(yb&(hb|0)==0){Ma=eb;Na=db;Oa=x;Pa=ha;Qa=0;Ra=ib;Sa=jb;Ta=x}else{Y=(yb&1)+(y-fb)|0;Ma=eb;Na=db;Oa=fb;Pa=ha;Qa=(hb|0)>(Y|0)?hb:Y;Ra=ib;Sa=jb;Ta=x}}else if((R|0)==122){R=0;Y=ba&73728;ha=(bb|0)<(va|0);if((Y|0)==0&ha){yb=va-bb|0;he(s|0,32,(yb>>>0>256?256:yb)|0)|0;if(yb>>>0>255){Qb=yb;while(1){Yd(s,256,e);la=Qb+ -256|0;if(la>>>0>255){Qb=la}else{sd=la;break}}}else{sd=yb}Yd(s,sd,e)}m:do{if((bb|0)!=0){Qb=0;ba=$a;while(1){la=c[ba>>2]|0;if((la|0)==0){break m}$=Wd(v,la)|0;la=$+Qb|0;if((la|0)>(bb|0)){break m}Yd(v,$,e);if(!(la>>>0>>0)){break m}Qb=la;ba=ba+4|0}}}while(0);if((Y|0)==8192&ha){yb=va-bb|0;he(s|0,32,(yb>>>0>256?256:yb)|0)|0;if(yb>>>0>255){ba=yb;while(1){Yd(s,256,e);Qb=ba+ -256|0;if(Qb>>>0>255){ba=Qb}else{td=Qb;break}}}else{td=yb}Yd(s,td,e)}K=Ha;L=ab;M=Ca;f=P;N=ha?va:bb;O=ua;continue}ba=Ta-Oa|0;Y=(Qa|0)<(ba|0)?ba:Qa;Qb=Ra+Y|0;la=(va|0)<(Qb|0)?Qb:va;$=Pa&73728;Q=(Qb|0)<(la|0);if(($|0)==0&Q){na=la-Qb|0;he(s|0,32,(na>>>0>256?256:na)|0)|0;if(na>>>0>255){ca=na;while(1){Yd(s,256,e);Ob=ca+ -256|0;if(Ob>>>0>255){ca=Ob}else{ud=Ob;break}}}else{ud=na}Yd(s,ud,e)}Yd(Sa,Ra,e);if(($|0)==65536&Q){ca=la-Qb|0;he(s|0,48,(ca>>>0>256?256:ca)|0)|0;if(ca>>>0>255){ha=ca;while(1){Yd(s,256,e);yb=ha+ -256|0;if(yb>>>0>255){ha=yb}else{vd=yb;break}}}else{vd=ca}Yd(s,vd,e)}if((ba|0)<(Y|0)){ha=Y-ba|0;he(s|0,48,(ha>>>0>256?256:ha)|0)|0;if(ha>>>0>255){na=ha;while(1){Yd(s,256,e);yb=na+ -256|0;if(yb>>>0>255){na=yb}else{wd=yb;break}}}else{wd=ha}Yd(s,wd,e)}Yd(Oa,ba,e);if(!(($|0)==8192&Q)){K=Ma;L=Na;M=Ca;f=P;N=la;O=ua;continue}na=la-Qb|0;he(s|0,32,(na>>>0>256?256:na)|0)|0;if(na>>>0>255){Y=na;while(1){Yd(s,256,e);ca=Y+ -256|0;if(ca>>>0>255){Y=ca}else{xd=ca;break}}}else{xd=na}Yd(s,xd,e);K=Ma;L=Na;M=Ca;f=P;N=la;O=ua}if((R|0)==351){if((e|0)!=0){ra=P;i=m;return ra|0}if((O|0)==0){ra=0;i=m;return ra|0}else{yd=1}while(1){O=c[l+(yd<<2)>>2]|0;if((O|0)==0){zd=1;Ad=yd;break}P=j+(yd<<3)|0;n:do{if(!(O>>>0>20)){do{switch(O|0){case 16:{e=c[g>>2]|0;ua=c[e>>2]|0;c[g>>2]=e+4;e=P;c[e>>2]=ua&255;c[e+4>>2]=0;break n;break};case 14:{e=c[g>>2]|0;ua=c[e>>2]|0;c[g>>2]=e+4;e=P;c[e>>2]=ua&65535;c[e+4>>2]=0;break n;break};case 15:{e=c[g>>2]|0;ua=c[e>>2]|0;c[g>>2]=e+4;e=(ua&255)<<24>>24;ua=P;c[ua>>2]=e;c[ua+4>>2]=((e|0)<0)<<31>>31;break n;break};case 12:{e=c[g>>2]|0;ua=e;N=c[ua>>2]|0;f=c[ua+4>>2]|0;c[g>>2]=e+8;e=P;c[e>>2]=N;c[e+4>>2]=f;break n;break};case 9:{f=c[g>>2]|0;e=c[f>>2]|0;c[g>>2]=f+4;c[P>>2]=e;break n;break};case 17:{e=c[g>>2]|0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];zc=+h[k>>3];c[g>>2]=e+8;h[P>>3]=zc;break n;break};case 18:{e=c[g>>2]|0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];zc=+h[k>>3];c[g>>2]=e+8;h[P>>3]=zc;break n;break};case 10:{e=c[g>>2]|0;f=c[e>>2]|0;c[g>>2]=e+4;e=P;c[e>>2]=f;c[e+4>>2]=((f|0)<0)<<31>>31;break n;break};case 13:{f=c[g>>2]|0;e=c[f>>2]|0;c[g>>2]=f+4;f=(e&65535)<<16>>16;e=P;c[e>>2]=f;c[e+4>>2]=((f|0)<0)<<31>>31;break n;break};case 11:{f=c[g>>2]|0;e=c[f>>2]|0;c[g>>2]=f+4;f=P;c[f>>2]=e;c[f+4>>2]=0;break n;break};default:{break n}}}while(0)}}while(0);yd=yd+1|0;if((yd|0)>=10){ra=1;R=370;break}}if((R|0)==370){i=m;return ra|0}while(1){yd=Ad+1|0;if(!zd){ra=-1;R=370;break}if((yd|0)>=10){ra=1;R=370;break}zd=(c[l+(yd<<2)>>2]|0)==0;Ad=yd}if((R|0)==370){i=m;return ra|0}}else if((R|0)==370){i=m;return ra|0}return 0}function $d(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;f=a+20|0;g=c[f>>2]|0;h=(c[a+16>>2]|0)-g|0;a=h>>>0>d>>>0?d:h;ie(g|0,b|0,a|0)|0;c[f>>2]=(c[f>>2]|0)+a;i=e;return d|0}function ae(){}function be(a){a=a|0;var b=0;b=(aa(c[a>>2]|0,31010991)|0)+1735287159&2147483647;c[a>>2]=b;return b|0}function ce(){return be(o)|0}function de(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return(E=e,a-c>>>0|0)|0}function ee(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return(E=b+d+(e>>>0>>0|0)>>>0,e|0)|0}function fe(b){b=b|0;var c=0;c=b;while(a[c>>0]|0){c=c+1|0}return c-b|0}function ge(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){E=b>>>c;return a>>>c|(b&(1<>>c-32|0}function he(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;g=b&3;h=d|d<<8|d<<16|d<<24;i=f&~3;if(g){g=b+4-g|0;while((b|0)<(g|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(i|0)){c[b>>2]=h;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function ie(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return gc(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if((e|0)==0)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function je(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){E=b<>>32-c;return a<>c;return a>>>c|(b&(1<>c-32|0}function le(b){b=b|0;var c=0;c=a[n+(b>>>24)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+16|0;return(a[n+(b&255)>>0]|0)+24|0}function me(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return(a[m+(b>>>24)>>0]|0)+24|0}function ne(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=aa(d,c)|0;f=a>>>16;a=(e>>>16)+(aa(d,f)|0)|0;d=b>>>16;b=aa(d,c)|0;return(E=(a>>>16)+(aa(d,f)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|e&65535|0)|0}function oe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b>>31|((b|0)<0?-1:0)<<1;f=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;g=d>>31|((d|0)<0?-1:0)<<1;h=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;i=de(e^a,f^b,e,f)|0;b=E;a=g^e;e=h^f;f=de((te(i,b,de(g^c,h^d,g,h)|0,E,0)|0)^a,E^e,a,e)|0;return f|0}function pe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;i=i+8|0;g=f|0;h=b>>31|((b|0)<0?-1:0)<<1;j=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;l=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;m=de(h^a,j^b,h,j)|0;b=E;te(m,b,de(k^d,l^e,k,l)|0,E,g)|0;l=de(c[g>>2]^h,c[g+4>>2]^j,h,j)|0;j=E;i=f;return(E=j,l)|0}function qe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=ne(e,a)|0;f=E;return(E=(aa(b,a)|0)+(aa(d,e)|0)+f|f&0,c|0|0)|0}function re(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=te(a,b,c,d,0)|0;return e|0}function se(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+8|0;g=f|0;te(a,b,d,e,g)|0;i=f;return(E=c[g+4>>2]|0,c[g>>2]|0)|0} + + + +function Cc(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+7&-8;return b|0}function Dc(){return i|0}function Ec(a){a=a|0;i=a}function Fc(a,b){a=a|0;b=b|0;if((p|0)==0){p=a;q=b}}function Gc(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function Hc(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function Ic(a){a=a|0;E=a}function Jc(){return E|0}function Kc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;var h=0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0;h=i;j=+g[a>>2];k=a+4|0;l=+g[k>>2];m=b+4|0;n=e*.5;e=+g[c>>2];o=c+4|0;p=+g[o>>2];q=d+4|0;r=e*+g[d>>2]+p*+g[q>>2];s=j*e+l*p-r;t=(j+ +g[b>>2])*e+(l+ +g[m>>2])*p-r;if((!(!(s>=-9999999747378752.0e-20)|!(t<=9999999747378752.0e-20))?(r=s/(s-t),g[f>>2]=r,t=+g[o>>2],s=-t,p=+g[c>>2],l=+g[d>>2],e=n*p,j=+g[q>>2],u=(r*+g[b>>2]+ +g[a>>2])*s+(r*+g[m>>2]+ +g[k>>2])*p,(n*t+l)*s+p*(j-e)-u<=0.0):0)?u-((n*s+l)*s+p*(e+j))<=0.0:0){v=1;i=h;return v|0}v=0;i=h;return v|0}function Lc(a,b,d,e,f,h,j){a=a|0;b=+b;d=+d;e=+e;f=+f;h=+h;j=+j;var k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;k=i;l=+g[1566];m=+g[1568];n=+g[1570];o=+g[1572];p=a+8|0;q=c[p>>2]|0;r=a+4|0;s=c[r>>2]|0;if((q|0)>(s|0)){t=s;u=c[a>>2]|0}else{c[p>>2]=q<<1;v=Pd(q<<6)|0;q=c[a>>2]|0;ie(v|0,q|0,s<<5|0)|0;Qd(q);c[a>>2]=v;t=c[r>>2]|0;u=v}v=t<<3;g[u+(v<<2)>>2]=b;g[u+((v|1)<<2)>>2]=d;g[u+((v|2)<<2)>>2]=e;g[u+((v|3)<<2)>>2]=0.0;g[u+((v|4)<<2)>>2]=l;g[u+((v|5)<<2)>>2]=m;g[u+((v|6)<<2)>>2]=n;g[u+((v|7)<<2)>>2]=o;v=(c[r>>2]|0)+1|0;c[r>>2]=v;u=c[p>>2]|0;if((u|0)>(v|0)){w=v;x=c[a>>2]|0}else{c[p>>2]=u<<1;t=Pd(u<<6)|0;u=c[a>>2]|0;ie(t|0,u|0,v<<5|0)|0;Qd(u);c[a>>2]=t;w=c[r>>2]|0;x=t}t=w<<3;g[x+(t<<2)>>2]=f;g[x+((t|1)<<2)>>2]=d;g[x+((t|2)<<2)>>2]=j;g[x+((t|3)<<2)>>2]=0.0;g[x+((t|4)<<2)>>2]=l;g[x+((t|5)<<2)>>2]=m;g[x+((t|6)<<2)>>2]=n;g[x+((t|7)<<2)>>2]=o;t=(c[r>>2]|0)+1|0;c[r>>2]=t;x=c[p>>2]|0;if((x|0)>(t|0)){y=t;z=c[a>>2]|0}else{c[p>>2]=x<<1;w=Pd(x<<6)|0;x=c[a>>2]|0;ie(w|0,x|0,t<<5|0)|0;Qd(x);c[a>>2]=w;y=c[r>>2]|0;z=w}w=y<<3;g[z+(w<<2)>>2]=f;g[z+((w|1)<<2)>>2]=h;g[z+((w|2)<<2)>>2]=j;g[z+((w|3)<<2)>>2]=1.0;g[z+((w|4)<<2)>>2]=l;g[z+((w|5)<<2)>>2]=m;g[z+((w|6)<<2)>>2]=n;g[z+((w|7)<<2)>>2]=o;w=(c[r>>2]|0)+1|0;c[r>>2]=w;z=c[p>>2]|0;if((z|0)>(w|0)){A=w;B=c[a>>2]|0}else{c[p>>2]=z<<1;y=Pd(z<<6)|0;z=c[a>>2]|0;ie(y|0,z|0,w<<5|0)|0;Qd(z);c[a>>2]=y;A=c[r>>2]|0;B=y}y=A<<3;g[B+(y<<2)>>2]=f;g[B+((y|1)<<2)>>2]=h;g[B+((y|2)<<2)>>2]=j;g[B+((y|3)<<2)>>2]=1.0;g[B+((y|4)<<2)>>2]=l;g[B+((y|5)<<2)>>2]=m;g[B+((y|6)<<2)>>2]=n;g[B+((y|7)<<2)>>2]=o;y=(c[r>>2]|0)+1|0;c[r>>2]=y;B=c[p>>2]|0;if((B|0)>(y|0)){C=y;D=c[a>>2]|0}else{c[p>>2]=B<<1;A=Pd(B<<6)|0;B=c[a>>2]|0;ie(A|0,B|0,y<<5|0)|0;Qd(B);c[a>>2]=A;C=c[r>>2]|0;D=A}A=C<<3;g[D+(A<<2)>>2]=b;g[D+((A|1)<<2)>>2]=h;g[D+((A|2)<<2)>>2]=e;g[D+((A|3)<<2)>>2]=1.0;g[D+((A|4)<<2)>>2]=l;g[D+((A|5)<<2)>>2]=m;g[D+((A|6)<<2)>>2]=n;g[D+((A|7)<<2)>>2]=o;A=(c[r>>2]|0)+1|0;c[r>>2]=A;D=c[p>>2]|0;if((D|0)>(A|0)){E=A;F=c[a>>2]|0;G=E<<3;H=F+(G<<2)|0;g[H>>2]=b;I=G|1;J=F+(I<<2)|0;g[J>>2]=d;K=G|2;L=F+(K<<2)|0;g[L>>2]=e;M=G|3;N=F+(M<<2)|0;g[N>>2]=0.0;O=G|4;P=F+(O<<2)|0;g[P>>2]=l;Q=G|5;R=F+(Q<<2)|0;g[R>>2]=m;S=G|6;T=F+(S<<2)|0;g[T>>2]=n;U=G|7;V=F+(U<<2)|0;g[V>>2]=o;W=c[r>>2]|0;X=W+1|0;c[r>>2]=X;i=k;return}else{c[p>>2]=D<<1;p=Pd(D<<6)|0;D=c[a>>2]|0;ie(p|0,D|0,A<<5|0)|0;Qd(D);c[a>>2]=p;E=c[r>>2]|0;F=p;G=E<<3;H=F+(G<<2)|0;g[H>>2]=b;I=G|1;J=F+(I<<2)|0;g[J>>2]=d;K=G|2;L=F+(K<<2)|0;g[L>>2]=e;M=G|3;N=F+(M<<2)|0;g[N>>2]=0.0;O=G|4;P=F+(O<<2)|0;g[P>>2]=l;Q=G|5;R=F+(Q<<2)|0;g[R>>2]=m;S=G|6;T=F+(S<<2)|0;g[T>>2]=n;U=G|7;V=F+(U<<2)|0;g[V>>2]=o;W=c[r>>2]|0;X=W+1|0;c[r>>2]=X;i=k;return}}function Mc(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0;j=i;i=i+64|0;k=j+40|0;l=j;m=j+20|0;if(g>>>0<2){n=53;i=j;return n|0}o=a[f>>0]|0;p=o&255;q=d[f+1>>0]|0;if((((p<<8|q)>>>0)%31|0|0)!=0){n=24;i=j;return n|0}if((p&15|0)!=8|o<<24>>24<0){n=25;i=j;return n|0}if((q&32|0)!=0){n=26;i=j;return n|0}q=g+ -2|0;o=c[h+8>>2]|0;if((o|0)==0){p=c[e>>2]|0;r=q<<3;s=l+4|0;t=l+8|0;u=m+4|0;v=m+8|0;w=l+16|0;x=m+16|0;y=m+12|0;z=g+ -4|0;A=k+4|0;B=k+8|0;C=k+16|0;D=k+12|0;E=l+12|0;F=g+ -6|0;G=0;H=0;I=p;J=p;p=c[b>>2]|0;while(1){K=G+2|0;if(!(K>>>0>>0)){L=52;M=p;N=I;break}O=d[f+((G>>>3)+2)>>0]|0;P=G&7;Q=G+1|0;R=G+3|0;S=(d[f+((K>>>3)+2)>>0]|0)>>>(K&7)<<1&2|(d[f+((Q>>>3)+2)>>0]|0)>>>(Q&7)&1;if((S|0)==0){if((R&7|0)==0){T=R}else{Q=R;while(1){K=Q+1|0;if((K&7|0)==0){T=K;break}else{Q=K}}}Q=T>>>3;if(!(Q>>>0>>0)){L=52;M=p;N=I;break}K=(d[f+(Q+3)>>0]|0)<<8|(d[f+(Q+2)>>0]|0);U=Q+4|0;if((((d[f+(Q+5)>>0]|0)<<8|(d[f+U>>0]|0))+K|0)!=65535){L=21;M=p;N=I;break}V=K+H|0;if(!(V>>>0>>0)){if(J>>>0>>0){W=V<<1;X=Rd(p,W)|0;if((X|0)==0){L=83;M=p;N=I;break}else{Y=X;Z=W;_=V}}else{Y=p;Z=J;_=V}}else{Y=p;Z=J;_=I}W=K+U|0;if(W>>>0>q>>>0){L=23;M=Y;N=_;break}if((K|0)!=0){X=H+1|0;a[Y+H>>0]=a[f+(Q+6)>>0]|0;if((K|0)==1){$=X;aa=W}else{Q=X;X=1;ba=U;while(1){X=X+1|0;a[Y+Q>>0]=a[f+(ba+3)>>0]|0;if((X|0)==(K|0)){$=V;aa=W;break}else{Q=Q+1|0;ba=ba+1|0}}}}else{$=H;aa=U}ca=aa<<3;da=$;ea=Z;fa=Y;ga=_}else if((S|0)!=3){c[l>>2]=0;c[s>>2]=0;c[t>>2]=0;c[m>>2]=0;c[u>>2]=0;c[v>>2]=0;if((S|0)==2){ba=R>>>3;if(ba>>>0>>0){Q=G+4|0;W=G+5|0;V=G+6|0;K=G+7|0;X=(d[f+((Q>>>3)+2)>>0]|0)>>>(Q&7)<<1&2|(d[f+(ba+2)>>0]|0)>>>(R&7)&1|(d[f+((W>>>3)+2)>>0]|0)>>>(W&7)<<2&4|(d[f+((V>>>3)+2)>>0]|0)>>>(V&7)<<3&8|(d[f+((K>>>3)+2)>>0]|0)>>>(K&7)<<4&16;K=G+8|0;V=X+257|0;W=G+9|0;ba=G+10|0;Q=G+11|0;ha=G+12|0;ia=(d[f+((W>>>3)+2)>>0]|0)>>>(W&7)<<1&2|(d[f+((K>>>3)+2)>>0]|0)>>>(K&7)&1|(d[f+((ba>>>3)+2)>>0]|0)>>>(ba&7)<<2&4|(d[f+((Q>>>3)+2)>>0]|0)>>>(Q&7)<<3&8|(d[f+((ha>>>3)+2)>>0]|0)>>>(ha&7)<<4&16;ha=G+13|0;Q=G+14|0;ba=G+15|0;K=G+16|0;W=G+17|0;ja=((d[f+((Q>>>3)+2)>>0]|0)>>>(Q&7)<<1&2|(d[f+((ha>>>3)+2)>>0]|0)>>>(ha&7)&1|(d[f+((ba>>>3)+2)>>0]|0)>>>(ba&7)<<2&4|(d[f+((K>>>3)+2)>>0]|0)>>>(K&7)<<3&8)+4|0;c[k>>2]=0;c[A>>2]=0;c[B>>2]=0;K=Pd(76)|0;a:do{if((K|0)!=0){ba=W;ha=0;while(1){if(ha>>>0>>0){Q=ba+1|0;ka=ba+2|0;c[K+(c[8472+(ha<<2)>>2]<<2)>>2]=(d[f+((Q>>>3)+2)>>0]|0)>>>(Q&7)<<1&2|(d[f+((ba>>>3)+2)>>0]|0)>>>(ba&7)&1|(d[f+((ka>>>3)+2)>>0]|0)>>>(ka&7)<<2&4;la=ba+3|0}else{c[K+(c[8472+(ha<<2)>>2]<<2)>>2]=0;la=ba}ha=ha+1|0;if((ha|0)==19){break}else{ba=la}}ba=Pd(76)|0;c[B>>2]=ba;if((ba|0)!=0){ma=ba+0|0;na=K+0|0;oa=ma+76|0;do{c[ma>>2]=c[na>>2];ma=ma+4|0;na=na+4|0}while((ma|0)<(oa|0));c[C>>2]=19;c[D>>2]=7;ba=Zc(k)|0;if((ba|0)==0){ha=Pd(1152)|0;ka=Pd(128)|0;if(!((ha|0)==0|(ka|0)==0)){he(ha|0,0,1152)|0;ma=ka+0|0;oa=ma+128|0;do{c[ma>>2]=0;ma=ma+4|0}while((ma|0)<(oa|0));Q=X+258|0;pa=ia+Q|0;if((pa|0)!=0){qa=c[k>>2]|0;ra=c[C>>2]|0;sa=-258-X|0;ta=la;ua=0;va=0;b:while(1){wa=ta;xa=va;while(1){ya=wa;za=0;while(1){if(!(ya>>>0>>0)){Aa=ya;Ba=83;break b}Ca=c[qa+(((d[f+((ya>>>3)+2)>>0]|0)>>>(ya&7)&1|za<<1)<<2)>>2]|0;Da=ya+1|0;if(Ca>>>0>>0){break}za=Ca-ra|0;if(!(za>>>0>>0)){Aa=Da;Ba=83;break b}else{ya=Da}}if(!(Ca>>>0<16)){break}if(xa>>>0>>0){c[ha+(xa<<2)>>2]=Ca}else{c[ka+(xa-V<<2)>>2]=Ca}za=xa+1|0;if(za>>>0>>0){wa=Da;xa=za}else{Ea=Da;Fa=ua;break b}}c:do{if((Ca|0)==18){if(!(Da>>>0>>0)){Ga=Da;Ha=ka;Ia=ha;Ja=50;break a}wa=ya+2|0;za=ya+3|0;Ka=ya+4|0;La=ya+5|0;Ma=ya+6|0;Na=ya+7|0;Oa=ya+8|0;Pa=((d[f+((wa>>>3)+2)>>0]|0)>>>(wa&7)<<1&2|(d[f+((Da>>>3)+2)>>0]|0)>>>(Da&7)&1|(d[f+((za>>>3)+2)>>0]|0)>>>(za&7)<<2&4|(d[f+((Ka>>>3)+2)>>0]|0)>>>(Ka&7)<<3&8|(d[f+((La>>>3)+2)>>0]|0)>>>(La&7)<<4&16|(d[f+((Ma>>>3)+2)>>0]|0)>>>(Ma&7)<<5&32|(d[f+((Na>>>3)+2)>>0]|0)>>>(Na&7)<<6&64)+11|0;if((Pa|0)==0){Qa=Oa;Ra=ua;Sa=xa;break}else{Ta=xa;Ua=0}while(1){if(!(Ta>>>0>>0)){Qa=Oa;Ra=15;Sa=Ta;break c}if(Ta>>>0>>0){c[ha+(Ta<<2)>>2]=0}else{c[ka+(Ta-V<<2)>>2]=0}Na=Ta+1|0;Ua=Ua+1|0;if(!(Ua>>>0>>0)){Qa=Oa;Ra=ua;Sa=Na;break}else{Ta=Na}}}else if((Ca|0)==17){if(!(Da>>>0>>0)){Ga=Da;Ha=ka;Ia=ha;Ja=50;break a}Oa=ya+2|0;Pa=ya+3|0;Na=ya+4|0;Ma=((d[f+((Oa>>>3)+2)>>0]|0)>>>(Oa&7)<<1&2|(d[f+((Da>>>3)+2)>>0]|0)>>>(Da&7)&1|(d[f+((Pa>>>3)+2)>>0]|0)>>>(Pa&7)<<2&4)+3|0;Pa=xa;Oa=0;while(1){if(!(Pa>>>0>>0)){Qa=Na;Ra=14;Sa=Pa;break c}if(Pa>>>0>>0){c[ha+(Pa<<2)>>2]=0}else{c[ka+(Pa-V<<2)>>2]=0}La=Pa+1|0;Oa=Oa+1|0;if(!(Oa>>>0>>0)){Qa=Na;Ra=ua;Sa=La;break}else{Pa=La}}}else if((Ca|0)==16){if(!(Da>>>0>>0)){Ga=Da;Ha=ka;Ia=ha;Ja=50;break a}if((xa|0)==0){Ga=Da;Ha=ka;Ia=ha;Ja=54;break a}Pa=ya+2|0;Na=ya+3|0;Ma=((d[f+((Pa>>>3)+2)>>0]|0)>>>(Pa&7)<<1&2|(d[f+((Da>>>3)+2)>>0]|0)>>>(Da&7)&1)+3|0;if(xa>>>0>>0){Va=ha+(xa+ -1<<2)|0}else{Va=ka+(sa+xa<<2)|0}Pa=c[Va>>2]|0;Oa=xa;La=0;while(1){if(!(Oa>>>0>>0)){Qa=Na;Ra=13;Sa=Oa;break c}if(Oa>>>0>>0){c[ha+(Oa<<2)>>2]=Pa}else{c[ka+(Oa-V<<2)>>2]=Pa}Ka=Oa+1|0;La=La+1|0;if(!(La>>>0>>0)){Qa=Na;Ra=ua;Sa=Ka;break}else{Oa=Ka}}}else if((Ca|0)==-1){Aa=Da;Ba=83;break b}else{Ga=Da;Ha=ka;Ia=ha;Ja=16;break a}}while(0);if(Sa>>>0>>0){ta=Qa;ua=Ra;va=Sa}else{Ea=Qa;Fa=Ra;break}}if((Ba|0)==83){Ba=0;Ga=Aa;Ha=ka;Ia=ha;Ja=Aa>>>0>r>>>0?10:11;break}if((Fa|0)==0){if((c[ha+1024>>2]|0)!=0){va=Pd(1152)|0;c[t>>2]=va;if((va|0)==0){Ga=Ea;Ha=ka;Ia=ha;Ja=83}else{ie(va|0,ha|0,1152)|0;c[w>>2]=288;c[E>>2]=15;va=Zc(l)|0;if((va|0)!=0){Ga=Ea;Ha=ka;Ia=ha;Ja=va;break}va=Pd(128)|0;c[v>>2]=va;if((va|0)==0){Ga=Ea;Ha=ka;Ia=ha;Ja=83;break}ma=va+0|0;na=ka+0|0;oa=ma+128|0;do{c[ma>>2]=c[na>>2];ma=ma+4|0;na=na+4|0}while((ma|0)<(oa|0));c[x>>2]=32;c[y>>2]=15;Ga=Ea;Ha=ka;Ia=ha;Ja=Zc(m)|0}}else{Ga=Ea;Ha=ka;Ia=ha;Ja=64}}else{Ga=Ea;Ha=ka;Ia=ha;Ja=Fa}}else{Ga=la;Ha=ka;Ia=ha;Ja=64}}else{Ga=la;Ha=ka;Ia=ha;Ja=83}}else{Ga=la;Ha=0;Ia=0;Ja=ba}}else{Ga=la;Ha=0;Ia=0;Ja=83}}else{Ga=W;Ha=0;Ia=0;Ja=83}}while(0);Qd(K);Qd(Ia);Qd(Ha);Qd(c[k>>2]|0);Qd(c[A>>2]|0);Qd(c[B>>2]|0);if((Ja|0)==0){Wa=Ga;Ba=92}else{Xa=c[l>>2]|0;Ya=c[m>>2]|0;Za=J;_a=I;$a=p;ab=Ga;bb=H;cb=Ja}}else{Xa=0;Ya=0;Za=J;_a=I;$a=p;ab=R;bb=H;cb=49}}else if((S|0)==1){W=Pd(1152)|0;if((W|0)!=0){V=0;do{c[W+(V<<2)>>2]=8;V=V+1|0}while((V|0)!=144);db=144;do{c[W+(db<<2)>>2]=9;db=db+1|0}while((db|0)!=256);c[W+1024>>2]=7;c[W+1028>>2]=7;c[W+1032>>2]=7;c[W+1036>>2]=7;c[W+1040>>2]=7;c[W+1044>>2]=7;c[W+1048>>2]=7;c[W+1052>>2]=7;c[W+1056>>2]=7;c[W+1060>>2]=7;c[W+1064>>2]=7;c[W+1068>>2]=7;c[W+1072>>2]=7;c[W+1076>>2]=7;c[W+1080>>2]=7;c[W+1084>>2]=7;c[W+1088>>2]=7;c[W+1092>>2]=7;c[W+1096>>2]=7;c[W+1100>>2]=7;c[W+1104>>2]=7;c[W+1108>>2]=7;c[W+1112>>2]=7;c[W+1116>>2]=7;c[W+1120>>2]=8;c[W+1124>>2]=8;c[W+1128>>2]=8;c[W+1132>>2]=8;c[W+1136>>2]=8;c[W+1140>>2]=8;c[W+1144>>2]=8;c[W+1148>>2]=8;V=Pd(1152)|0;c[t>>2]=V;if((V|0)!=0){S=0;do{c[V+(S<<2)>>2]=c[W+(S<<2)>>2];S=S+1|0}while((S|0)!=288);c[w>>2]=288;c[E>>2]=15;Zc(l)|0}Qd(W)}S=Pd(128)|0;if((S|0)!=0){V=0;do{c[S+(V<<2)>>2]=5;V=V+1|0}while((V|0)!=32);V=Pd(128)|0;c[v>>2]=V;if((V|0)!=0){ma=V+0|0;na=S+0|0;oa=ma+128|0;do{c[ma>>2]=c[na>>2];ma=ma+4|0;na=na+4|0}while((ma|0)<(oa|0));c[x>>2]=32;c[y>>2]=15;Zc(m)|0}Qd(S);Wa=R;Ba=92}else{Wa=R;Ba=92}}else{Wa=R;Ba=92}d:do{if((Ba|0)==92){Ba=0;V=c[l>>2]|0;W=c[w>>2]|0;K=c[m>>2]|0;X=c[x>>2]|0;ia=Wa;ja=H;U=J;va=I;ua=p;e:while(1){eb=U;fb=va;gb=ua;ta=ia;while(1){pa=ta;sa=0;while(1){if(!(pa>>>0>>0)){hb=pa;break e}ib=c[V+(((d[f+((pa>>>3)+2)>>0]|0)>>>(pa&7)&1|sa<<1)<<2)>>2]|0;jb=pa+1|0;if(ib>>>0>>0){break}sa=ib-W|0;if(!(sa>>>0>>0)){hb=jb;break e}else{pa=jb}}if(ib>>>0<256){break}pa=ib+ -257|0;if(!(pa>>>0<29)){Ba=126;break e}if(!(jb>>>0>>0)){Xa=V;Ya=K;Za=eb;_a=fb;$a=gb;ab=jb;bb=ja;cb=51;break d}sa=c[8552+(pa<<2)>>2]|0;Q=c[8792+(pa<<2)>>2]|0;if((ib+ -265|0)>>>0>19){kb=jb;lb=0}else{pa=jb;ra=0;qa=0;while(1){qa=(((d[f+((pa>>>3)+2)>>0]|0)>>>(pa&7)&1)<>>0>>0)){nb=pa;Ba=113;break e}ob=c[K+(((d[f+((pa>>>3)+2)>>0]|0)>>>(pa&7)&1|ra<<1)<<2)>>2]|0;pb=pa+1|0;if(ob>>>0>>0){break}ra=ob-X|0;if(!(ra>>>0>>0)){nb=pb;Ba=113;break e}else{pa=pb}}if(ob>>>0>29){nb=pb;Ba=113;break e}if(!(pb>>>0>>0)){Xa=V;Ya=K;Za=eb;_a=fb;$a=gb;ab=pb;bb=ja;cb=51;break d}pa=c[8672+(ob<<2)>>2]|0;ra=c[8912+(ob<<2)>>2]|0;if(ob>>>0<4){qb=pb;rb=0}else{Q=pb;qa=0;sa=0;while(1){sa=(((d[f+((Q>>>3)+2)>>0]|0)>>>(Q&7)&1)<>>0>ja>>>0){Xa=V;Ya=K;Za=eb;_a=fb;$a=gb;ab=qb;bb=ja;cb=52;break d}tb=mb+ja|0;do{if(!(tb>>>0>>0)){Q=tb<<1;if(!(eb>>>0>>0)){ub=gb;vb=eb;wb=Q;break}qa=tb<<2;xa=Rd(gb,qa)|0;if((xa|0)==0){Xa=V;Ya=K;Za=eb;_a=fb;$a=gb;ab=qb;bb=ja;cb=83;break d}else{ub=xa;vb=qa;wb=Q}}else{ub=gb;vb=eb;wb=fb}}while(0);if((mb|0)==0){eb=vb;fb=wb;gb=ub;ta=qb}else{Ba=124;break}}if((Ba|0)==124){Ba=0;ta=ja-sb|0;a[ub+ja>>0]=a[ub+ta>>0]|0;ra=ja+1|0;if((mb|0)==1){ia=qb;ja=ra;U=vb;va=wb;ua=ub;continue}else{xb=ta;yb=ra;zb=1}while(1){ra=xb+1|0;sa=ra>>>0>>0?ra:ta;ra=zb+1|0;a[ub+yb>>0]=a[ub+sa>>0]|0;if((ra|0)==(mb|0)){ia=qb;ja=tb;U=vb;va=wb;ua=ub;continue e}else{xb=sa;yb=yb+1|0;zb=ra}}}if(!(ja>>>0>>0)){ta=(ja<<1)+2|0;if(eb>>>0>>0){ra=ta<<1;sa=Rd(gb,ra)|0;if((sa|0)==0){Xa=V;Ya=K;Za=eb;_a=fb;$a=gb;ab=jb;bb=ja;cb=83;break d}else{Ab=sa;Bb=ra;Cb=ta}}else{Ab=gb;Bb=eb;Cb=ta}}else{Ab=gb;Bb=eb;Cb=fb}a[Ab+ja>>0]=ib;ia=jb;ja=ja+1|0;U=Bb;va=Cb;ua=Ab}if((Ba|0)==113){Ba=0;if(!((ib|0)==-1)){Xa=V;Ya=K;Za=eb;_a=fb;$a=gb;ab=nb;bb=ja;cb=18;break}Xa=V;Ya=K;Za=eb;_a=fb;$a=gb;ab=nb;bb=ja;cb=nb>>>0>r>>>0?10:11;break}else if((Ba|0)==126){Ba=0;if((ib|0)==256){Xa=V;Ya=K;Za=eb;_a=fb;$a=gb;ab=jb;bb=ja;cb=0;break}else{hb=jb}}Xa=V;Ya=K;Za=eb;_a=fb;$a=gb;ab=hb;bb=ja;cb=hb>>>0>r>>>0?10:11}}while(0);Qd(Xa);Qd(c[s>>2]|0);Qd(c[t>>2]|0);Qd(Ya);Qd(c[u>>2]|0);Qd(c[v>>2]|0);if((cb|0)==0){ca=ab;da=bb;ea=Za;fa=$a;ga=_a}else{L=cb;M=$a;N=_a;break}}else{L=20;M=p;N=I;break}if((O&1<>>0>>0){ea=Rd(fa,da<<1)|0;Ba=(ea|0)==0;L=Ba?83:0;M=Ba?fa:ea;N=Ba?ga:da}else{L=0;M=fa;N=da}}c[b>>2]=M;c[e>>2]=N;Db=L}else{Db=tc[o&0](b,e,f+2|0,q,h)|0}if((Db|0)!=0){n=Db;i=j;return n|0}if((c[h>>2]|0)==0){h=(d[f+(g+ -3)>>0]|0)<<16|(d[f+(g+ -4)>>0]|0)<<24|(d[f+q>>0]|0)<<8|(d[f+(g+ -1)>>0]|0);g=c[e>>2]|0;if((g|0)==0){Eb=1;Fb=0}else{e=c[b>>2]|0;b=g;g=1;f=0;while(1){q=b>>>0>5550?5550:b;Db=b;b=b-q|0;if((q|0)==0){Gb=e;Hb=g;Ib=f}else{o=e;L=q;N=g;M=f;while(1){N=(d[o>>0]|0)+N|0;M=N+M|0;L=L+ -1|0;if((L|0)==0){break}else{o=o+1|0}}Gb=e+(Db>>>0<5550?Db:5550)|0;Hb=N;Ib=M}g=(Hb>>>0)%65521|0;f=(Ib>>>0)%65521|0;if((Db|0)==(q|0)){break}else{e=Gb}}Eb=g;Fb=f<<16}if((Eb|Fb|0)!=(h|0)){n=58;i=j;return n|0}}n=0;i=j;return n|0}function Nc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;f=i;g=b+64|0;h=b+60|0;j=Rd(c[g>>2]|0,(c[h>>2]<<2)+4|0)|0;k=b+68|0;b=Rd(c[k>>2]|0,(c[h>>2]<<2)+4|0)|0;if((j|0)==0|(b|0)==0){Qd(j);Qd(b);l=83;i=f;return l|0}m=c[h>>2]|0;c[h>>2]=m+1;c[g>>2]=j;c[k>>2]=b;b=j+(m<<2)|0;c[b>>2]=0;m=Pd(1)|0;if((m|0)!=0){a[m>>0]=0;c[b>>2]=m}m=(c[g>>2]|0)+((c[h>>2]|0)+ -1<<2)|0;g=fe(d|0)|0;b=Rd(c[m>>2]|0,g+1|0)|0;if(((b|0)!=0?(a[b+g>>0]=0,c[m>>2]=b,(g|0)!=0):0)?(a[b>>0]=a[d>>0]|0,(g|0)!=1):0){b=1;do{a[(c[m>>2]|0)+b>>0]=a[d+b>>0]|0;b=b+1|0}while((b|0)!=(g|0))}g=(c[k>>2]|0)+((c[h>>2]|0)+ -1<<2)|0;c[g>>2]=0;b=Pd(1)|0;if((b|0)!=0){a[b>>0]=0;c[g>>2]=b}b=(c[k>>2]|0)+((c[h>>2]|0)+ -1<<2)|0;h=fe(e|0)|0;k=Rd(c[b>>2]|0,h+1|0)|0;if((k|0)==0){l=0;i=f;return l|0}a[k+h>>0]=0;c[b>>2]=k;if((h|0)==0){l=0;i=f;return l|0}a[k>>0]=a[e>>0]|0;if((h|0)==1){l=0;i=f;return l|0}else{n=1}do{a[(c[b>>2]|0)+n>>0]=a[e+n>>0]|0;n=n+1|0}while((n|0)!=(h|0));l=0;i=f;return l|0}function Oc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;b=i;d=a+20|0;e=c[d>>2]|0;if((e|0)!=0){Qd(e)}c[d>>2]=0;c[a+24>>2]=0;d=a+60|0;e=a+64|0;f=c[e>>2]|0;g=a+68|0;if((c[d>>2]|0)==0){h=f}else{j=f;f=0;while(1){k=j+(f<<2)|0;Qd(c[k>>2]|0);c[k>>2]=0;k=(c[g>>2]|0)+(f<<2)|0;Qd(c[k>>2]|0);c[k>>2]=0;f=f+1|0;k=c[e>>2]|0;if(!(f>>>0<(c[d>>2]|0)>>>0)){h=k;break}else{j=k}}}Qd(h);Qd(c[g>>2]|0);g=a+72|0;h=a+76|0;j=c[h>>2]|0;d=a+80|0;f=a+84|0;e=a+88|0;if((c[g>>2]|0)==0){l=j}else{k=j;j=0;while(1){m=k+(j<<2)|0;Qd(c[m>>2]|0);c[m>>2]=0;m=(c[d>>2]|0)+(j<<2)|0;Qd(c[m>>2]|0);c[m>>2]=0;m=(c[f>>2]|0)+(j<<2)|0;Qd(c[m>>2]|0);c[m>>2]=0;m=(c[e>>2]|0)+(j<<2)|0;Qd(c[m>>2]|0);c[m>>2]=0;j=j+1|0;m=c[h>>2]|0;if(!(j>>>0<(c[g>>2]|0)>>>0)){l=m;break}else{k=m}}}Qd(l);Qd(c[d>>2]|0);Qd(c[f>>2]|0);Qd(c[e>>2]|0);Qd(c[a+136>>2]|0);Qd(c[a+140>>2]|0);Qd(c[a+144>>2]|0);i=b;return}function Pc(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;k=i;l=(f|0)!=0;f=l?4:3;switch(c[h>>2]|0){case 3:{if((e|0)==0){m=0;i=k;return m|0}n=h+4|0;o=h+12|0;p=h+8|0;q=(j|0)==0;j=b;r=0;s=0;while(1){t=c[n>>2]|0;if((t|0)==8){u=r;v=d[g+s>>0]|0}else if((t|0)==0){u=r;v=0}else{w=r;x=t+ -1|0;y=0;while(1){z=w+1|0;A=(((d[g+(w>>>3)>>0]|0)>>>(w&7^7)&1)<>>0>>0)){u=z;v=A;break}else{w=z;y=A}}}if(v>>>0<(c[o>>2]|0)>>>0){y=v<<2;a[j>>0]=a[(c[p>>2]|0)+y>>0]|0;a[j+1>>0]=a[(c[p>>2]|0)+(y|1)>>0]|0;a[j+2>>0]=a[(c[p>>2]|0)+(y|2)>>0]|0;if(l){a[j+3>>0]=a[(c[p>>2]|0)+(y|3)>>0]|0}}else{if(q){break}a[j+2>>0]=0;a[j+1>>0]=0;a[j>>0]=0;if(l){a[j+3>>0]=-1}}s=s+1|0;if(!(s>>>0>>0)){m=0;B=78;break}else{j=j+f|0;r=u}}if((B|0)==78){i=k;return m|0}m=(t|0)==8?46:47;i=k;return m|0};case 0:{t=h+4|0;B=c[t>>2]|0;if((B|0)==16){if((e|0)==0){m=0;i=k;return m|0}u=h+16|0;r=h+20|0;j=b;s=0;while(1){q=s<<1;p=g+q|0;v=a[p>>0]|0;a[j+2>>0]=v;a[j+1>>0]=v;a[j>>0]=v;if(l){if((c[u>>2]|0)==0){C=-1}else{C=(((d[p>>0]|0)<<8|(d[g+(q|1)>>0]|0)|0)!=(c[r>>2]|0))<<31>>31}a[j+3>>0]=C}s=s+1|0;if((s|0)==(e|0)){m=0;break}else{j=j+f|0}}i=k;return m|0}else if((B|0)==8){if((e|0)==0){m=0;i=k;return m|0}j=h+16|0;s=h+20|0;if(l){D=b;E=0}else{C=b;r=0;while(1){u=a[g+r>>0]|0;a[C+2>>0]=u;a[C+1>>0]=u;a[C>>0]=u;r=r+1|0;if((r|0)==(e|0)){m=0;break}else{C=C+f|0}}i=k;return m|0}while(1){C=g+E|0;r=a[C>>0]|0;a[D+2>>0]=r;a[D+1>>0]=r;a[D>>0]=r;if((c[j>>2]|0)==0){F=-1}else{F=((d[C>>0]|0|0)!=(c[s>>2]|0))<<31>>31}a[D+3>>0]=F;E=E+1|0;if((E|0)==(e|0)){m=0;break}else{D=D+f|0}}i=k;return m|0}else{D=(1<>>3)>>0]|0)>>>(r&7^7)&1)<>>0>>0)){G=p;H=v;break}else{r=p;q=v}}}q=(((H*255|0)>>>0)/(D>>>0)|0)&255;a[s+2>>0]=q;a[s+1>>0]=q;a[s>>0]=q;if(l){if((c[E>>2]|0)==0){I=-1}else{I=((H|0)!=(c[F>>2]|0))<<31>>31}a[s+3>>0]=I}if((B|0)==(e|0)){m=0;break}s=s+f|0;j=G;C=c[t>>2]|0;B=B+1|0}i=k;return m|0}break};case 4:{B=(e|0)==0;if((c[h+4>>2]|0)!=8){if(B){m=0;i=k;return m|0}else{J=b;K=0}while(1){t=K<<2;C=a[g+t>>0]|0;a[J+2>>0]=C;a[J+1>>0]=C;a[J>>0]=C;if(l){a[J+3>>0]=a[g+(t|2)>>0]|0}K=K+1|0;if((K|0)==(e|0)){m=0;break}else{J=J+f|0}}i=k;return m|0}if(B){m=0;i=k;return m|0}if(l){B=b;J=0;while(1){K=J<<1;t=a[g+K>>0]|0;a[B+2>>0]=t;a[B+1>>0]=t;a[B>>0]=t;a[B+3>>0]=a[g+(K|1)>>0]|0;J=J+1|0;if((J|0)==(e|0)){m=0;break}else{B=B+f|0}}i=k;return m|0}else{B=b;J=0;while(1){K=a[g+(J<<1)>>0]|0;a[B+2>>0]=K;a[B+1>>0]=K;a[B>>0]=K;J=J+1|0;if((J|0)==(e|0)){m=0;break}else{B=B+f|0}}i=k;return m|0}break};case 2:{B=(e|0)==0;if((c[h+4>>2]|0)==8){if(B){m=0;i=k;return m|0}J=h+16|0;K=h+20|0;t=h+24|0;C=h+28|0;G=b;j=0;while(1){s=j*3|0;I=a[g+s>>0]|0;a[G>>0]=I;F=a[g+(s+1)>>0]|0;a[G+1>>0]=F;H=a[g+(s+2)>>0]|0;a[G+2>>0]=H;if(l){if(((c[J>>2]|0)!=0?(I&255|0)==(c[K>>2]|0):0)?(F&255|0)==(c[t>>2]|0):0){L=((H&255|0)!=(c[C>>2]|0))<<31>>31}else{L=-1}a[G+3>>0]=L}j=j+1|0;if((j|0)==(e|0)){m=0;break}else{G=G+f|0}}i=k;return m|0}else{if(B){m=0;i=k;return m|0}B=h+16|0;G=h+20|0;j=h+24|0;L=h+28|0;C=b;t=0;while(1){K=t*6|0;J=g+K|0;a[C>>0]=a[J>>0]|0;H=g+(K+2)|0;a[C+1>>0]=a[H>>0]|0;F=g+(K+4)|0;a[C+2>>0]=a[F>>0]|0;if(l){if(((c[B>>2]|0)!=0?((d[J>>0]|0)<<8|(d[g+(K|1)>>0]|0)|0)==(c[G>>2]|0):0)?((d[H>>0]|0)<<8|(d[g+(K+3)>>0]|0)|0)==(c[j>>2]|0):0){M=(((d[F>>0]|0)<<8|(d[g+(K+5)>>0]|0)|0)!=(c[L>>2]|0))<<31>>31}else{M=-1}a[C+3>>0]=M}t=t+1|0;if((t|0)==(e|0)){m=0;break}else{C=C+f|0}}i=k;return m|0}break};case 6:{C=(e|0)==0;if((c[h+4>>2]|0)==8){if(C){m=0;i=k;return m|0}else{N=b;O=0}while(1){h=O<<2;a[N>>0]=a[g+h>>0]|0;a[N+1>>0]=a[g+(h|1)>>0]|0;a[N+2>>0]=a[g+(h|2)>>0]|0;if(l){a[N+3>>0]=a[g+(h|3)>>0]|0}O=O+1|0;if((O|0)==(e|0)){m=0;break}else{N=N+f|0}}i=k;return m|0}else{if(C){m=0;i=k;return m|0}else{P=b;Q=0}while(1){b=Q<<3;a[P>>0]=a[g+b>>0]|0;a[P+1>>0]=a[g+(b|2)>>0]|0;a[P+2>>0]=a[g+(b|4)>>0]|0;if(l){a[P+3>>0]=a[g+(b|6)>>0]|0}Q=Q+1|0;if((Q|0)==(e|0)){m=0;break}else{P=P+f|0}}i=k;return m|0}break};default:{m=0;i=k;return m|0}}return 0}function Qc(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;d=0;do{e=a+(d<<2)|0;f=c[e>>2]|0;if((f|0)!=0){Qc(f);Qd(c[e>>2]|0)}d=d+1|0}while((d|0)!=16);i=b;return}function Rc(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0;k=i;i=i+368|0;l=k+288|0;m=k+260|0;n=k+232|0;o=k+200|0;p=k+168|0;q=k+136|0;r=k+96|0;s=k+64|0;t=k+32|0;u=k;v=k+124|0;c[b>>2]=0;w=g+132|0;do{if((j|0)==0|(h|0)==0){c[g+292>>2]=48;x=48}else{if(j>>>0<29){c[g+292>>2]=27;x=27;break}Oc(w);y=g+160|0;z=g+144|0;c[y+0>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[y+12>>2]=0;c[z>>2]=6;A=g+148|0;c[A>>2]=8;B=g+152|0;c[B>>2]=0;C=g+156|0;c[C>>2]=0;D=g+140|0;c[D>>2]=0;c[w>>2]=0;E=g+136|0;c[E>>2]=0;F=g+176|0;G=g+252|0;c[G>>2]=0;H=g+268|0;c[H+0>>2]=0;c[H+4>>2]=0;c[H+8>>2]=0;c[H+12>>2]=0;c[H+16>>2]=0;c[H+20>>2]=0;H=F+0|0;I=H+52|0;do{c[H>>2]=0;H=H+4|0}while((H|0)<(I|0));if((((((((a[h>>0]|0)==-119?(a[h+1>>0]|0)==80:0)?(a[h+2>>0]|0)==78:0)?(a[h+3>>0]|0)==71:0)?(a[h+4>>0]|0)==13:0)?(a[h+5>>0]|0)==10:0)?(a[h+6>>0]|0)==26:0)?(a[h+7>>0]|0)==10:0){if((((a[h+12>>0]|0)==73?(a[h+13>>0]|0)==72:0)?(a[h+14>>0]|0)==68:0)?(a[h+15>>0]|0)==82:0){c[e>>2]=d[h+17>>0]<<16|d[h+16>>0]<<24|d[h+18>>0]<<8|d[h+19>>0];c[f>>2]=d[h+21>>0]<<16|d[h+20>>0]<<24|d[h+22>>0]<<8|d[h+23>>0];J=a[h+24>>0]|0;K=J&255;c[A>>2]=K;L=d[h+25>>0]|0;c[z>>2]=L;M=a[h+26>>0]|0;c[w>>2]=M&255;N=a[h+27>>0]|0;c[E>>2]=N&255;O=a[h+28>>0]|0;c[D>>2]=O&255;P=g+16|0;if((c[P>>2]|0)==0){Q=d[h+29>>0]|0;R=d[h+30>>0]<<16;S=d[h+31>>0]<<8;T=d[h+32>>0]|0;U=-1;V=0;do{U=c[8+((d[h+(V+12)>>0]^U&255)<<2)>>2]^U>>>8;V=V+1|0}while((V|0)!=17);if((R|Q<<24|S|T|0)!=(~U|0)){c[g+292>>2]=57;x=57;break}}if(!(M<<24>>24==0)){c[g+292>>2]=32;x=32;break}if(!(N<<24>>24==0)){c[g+292>>2]=33;x=33;break}if((O&255)>1){c[g+292>>2]=34;x=34;break}switch(L|0){case 4:{if(!((K|0)==8|(K|0)==16)){W=37;X=37}break};case 2:{if(!((K|0)==8|(K|0)==16)){W=37;X=37}break};case 0:{if(!((K+ -1|0)>>>0<2|J<<24>>24==4|J<<24>>24==8|J<<24>>24==16)){W=37;X=37}break};case 3:{if(!((K+ -1|0)>>>0<2|J<<24>>24==4|J<<24>>24==8)){W=37;X=37}break};case 6:{if(!((K|0)==8|(K|0)==16)){W=37;X=37}break};default:{W=31;X=37}}if((X|0)==37){c[g+292>>2]=W;Y=W;i=k;return Y|0}V=g+292|0;c[V>>2]=0;E=h;Z=g+172|0;_=g+168|0;$=g+164|0;ba=g+188|0;ca=g+184|0;da=g+180|0;ea=g+28|0;fa=l+8|0;ga=l+4|0;ha=g+4|0;ia=l+8|0;ja=l+4|0;ka=g+224|0;la=g+228|0;ma=g+232|0;na=g+236|0;oa=g+240|0;pa=g+244|0;qa=g+248|0;ra=g+256|0;sa=g+260|0;ta=g+264|0;ua=g+32|0;va=g+208|0;wa=g+204|0;xa=g+212|0;ya=g+216|0;za=g+220|0;Aa=0;Ba=0;Ca=0;Da=h+33|0;Ea=1;Fa=0;a:while(1){Ga=Da-E+12|0;Ha=Ga>>>0>j>>>0|Da>>>0>>0;Ia=Da+1|0;Ja=Da+2|0;Ka=Da+3|0;La=Da+8|0;Ma=Da+4|0;Na=Da+5|0;Oa=Da+6|0;Pa=Da+7|0;Qa=Da+9|0;Ra=Da+10|0;Sa=Da+11|0;Ta=Da+12|0;Ua=Da+13|0;Va=Da+14|0;Wa=Da+15|0;Xa=Da+16|0;Ya=Ba;Za=Aa;_a=Ca;$a=0;ab=Ea;while(1){bb=c[V>>2]|0;if(!($a<<24>>24==0&(bb|0)==0)){cb=bb;db=_a;eb=Ya;break a}if(Ha){X=42;break a}bb=d[Ia>>0]<<16|d[Da>>0]<<24|d[Ja>>0]<<8|d[Ka>>0];if((bb|0)<0){X=44;break a}if((bb+Ga|0)>>>0>j>>>0){X=47;break a}fb=bb+12|0;if((Da+fb|0)>>>0>>0){X=47;break a}gb=a[Ma>>0]|0;b:do{if(gb<<24>>24==116){hb=a[Na>>0]|0;if(!(hb<<24>>24==82)){ib=hb;X=102;break}if((a[Oa>>0]|0)!=78){jb=1;X=87;break}if((a[Pa>>0]|0)!=83){jb=1;X=87;break}hb=c[z>>2]|0;do{if((hb|0)==2){if((bb|0)!=6){kb=41;X=86;break a}c[y>>2]=1;c[$>>2]=d[La>>0]<<8|d[Qa>>0];c[_>>2]=d[Ra>>0]<<8|d[Sa>>0];c[Z>>2]=d[Ta>>0]<<8|d[Ua>>0]}else if((hb|0)==0){if((bb|0)!=2){kb=30;X=86;break a}c[y>>2]=1;lb=d[La>>0]<<8|d[Qa>>0];c[Z>>2]=lb;c[_>>2]=lb;c[$>>2]=lb}else if((hb|0)==3){if((c[C>>2]|0)>>>0>>0){kb=38;X=86;break a}if((bb|0)==0){break}else{mb=0}do{a[(c[B>>2]|0)+(mb<<2|3)>>0]=a[Da+(mb+8)>>0]|0;mb=mb+1|0}while((mb|0)!=(bb|0))}else{kb=42;X=86;break a}}while(0);c[V>>2]=0;nb=Za;ob=Ya;pb=_a;qb=0;rb=ab}else if(gb<<24>>24==73){hb=a[Na>>0]|0;if(hb<<24>>24==69){if((a[Oa>>0]|0)!=78){jb=0;X=87;break}if((a[Pa>>0]|0)==68){nb=Za;ob=Ya;pb=_a;qb=1;rb=ab;break}else{jb=0;X=87;break}}else if(!(hb<<24>>24==68)){X=226;break a}if((a[Oa>>0]|0)!=65){X=226;break a}if((a[Pa>>0]|0)!=84){jb=0;X=87;break}hb=bb+Ya|0;if(Za>>>0>>0){lb=hb<<1;sb=Rd(_a,lb)|0;if((sb|0)==0){X=55;break a}else{tb=lb;ub=sb}}else{tb=Za;ub=_a}if((bb|0)==0){nb=tb;ob=hb;pb=ub;qb=0;rb=3;break}else{vb=0}do{a[ub+(vb+Ya)>>0]=a[Da+(vb+8)>>0]|0;vb=vb+1|0}while((vb|0)!=(bb|0));nb=tb;ob=hb;pb=ub;qb=0;rb=3}else if(gb<<24>>24==80){if((a[Na>>0]|0)!=76){X=226;break a}do{if((a[Oa>>0]|0)==84){if((a[Pa>>0]|0)!=69){break}hb=c[B>>2]|0;if((hb|0)!=0){Qd(hb)}hb=(bb>>>0)/3|0;c[C>>2]=hb;sb=Pd(hb<<2)|0;c[B>>2]=sb;c:do{if((sb|0)==0){if(!(bb>>>0<3)){X=66;break a}}else{if(bb>>>0>770){wb=38;X=72;break a}if(bb>>>0<3){break}else{xb=sb;yb=0;zb=0}while(1){hb=yb<<2;a[xb+hb>>0]=a[Da+(zb+8)>>0]|0;a[(c[B>>2]|0)+(hb|1)>>0]=a[Da+(zb+9)>>0]|0;a[(c[B>>2]|0)+(hb|2)>>0]=a[Da+(zb+10)>>0]|0;a[(c[B>>2]|0)+(hb|3)>>0]=-1;hb=yb+1|0;if(!(hb>>>0<(c[C>>2]|0)>>>0)){break c}xb=c[B>>2]|0;yb=hb;zb=zb+3|0}}}while(0);c[V>>2]=0;nb=Za;ob=Ya;pb=_a;qb=0;rb=2;break b}}while(0);if(gb<<24>>24==116){X=212}else{jb=0;X=87}}else{jb=0;X=87}}while(0);d:do{if((X|0)==87){X=0;do{if(gb<<24>>24==98){if((a[Na>>0]|0)!=75){break}if((a[Oa>>0]|0)!=71){break}if((a[Pa>>0]|0)!=68){break}switch(c[z>>2]|0){case 6:case 2:{if((bb|0)!=6){Ab=45;X=99;break a}c[F>>2]=1;c[da>>2]=d[La>>0]<<8|d[Qa>>0];c[ca>>2]=d[Ra>>0]<<8|d[Sa>>0];c[ba>>2]=d[Ta>>0]<<8|d[Ua>>0];break};case 4:case 0:{if((bb|0)!=2){Ab=44;X=99;break a}c[F>>2]=1;sb=d[La>>0]<<8|d[Qa>>0];c[ba>>2]=sb;c[ca>>2]=sb;c[da>>2]=sb;break};case 3:{if((bb|0)!=1){Ab=43;X=99;break a}c[F>>2]=1;sb=d[La>>0]|0;c[ba>>2]=sb;c[ca>>2]=sb;c[da>>2]=sb;break};default:{}}c[V>>2]=0;nb=Za;ob=Ya;pb=_a;qb=0;rb=ab;break d}}while(0);if(!jb){Bb=0;X=116;break}ib=a[Na>>0]|0;X=102}}while(0);do{if((X|0)==102){X=0;if(!(ib<<24>>24==69)){Bb=1;X=116;break}if((a[Oa>>0]|0)!=88){Bb=1;X=116;break}if((a[Pa>>0]|0)!=116){Bb=1;X=116;break}if((c[ea>>2]|0)==0){nb=Za;ob=Ya;pb=_a;qb=0;rb=ab;break}do{if((bb|0)==0){Cb=89;Db=0;Eb=0}else{sb=0;while(1){hb=sb+1|0;if((a[Da+(sb+8)>>0]|0)==0){Fb=sb;break}if(hb>>>0>>0){sb=hb}else{Fb=hb;break}}if((Fb|0)==0|Fb>>>0>79){Cb=89;Db=0;Eb=0;break}sb=Fb+1|0;hb=Pd(sb)|0;if((hb|0)==0){Cb=83;Db=0;Eb=0;break}a[hb+Fb>>0]=0;ie(hb|0,La|0,Fb|0)|0;lb=sb>>>0>bb>>>0?0:bb-sb|0;Gb=Pd(lb+1|0)|0;if((Gb|0)==0){Cb=83;Db=hb;Eb=0;break}a[Gb+lb>>0]=0;if((lb|0)!=0){ie(Gb|0,Da+(Fb+9)|0,(sb>>>0>>0?bb:sb)+~Fb|0)|0}Cb=Nc(w,hb,Gb)|0;Db=hb;Eb=Gb}}while(0);Qd(Db);Qd(Eb);c[V>>2]=Cb;if((Cb|0)==0){nb=Za;ob=Ya;pb=_a;qb=0;rb=ab}else{cb=Cb;db=_a;eb=Ya;break a}}}while(0);e:do{if((X|0)==116){X=0;do{if(gb<<24>>24==122){if((a[Na>>0]|0)!=84){Hb=Bb;break}if((a[Oa>>0]|0)!=88){Hb=Bb;break}if((a[Pa>>0]|0)!=116){Hb=Bb;break}if((c[ea>>2]|0)==0){nb=Za;ob=Ya;pb=_a;qb=0;rb=ab;break e}c[l>>2]=0;c[fa>>2]=0;c[ga>>2]=0;f:do{if((bb|0)==0){Ib=0}else{Gb=0;while(1){hb=Gb+1|0;if((a[Da+(Gb+8)>>0]|0)==0){Ib=Gb;break f}if(hb>>>0>>0){Gb=hb}else{Ib=hb;break}}}}while(0);Gb=Ib+2|0;do{if(Gb>>>0>>0){if((Ib|0)==0|Ib>>>0>79){Jb=89;Kb=0;break}hb=Pd(Ib+1|0)|0;if((hb|0)==0){Jb=83;Kb=0;break}a[hb+Ib>>0]=0;ie(hb|0,La|0,Ib|0)|0;if((a[Da+(Ib+9)>>0]|0)!=0){Jb=72;Kb=hb;break}if(Gb>>>0>bb>>>0){Jb=75;Kb=hb;break}sb=bb-Gb|0;lb=Da+(Ib+10)|0;Lb=c[ha>>2]|0;if((Lb|0)==0){Mb=Mc(l,ga,lb,sb,g)|0}else{Mb=tc[Lb&0](l,ga,lb,sb,g)|0}if((Mb|0)!=0){Jb=Mb;Kb=hb;break}sb=c[ga>>2]|0;lb=sb+1|0;do{if((c[fa>>2]|0)>>>0>>0){Lb=lb<<1;Nb=Rd(c[l>>2]|0,Lb)|0;if((Nb|0)==0){break}c[fa>>2]=Lb;c[l>>2]=Nb;Ob=Nb;X=137}else{Ob=c[l>>2]|0;X=137}}while(0);if((X|0)==137){X=0;c[ga>>2]=lb;a[Ob+sb>>0]=0}Jb=Nc(w,hb,c[l>>2]|0)|0;Kb=hb}else{Jb=75;Kb=0}}while(0);Qd(Kb);c[fa>>2]=0;c[ga>>2]=0;Qd(c[l>>2]|0);c[V>>2]=Jb;if((Jb|0)==0){nb=Za;ob=Ya;pb=_a;qb=0;rb=ab;break e}else{cb=Jb;db=_a;eb=Ya;break a}}else if(gb<<24>>24==105){if((a[Na>>0]|0)!=84){Hb=Bb;break}if((a[Oa>>0]|0)!=88){Hb=Bb;break}if((a[Pa>>0]|0)!=116){Hb=Bb;break}if((c[ea>>2]|0)==0){nb=Za;ob=Ya;pb=_a;qb=0;rb=ab;break e}c[l>>2]=0;c[ia>>2]=0;c[ja>>2]=0;g:do{if(bb>>>0<5){Pb=30;Qb=0;Rb=0;Sb=0}else{Gb=0;while(1){Nb=Gb+1|0;if((a[Da+(Gb+8)>>0]|0)==0){Tb=Gb;break}if(Nb>>>0>>0){Gb=Nb}else{Tb=Nb;break}}Gb=Tb+3|0;if(!(Gb>>>0>>0)){Pb=75;Qb=0;Rb=0;Sb=0;break}if((Tb|0)==0|Tb>>>0>79){Pb=89;Qb=0;Rb=0;Sb=0;break}hb=Pd(Tb+1|0)|0;if((hb|0)==0){Pb=83;Qb=0;Rb=0;Sb=0;break}a[hb+Tb>>0]=0;ie(hb|0,La|0,Tb|0)|0;sb=a[Da+(Tb+9)>>0]|0;if((a[Da+(Tb+10)>>0]|0)==0){Ub=Gb;Vb=0}else{Pb=72;Qb=hb;Rb=0;Sb=0;break}while(1){Wb=Vb+1|0;if((a[Da+(Ub+8)>>0]|0)==0){Xb=Wb;Yb=Vb;break}Ub=Ub+1|0;if(!(Ub>>>0>>0)){X=152;break}else{Vb=Wb}}if((X|0)==152){X=0;Xb=Vb+2|0;Yb=Wb}lb=Pd(Xb)|0;if((lb|0)==0){Pb=83;Qb=hb;Rb=0;Sb=0;break}a[lb+Yb>>0]=0;if((Yb|0)!=0){ie(lb|0,Da+(Tb+11)|0,Yb|0)|0}Nb=Xb+Gb|0;h:do{if(Nb>>>0>>0){Lb=Nb;Zb=0;while(1){_b=Zb+1|0;if((a[Da+(Lb+8)>>0]|0)==0){$b=_b;ac=Zb;break h}Lb=Lb+1|0;if(!(Lb>>>0>>0)){bc=_b;X=159;break}else{Zb=_b}}}else{bc=0;X=159}}while(0);if((X|0)==159){X=0;$b=bc+1|0;ac=bc}Gb=Pd($b)|0;if((Gb|0)==0){Pb=83;Qb=hb;Rb=lb;Sb=0;break}a[Gb+ac>>0]=0;if((ac|0)!=0){ie(Gb|0,Da+(Tb+11+Xb)|0,ac|0)|0}Zb=$b+Nb|0;Lb=Zb>>>0>bb>>>0?0:bb-Zb|0;i:do{if(sb<<24>>24==0){_b=Lb+1|0;if((_b|0)==0){cc=0}else{dc=_b<<1;ec=Pd(dc)|0;if((ec|0)==0){Pb=83;Qb=hb;Rb=lb;Sb=Gb;break g}c[ia>>2]=dc;c[l>>2]=ec;cc=ec}c[ja>>2]=_b;a[cc+Lb>>0]=0;if((Lb|0)==0){break}_b=Zb+8|0;a[cc>>0]=a[Da+_b>>0]|0;if((Lb|0)==1){break}a[cc+1>>0]=a[Da+(Zb+9)>>0]|0;if((Lb|0)==2){break}else{fc=cc;gc=2}while(1){a[fc+gc>>0]=a[Da+(gc+_b)>>0]|0;ec=gc+1|0;if((ec|0)==(Lb|0)){break i}fc=c[l>>2]|0;gc=ec}}else{_b=Da+(Zb+8)|0;ec=c[ha>>2]|0;if((ec|0)==0){hc=Mc(l,ja,_b,Lb,g)|0}else{hc=tc[ec&0](l,ja,_b,Lb,g)|0}if((hc|0)!=0){Pb=hc;Qb=hb;Rb=lb;Sb=Gb;break g}_b=c[ia>>2]|0;ec=c[ja>>2]|0;if(_b>>>0>>0){c[ia>>2]=ec;ic=ec}else{ic=_b}_b=ec+1|0;if(ic>>>0<_b>>>0){dc=_b<<1;jc=Rd(c[l>>2]|0,dc)|0;if((jc|0)==0){break}c[ia>>2]=dc;c[l>>2]=jc;kc=jc}else{kc=c[l>>2]|0}c[ja>>2]=_b;a[kc+ec>>0]=0}}while(0);Lb=c[l>>2]|0;Zb=Rd(c[va>>2]|0,(c[wa>>2]<<2)+4|0)|0;sb=Rd(c[xa>>2]|0,(c[wa>>2]<<2)+4|0)|0;Nb=Rd(c[ya>>2]|0,(c[wa>>2]<<2)+4|0)|0;ec=Rd(c[za>>2]|0,(c[wa>>2]<<2)+4|0)|0;if((Zb|0)==0|(sb|0)==0|(Nb|0)==0|(ec|0)==0){Qd(Zb);Qd(sb);Qd(Nb);Qd(ec);Pb=83;Qb=hb;Rb=lb;Sb=Gb;break}_b=c[wa>>2]|0;c[wa>>2]=_b+1;c[va>>2]=Zb;c[xa>>2]=sb;c[ya>>2]=Nb;c[za>>2]=ec;ec=Zb+(_b<<2)|0;c[ec>>2]=0;_b=Pd(1)|0;if((_b|0)!=0){a[_b>>0]=0;c[ec>>2]=_b}_b=(c[va>>2]|0)+((c[wa>>2]|0)+ -1<<2)|0;ec=fe(hb|0)|0;Zb=Rd(c[_b>>2]|0,ec+1|0)|0;do{if((Zb|0)!=0){a[Zb+ec>>0]=0;c[_b>>2]=Zb;if((ec|0)==0){break}a[Zb>>0]=a[hb>>0]|0;if((ec|0)==1){break}else{lc=1}do{a[(c[_b>>2]|0)+lc>>0]=a[hb+lc>>0]|0;lc=lc+1|0}while((lc|0)!=(ec|0))}}while(0);ec=(c[xa>>2]|0)+((c[wa>>2]|0)+ -1<<2)|0;c[ec>>2]=0;_b=Pd(1)|0;if((_b|0)!=0){a[_b>>0]=0;c[ec>>2]=_b}_b=(c[xa>>2]|0)+((c[wa>>2]|0)+ -1<<2)|0;ec=fe(lb|0)|0;Zb=Rd(c[_b>>2]|0,ec+1|0)|0;do{if((Zb|0)!=0){a[Zb+ec>>0]=0;c[_b>>2]=Zb;if((ec|0)==0){break}a[Zb>>0]=a[lb>>0]|0;if((ec|0)==1){break}else{mc=1}do{a[(c[_b>>2]|0)+mc>>0]=a[lb+mc>>0]|0;mc=mc+1|0}while((mc|0)!=(ec|0))}}while(0);ec=(c[ya>>2]|0)+((c[wa>>2]|0)+ -1<<2)|0;c[ec>>2]=0;_b=Pd(1)|0;if((_b|0)!=0){a[_b>>0]=0;c[ec>>2]=_b}_b=(c[ya>>2]|0)+((c[wa>>2]|0)+ -1<<2)|0;ec=fe(Gb|0)|0;Zb=Rd(c[_b>>2]|0,ec+1|0)|0;do{if((Zb|0)!=0){a[Zb+ec>>0]=0;c[_b>>2]=Zb;if((ec|0)==0){break}a[Zb>>0]=a[Gb>>0]|0;if((ec|0)==1){break}else{nc=1}do{a[(c[_b>>2]|0)+nc>>0]=a[Gb+nc>>0]|0;nc=nc+1|0}while((nc|0)!=(ec|0))}}while(0);ec=(c[za>>2]|0)+((c[wa>>2]|0)+ -1<<2)|0;c[ec>>2]=0;_b=Pd(1)|0;if((_b|0)!=0){a[_b>>0]=0;c[ec>>2]=_b}_b=(c[za>>2]|0)+((c[wa>>2]|0)+ -1<<2)|0;ec=fe(Lb|0)|0;Zb=Rd(c[_b>>2]|0,ec+1|0)|0;if((Zb|0)==0){Pb=0;Qb=hb;Rb=lb;Sb=Gb;break}a[Zb+ec>>0]=0;c[_b>>2]=Zb;if((ec|0)==0){Pb=0;Qb=hb;Rb=lb;Sb=Gb;break}a[Zb>>0]=a[Lb>>0]|0;if((ec|0)==1){Pb=0;Qb=hb;Rb=lb;Sb=Gb;break}else{oc=1}do{a[(c[_b>>2]|0)+oc>>0]=a[Lb+oc>>0]|0;oc=oc+1|0}while((oc|0)!=(ec|0));Pb=0;Qb=hb;Rb=lb;Sb=Gb}}while(0);Qd(Qb);Qd(Rb);Qd(Sb);c[ia>>2]=0;c[ja>>2]=0;Qd(c[l>>2]|0);c[V>>2]=Pb;if((Pb|0)==0){nb=Za;ob=Ya;pb=_a;qb=0;rb=ab;break e}else{cb=Pb;db=_a;eb=Ya;break a}}else{Hb=Bb}}while(0);if(Hb){X=212}else{X=218}}}while(0);do{if((X|0)==212){X=0;if((a[Na>>0]|0)!=73){X=218;break}if((a[Oa>>0]|0)!=77){X=218;break}if((a[Pa>>0]|0)!=69){X=218;break}if((bb|0)!=7){X=216;break a}c[ka>>2]=1;c[la>>2]=d[La>>0]<<8|d[Qa>>0];c[ma>>2]=d[Ra>>0]|0;c[na>>2]=d[Sa>>0]|0;c[oa>>2]=d[Ta>>0]|0;c[pa>>2]=d[Ua>>0]|0;c[qa>>2]=d[Va>>0]|0;c[V>>2]=0;nb=Za;ob=Ya;pb=_a;qb=0;rb=ab}}while(0);if((X|0)==218){X=0;if(!(gb<<24>>24==112)){X=225;break}if((a[Na>>0]|0)!=72){X=227;break}if((a[Oa>>0]|0)!=89){X=227;break}if((a[Pa>>0]|0)!=115){X=227;break}if((bb|0)!=9){X=223;break a}c[G>>2]=1;c[ra>>2]=d[Qa>>0]<<16|d[La>>0]<<24|d[Ra>>0]<<8|d[Sa>>0];c[sa>>2]=d[Ua>>0]<<16|d[Ta>>0]<<24|d[Va>>0]<<8|d[Wa>>0];c[ta>>2]=d[Xa>>0]|0;c[V>>2]=0;nb=Za;ob=Ya;pb=_a;qb=0;rb=ab}if((c[P>>2]|Fa|0)==0){Gb=d[Ia>>0]<<16|d[Da>>0]<<24|d[Ja>>0]<<8|d[Ka>>0];lb=d[Da+(Gb+9)>>0]<<16|d[Da+(Gb+8)>>0]<<24|d[Da+(Gb+10)>>0]<<8|d[Da+(Gb+11)>>0];hb=Gb+4|0;if((hb|0)==0){pc=0}else{Gb=-1;ec=0;do{Gb=c[8+((d[Da+(ec+4)>>0]^Gb&255)<<2)>>2]^Gb>>>8;ec=ec+1|0}while((ec|0)!=(hb|0));pc=~Gb}if((lb|0)!=(pc|0)){X=239;break a}}if(qb<<24>>24==0){qc=nb;rc=ob;sc=pb;uc=rb;vc=Fa;break}else{Ya=ob;Za=nb;_a=pb;$a=qb;ab=rb}}if((X|0)==225){X=0;if((gb&32)==0){X=226;break}else{X=227}}do{if((X|0)==227){X=0;if((c[ua>>2]|0)==0){qc=Za;rc=Ya;sc=_a;uc=ab;vc=1;break}$a=ab+ -1|0;Xa=g+($a<<2)+268|0;Wa=g+($a<<2)+280|0;$a=c[Wa>>2]|0;Va=$a+fb|0;if(Va>>>0>>0|Va>>>0<$a>>>0){wc=77;X=233;break a}Ta=Rd(c[Xa>>2]|0,Va)|0;if((Ta|0)==0){wc=83;X=233;break a}c[Xa>>2]=Ta;c[Wa>>2]=Va;if((fb|0)!=0){Va=0;do{a[Ta+(Va+$a)>>0]=a[Da+Va>>0]|0;Va=Va+1|0}while((Va|0)!=(fb|0))}c[V>>2]=0;qc=Za;rc=Ya;sc=_a;uc=ab;vc=1}}while(0);Aa=qc;Ba=rc;Ca=sc;Da=Da+((d[Ia>>0]<<16|d[Da>>0]<<24|d[Ja>>0]<<8|d[Ka>>0])+12)|0;Ea=uc;Fa=vc}switch(X|0){case 42:{c[V>>2]=30;cb=30;db=_a;eb=Ya;break};case 44:{c[V>>2]=63;cb=63;db=_a;eb=Ya;break};case 47:{c[V>>2]=64;cb=64;db=_a;eb=Ya;break};case 55:{c[V>>2]=83;cb=83;db=_a;eb=Ya;break};case 66:{c[C>>2]=0;wb=83;X=72;break};case 86:{c[V>>2]=kb;cb=kb;db=_a;eb=Ya;break};case 99:{c[V>>2]=Ab;cb=Ab;db=_a;eb=Ya;break};case 216:{c[V>>2]=73;cb=73;db=_a;eb=Ya;break};case 223:{c[V>>2]=74;cb=74;db=_a;eb=Ya;break};case 226:{c[V>>2]=69;cb=69;db=_a;eb=Ya;break};case 233:{c[V>>2]=wc;cb=wc;db=_a;eb=Ya;break};case 239:{c[V>>2]=57;cb=57;db=pb;eb=ob;break}}if((X|0)==72){c[V>>2]=wb;cb=wb;db=_a;eb=Ya}c[v>>2]=0;Fa=v+8|0;c[Fa>>2]=0;Ea=v+4|0;c[Ea>>2]=0;j:do{if((cb|0)==0){Da=c[f>>2]|0;switch(c[z>>2]|0){case 2:{xc=3;break};case 3:case 0:{xc=1;break};case 4:{xc=2;break};case 6:{xc=4;break};default:{xc=0}}Ca=(((aa(aa(aa(Da,c[e>>2]|0)|0,c[A>>2]|0)|0,xc)|0)+7|0)>>>3)+Da|0;do{if((Ca|0)!=0){Da=Ca<<1;Ba=Pd(Da)|0;if((Ba|0)!=0){c[Fa>>2]=Da;c[v>>2]=Ba;Ba=(c[V>>2]|0)==0;c[Ea>>2]=Ca;if(Ba){break}else{break j}}else{c[V>>2]=83;break j}}else{c[Ea>>2]=0}}while(0);Ca=c[ha>>2]|0;if((Ca|0)==0){yc=Mc(v,Ea,db,eb,g)|0}else{yc=tc[Ca&0](v,Ea,db,eb,g)|0}c[V>>2]=yc}}while(0);Qd(db);if((c[V>>2]|0)==0){ha=c[e>>2]|0;Ca=c[f>>2]|0;Ka=c[z>>2]|0;Ja=c[A>>2]|0;switch(Ka|0){case 4:{zc=2;break};case 3:case 0:{zc=1;break};case 6:{zc=4;break};case 2:{zc=3;break};default:{zc=0}}Ia=((aa(aa(aa(Ca,ha)|0,Ja)|0,zc)|0)+7|0)>>>3;do{if((Ia|0)==0){Ac=0;Bc=Ka;Cc=Ja;Dc=ha;Ec=Ca;X=268}else{Ba=Pd(Ia<<1)|0;if((Ba|0)==0){c[V>>2]=83;Fc=0;break}he(Ba|0,0,Ia|0)|0;if((c[V>>2]|0)!=0){Fc=Ba;break}Ac=Ba;Bc=c[z>>2]|0;Cc=c[A>>2]|0;Dc=c[e>>2]|0;Ec=c[f>>2]|0;X=268}}while(0);if((X|0)==268){z=c[v>>2]|0;switch(Bc|0){case 2:{Gc=3;break};case 4:{Gc=2;break};case 6:{Gc=4;break};case 3:case 0:{Gc=1;break};default:{Gc=0}}Ia=aa(Gc,Cc)|0;k:do{if((Ia|0)==0){Hc=31}else{l:do{if((c[D>>2]|0)==0){do{if(Ia>>>0<8){Ca=aa(Ia,Dc)|0;ha=Ca+7&-8;if((Ca|0)==(ha|0)){break}Ja=Yc(z,z,Dc,Ec,Ia)|0;if((Ja|0)!=0){Hc=Ja;break k}Ja=ha-Ca|0;if((Ec|0)==0){break l}ha=(Ca|0)==0;Ka=0;Ba=0;Da=0;while(1){if(ha){Ic=Ba;Jc=Ka}else{Aa=Ba;ua=Ka;P=0;while(1){ta=1<<(ua&7^7);if((1<<(Aa&7^7)&d[z+(Aa>>>3)>>0]|0)==0){sa=Ac+(ua>>>3)|0;a[sa>>0]=d[sa>>0]&(ta^255)}else{sa=Ac+(ua>>>3)|0;a[sa>>0]=d[sa>>0]|ta}P=P+1|0;if((P|0)==(Ca|0)){break}else{Aa=Aa+1|0;ua=ua+1|0}}Ic=Ba+Ca|0;Jc=Ka+Ca|0}Da=Da+1|0;if((Da|0)==(Ec|0)){break l}else{Ka=Jc;Ba=Ja+Ic|0}}}}while(0);Ja=Yc(Ac,z,Dc,Ec,Ia)|0;if((Ja|0)!=0){Hc=Ja;break k}}else{Xc(l,r,s,t,u,Dc,Ec,Ia);Ja=Ia>>>0<8;Ba=0;do{Ka=c[t+(Ba<<2)>>2]|0;Da=c[l+(Ba<<2)>>2]|0;Ca=c[r+(Ba<<2)>>2]|0;ha=Yc(z+Ka|0,z+(c[s+(Ba<<2)>>2]|0)|0,Da,Ca,Ia)|0;if((ha|0)!=0){Hc=ha;break k}do{if(Ja){ha=c[u+(Ba<<2)>>2]|0;ua=aa(Da,Ia)|0;Aa=(ua+7&-8)-ua|0;if((Ca|0)==0){break}P=(ua|0)==0;ta=0;sa=0;ra=0;while(1){if(P){Kc=sa;Lc=ta}else{G=sa;qa=ta;pa=0;while(1){oa=1<<(qa&7^7);if((1<<(G&7^7)&d[z+((G>>>3)+Ka)>>0]|0)==0){na=z+((qa>>>3)+ha)|0;a[na>>0]=d[na>>0]&(oa^255)}else{na=z+((qa>>>3)+ha)|0;a[na>>0]=d[na>>0]|oa}pa=pa+1|0;if((pa|0)==(ua|0)){break}else{G=G+1|0;qa=qa+1|0}}Kc=sa+ua|0;Lc=ta+ua|0}ra=ra+1|0;if((ra|0)==(Ca|0)){break}else{ta=Lc;sa=Aa+Kc|0}}}}while(0);Ba=Ba+1|0}while(Ba>>>0<7);Xc(m,n,o,p,q,Dc,Ec,Ia);if(Ia>>>0>7){Ba=Ia>>>3;Ja=(Ba|0)==0;Ca=0;while(1){Ka=c[n+(Ca<<2)>>2]|0;if((Ka|0)!=0){Da=c[m+(Ca<<2)>>2]|0;Aa=(Da|0)==0;sa=q+(Ca<<2)|0;ta=8344+(Ca<<2)|0;ra=8376+(Ca<<2)|0;ua=8408+(Ca<<2)|0;ha=8440+(Ca<<2)|0;P=0;do{if(!Aa){qa=c[sa>>2]|0;G=aa((aa(c[ra>>2]|0,P)|0)+(c[ta>>2]|0)|0,Dc)|0;pa=G+(c[ua>>2]|0)|0;G=c[ha>>2]|0;oa=aa(P,Da)|0;na=0;do{ma=(aa(na+oa|0,Ba)|0)+qa|0;la=aa(pa+(aa(na,G)|0)|0,Ba)|0;if(!Ja){ka=0;do{a[Ac+(ka+la)>>0]=a[z+(ma+ka)>>0]|0;ka=ka+1|0}while(ka>>>0>>0)}na=na+1|0}while((na|0)!=(Da|0))}P=P+1|0}while((P|0)!=(Ka|0))}Ca=Ca+1|0;if((Ca|0)==7){break l}}}else{Rc=0}do{Ca=c[m+(Rc<<2)>>2]|0;Ba=c[n+(Rc<<2)>>2]|0;if((Ba|0)!=0){Ja=(Ca|0)==0;Ka=q+(Rc<<2)|0;P=8344+(Rc<<2)|0;Da=8376+(Rc<<2)|0;ha=8408+(Rc<<2)|0;ua=8440+(Rc<<2)|0;ta=0;do{if(!Ja){ra=c[Ka>>2]<<3;sa=aa(ta,Ca)|0;Aa=aa((aa(c[Da>>2]|0,ta)|0)+(c[P>>2]|0)|0,Dc)|0;na=c[ua>>2]|0;G=Aa+(c[ha>>2]|0)|0;Aa=0;do{pa=(aa(Aa+sa|0,Ia)|0)+ra|0;qa=aa(G+(aa(Aa,na)|0)|0,Ia)|0;oa=0;while(1){ka=(d[z+(pa>>>3)>>0]|0)>>>(pa&7^7)&1;if((ka|0)!=0){ma=Ac+(qa>>>3)|0;a[ma>>0]=d[ma>>0]|ka<<(qa&7^7)}oa=oa+1|0;if((oa|0)==(Ia|0)){break}else{pa=pa+1|0;qa=qa+1|0}}Aa=Aa+1|0}while((Aa|0)!=(Ca|0))}ta=ta+1|0}while((ta|0)!=(Ba|0))}Rc=Rc+1|0}while((Rc|0)!=7)}}while(0);Hc=0}}while(0);c[V>>2]=Hc;Fc=Ac}c[b>>2]=Fc}c[Fa>>2]=0;c[Ea>>2]=0;Qd(c[v>>2]|0);Ia=c[V>>2]|0;if((Ia|0)!=0){Y=Ia;i=k;return Y|0}Ia=g+100|0;z=g+144|0;if((c[g+24>>2]|0)==0){D=g+108|0;Ba=c[D>>2]|0;if((Ba|0)!=0){Qd(Ba)}c[Ia+0>>2]=c[z+0>>2];c[Ia+4>>2]=c[z+4>>2];c[Ia+8>>2]=c[z+8>>2];c[Ia+12>>2]=c[z+12>>2];c[Ia+16>>2]=c[z+16>>2];c[Ia+20>>2]=c[z+20>>2];c[Ia+24>>2]=c[z+24>>2];c[Ia+28>>2]=c[z+28>>2];Ba=c[B>>2]|0;m:do{if((Ba|0)!=0){ta=Pd(1024)|0;c[D>>2]=ta;Ca=c[C>>2]|0;if((ta|0)==0){ha=(Ca|0)==0?0:83;c[V>>2]=ha;Y=ha;i=k;return Y|0}if((Ca&1073741823|0)==0){break}a[ta>>0]=a[Ba>>0]|0;if(Ca<<2>>>0>1){Sc=ta;Tc=Ba;Uc=1}else{break}while(1){a[Sc+Uc>>0]=a[Tc+Uc>>0]|0;ta=Uc+1|0;if(!(ta>>>0>2]<<2>>>0)){break m}Sc=c[D>>2]|0;Tc=c[B>>2]|0;Uc=ta}}}while(0);c[V>>2]=0;Y=0;i=k;return Y|0}D=c[Ia>>2]|0;n:do{if((D|0)==(c[z>>2]|0)){if((c[g+104>>2]|0)!=(c[A>>2]|0)){break}Ba=c[g+116>>2]|0;if((Ba|0)!=(c[y>>2]|0)){break}if((Ba|0)!=0){if((c[g+120>>2]|0)!=(c[$>>2]|0)){break}if((c[g+124>>2]|0)!=(c[_>>2]|0)){break}if((c[g+128>>2]|0)!=(c[Z>>2]|0)){break}}Ba=c[g+112>>2]|0;if((Ba|0)!=(c[C>>2]|0)){break}if((Ba&1073741823|0)==0){Y=0;i=k;return Y|0}Ea=c[g+108>>2]|0;Fa=c[B>>2]|0;ta=Ba<<2;Ba=0;while(1){if((a[Ea+Ba>>0]|0)!=(a[Fa+Ba>>0]|0)){break n}Ba=Ba+1|0;if(!(Ba>>>0>>0)){Y=0;break}}i=k;return Y|0}}while(0);ta=c[b>>2]|0;do{if(!((D|0)==6|(D|0)==2)){if((c[g+104>>2]|0)==8){break}else{Y=56}i=k;return Y|0}}while(0);Ba=g+104|0;switch(D|0){case 2:{Vc=3;break};case 6:{Vc=4;break};case 3:case 0:{Vc=1;break};case 4:{Vc=2;break};default:{Vc=0}}Fa=aa(c[f>>2]|0,c[e>>2]|0)|0;Ea=Pd(((aa(aa(Fa,c[Ba>>2]|0)|0,Vc)|0)+7|0)>>>3)|0;c[b>>2]=Ea;o:do{if((Ea|0)==0){Wc=83}else{Ca=c[g+20>>2]|0;ha=c[Ia>>2]|0;p:do{if((ha|0)==(c[z>>2]|0)){ua=c[Ba>>2]|0;if((ua|0)!=(c[A>>2]|0)){break}P=c[g+116>>2]|0;if((P|0)!=(c[y>>2]|0)){break}if((P|0)!=0){if((c[g+120>>2]|0)!=(c[$>>2]|0)){break}if((c[g+124>>2]|0)!=(c[_>>2]|0)){break}if((c[g+128>>2]|0)!=(c[Z>>2]|0)){break}}P=c[g+112>>2]|0;if((P|0)!=(c[C>>2]|0)){break}if((P&1073741823|0)!=0){Da=c[g+108>>2]|0;Ka=c[B>>2]|0;Ja=P<<2;P=0;do{if((a[Da+P>>0]|0)!=(a[Ka+P>>0]|0)){break p}P=P+1|0}while(P>>>0>>0)}switch(ha|0){case 4:{Zc=2;break};case 6:{Zc=4;break};case 3:case 0:{Zc=1;break};case 2:{Zc=3;break};default:{Zc=0}}Ja=((aa(aa(ua,Fa)|0,Zc)|0)+7|0)>>>3;if((Ja|0)==0){Wc=0;break o}else{_c=0}while(1){a[Ea+_c>>0]=a[ta+_c>>0]|0;_c=_c+1|0;if(!(_c>>>0>>0)){Wc=0;break o}}}}while(0);do{if((ha|0)==3){Ja=1<>2];ua=c[g+112>>2]|0;P=ua>>>0>>0?ua:Ja;H=l+0|0;I=H+64|0;do{c[H>>2]=0;H=H+4|0}while((H|0)<(I|0));c[l+64>>2]=-1;if((P|0)==0){break}Ka=g+108|0;Da=~ua;Aa=~Ja;na=~(Da>>>0>Aa>>>0?Da:Aa);Aa=0;do{Da=Aa<<2;G=c[Ka>>2]|0;ra=d[G+Da>>0]|0;sa=d[G+(Da|1)>>0]|0;qa=d[G+(Da|2)>>0]|0;pa=d[G+(Da|3)>>0]|0;Da=l;G=0;while(1){oa=Da+((sa>>>G<<2&4|pa>>>G&1|ra>>>G<<3&8|qa>>>G<<1&2)<<2)|0;ka=c[oa>>2]|0;if((ka|0)==0){ma=Pd(68)|0;c[oa>>2]=ma;H=ma+0|0;I=H+64|0;do{c[H>>2]=0;H=H+4|0}while((H|0)<(I|0));c[ma+64>>2]=-1;$c=c[oa>>2]|0}else{$c=ka}G=G+1|0;if((G|0)==8){break}else{Da=$c}}c[$c+64>>2]=Aa;Aa=Aa+1|0}while((Aa|0)!=(na|0))}}while(0);na=c[Ba>>2]|0;q:do{if((c[A>>2]|0)==16&(na|0)==16){if((Fa|0)==0){ad=0;break}else{bd=1;cd=0}while(1){if(!bd){ad=85;break q}Aa=c[z>>2]|0;r:do{if((Aa|0)==0){Ka=cd<<1;Ja=a[ta+(Ka|1)>>0]|0;ua=d[ta+Ka>>0]<<8|Ja&255;Ka=ua&65535;do{if((c[y>>2]|0)!=0){if((ua|0)!=(c[$>>2]|0)){break}dd=0;ed=0;fd=Ja;gd=(Ka&65535)>>>8&255;hd=Ja;id=(Ka&65535)>>>8&255;jd=Ja;kd=(Ka&65535)>>>8&255;break r}}while(0);dd=-1;ed=-1;fd=Ja;gd=(Ka&65535)>>>8&255;hd=Ja;id=(Ka&65535)>>>8&255;jd=Ja;kd=(Ka&65535)>>>8&255}else if((Aa|0)==6){ua=cd<<3;dd=a[ta+(ua|7)>>0]|0;ed=a[ta+(ua|6)>>0]|0;fd=a[ta+(ua|5)>>0]|0;gd=a[ta+(ua|4)>>0]|0;hd=a[ta+(ua|3)>>0]|0;id=a[ta+(ua|2)>>0]|0;jd=a[ta+(ua|1)>>0]|0;kd=a[ta+ua>>0]|0}else if((Aa|0)==4){ua=cd<<2;ka=a[ta+(ua|1)>>0]|0;oa=(d[ta+ua>>0]<<8|ka&255)&65535;dd=a[ta+(ua|3)>>0]|0;ed=a[ta+(ua|2)>>0]|0;fd=ka;gd=(oa&65535)>>>8&255;hd=ka;id=(oa&65535)>>>8&255;jd=ka;kd=(oa&65535)>>>8&255}else if((Aa|0)==2){oa=cd*6|0;ka=a[ta+(oa|1)>>0]|0;ua=d[ta+oa>>0]<<8|ka&255;ma=ua&65535;P=a[ta+(oa+3)>>0]|0;Da=d[ta+(oa+2)>>0]<<8|P&255;G=Da&65535;qa=a[ta+(oa+5)>>0]|0;ra=d[ta+(oa+4)>>0]<<8|qa&255;oa=ra&65535;do{if((c[y>>2]|0)!=0){if((ua|0)!=(c[$>>2]|0)){break}if((Da|0)!=(c[_>>2]|0)){break}if((ra|0)!=(c[Z>>2]|0)){break}dd=0;ed=0;fd=qa;gd=(oa&65535)>>>8&255;hd=P;id=(G&65535)>>>8&255;jd=ka;kd=(ma&65535)>>>8&255;break r}}while(0);dd=-1;ed=-1;fd=qa;gd=(oa&65535)>>>8&255;hd=P;id=(G&65535)>>>8&255;jd=ka;kd=(ma&65535)>>>8&255}else{ad=85;break q}}while(0);if((c[Ba>>2]|0)!=16){ad=85;break q}Aa=c[Ia>>2]|0;if((Aa|0)==2){ra=cd*6|0;a[Ea+ra>>0]=kd;a[Ea+(ra|1)>>0]=jd;a[Ea+(ra+2)>>0]=id;a[Ea+(ra+3)>>0]=hd;a[Ea+(ra+4)>>0]=gd;a[Ea+(ra+5)>>0]=fd}else if((Aa|0)==4){ra=cd<<2;a[Ea+ra>>0]=kd;a[Ea+(ra|1)>>0]=jd;a[Ea+(ra|2)>>0]=ed;a[Ea+(ra|3)>>0]=dd}else if((Aa|0)==0){ra=cd<<1;a[Ea+ra>>0]=kd;a[Ea+(ra|1)>>0]=jd}else if((Aa|0)==6){Aa=cd<<3;a[Ea+Aa>>0]=kd;a[Ea+(Aa|1)>>0]=jd;a[Ea+(Aa|2)>>0]=id;a[Ea+(Aa|3)>>0]=hd;a[Ea+(Aa|4)>>0]=gd;a[Ea+(Aa|5)>>0]=fd;a[Ea+(Aa|6)>>0]=ed;a[Ea+(Aa|7)>>0]=dd}Aa=cd+1|0;if(!(Aa>>>0>>0)){ad=0;break q}bd=(c[A>>2]|0)==16;cd=Aa}}else{do{if((na|0)==8){if((ha|0)==6){ad=Pc(Ea,Fa,1,ta,z,Ca)|0;break q}else if((ha|0)==2){ad=Pc(Ea,Fa,0,ta,z,Ca)|0;break q}else{break}}}while(0);if((Fa|0)==0){ad=0;break}Aa=(Ca|0)==0;ra=0;Da=0;ua=0;Ka=0;Ja=0;s:while(1){t:do{switch(c[z>>2]|0){case 0:{pa=c[A>>2]|0;if((pa|0)==8){sa=a[ta+Ka>>0]|0;if((c[y>>2]|0)!=0?(sa&255|0)==(c[$>>2]|0):0){ld=0;md=sa;nd=sa;od=sa;break t}ld=-1;md=sa;nd=sa;od=sa;break t}else if((pa|0)==16){sa=Ka<<1;la=a[ta+sa>>0]|0;if((c[y>>2]|0)!=0?((la&255)<<8|d[ta+(sa|1)>>0]|0)==(c[$>>2]|0):0){ld=0;md=la;nd=la;od=la;break t}ld=-1;md=la;nd=la;od=la;break t}else{la=(1<>>3)>>0]|0)>>>(sa&7^7)&1)<>>0>>0)){pd=wa;break}else{sa=sa+1|0;ia=wa}}}ia=(((pd*255|0)>>>0)/(la>>>0)|0)&255;if((c[y>>2]|0)!=0?(pd|0)==(c[$>>2]|0):0){ld=0;md=ia;nd=ia;od=ia;break t}ld=-1;md=ia;nd=ia;od=ia;break t}break};case 2:{if((c[A>>2]|0)==8){ia=Ka*3|0;sa=a[ta+ia>>0]|0;pa=a[ta+(ia+1)>>0]|0;ja=a[ta+(ia+2)>>0]|0;do{if((c[y>>2]|0)!=0){if((sa&255|0)!=(c[$>>2]|0)){break}if((pa&255|0)!=(c[_>>2]|0)){break}if((ja&255|0)==(c[Z>>2]|0)){ld=0;md=ja;nd=pa;od=sa;break t}}}while(0);ld=-1;md=ja;nd=pa;od=sa;break t}else{la=Ka*6|0;ia=a[ta+la>>0]|0;ma=a[ta+(la+2)>>0]|0;ka=a[ta+(la+4)>>0]|0;do{if((c[y>>2]|0)!=0){if(((ia&255)<<8|d[ta+(la|1)>>0]|0)!=(c[$>>2]|0)){break}if(((ma&255)<<8|d[ta+(la+3)>>0]|0)!=(c[_>>2]|0)){break}if(((ka&255)<<8|d[ta+(la+5)>>0]|0)==(c[Z>>2]|0)){ld=0;md=ka;nd=ma;od=ia;break t}}}while(0);ld=-1;md=ka;nd=ma;od=ia;break t}break};case 3:{qd=c[A>>2]|0;if((qd|0)==8){rd=d[ta+Ka>>0]|0}else if((qd|0)==0){rd=0}else{la=aa(qd,Ka)|0;sa=qd+ -1|0;pa=0;while(1){ja=(((d[ta+(la>>>3)>>0]|0)>>>(la&7^7)&1)<>>0>>0)){rd=ja;break}else{la=la+1|0;pa=ja}}}if(!(rd>>>0<(c[C>>2]|0)>>>0)){if(Aa){break s}else{ld=-1;md=0;nd=0;od=0;break t}}else{pa=rd<<2;la=c[B>>2]|0;ld=a[la+(pa|3)>>0]|0;md=a[la+(pa|2)>>0]|0;nd=a[la+(pa|1)>>0]|0;od=a[la+pa>>0]|0;break t}break};case 4:{if((c[A>>2]|0)==8){pa=Ka<<1;la=a[ta+pa>>0]|0;ld=a[ta+(pa|1)>>0]|0;md=la;nd=la;od=la;break t}else{la=Ka<<2;pa=a[ta+la>>0]|0;ld=a[ta+(la|2)>>0]|0;md=pa;nd=pa;od=pa;break t}break};case 6:{if((c[A>>2]|0)==8){pa=Ka<<2;ld=a[ta+(pa|3)>>0]|0;md=a[ta+(pa|2)>>0]|0;nd=a[ta+(pa|1)>>0]|0;od=a[ta+pa>>0]|0;break t}else{pa=Ka<<3;ld=a[ta+(pa|6)>>0]|0;md=a[ta+(pa|4)>>0]|0;nd=a[ta+(pa|2)>>0]|0;od=a[ta+pa>>0]|0;break t}break};default:{ld=ra;md=Da;nd=ua;od=Ja}}}while(0);u:do{switch(c[Ia>>2]|0){case 0:{pa=c[Ba>>2]|0;if((pa|0)==8){a[Ea+Ka>>0]=od;break u}else if((pa|0)!=16){if((pa|0)==1){sd=7}else{sd=(pa|0)==2?3:1}la=sd&Ka;sa=((1<>>(8-pa|0))<<(aa(sd-la|0,pa)|0);if((la|0)==0){a[Ea+((aa(pa,Ka)|0)>>>3)>>0]=sa;break u}else{la=Ea+((aa(pa,Ka)|0)>>>3)|0;a[la>>0]=d[la>>0]|sa;break u}}else{sa=Ka<<1;a[Ea+(sa|1)>>0]=od;a[Ea+sa>>0]=od;break u}break};case 3:{sa=od&255;la=nd&255;pa=md&255;ia=ld&255;ma=l;ka=0;do{ma=c[ma+((la>>>ka<<2&4|ia>>>ka&1|sa>>>ka<<3&8|pa>>>ka<<1&2)<<2)>>2]|0;ka=ka+1|0;if((ma|0)==0){ad=82;break q}}while((ka|0)<8);ka=c[ma+64>>2]|0;if((ka|0)<0){ad=82;break q}pa=c[Ba>>2]|0;if((pa|0)==1){td=7}else if((pa|0)==8){a[Ea+Ka>>0]=ka;break u}else{td=(pa|0)==2?3:1}sa=td&Ka;ia=((1<>>3)>>0]=ia;break u}else{sa=Ea+((aa(pa,Ka)|0)>>>3)|0;a[sa>>0]=d[sa>>0]|ia;break u}break};case 6:{if((c[Ba>>2]|0)==8){ia=Ka<<2;a[Ea+ia>>0]=od;a[Ea+(ia|1)>>0]=nd;a[Ea+(ia|2)>>0]=md;a[Ea+(ia|3)>>0]=ld;break u}else{ia=Ka<<3;a[Ea+(ia|1)>>0]=od;a[Ea+ia>>0]=od;a[Ea+(ia|3)>>0]=nd;a[Ea+(ia|2)>>0]=nd;a[Ea+(ia|5)>>0]=md;a[Ea+(ia|4)>>0]=md;a[Ea+(ia|7)>>0]=ld;a[Ea+(ia|6)>>0]=ld;break u}break};case 4:{ia=c[Ba>>2]|0;if((ia|0)==8){sa=Ka<<1;a[Ea+sa>>0]=od;a[Ea+(sa|1)>>0]=ld;break u}else if((ia|0)==16){ia=Ka<<2;a[Ea+(ia|1)>>0]=od;a[Ea+ia>>0]=od;a[Ea+(ia|3)>>0]=ld;a[Ea+(ia|2)>>0]=ld;break u}else{break u}break};case 2:{if((c[Ba>>2]|0)==8){ia=Ka*3|0;a[Ea+ia>>0]=od;a[Ea+(ia+1)>>0]=nd;a[Ea+(ia+2)>>0]=md;break u}else{ia=Ka*6|0;a[Ea+(ia|1)>>0]=od;a[Ea+ia>>0]=od;a[Ea+(ia+3)>>0]=nd;a[Ea+(ia+2)>>0]=nd;a[Ea+(ia+5)>>0]=md;a[Ea+(ia+4)>>0]=md;break u}break};default:{}}}while(0);Ka=Ka+1|0;if(!(Ka>>>0>>0)){ad=0;break q}else{ra=ld;Da=md;ua=nd;Ja=od}}ad=(qd|0)==8?46:47}}while(0);if((c[Ia>>2]|0)!=3){Wc=ad;break}Qc(l);Wc=ad}}while(0);c[V>>2]=Wc;Qd(ta);Y=c[V>>2]|0;i=k;return Y|0}c[g+292>>2]=29;x=29;break}c[g+292>>2]=28;x=28}}while(0);c[g+292>>2]=x;Y=x;i=k;return Y|0}function Sc(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,j=0;a=i;i=i+16|0;b=a;d=c[1280]|0;if((d|0)==0){i=a;return}if((c[(c[1278]|0)+4>>2]|0)<1){i=a;return}e=c[d+20>>2]|0;if((e|0)==-1){f=c[d+12>>2]|0;g=c[d+16>>2]|0;h=c[d>>2]|0;fb(1,b|0);ub(3553,c[b>>2]|0);Yb(3553,10240,9729);Yb(3553,10241,9729);Yb(3553,10242,33071);Yb(3553,10243,33071);ub(3553,c[b>>2]|0);bc(3317,1);Ob(3553,0,6408,f|0,g|0,0,6408,5121,h|0);h=c[b>>2]|0;c[(c[1280]|0)+20>>2]=h;j=h}else{j=e}ub(3553,j|0);j=c[1278]|0;Ya(34962,0,c[j+4>>2]<<5|0,c[j>>2]|0);Ab(4,0,c[(c[1278]|0)+4>>2]|0);c[(c[1278]|0)+4>>2]=0;i=a;return}function Tc(){var a=0,b=0,d=0,e=0.0,f=0.0,h=0;a=i;i=i+192|0;b=a;Sc();d=b+28|0;c[b+0>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;g[d>>2]=1.0;g[b+32>>2]=0.0;e=+(c[1284]|0);g[b+36>>2]=e;g[b+40>>2]=0.0;g[b+44>>2]=1.0;g[b+48>>2]=0.0;g[b+52>>2]=0.0;g[b+56>>2]=0.0;g[b+60>>2]=1.0;f=+(c[1282]|0);g[b+64>>2]=f;g[b+68>>2]=e;g[b+72>>2]=1.0;g[b+76>>2]=1.0;g[b+80>>2]=0.0;g[b+84>>2]=0.0;g[b+88>>2]=0.0;g[b+92>>2]=1.0;g[b+96>>2]=f;g[b+100>>2]=e;g[b+104>>2]=1.0;g[b+108>>2]=1.0;g[b+112>>2]=0.0;g[b+116>>2]=0.0;g[b+120>>2]=0.0;g[b+124>>2]=1.0;g[b+128>>2]=f;g[b+132>>2]=0.0;g[b+136>>2]=1.0;d=b+140|0;h=b+156|0;c[d+0>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;g[h>>2]=1.0;h=b+160|0;d=b+188|0;c[h+0>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+24>>2]=0;g[d>>2]=1.0;Ya(34962,0,192,b|0);Ab(4,0,6);i=a;return}function Uc(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;b=i;i=i+48|0;d=b;mc();a:do{if((Wb(d|0)|0)!=0){e=d+16|0;while(1){f=c[d>>2]|0;switch(f|0){case 256:{c[9256>>2]=(c[9256>>2]|0)==0?1:2;break};case 1796:case 1793:case 1026:{g=8;break};case 1795:case 1792:case 1025:{g=7;break};case 768:{if((c[e>>2]|0)==27){c[9256>>2]=(c[9256>>2]|0)==0?1:2;switch(f|0){case 1796:case 1793:case 1026:{g=8;break};case 1795:case 1792:case 1025:{g=7;break};default:{}}}break};default:{}}if((g|0)==7?(g=0,c[2304]=1,(f|0)==1796|(f|0)==1793|(f|0)==1026):0){g=8}if((g|0)==8){g=0;c[2304]=0}if((Wb(d|0)|0)==0){break a}}}}while(0);if((c[1528]|0)!=0){g=6136;e=c[g>>2]|0;f=c[g+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>1e5){g=6136;c[g>>2]=1e5;c[g+4>>2]=0;h=0;j=1e5}else{h=f;j=e}e=5104;f=c[e+4>>2]|0;if(((h|0)>(f|0)|((h|0)==(f|0)?j>>>0>=(c[e>>2]|0)>>>0:0))&(c[1532]|0)!=0){do{e=Xa(0)|0;do{if((a[e+122>>0]|0)!=0){if((c[2306]|0)==0){c[2306]=1;break}else{c[2306]=2;break}}else{c[2306]=0}}while(0);do{if((a[e+120>>0]|0)!=0){if((c[9228>>2]|0)==0){c[9228>>2]=1;break}else{c[9228>>2]=2;break}}else{c[9228>>2]=0}}while(0);do{if((a[e+1106>>0]|0)!=0){if((c[9232>>2]|0)==0){c[9232>>2]=1;break}else{c[9232>>2]=2;break}}else{c[9232>>2]=0}}while(0);do{if((a[e+1105>>0]|0)!=0){if((c[9236>>2]|0)==0){c[9236>>2]=1;break}else{c[9236>>2]=2;break}}else{c[9236>>2]=0}}while(0);do{if((a[e+1104>>0]|0)!=0){if((c[9240>>2]|0)==0){c[9240>>2]=1;break}else{c[9240>>2]=2;break}}else{c[9240>>2]=0}}while(0);do{if((a[e+1103>>0]|0)!=0){if((c[9244>>2]|0)==0){c[9244>>2]=1;break}else{c[9244>>2]=2;break}}else{c[9244>>2]=0}}while(0);do{if((a[e+32>>0]|0)!=0){if((c[9248>>2]|0)==0){c[9248>>2]=1;break}else{c[9248>>2]=2;break}}else{c[9248>>2]=0}}while(0);do{if(((a[e+1112>>0]|a[e+13>>0])&255|c[2304]|0)!=0){if((c[9252>>2]|0)==0){c[9252>>2]=1;break}else{c[9252>>2]=2;break}}else{c[9252>>2]=0}}while(0);do{if((a[e+112>>0]|0)!=0){if((c[9260>>2]|0)==0){c[9260>>2]=1;break}else{c[9260>>2]=2;break}}else{c[9260>>2]=0}}while(0);xc[c[1528]&7](0);e=5104;j=c[e>>2]|0;f=c[e+4>>2]|0;e=6136;h=de(c[e>>2]|0,c[e+4>>2]|0,j|0,f|0)|0;e=E;g=6136;c[g>>2]=h;c[g+4>>2]=e;c[9256>>2]=0}while(((e|0)>(f|0)|(e|0)==(f|0)&h>>>0>=j>>>0)&(c[1532]|0)!=0)}}j=c[1530]|0;if((j|0)==0){nb(d|0,0)|0;k=c[d>>2]|0;l=(k|0)<0;m=l<<31>>31;n=qe(k|0,m|0,1e6,0)|0;o=E;p=d+4|0;q=c[p>>2]|0;r=(q|0)<0;s=r<<31>>31;t=ee(n|0,o|0,q|0,s|0)|0;u=E;v=6144;w=v;x=c[w>>2]|0;y=v+4|0;z=y;A=c[z>>2]|0;B=de(t|0,u|0,x|0,A|0)|0;C=E;D=6136;F=D;G=c[F>>2]|0;H=D+4|0;I=H;J=c[I>>2]|0;K=ee(B|0,C|0,G|0,J|0)|0;L=E;M=6136;N=M;c[N>>2]=K;O=M+4|0;P=O;c[P>>2]=L;Q=6144;R=Q;c[R>>2]=t;S=Q+4|0;T=S;c[T>>2]=u;i=b;return}h=6136;f=5104;vc[j&3](0,(+((c[h>>2]|0)>>>0)+4294967296.0*+(c[h+4>>2]|0))/(+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0)));Sc();nb(d|0,0)|0;k=c[d>>2]|0;l=(k|0)<0;m=l<<31>>31;n=qe(k|0,m|0,1e6,0)|0;o=E;p=d+4|0;q=c[p>>2]|0;r=(q|0)<0;s=r<<31>>31;t=ee(n|0,o|0,q|0,s|0)|0;u=E;v=6144;w=v;x=c[w>>2]|0;y=v+4|0;z=y;A=c[z>>2]|0;B=de(t|0,u|0,x|0,A|0)|0;C=E;D=6136;F=D;G=c[F>>2]|0;H=D+4|0;I=H;J=c[I>>2]|0;K=ee(B|0,C|0,G|0,J|0)|0;L=E;M=6136;N=M;c[N>>2]=K;O=M+4|0;P=O;c[P>>2]=L;Q=6144;R=Q;c[R>>2]=t;S=Q+4|0;T=S;c[T>>2]=u;i=b;return}function Vc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;d=i;i=i+304|0;e=d;do{if((b|0)!=0){f=fe(b|0)|0;if((f|0)>=4){g=b+(f+ -4)|0;f=a[g>>0]|0;a:do{if(f<<24>>24==0){h=0;j=6152}else{k=4;l=f;m=g;n=6152;while(1){k=k+ -1|0;o=a[n>>0]|0;if(!((k|0)!=0&o<<24>>24!=0&l<<24>>24==o<<24>>24)){h=l;j=n;break a}m=m+1|0;o=n+1|0;l=a[m>>0]|0;if(l<<24>>24==0){h=0;j=o;break}else{n=o}}}}while(0);if(!(h<<24>>24==(a[j>>0]|0))){p=7}}else{p=7}if((p|0)==7){g=fe(b|0)|0;if((g|0)<4){break}f=b+(g+ -4)|0;g=a[f>>0]|0;b:do{if(g<<24>>24==0){q=0;r=6160}else{n=4;l=g;m=f;k=6160;while(1){n=n+ -1|0;o=a[k>>0]|0;if(!((n|0)!=0&o<<24>>24!=0&l<<24>>24==o<<24>>24)){q=l;r=k;break b}m=m+1|0;o=k+1|0;l=a[m>>0]|0;if(l<<24>>24==0){q=0;r=o;break}else{k=o}}}}while(0);if(!(q<<24>>24==(a[r>>0]|0))){break}}f=Pd(24)|0;g=f+12|0;k=f+16|0;l=Pb(b|0,11936)|0;c:do{if((l|0)==0){Qd(0);s=78;p=88}else{Cb(l|0,0,2)|0;m=Ma(l|0)|0;Ia(l|0);n=Pd(m)|0;o=(m|0)==0;if(o|(n|0)==0){t=0}else{t=ra(n|0,1,m|0,l|0)|0}Fb(l|0)|0;m=(n|0)!=0|o;o=m?0:83;if(m){c[e+24>>2]=1;c[e+28>>2]=1;c[e+32>>2]=0;c[e+0>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[e+36>>2]=2;c[e+40>>2]=1;c[e+44>>2]=2048;c[e+48>>2]=3;c[e+52>>2]=128;c[e+56>>2]=1;c[e+60>>2]=0;c[e+64>>2]=0;c[e+68>>2]=0;c[e+76>>2]=1;c[e+80>>2]=1;c[e+72>>2]=2;c[e+88>>2]=0;c[e+84>>2]=0;c[e+92>>2]=0;c[e+96>>2]=1;m=e+100|0;u=e+104|0;v=e+108|0;w=e+112|0;x=e+160|0;y=e+144|0;c[x+0>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[v+0>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;c[v+16>>2]=0;c[v+20>>2]=0;c[y>>2]=6;c[e+148>>2]=8;c[e+152>>2]=0;c[e+156>>2]=0;c[e+140>>2]=0;c[e+132>>2]=0;c[e+136>>2]=0;y=e+176|0;c[e+252>>2]=0;x=e+268|0;c[x+0>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;x=y+0|0;y=x+52|0;do{c[x>>2]=0;x=x+4|0}while((x|0)<(y|0));c[e+292>>2]=1;c[m>>2]=6;c[u>>2]=8;x=Rc(f,g,k,e,n,t)|0;y=c[v>>2]|0;if((y|0)!=0){Qd(y)}c[v>>2]=0;c[w>>2]=0;Oc(e+132|0);z=n;A=x}else{z=0;A=o}Qd(z);if((A|0)==0){c[f+4>>2]=(c[g>>2]|0)/-2|0;c[f+8>>2]=(c[k>>2]|0)/-2|0;c[f+20>>2]=-1;B=f;i=d;return B|0}else{C=A}do{switch(C|0){case 11:{D=1144;E=C;break c;break};case 17:{D=1304;E=C;break c;break};case 20:{D=1400;E=C;break c;break};case 1:{D=1064;E=C;break c;break};case 15:{D=1200;E=C;break c;break};case 31:{D=1896;E=C;break c;break};case 36:{D=2088;E=C;break c;break};case 14:{D=1200;E=C;break c;break};case 37:{D=2128;E=C;break c;break};case 38:{D=2176;E=C;break c;break};case 39:{D=2200;E=C;break c;break};case 34:{D=1992;E=C;break c;break};case 42:{D=2376;E=C;break c;break};case 43:{D=2448;E=C;break c;break};case 44:{D=2496;E=C;break c;break};case 26:{D=1640;E=C;break c;break};case 24:{D=1560;E=C;break c;break};case 32:{D=1928;E=C;break c;break};case 27:{D=1704;E=C;break c;break};case 30:{D=1840;E=C;break c;break};case 10:{D=1088;E=C;break c;break};case 47:{D=2656;E=C;break c;break};case 48:{D=2728;E=C;break c;break};case 21:{D=1456;E=C;break c;break};case 28:{D=1744;E=C;break c;break};case 16:{D=1248;E=C;break c;break};case 29:{D=1800;E=C;break c;break};case 25:{D=1592;E=C;break c;break};case 45:{D=2544;E=C;break c;break};case 18:{D=1360;E=C;break c;break};case 33:{D=1960;E=C;break c;break};case 35:{D=2024;E=C;break c;break};case 46:{D=2584;E=C;break c;break};case 50:{D=2768;E=C;break c;break};case 13:{D=1200;E=C;break c;break};case 22:{D=1304;E=C;break c;break};case 41:{D=2336;E=C;break c;break};case 49:{D=2768;E=C;break c;break};case 51:{D=2832;E=C;break c;break};case 40:{D=2288;E=C;break c;break};case 19:{D=1304;E=C;break c;break};case 23:{D=1512;E=C;break c;break};case 52:{D=2888;E=C;break c;break};case 60:{D=3320;E=C;break c;break};case 0:{D=1032;E=C;break c;break};case 66:{D=3688;E=C;break c;break};case 75:{D=4256;E=C;break c;break};case 76:{D=4320;E=C;break c;break};case 86:{D=4744;E=C;break c;break};case 69:{D=3976;E=C;break c;break};case 67:{D=3784;E=C;break c;break};case 87:{D=4800;E=C;break c;break};case 83:{D=4616;E=C;break c;break};case 71:{D=4048;E=C;break c;break};case 81:{D=4504;E=C;break c;break};case 74:{D=4232;E=C;break c;break};case 77:{D=4368;E=C;break c;break};case 53:{D=2928;E=C;break c;break};case 54:{D=2960;E=C;break c;break};case 58:{D=3208;E=C;break c;break};case 56:{D=3072;E=C;break c;break};case 59:{D=3272;E=C;break c;break};case 68:{D=3880;E=C;break c;break};case 62:{D=3488;E=C;break c;break};case 78:{s=C;p=88;break c;break};case 55:{D=3024;E=C;break c;break};case 79:{D=4432;E=C;break c;break};case 84:{D=4648;E=C;break c;break};case 85:{D=4712;E=C;break c;break};case 88:{D=4888;E=C;break c;break};case 90:{D=5032;E=C;break c;break};case 61:{D=3400;E=C;break c;break};case 72:{D=4112;E=C;break c;break};case 73:{D=4208;E=C;break c;break};case 89:{D=4968;E=C;break c;break};case 82:{D=4544;E=C;break c;break};case 80:{D=4464;E=C;break c;break};case 57:{D=3152;E=C;break c;break};case 64:{D=3624;E=C;break c;break};case 63:{D=3544;E=C;break c;break};default:{D=5072;E=C;break c}}}while(0)}}while(0);if((p|0)==88){D=4400;E=s}c[e>>2]=E;c[e+4>>2]=D;eb(6168,e|0)|0;B=0;i=d;return B|0}}while(0);c[e>>2]=b;eb(6216,e|0)|0;B=0;i=d;return B|0}function Wc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0;g=i;h=a[d>>0]|0;if(h<<24>>24==0){i=g;return}j=b+16|0;k=b+4|0;l=b+12|0;m=e;e=h;h=d;while(1){d=e<<24>>24;if((d|0)<(c[j>>2]|0)){n=c[b>>2]|0;o=c[k>>2]|0;p=(c[n+4>>2]|0)+m|0;q=c[1284]|0;r=(c[n+8>>2]|0)+f|0;s=q-(c[n+16>>2]|0)-r|0;t=1.0/+(c[n+12>>2]|0);u=+(o|0);v=u*+(d-(c[l>>2]|0)|0)*t;if((c[1280]|0)!=(n|0)){Sc();c[1280]=n}Lc(c[1278]|0,+(p|0),+(q-r|0),v,+(p+o|0),+(s|0),u*t+v)}s=h+1|0;o=a[s>>0]|0;if(o<<24>>24==0){break}m=(c[k>>2]|0)+m|0;e=o;h=s}i=g;return}function Xc(a,b,d,e,f,g,h,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0;k=i;l=g+ -1|0;g=h+ -1|0;h=0;do{m=c[8440+(h<<2)>>2]|0;n=a+(h<<2)|0;c[n>>2]=((l+m-(c[8408+(h<<2)>>2]|0)|0)>>>0)/(m>>>0)|0;m=c[8376+(h<<2)>>2]|0;o=((g+m-(c[8344+(h<<2)>>2]|0)|0)>>>0)/(m>>>0)|0;m=b+(h<<2)|0;c[m>>2]=o;p=(c[n>>2]|0)==0?0:o;c[m>>2]=p;if((p|0)==0){c[n>>2]=0}h=h+1|0}while((h|0)!=7);c[f>>2]=0;c[e>>2]=0;c[d>>2]=0;h=0;g=0;while(1){l=a+(g<<2)|0;n=c[l>>2]|0;p=b+(g<<2)|0;if((n|0)!=0?(m=c[p>>2]|0,(m|0)!=0):0){q=aa(m,(((aa(n,j)|0)+7|0)>>>3)+1|0)|0}else{q=0}n=g+1|0;m=d+(n<<2)|0;c[m>>2]=q+h;c[e+(n<<2)>>2]=(aa(((aa(c[l>>2]|0,j)|0)+7|0)>>>3,c[p>>2]|0)|0)+(c[e+(g<<2)>>2]|0);c[f+(n<<2)>>2]=(((aa(aa(c[p>>2]|0,j)|0,c[l>>2]|0)|0)+7|0)>>>3)+(c[f+(g<<2)>>2]|0);if((n|0)==7){break}h=c[m>>2]|0;g=n}i=k;return}function Yc(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;h=i;j=(g+7|0)>>>3;k=((aa(g,e)|0)+7|0)>>>3;if((f|0)==0){l=0;i=h;return l|0}e=k+1|0;g=(k|0)==0;m=(j|0)==0;n=j>>>0>>0;o=0;p=0;a:while(1){q=aa(p,k)|0;r=aa(p,e)|0;s=r+1|0;b:do{switch(d[c+r>>0]|0|0){case 4:{if((o|0)==0){if(!m){t=0;do{a[b+(t+q)>>0]=a[c+(t+s)>>0]|0;t=t+1|0}while((t|0)!=(j|0))}if(!n){break b}t=q-j|0;u=j;while(1){a[b+(u+q)>>0]=(d[b+(t+u)>>0]|0)+(d[c+(u+s)>>0]|0);u=u+1|0;if((u|0)==(k|0)){break b}}}if(!m){u=0;do{a[b+(u+q)>>0]=(d[o+u>>0]|0)+(d[c+(u+s)>>0]|0);u=u+1|0}while((u|0)!=(j|0))}if(n){u=j;do{t=u-j|0;v=a[b+(t+q)>>0]|0;w=a[o+u>>0]|0;x=a[o+t>>0]|0;t=w&255;y=x&255;z=t-y|0;A=(z|0)>-1?z:0-z|0;z=v&255;B=z-y|0;C=(B|0)>-1?B:0-B|0;B=t+z+(aa(y,-2)|0)|0;y=((B|0)>-1?B:0-B|0)<<16>>16;if((y|0)<(A|0)&(y|0)<(C|0)){D=x}else{D=(C|0)<(A|0)?w:v}a[b+(u+q)>>0]=(D&255)+(d[c+(u+s)>>0]|0);u=u+1|0}while((u|0)!=(k|0))}break};case 0:{if(!g){u=0;do{a[b+(u+q)>>0]=a[c+(u+s)>>0]|0;u=u+1|0}while((u|0)!=(k|0))}break};case 3:{if((o|0)==0){if(!m){u=0;do{a[b+(u+q)>>0]=a[c+(u+s)>>0]|0;u=u+1|0}while((u|0)!=(j|0))}if(!n){break b}u=q-j|0;v=j;do{a[b+(v+q)>>0]=((d[b+(u+v)>>0]|0)>>>1)+(d[c+(v+s)>>0]|0);v=v+1|0}while((v|0)!=(k|0))}else{if(!m){v=0;do{a[b+(v+q)>>0]=((d[o+v>>0]|0)>>>1)+(d[c+(v+s)>>0]|0);v=v+1|0}while((v|0)!=(j|0))}if(!n){break b}v=q-j|0;u=j;do{a[b+(u+q)>>0]=(((d[o+u>>0]|0)+(d[b+(v+u)>>0]|0)|0)>>>1)+(d[c+(u+s)>>0]|0);u=u+1|0}while((u|0)!=(k|0))}break};case 2:{if((o|0)==0){if(g){break b}else{E=0}do{a[b+(E+q)>>0]=a[c+(E+s)>>0]|0;E=E+1|0}while((E|0)!=(k|0))}else{if(g){break b}else{F=0}do{a[b+(F+q)>>0]=(d[o+F>>0]|0)+(d[c+(F+s)>>0]|0);F=F+1|0}while((F|0)!=(k|0))}break};case 1:{if(!m){u=0;do{a[b+(u+q)>>0]=a[c+(u+s)>>0]|0;u=u+1|0}while((u|0)!=(j|0))}if(n){u=q-j|0;v=j;do{a[b+(v+q)>>0]=(d[b+(u+v)>>0]|0)+(d[c+(v+s)>>0]|0);v=v+1|0}while((v|0)!=(k|0))}break};default:{l=36;G=40;break a}}}while(0);o=b+q|0;p=p+1|0;if(!(p>>>0>>0)){l=0;G=40;break}}if((G|0)==40){i=h;return l|0}return 0}function Zc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;b=i;d=a+16|0;e=Pd(c[d>>2]<<2)|0;f=a+4|0;c[f>>2]=e;g=(e|0)==0;e=a+12|0;h=(c[e>>2]|0)+1|0;j=h<<2;if((j|0)!=0){k=Pd(h<<3)|0;if((k|0)==0){l=0;m=0}else{n=k;o=4}}else{n=0;o=4}do{if((o|0)==4){if((h|0)!=0){he(n|0,0,j|0)|0}k=(c[e>>2]|0)+1|0;p=k<<2;if((p|0)==0){q=0}else{r=Pd(k<<3)|0;if((r|0)==0){l=n;m=0;break}q=r}if((k|0)!=0){he(q|0,0,p|0)|0}if(g){l=n;m=q}else{p=c[d>>2]|0;if((p|0)==0){s=0}else{k=c[a+8>>2]|0;r=0;do{t=n+(c[k+(r<<2)>>2]<<2)|0;c[t>>2]=(c[t>>2]|0)+1;r=r+1|0}while(r>>>0

>>0);s=p}p=c[e>>2]|0;if((p|0)!=0){r=c[q>>2]|0;k=1;do{r=(c[n+(k+ -1<<2)>>2]|0)+r<<1;c[q+(k<<2)>>2]=r;k=k+1|0}while(!(k>>>0>p>>>0))}if((s|0)!=0){p=c[a+8>>2]|0;k=s;r=0;while(1){t=c[p+(r<<2)>>2]|0;if((t|0)==0){u=k}else{v=q+(t<<2)|0;t=c[v>>2]|0;c[v>>2]=t+1;c[(c[f>>2]|0)+(r<<2)>>2]=t;u=c[d>>2]|0}r=r+1|0;if(!(r>>>0>>0)){break}else{k=u}}}Qd(n);Qd(q);k=c[d>>2]|0;r=Pd(k<<3)|0;c[a>>2]=r;if((r|0)==0){w=83;i=b;return w|0}p=(k&2147483647|0)==0;if(!p){t=k<<1;v=0;do{c[r+(v<<2)>>2]=32767;v=v+1|0}while(v>>>0>>0)}if((k|0)==0){w=0;i=b;return w|0}t=c[a+8>>2]|0;v=k+ -2|0;x=0;y=0;z=0;a:while(1){A=t+(x<<2)|0;B=c[A>>2]|0;if((B|0)==0){C=y;D=z}else{E=B;B=0;F=y;G=z;while(1){if(G>>>0>v>>>0){w=55;o=44;break a}H=r+(((c[(c[f>>2]|0)+(x<<2)>>2]|0)>>>(E+~B|0)&1|G<<1)<<2)|0;I=c[H>>2]|0;do{if((I|0)==32767){J=B+1|0;if((J|0)==(E|0)){c[H>>2]=x;K=E;L=F;M=0;break}else{N=F+1|0;c[H>>2]=N+k;K=J;L=N;M=N;break}}else{K=B+1|0;L=F;M=I-k|0}}while(0);E=c[A>>2]|0;if(!(K>>>0>>0)){C=L;D=M;break}else{B=K;F=L;G=M}}}x=x+1|0;if(!(x>>>0>>0)){break}else{y=C;z=D}}if((o|0)==44){i=b;return w|0}if(p){w=0;i=b;return w|0}z=k<<1;y=0;do{x=r+(y<<2)|0;if((c[x>>2]|0)==32767){c[x>>2]=0}y=y+1|0}while(y>>>0>>0);w=0;i=b;return w|0}}}while(0);Qd(l);Qd(m);w=83;i=b;return w|0}function _c(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;a=i;g=(f|0)/4|0;he(e|0,0,f|0)|0;f=c[2318]|0;if((f|0)==0){i=a;return}h=f;f=0;a:while(1){j=f+12|0;b:do{if((f|0)==0){k=c[h>>2]|0;if((k|0)==0){l=h+12|0;m=c[l>>2]|0;c[l>>2]=c[2320];c[2320]=h;c[2318]=m;n=m;o=0}else{p=h;q=k;r=h;s=8}}else{k=h;while(1){m=c[k>>2]|0;if((m|0)!=0){p=k;q=m;r=k;s=8;break b}m=k+12|0;l=k;k=c[m>>2]|0;c[m>>2]=c[2320];c[2320]=l;c[j>>2]=k;if((k|0)==0){s=25;break a}}}}while(0);if((s|0)==8){s=0;j=r+4|0;k=c[j>>2]|0;l=(c[q+20>>2]|0)+(k<<1)|0;m=(c[q+16>>2]|0)-k|0;if((m|0)>(g|0)){t=g}else{c[p>>2]=0;t=m}if((t|0)>0){m=r+9|0;u=r+8|0;v=0;w=e;x=l;while(1){l=((aa(d[m>>0]|0,b[x>>1]|0)|0)>>8)+(b[w>>1]|0)|0;do{if((l|0)<=16384){if((l|0)<-16384){b[w>>1]=-16384;break}else{b[w>>1]=l;break}}else{b[w>>1]=16384}}while(0);l=w+2|0;y=((aa(d[u>>0]|0,b[x>>1]|0)|0)>>8)+(b[l>>1]|0)|0;do{if((y|0)<=16384){if((y|0)<-16384){b[l>>1]=-16384;break}else{b[l>>1]=y;break}}else{b[l>>1]=16384}}while(0);v=v+1|0;if((v|0)==(t|0)){break}else{w=w+4|0;x=x+2|0}}}c[j>>2]=k+t;n=c[r+12>>2]|0;o=r}if((n|0)==0){s=25;break}else{h=n;f=o}}if((s|0)==25){i=a;return}}function $c(d){d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;e=i;i=i+48|0;f=e;g=e+30|0;h=e+28|0;j=e+26|0;k=e+24|0;l=e+16|0;m=e+12|0;n=e+20|0;a[g+0>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[g+4>>0]=0;o=Pb(d|0,11936)|0;if((o|0)==0){Ja(9552)|0;p=0;i=e;return p|0}ra(g|0,4,1,o|0)|0;if((a[g>>0]|0)==82){d=g;q=9304;do{d=d+1|0;q=q+1|0;r=a[d>>0]|0;s=a[q>>0]|0}while(!((r<<24>>24==0?1:r<<24>>24!=s<<24>>24)|s<<24>>24==0));if(r<<24>>24==s<<24>>24){Cb(o|0,4,1)|0;ra(g|0,4,1,o|0)|0;if((a[g>>0]|0)==87){s=g;r=9312;do{s=s+1|0;r=r+1|0;t=a[s>>0]|0;u=a[r>>0]|0}while(!((t<<24>>24==0?1:t<<24>>24!=u<<24>>24)|u<<24>>24==0));if(t<<24>>24==u<<24>>24){ra(g|0,1,4,o|0)|0;ra(l|0,1,4,o|0)|0;u=c[l>>2]|0;if((u|0)<14){Ja(9672)|0;Fb(o|0)|0;p=0;i=e;return p|0}ra(h|0,1,2,o|0)|0;if((b[h>>1]|0)!=1){Ja(9632)|0;Fb(o|0)|0;p=0;i=e;return p|0}ra(j|0,1,2,o|0)|0;ra(m|0,1,4,o|0)|0;Cb(o|0,2,1)|0;Cb(o|0,2,1)|0;ra(k|0,1,2,o|0)|0;Cb(o|0,u+ -14|0,1)|0;u=c[m>>2]|0;m=b[j>>1]|0;j=b[k>>1]|0;if((u|0)==44100&m<<16>>16==1){if(j<<16>>16==2){a:do{if((ra(g|0,1,4,o|0)|0)>=4){do{if((a[g>>0]|0)==100){k=g;h=9400;do{k=k+1|0;h=h+1|0;v=a[k>>0]|0;w=a[h>>0]|0}while(!((v<<24>>24==0?1:v<<24>>24!=w<<24>>24)|w<<24>>24==0));if(v<<24>>24==w<<24>>24){break a}}ra(n|0,1,4,o|0)|0;Cb(o|0,c[n>>2]|0,1)|0}while((ra(g|0,1,4,o|0)|0)>=4)}}while(0);if((a[g>>0]|0)==100){w=g;g=9400;do{w=w+1|0;g=g+1|0;x=a[w>>0]|0;y=a[g>>0]|0}while(!((x<<24>>24==0?1:x<<24>>24!=y<<24>>24)|y<<24>>24==0));if(x<<24>>24==y<<24>>24){ra(n|0,1,4,o|0)|0;y=c[n>>2]|0;n=Pd(y)|0;ra(n|0,y|0,1,o|0)|0;Fb(o|0)|0;x=Pd(28)|0;c[x>>2]=44100;c[x+4>>2]=1;c[x+20>>2]=n;c[x+12>>2]=2;c[x+8>>2]=0;c[x+16>>2]=(y|0)/2|0;c[x+24>>2]=c[2316];c[2316]=x;p=x;i=e;return p|0}}Ja(9592)|0;Fb(o|0)|0;p=0;i=e;return p|0}else{z=1;A=j}}else{z=m;A=j}c[f>>2]=u;c[f+4>>2]=z<<16>>16;c[f+8>>2]=A<<16>>16;eb(9320,f|0)|0;Fb(o|0)|0;p=0;i=e;return p|0}}Ja(9712)|0;Fb(o|0)|0;p=0;i=e;return p|0}}Ja(9752)|0;Fb(o|0)|0;p=0;i=e;return p|0}function ad(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0;e=i;f=c[a>>2]|0;if((f|0)!=0){g=c[f>>2]|0;h=c[f+4>>2]|0;j=(c[g+4>>2]|0)+b|0;k=c[1284]|0;l=(c[g+8>>2]|0)+d|0;m=k-(c[g+16>>2]|0)-l|0;n=1.0/+(c[g+12>>2]|0);o=+(h|0);p=o*+(((c[a+12>>2]|0)/(c[f+16>>2]|0)|0|0)%(c[f+12>>2]|0)|0|0)*n;if((c[1280]|0)!=(g|0)){Sc();c[1280]=g}Lc(c[1278]|0,+(j|0),+(k-l|0),p,+(j+h|0),+(m|0),o*n+p);i=e;return}m=c[a+4>>2]|0;if((m|0)==0){i=e;return}a=(c[m+4>>2]|0)+b|0;b=(c[1284]|0)-((c[m+8>>2]|0)+d)|0;p=+((c[m+12>>2]|0)+a|0);n=+(b-(c[m+16>>2]|0)|0);if((c[1280]|0)!=(m|0)){Sc();c[1280]=m}Lc(c[1278]|0,+(a|0),+(b|0),0.0,p,n,1.0);i=e;return}function bd(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0;b=i;d=c[2448]|0;if((d|0)==0){e=Pd(216)|0}else{c[2448]=c[d+212>>2];e=d}d=e+4|0;c[d>>2]=0;f=e+16|0;h=e+32|0;c[f+0>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[h>>2]=9;f=e+36|0;c[f>>2]=1;j=e+40|0;k=e+68|0;c[j+0>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;g[k>>2]=1.0;l=e+72|0;g[l>>2]=1.0;m=e+76|0;g[m>>2]=1.0;n=e+80|0;g[n>>2]=1.0;o=e+84|0;p=e+104|0;q=e+108|0;r=e+116|0;c[r>>2]=0;s=e+132|0;c[o+0>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;g[s>>2]=1.0;t=e+128|0;g[t>>2]=1.0;u=e+124|0;g[u>>2]=1.0;v=e+120|0;g[v>>2]=1.0;w=e+148|0;g[w>>2]=1.0;x=e+144|0;g[x>>2]=1.0;y=e+140|0;g[y>>2]=1.0;z=e+136|0;g[z>>2]=1.0;A=e+152|0;c[e+212>>2]=0;B=A+0|0;C=B+44|0;do{c[B>>2]=0;B=B+4|0}while((B|0)<(C|0));c[e>>2]=a;c[d>>2]=c[a+4>>2];d=e+24|0;g[d>>2]=+g[a+24>>2];B=e+28|0;g[B>>2]=+g[a+28>>2];c[h>>2]=c[a+32>>2];c[f>>2]=c[a+36>>2];g[j>>2]=+g[a+40>>2];j=e+52|0;g[j>>2]=+g[a+52>>2];f=e+56|0;g[f>>2]=+g[a+56>>2];g[k>>2]=+g[a+68>>2];g[l>>2]=+g[a+72>>2];D=+g[a+76>>2];g[m>>2]=D;g[n>>2]=+g[a+80>>2];g[o>>2]=+g[a+84>>2];g[e+88>>2]=+g[a+88>>2];g[e+92>>2]=+g[a+92>>2];g[e+96>>2]=+g[a+96>>2];g[e+100>>2]=+g[a+100>>2];c[q>>2]=c[a+108>>2];c[p>>2]=c[a+104>>2];c[r>>2]=c[a+116>>2];g[v>>2]=+g[a+120>>2];g[u>>2]=+g[a+124>>2];g[t>>2]=+g[a+128>>2];g[s>>2]=+g[a+132>>2];g[z>>2]=+g[a+136>>2];g[y>>2]=+g[a+140>>2];g[x>>2]=+g[a+144>>2];g[w>>2]=+g[a+148>>2];w=c[a+152>>2]|0;c[A>>2]=w;c[e+156>>2]=c[a+156>>2];c[e+160>>2]=c[a+160>>2];c[e+164>>2]=c[a+164>>2];c[e+168>>2]=c[a+168>>2];c[e+172>>2]=c[a+172>>2];c[e+176>>2]=c[a+176>>2];c[e+180>>2]=c[a+180>>2];c[e+184>>2]=c[a+184>>2];c[e+188>>2]=c[a+188>>2];c[e+192>>2]=c[a+192>>2];E=+g[k>>2];F=(D>E?D:E)*.5+10.0;D=+g[l>>2];G=(D>E?D:E)*.5+10.0;E=+g[j>>2];D=+g[d>>2];H=E+D;if(E>0.0){g[e+196>>2]=H+G;g[e+200>>2]=D-G}else{g[e+200>>2]=H-G;g[e+196>>2]=D+G}G=+g[f>>2];D=+g[B>>2];H=G+D;if(G>0.0){g[e+204>>2]=F+H;g[e+208>>2]=D-F}else{g[e+208>>2]=H-F;g[e+204>>2]=F+D}if((w|0)==0){i=b;return e|0}xc[w&7](e);i=b;return e|0}function cd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0,Y=0,Z=0,_=0,$=0;e=i;i=i+48|0;f=e+40|0;h=e;j=e+8|0;k=e+16|0;l=e+24|0;m=e+32|0;n=(c[b+32>>2]|c[a+32>>2])&6;if((n|0)==2){o=+g[a+80>>2];p=+g[b+80>>2];if(!(o<=0.0&p>0.0)){if(p<=0.0&o>0.0){q=a;r=b}else{s=0;i=e;return s|0}}else{q=b;r=a}g[h>>2]=0.0;t=h+4|0;g[t>>2]=-1.0;o=(+g[q+76>>2]+ +g[r+76>>2])*.5;g[j>>2]=+g[r+24>>2]+o*0.0;g[j+4>>2]=+g[r+28>>2]+o*-1.0;if((Kc(q+24|0,q+52|0,h,j,+g[r+72>>2]+ +g[q+72>>2],f)|0)==0){s=0;i=e;return s|0}o=+g[f>>2];if((d|0)==0){s=1;i=e;return s|0}j=c[d>>2]|0;u=c[2450]|0;if((u|0)==0){v=Pd(32)|0}else{c[2450]=c[u+28>>2];v=u}u=v+28|0;c[u>>2]=0;c[v>>2]=2;c[v+4>>2]=q;c[v+8>>2]=r;g[v+12>>2]=o;g[v+16>>2]=+g[h>>2];g[v+20>>2]=+g[t>>2];c[v+24>>2]=1;if((j|0)!=0){t=j;j=0;while(1){if(!(+g[t+12>>2]>2]|0;if((r|0)==0){w=0;x=t;break}else{q=t;t=r;j=q}}if((x|0)==0){y=w;z=13}else{c[x+28>>2]=v;A=w}}else{y=0;z=13}if((z|0)==13){c[d>>2]=v;A=y}c[u>>2]=A;s=1;i=e;return s|0}else if((n|0)==4){o=+g[a+80>>2];p=+g[b+80>>2];if(!(o<=0.0&p>0.0)){if(p<=0.0&o>0.0){B=a;C=b}else{s=0;i=e;return s|0}}else{B=b;C=a}g[f>>2]=1.0;g[l>>2]=0.0;n=l+4|0;g[n>>2]=-1.0;A=B+76|0;u=C+76|0;o=(+g[A>>2]+ +g[u>>2])*.5;y=C+24|0;g[m>>2]=+g[y>>2]+o*0.0;v=C+28|0;w=m+4|0;g[w>>2]=+g[v>>2]+o*-1.0;x=C+72|0;j=B+72|0;t=B+24|0;q=B+52|0;if((Kc(t,q,l,m,+g[x>>2]+ +g[j>>2],k)|0)!=0?(o=+g[k>>2],o<+g[f>>2]):0){g[h>>2]=+g[l>>2];g[h+4>>2]=+g[n>>2];g[f>>2]=o}g[l>>2]=0.0;g[n>>2]=1.0;o=(+g[A>>2]+ +g[u>>2])*.5;g[m>>2]=+g[y>>2]+o*0.0;g[w>>2]=+g[v>>2]+o;if((Kc(t,q,l,m,+g[x>>2]+ +g[j>>2],k)|0)!=0?(o=+g[k>>2],o<+g[f>>2]):0){g[h>>2]=+g[l>>2];g[h+4>>2]=+g[n>>2];g[f>>2]=o}g[l>>2]=1.0;g[n>>2]=0.0;o=(+g[j>>2]+ +g[x>>2])*.5;g[m>>2]=+g[y>>2]+o;g[w>>2]=+g[v>>2]+o*0.0;if((Kc(t,q,l,m,+g[u>>2]+ +g[A>>2],k)|0)!=0?(o=+g[k>>2],o<+g[f>>2]):0){g[h>>2]=+g[l>>2];g[h+4>>2]=+g[n>>2];g[f>>2]=o;D=0}else{D=1}g[l>>2]=-1.0;g[n>>2]=0.0;o=(+g[j>>2]+ +g[x>>2])*.5;g[m>>2]=+g[y>>2]+o*-1.0;g[w>>2]=+g[v>>2]+o*0.0;if((Kc(t,q,l,m,+g[u>>2]+ +g[A>>2],k)|0)!=0){o=+g[k>>2];p=+g[f>>2];if(o>2]=+g[l>>2];g[h+4>>2]=+g[n>>2];g[f>>2]=o;E=o;F=0}else{E=p;F=D}}else{E=+g[f>>2];F=D}if(!(E<1.0)){s=0;i=e;return s|0}if((d|0)==0){s=1;i=e;return s|0}D=c[d>>2]|0;n=c[2450]|0;if((n|0)==0){G=Pd(32)|0}else{c[2450]=c[n+28>>2];G=n}n=G+28|0;c[n>>2]=0;c[G>>2]=2;c[G+4>>2]=B;c[G+8>>2]=C;g[G+12>>2]=E;g[G+16>>2]=+g[h>>2];g[G+20>>2]=+g[h+4>>2];c[G+24>>2]=F;if((D|0)!=0){F=D;D=0;while(1){if(!(+g[F+12>>2]>2]|0;if((C|0)==0){H=0;I=F;break}else{B=F;F=C;D=B}}if((I|0)==0){J=H;z=40}else{c[I+28>>2]=G;K=H}}else{J=0;z=40}if((z|0)==40){c[d>>2]=G;K=J}c[n>>2]=K;s=1;i=e;return s|0}else{E=+g[a+52>>2]- +g[b+52>>2];p=+g[a+56>>2]- +g[b+56>>2];o=+g[a+68>>2]+ +g[b+68>>2];L=+g[a+24>>2];M=L-o;N=o+L;if(E>0.0){O=N+E;P=M}else{O=N;P=M+E}M=+g[b+24>>2];if(MO){s=0;i=e;return s|0}O=+g[a+28>>2];P=O-o;N=o+O;if(p>0.0){R=N+p;S=P}else{R=N;S=P+p}P=+g[b+28>>2];if(PR){s=0;i=e;return s|0}R=1.0/o;o=R*E;S=R*p;N=o*o+S*S;if(N==0.0){s=0;i=e;return s|0}T=R*L-R*M;U=R*O-P*R;V=(S*U+o*T)*2.0;o=V*V-N*4.0*(U*U+T*T+-1.0);if(o<0.0){s=0;i=e;return s|0}T=N*2.0;if(T==0.0){s=0;i=e;return s|0}N=+Q(+o);o=(-V-N)/T;U=(N-V)/T;if(o>=-0.0?o=-0.0)){s=0;i=e;return s|0}if(o>U&U<=1.0){W=U}else{s=0;i=e;return s|0}}g[f>>2]=W;U=R*(W*E+L-M);g[h>>2]=U;M=R*(W*p+O-P);g[h+4>>2]=M;if((d|0)==0){s=1;i=e;return s|0}h=c[d>>2]|0;f=c[2450]|0;if((f|0)==0){X=Pd(32)|0}else{c[2450]=c[f+28>>2];X=f}f=X+28|0;c[f>>2]=0;c[X>>2]=1;c[X+4>>2]=a;c[X+8>>2]=b;g[X+12>>2]=W;g[X+16>>2]=U;g[X+20>>2]=M;c[X+24>>2]=0;if((h|0)!=0){b=h;h=0;while(1){if(!(+g[b+12>>2]>2]|0;if((a|0)==0){Y=0;Z=b;break}else{K=b;b=a;h=K}}if((Z|0)==0){_=Y;z=66}else{c[Z+28>>2]=X;$=Y}}else{_=0;z=66}if((z|0)==66){c[d>>2]=X;$=_}c[f>>2]=$;s=1;i=e;return s|0}return 0}function dd(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0,h=0.0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0;e=i;c=+g[a+80>>2];do{if(c>0.0){f=b+80|0;h=+g[f>>2];if(!(h>0.0)){if(!(h<=0.0)){break}j=a+52|0;k=+g[j>>2];l=+g[d>>2];m=a+56|0;n=+g[m>>2];o=+g[d+4>>2];p=(+g[a+84>>2]+1.0)*(k*l+n*o);q=k-l*p;g[j>>2]=q;l=n-o*p;g[m>>2]=l;p=+g[a+76>>2];o=+g[a+68>>2];n=(p>o?p:o)*.5+10.0;p=+g[a+72>>2];k=(p>o?p:o)*.5+10.0;o=+g[a+24>>2];p=q+o;if(q>0.0){g[a+196>>2]=p+k;g[a+200>>2]=o-k}else{g[a+200>>2]=p-k;g[a+196>>2]=o+k}k=+g[a+28>>2];o=l+k;if(l>0.0){g[a+204>>2]=n+o;g[a+208>>2]=k-n;i=e;return}else{g[a+208>>2]=o-n;g[a+204>>2]=n+k;i=e;return}}k=c+h;m=a+52|0;n=+g[m>>2];o=+g[d>>2];j=a+56|0;l=+g[j>>2];r=d+4|0;p=+g[r>>2];q=+P(+(n*o+l*p));s=b+52|0;t=b+56|0;u=h*c*((c*+g[a+84>>2]+h*+g[b+84>>2])/k+1.0)*(q+ +P(+(o*+g[s>>2]+p*+g[t>>2])))/k;k=u/c;q=n-o*k;g[m>>2]=q;o=l-p*k;g[j>>2]=o;k=+g[a+76>>2];p=+g[a+68>>2];l=(k>p?k:p)*.5+10.0;k=+g[a+72>>2];n=(k>p?k:p)*.5+10.0;p=+g[a+24>>2];k=q+p;if(q>0.0){g[a+196>>2]=k+n;g[a+200>>2]=p-n}else{g[a+200>>2]=k-n;g[a+196>>2]=p+n}n=+g[a+28>>2];p=o+n;if(o>0.0){g[a+204>>2]=l+p;g[a+208>>2]=n-l}else{g[a+208>>2]=p-l;g[a+204>>2]=l+n}n=u/+g[f>>2];u=n*+g[r>>2];l=+g[d>>2]*n+ +g[s>>2];g[s>>2]=l;n=u+ +g[t>>2];g[t>>2]=n;u=+g[b+76>>2];p=+g[b+68>>2];o=(u>p?u:p)*.5+10.0;u=+g[b+72>>2];k=(u>p?u:p)*.5+10.0;p=+g[b+24>>2];u=l+p;if(l>0.0){g[b+196>>2]=u+k;g[b+200>>2]=p-k}else{g[b+200>>2]=u-k;g[b+196>>2]=p+k}k=+g[b+28>>2];p=n+k;if(n>0.0){g[b+204>>2]=o+p;g[b+208>>2]=k-o;i=e;return}else{g[b+208>>2]=p-o;g[b+204>>2]=o+k;i=e;return}}}while(0);if(c<=0.0?+g[b+80>>2]>0.0:0){t=b+52|0;c=+g[t>>2];k=+g[d>>2];s=b+56|0;o=+g[s>>2];p=+g[d+4>>2];n=(+g[b+84>>2]+1.0)*(c*k+o*p);u=c+k*n;g[t>>2]=u;k=o+p*n;g[s>>2]=k;n=+g[b+76>>2];p=+g[b+68>>2];o=(n>p?n:p)*.5+10.0;n=+g[b+72>>2];c=(n>p?n:p)*.5+10.0;p=+g[b+24>>2];n=u+p;if(u>0.0){g[b+196>>2]=n+c;g[b+200>>2]=p-c}else{g[b+200>>2]=n-c;g[b+196>>2]=p+c}c=+g[b+28>>2];p=k+c;if(k>0.0){g[b+204>>2]=o+p;g[b+208>>2]=c-o;i=e;return}else{g[b+208>>2]=p-o;g[b+204>>2]=o+c;i=e;return}}g[a+52>>2]=0.0;g[a+56>>2]=0.0;c=+g[a+76>>2];o=+g[a+68>>2];p=(c>o?c:o)*.5+10.0;c=+g[a+72>>2];k=(c>o?c:o)*.5+10.0;o=+g[a+24>>2];g[a+200>>2]=o+0.0-k;g[a+196>>2]=o+k;k=+g[a+28>>2];g[a+208>>2]=k+0.0-p;g[a+204>>2]=p+k;g[b+52>>2]=0.0;g[b+56>>2]=0.0;k=+g[b+76>>2];p=+g[b+68>>2];o=(k>p?k:p)*.5+10.0;k=+g[b+72>>2];c=(k>p?k:p)*.5+10.0;p=+g[b+24>>2];g[b+200>>2]=p+0.0-c;g[b+196>>2]=p+c;c=+g[b+28>>2];g[b+208>>2]=c+0.0-o;g[b+204>>2]=o+c;i=e;return}function ed(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0.0,h=0.0,j=0.0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0;e=i;f=+Q(+(b*b+c*c));h=1.0/f;j=h*b;b=h*c;k=a+52|0;c=+g[k>>2];l=a+56|0;h=+g[l>>2];m=c*j+b*h;if(mf?f:n;n=c+j*m;g[k>>2]=n;j=b*m+h;g[l>>2]=j;o=n;p=j}else{o=c;p=h}h=+g[a+76>>2];c=+g[a+68>>2];j=(h>c?h:c)*.5+10.0;h=+g[a+72>>2];n=(h>c?h:c)*.5+10.0;c=+g[a+24>>2];h=o+c;if(o>0.0){g[a+196>>2]=h+n;g[a+200>>2]=c-n}else{g[a+200>>2]=h-n;g[a+196>>2]=c+n}n=+g[a+28>>2];c=p+n;if(p>0.0){g[a+204>>2]=j+c;g[a+208>>2]=n-j;i=e;return}else{g[a+208>>2]=c-j;g[a+204>>2]=j+n;i=e;return}}function fd(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0;b=i;d=c[2456]|0;e=c[2458]|0;if((d|0)<(e|0)){f=c[2452]|0;h=d;j=c[2454]|0;k=d}else{l=(e|0)==0?32:e<<1;c[2458]=l;e=l<<2;l=Pd(e)|0;m=Pd(e)|0;e=c[2452]|0;if((d|0)<=0){if((e|0)==0){n=d;o=c[2456]|0}else{p=8}}else{q=c[2454]|0;r=0;do{c[l+(r<<2)>>2]=c[e+(r<<2)>>2];c[m+(r<<2)>>2]=c[q+(r<<2)>>2];r=r+1|0}while((r|0)<(d|0));p=8}if((p|0)==8){Qd(e);Qd(c[2454]|0);e=c[2456]|0;n=e;o=e}c[2452]=l;c[2454]=m;f=l;h=n;j=m;k=o}c[f+(h<<2)>>2]=a;c[j+(h<<2)>>2]=1;h=k+1|0;c[2456]=h;j=a+32|0;o=c[j>>2]|0;if((o&16|0)!=0){s=+g[a+24>>2];t=+g[a+8>>2];m=s>2];v=(m?s:t)-u;w=u+(m?t:s);t=+g[a+28>>2];x=+g[a+12>>2];m=t-1){k=0;do{m=c[f+(k<<2)>>2]|0;t=+g[m+24>>2];if(!(!(v<=t)|!(w>=t))?(t=+g[m+28>>2],!(!(y<=t)|!(z>=t))):0){n=m+32|0;c[n>>2]=c[n>>2]|32}k=k+1|0}while((k|0)!=(h|0));A=s}else{A=s}}else{c[j>>2]=o|32;A=+g[a+24>>2]}s=+g[a+76>>2];z=+g[a+68>>2];y=(s>z?s:z)*.5+10.0;s=+g[a+72>>2];w=(s>z?s:z)*.5+10.0;z=+g[a+52>>2];s=z+A;if(z>0.0){g[a+196>>2]=s+w;g[a+200>>2]=A-w}else{g[a+200>>2]=s-w;g[a+196>>2]=w+A}A=+g[a+56>>2];w=+g[a+28>>2];s=A+w;if(A>0.0){g[a+204>>2]=y+s;g[a+208>>2]=w-y;i=b;return}else{g[a+208>>2]=s-y;g[a+204>>2]=y+w;i=b;return}}function gd(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0;b=i;d=c[2456]|0;if((d|0)<=0){e=0;i=b;return e|0}f=c[2452]|0;h=0;while(1){j=f+(h<<2)|0;k=h+1|0;if((c[j>>2]|0)==(a|0)){break}if((k|0)<(d|0)){h=k}else{e=0;l=21;break}}if((l|0)==21){i=b;return e|0}l=(c[2460]|0)==0;if(l){c[j>>2]=0;k=c[2454]|0;c[k+(h<<2)>>2]=0;m=k}else{k=c[2454]|0;c[k+(h<<2)>>2]=-2;m=k}c[2462]=1;k=a+32|0;n=c[k>>2]|0;if((n&16|0)==0){c[k>>2]=n|32}else{o=+g[a+24>>2];p=+g[a+8>>2];n=o>2];r=(n?o:p)-q;s=q+(n?p:o);o=+g[a+28>>2];p=+g[a+12>>2];n=o>2]|0;o=+g[k+24>>2];if(!(!(r<=o)|!(s>=o))?(o=+g[k+28>>2],!(!(t<=o)|!(u>=o))):0){v=k+32|0;c[v>>2]=c[v>>2]|32}n=n+1|0}while((n|0)!=(d|0))}if((h|0)==-1){e=0;i=b;return e|0}if(!l){c[j>>2]=a;c[m+(h<<2)>>2]=-1;e=1;i=b;return e|0}h=c[a+156>>2]|0;if((h|0)!=0){xc[h&7](a)}c[a+212>>2]=c[2448];c[2448]=a;e=1;i=b;return e|0}function hd(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0.0,Ia=0.0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0;a=i;i=i+32|0;b=a+24|0;d=a;e=a+8|0;f=a+16|0;c[2476]=c[2480];c[2478]=c[2482];nb(e|0,0)|0;h=c[e>>2]|0;j=qe(h|0,((h|0)<0)<<31>>31|0,1e6,0)|0;h=c[e+4>>2]|0;k=ee(j|0,E|0,h|0,((h|0)<0)<<31>>31|0)|0;h=E;j=c[2456]|0;if((c[2462]|0)==0){l=j}else{if((j|0)>0){m=j;j=0;n=0;while(1){o=c[2452]|0;p=c[o+(j<<2)>>2]|0;do{if((p|0)!=0){q=c[2454]|0;r=c[q+(j<<2)>>2]|0;if((r|0)==-1){s=c[p+156>>2]|0;if((s|0)==0){t=m}else{xc[s&7](p);t=c[2456]|0}c[p+212>>2]=c[2448];c[2448]=p;u=t;v=n;break}else if((r|0)==-2){u=m;v=n;break}else{if((j|0)>(n|0)){c[o+(n<<2)>>2]=p;c[q+(n<<2)>>2]=r}u=m;v=n+1|0;break}}else{u=m;v=n}}while(0);j=j+1|0;if((j|0)>=(u|0)){w=v;break}else{m=u;n=v}}}else{w=0}c[2456]=w;c[2462]=0;c[2460]=0;l=w}c[2460]=1;if((l|0)>0){w=l;l=0;while(1){v=c[(c[2452]|0)+(l<<2)>>2]|0;if((v|0)!=0?(n=c[2484]|0,u=v+32|0,c[u>>2]=c[u>>2]&-65,u=c[v+160>>2]|0,(u|0)!=0):0){yc[u&15](v,n);x=c[2456]|0}else{x=w}l=l+1|0;if((l|0)>=(x|0)){break}else{w=x}}if((c[2462]|0)!=0){if((x|0)>0){w=x;x=0;l=0;while(1){n=c[2452]|0;v=c[n+(x<<2)>>2]|0;do{if((v|0)!=0){u=c[2454]|0;m=c[u+(x<<2)>>2]|0;if((m|0)==-1){j=c[v+156>>2]|0;if((j|0)==0){y=w}else{xc[j&7](v);y=c[2456]|0}c[v+212>>2]=c[2448];c[2448]=v;z=y;A=l;break}else if((m|0)==-2){z=w;A=l;break}else{if((x|0)>(l|0)){c[n+(l<<2)>>2]=v;c[u+(l<<2)>>2]=m}z=w;A=l+1|0;break}}else{z=w;A=l}}while(0);x=x+1|0;if((x|0)>=(z|0)){B=A;break}else{w=z;l=A}}}else{B=0}c[2456]=B;c[2462]=0;c[2460]=0}}nb(e|0,0)|0;B=c[e>>2]|0;A=qe(B|0,((B|0)<0)<<31>>31|0,1e6,0)|0;B=c[e+4>>2]|0;l=ee(A|0,E|0,B|0,((B|0)<0)<<31>>31|0)|0;B=de(l|0,E|0,k|0,h|0)|0;h=9944;k=ee(B|0,E|0,c[h>>2]|0,c[h+4>>2]|0)|0;h=9944;c[h>>2]=k;c[h+4>>2]=E;nb(e|0,0)|0;h=c[e>>2]|0;k=qe(h|0,((h|0)<0)<<31>>31|0,1e6,0)|0;h=c[e+4>>2]|0;e=ee(k|0,E|0,h|0,((h|0)<0)<<31>>31|0)|0;h=E;if((c[2462]|0)!=0){k=c[2456]|0;if((k|0)>0){B=k;k=0;l=0;while(1){A=c[2452]|0;z=c[A+(k<<2)>>2]|0;do{if((z|0)!=0){w=c[2454]|0;x=c[w+(k<<2)>>2]|0;if((x|0)==-2){C=B;D=l;break}else if((x|0)==-1){y=c[z+156>>2]|0;if((y|0)==0){F=B}else{xc[y&7](z);F=c[2456]|0}c[z+212>>2]=c[2448];c[2448]=z;C=F;D=l;break}else{if((k|0)>(l|0)){c[A+(l<<2)>>2]=z;c[w+(l<<2)>>2]=x}C=B;D=l+1|0;break}}else{C=B;D=l}}while(0);k=k+1|0;if((k|0)>=(C|0)){G=D;break}else{B=C;l=D}}}else{G=0}c[2456]=G;c[2462]=0;c[2460]=0}c[2460]=1;G=b+4|0;D=d+4|0;l=1;while(1){c[f>>2]=0;C=c[2456]|0;a:do{if((C|0)>0){B=C;k=0;while(1){F=c[2452]|0;z=c[F+(k<<2)>>2]|0;b:do{if((c[z+32>>2]&1|0)!=0?!(+g[z+80>>2]<0.0):0){H=+g[z+52>>2];if(!(H<=0.0)|!(H>=-0.0)){if((B|0)>0){I=F;J=B;K=0}else{L=B;break}}else{H=+g[z+56>>2];if((!(H<=0.0)|!(H>=-0.0))&(B|0)>0){I=F;J=B;K=0}else{L=B;break}}while(1){A=c[I+(K<<2)>>2]|0;c:do{if(((((c[A+32>>2]&1|0)!=0?(x=c[I+(k<<2)>>2]|0,+g[x+196>>2]>=+g[A+200>>2]):0)?+g[x+200>>2]<=+g[A+196>>2]:0)?+g[x+204>>2]>=+g[A+208>>2]:0)?+g[x+208>>2]<=+g[A+204>>2]:0){w=c[f>>2]|0;if((w|0)!=0){y=w;do{w=c[y+4>>2]|0;if((w|0)==(x|0)?(c[y+8>>2]|0)==(A|0):0){M=J;break c}if((w|0)==(A|0)?(c[y+8>>2]|0)==(x|0):0){M=J;break c}y=c[y+28>>2]|0}while((y|0)!=0)}cd(x,A,f)|0;M=c[2456]|0}else{M=J}}while(0);A=K+1|0;if((A|0)>=(M|0)){L=M;break b}I=c[2452]|0;J=M;K=A}}else{L=B}}while(0);k=k+1|0;if((k|0)>=(L|0)){break}else{B=L}}B=c[f>>2]|0;if((B|0)!=0){k=B;while(1){N=k+16|0;g[b>>2]=+g[N>>2];O=k+20|0;g[G>>2]=+g[O>>2];g[d>>2]=+g[N>>2]*-1.0;g[D>>2]=+g[O>>2]*-1.0;R=k+4|0;B=c[R>>2]|0;F=c[B+168>>2]|0;S=k+8|0;if((F|0)==0){T=1}else{z=wc[F&3](B,c[S>>2]|0,+g[k+12>>2],b)|0;T=(z|0)>1?2:(z|0)!=0&1}z=c[S>>2]|0;B=c[z+168>>2]|0;if((B|0)==0){U=T}else{F=wc[B&3](z,c[R>>2]|0,+g[k+12>>2],d)|0;U=(F|0)>1?2:(F|0)==0?0:T}if((U|0)==1){break}else if((U|0)==2){V=1;break a}F=c[k+28>>2]|0;if((F|0)==0){V=0;break a}else{k=F}}F=c[k>>2]|0;if((F|0)==1){z=c[R>>2]|0;H=+g[z+52>>2];W=+g[z+56>>2];B=c[S>>2]|0;X=+g[B+52>>2];Y=+g[B+56>>2];if(H*H+W*W>X*X+Y*Y){dd(z,B,0.0,d);V=1;break}else{dd(B,z,0.0,b);V=1;break}}else if((F|0)!=2){V=1;break}F=c[R>>2]|0;z=c[S>>2]|0;Y=+g[k+12>>2];X=(+g[F+96>>2]+ +g[z+96>>2])*.5;W=(+g[F+100>>2]+ +g[z+100>>2])*.5;z=F+52|0;H=+g[z>>2];Z=1.0-Y;B=F+56|0;_=+g[B>>2];$=+g[N>>2];aa=+g[O>>2];ba=-(Z*H*$+Z*_*aa);Z=+g[F+24>>2];ca=+g[F+28>>2];da=H+Z+$*ba;ea=_+ca+aa*ba;ba=H*Y+Z;H=_*Y+ca;do{if((c[k+24>>2]|0)!=0){Y=da-ba;_=ea-H;fa=+Q(+(Y*Y+_*_));if(!(fa0.0){ga=1.0-(W+X/fa);ha=ba+Y*ga;ia=H+_*ga;break}else{ga=1.0-W;ha=ba+ga*Y;ia=H+ga*_;break}}else{ha=ba;ia=H}}else{ha=da;ia=ea}}while(0);ea=ha+$*.10000000149011612-Z;g[z>>2]=ea;da=ia+aa*.10000000149011612-ca;g[B>>2]=da;H=+g[F+76>>2];ba=+g[F+68>>2];W=(H>ba?H:ba)*.5+10.0;H=+g[F+72>>2];X=(H>ba?H:ba)*.5+10.0;ba=ea+Z;if(ea>0.0){g[F+196>>2]=ba+X;g[F+200>>2]=Z-X}else{g[F+200>>2]=ba-X;g[F+196>>2]=Z+X}X=da+ca;if(da>0.0){g[F+204>>2]=W+X;g[F+208>>2]=ca-W;V=1;break}else{g[F+208>>2]=X-W;g[F+204>>2]=W+ca;V=1;break}}else{V=0}}else{V=0}}while(0);C=c[f>>2]|0;if((C|0)!=0){k=c[2450]|0;A=C;while(1){C=A+28|0;y=c[C>>2]|0;c[C>>2]=k;c[2450]=A;if((y|0)==0){break}else{C=A;A=y;k=C}}c[f>>2]=0}if(!(V&(l|0)<50)){break}l=l+1|0}if((l|0)==10?(l=c[2456]|0,(l|0)>0):0){V=l;l=0;while(1){f=c[2452]|0;O=c[f+(l<<2)>>2]|0;d:do{if((c[O+32>>2]&1|0)!=0?(V|0)>0?!(+g[O+80>>2]<0.0):0:0){N=f;S=0;while(1){R=c[N+(S<<2)>>2]|0;if(!((l|0)==(S|0)?1:(c[R+32>>2]&1|0)==0)?(cd(c[N+(l<<2)>>2]|0,R,0)|0)!=0:0){R=c[2452]|0;d=c[R+(l<<2)>>2]|0;g[d+52>>2]=0.0;g[d+56>>2]=0.0;ia=+g[d+76>>2];ha=+g[d+68>>2];W=(ia>ha?ia:ha)*.5+10.0;ia=+g[d+72>>2];X=(ia>ha?ia:ha)*.5+10.0;ha=+g[d+24>>2];g[d+200>>2]=ha+0.0-X;g[d+196>>2]=X+ha;ha=+g[d+28>>2];g[d+208>>2]=ha+0.0-W;g[d+204>>2]=W+ha;d=c[R+(S<<2)>>2]|0;g[d+52>>2]=0.0;g[d+56>>2]=0.0;ha=+g[d+76>>2];W=+g[d+68>>2];X=(ha>W?ha:W)*.5+10.0;ha=+g[d+72>>2];ia=(ha>W?ha:W)*.5+10.0;W=+g[d+24>>2];g[d+200>>2]=W+0.0-ia;g[d+196>>2]=ia+W;W=+g[d+28>>2];g[d+208>>2]=W+0.0-X;g[d+204>>2]=X+W}d=S+1|0;R=c[2456]|0;if((d|0)>=(R|0)){ja=R;break d}N=c[2452]|0;S=d}}else{ja=V}}while(0);l=l+1|0;if((l|0)>=(ja|0)){break}else{V=ja}}}if((c[2462]|0)!=0){ja=c[2456]|0;if((ja|0)>0){V=ja;ja=0;l=0;while(1){f=c[2452]|0;O=c[f+(ja<<2)>>2]|0;do{if((O|0)!=0){S=c[2454]|0;N=c[S+(ja<<2)>>2]|0;if((N|0)==-1){F=c[O+156>>2]|0;if((F|0)==0){ka=V}else{xc[F&7](O);ka=c[2456]|0}c[O+212>>2]=c[2448];c[2448]=O;la=ka;ma=l;break}else if((N|0)==-2){la=V;ma=l;break}else{if((ja|0)>(l|0)){c[f+(l<<2)>>2]=O;c[S+(l<<2)>>2]=N}la=V;ma=l+1|0;break}}else{la=V;ma=l}}while(0);ja=ja+1|0;if((ja|0)>=(la|0)){na=ma;break}else{V=la;l=ma}}}else{na=0}c[2456]=na;c[2462]=0;c[2460]=0}nb(b|0,0)|0;na=c[b>>2]|0;ma=qe(na|0,((na|0)<0)<<31>>31|0,1e6,0)|0;na=c[b+4>>2]|0;l=ee(ma|0,E|0,na|0,((na|0)<0)<<31>>31|0)|0;na=de(l|0,E|0,e|0,h|0)|0;h=9952;e=ee(na|0,E|0,c[h>>2]|0,c[h+4>>2]|0)|0;h=9952;c[h>>2]=e;c[h+4>>2]=E;nb(b|0,0)|0;h=c[b>>2]|0;e=qe(h|0,((h|0)<0)<<31>>31|0,1e6,0)|0;h=c[b+4>>2]|0;na=ee(e|0,E|0,h|0,((h|0)<0)<<31>>31|0)|0;h=E;e=c[2456]|0;if((c[2462]|0)==0){oa=e}else{if((e|0)>0){l=e;e=0;ma=0;while(1){la=c[2452]|0;V=c[la+(e<<2)>>2]|0;do{if((V|0)!=0){ja=c[2454]|0;ka=c[ja+(e<<2)>>2]|0;if((ka|0)==-1){O=c[V+156>>2]|0;if((O|0)==0){pa=l}else{xc[O&7](V);pa=c[2456]|0}c[V+212>>2]=c[2448];c[2448]=V;qa=pa;ra=ma;break}else if((ka|0)==-2){qa=l;ra=ma;break}else{if((e|0)>(ma|0)){c[la+(ma<<2)>>2]=V;c[ja+(ma<<2)>>2]=ka}qa=l;ra=ma+1|0;break}}else{qa=l;ra=ma}}while(0);e=e+1|0;if((e|0)>=(qa|0)){sa=ra;break}else{l=qa;ma=ra}}}else{sa=0}c[2456]=sa;c[2462]=0;c[2460]=0;oa=sa}c[2460]=1;if((oa|0)>0){sa=oa;oa=0;while(1){ra=c[2452]|0;ma=c[ra+(oa<<2)>>2]|0;e:do{if((c[ma+32>>2]&8|0)!=0?(sa|0)>0?!(+g[ma+80>>2]<0.0):0:0){qa=ra;l=sa;e=0;while(1){pa=c[qa+(e<<2)>>2]|0;if((oa|0)==(e|0)?1:(c[pa+32>>2]&8|0)==0){ta=l}else{V=c[qa+(oa<<2)>>2]|0;ca=+P(+(+g[V+24>>2]- +g[pa+24>>2]));Z=+P(+(+g[V+28>>2]- +g[pa+28>>2]));la=c[V+172>>2]|0;if((la|0)!=0?(aa=+g[V+68>>2],!(!(ca<=aa)|!(Z<=aa))):0){yc[la&15](V,pa)}la=c[pa+172>>2]|0;if((la|0)!=0?(aa=+g[pa+68>>2],!(!(ca<=aa)|!(Z<=aa))):0){yc[la&15](pa,V)}ta=c[2456]|0}V=e+1|0;if((V|0)>=(ta|0)){ua=ta;break e}qa=c[2452]|0;l=ta;e=V}}else{ua=sa}}while(0);oa=oa+1|0;if((oa|0)>=(ua|0)){break}else{sa=ua}}if((c[2462]|0)!=0){if((ua|0)>0){sa=ua;ua=0;oa=0;while(1){ta=c[2452]|0;ra=c[ta+(ua<<2)>>2]|0;do{if((ra|0)!=0){ma=c[2454]|0;e=c[ma+(ua<<2)>>2]|0;if((e|0)==-1){l=c[ra+156>>2]|0;if((l|0)==0){va=sa}else{xc[l&7](ra);va=c[2456]|0}c[ra+212>>2]=c[2448];c[2448]=ra;wa=va;xa=oa;break}else if((e|0)==-2){wa=sa;xa=oa;break}else{if((ua|0)>(oa|0)){c[ta+(oa<<2)>>2]=ra;c[ma+(oa<<2)>>2]=e}wa=sa;xa=oa+1|0;break}}else{wa=sa;xa=oa}}while(0);ua=ua+1|0;if((ua|0)>=(wa|0)){ya=xa;break}else{sa=wa;oa=xa}}}else{ya=0}c[2456]=ya;c[2462]=0;c[2460]=0}}nb(b|0,0)|0;ya=c[b>>2]|0;xa=qe(ya|0,((ya|0)<0)<<31>>31|0,1e6,0)|0;ya=c[b+4>>2]|0;oa=ee(xa|0,E|0,ya|0,((ya|0)<0)<<31>>31|0)|0;ya=de(oa|0,E|0,na|0,h|0)|0;h=9960;na=ee(ya|0,E|0,c[h>>2]|0,c[h+4>>2]|0)|0;h=9960;c[h>>2]=na;c[h+4>>2]=E;h=c[2456]|0;while(1){if((h|0)<=1){break}na=c[2452]|0;ya=c[na>>2]|0;oa=1;xa=0;while(1){wa=na+(oa+ -1<<2)|0;sa=na+(oa<<2)|0;ua=c[sa>>2]|0;va=c[ya+36>>2]|0;ra=c[ua+36>>2]|0;if((va|0)<=(ra|0)){if((va|0)>=(ra|0)?+g[ya+28>>2]+ +g[ya+40>>2]>+g[ua+28>>2]+ +g[ua+40>>2]:0){za=158}else{Aa=ua;Ba=xa}}else{za=158}if((za|0)==158){za=0;c[sa>>2]=ya;c[wa>>2]=ua;Aa=ya;Ba=oa}oa=oa+1|0;if((oa|0)==(h|0)){break}else{ya=Aa;xa=Ba}}if((Ba|0)>0){h=Ba}else{break}}nb(b|0,0)|0;Ba=c[b>>2]|0;h=qe(Ba|0,((Ba|0)<0)<<31>>31|0,1e6,0)|0;Ba=c[b+4>>2]|0;Aa=ee(h|0,E|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0;Ba=E;h=c[2456]|0;if((c[2462]|0)==0){Ca=h}else{if((h|0)>0){za=h;h=0;xa=0;while(1){ya=c[2452]|0;oa=c[ya+(h<<2)>>2]|0;do{if((oa|0)!=0){na=c[2454]|0;ua=c[na+(h<<2)>>2]|0;if((ua|0)==-1){wa=c[oa+156>>2]|0;if((wa|0)==0){Da=za}else{xc[wa&7](oa);Da=c[2456]|0}c[oa+212>>2]=c[2448];c[2448]=oa;Ea=Da;Fa=xa;break}else if((ua|0)==-2){Ea=za;Fa=xa;break}else{if((h|0)>(xa|0)){c[ya+(xa<<2)>>2]=oa;c[na+(xa<<2)>>2]=ua}Ea=za;Fa=xa+1|0;break}}else{Ea=za;Fa=xa}}while(0);h=h+1|0;if((h|0)>=(Ea|0)){Ga=Fa;break}else{za=Ea;xa=Fa}}}else{Ga=0}c[2456]=Ga;c[2462]=0;c[2460]=0;Ca=Ga}c[2460]=1;if((Ca|0)>0){Ca=c[2452]|0;Ga=0;do{Fa=c[Ca+(Ga<<2)>>2]|0;xa=c[2484]|0;Ea=Fa+24|0;aa=+g[Ea>>2];g[Fa+16>>2]=aa;za=Fa+28|0;Z=+g[za>>2];g[Fa+20>>2]=Z;h=Fa+52|0;ca=+g[h>>2];Da=Fa+56|0;$=+g[Da>>2];W=ca*ca+$*$;do{if(W>0.0){X=ca+aa;g[Ea>>2]=X;ia=Z+$;g[za>>2]=ia;ha=+Q(+W);da=+g[Fa+88>>2];if(ha>2]=0.0;Ha=0.0;Ia=0.0}else{ba=1.0-(+g[Fa+92>>2]+da/ha);ha=ca*ba;g[h>>2]=ha;Ha=$*ba;Ia=ha}g[Da>>2]=Ha;g[Fa+8>>2]=X;g[Fa+12>>2]=ia;oa=Fa+32|0;c[oa>>2]=c[oa>>2]|64;ha=+g[Fa+76>>2];ba=+g[Fa+68>>2];da=(ha>ba?ha:ba)*.5+10.0;ha=+g[Fa+72>>2];ea=(ha>ba?ha:ba)*.5+10.0;ba=Ia+X;if(Ia>0.0){g[Fa+196>>2]=ba+ea;g[Fa+200>>2]=X-ea}else{g[Fa+200>>2]=ba-ea;g[Fa+196>>2]=X+ea}ea=Ha+ia;if(Ha>0.0){g[Fa+204>>2]=da+ea;g[Fa+208>>2]=ia-da;break}else{g[Fa+208>>2]=ea-da;g[Fa+204>>2]=da+ia;break}}}while(0);Da=c[Fa+164>>2]|0;if((Da|0)!=0){yc[Da&15](Fa,xa)}if((c[Fa+104>>2]|0)!=0?(c[Fa+112>>2]|0)==0:0){Da=Fa+116|0;c[Da>>2]=(c[Da>>2]|0)+xa}Ca=c[2452]|0;Da=c[Ca+(Ga<<2)>>2]|0;h=Da+32|0;za=c[h>>2]|0;Ea=c[2456]|0;do{if((za&64|0)!=0){if((za&16|0)==0){c[h>>2]=za|32;Ja=Ea;break}$=+g[Da+24>>2];ca=+g[Da+8>>2];oa=$>2];Z=(oa?$:ca)-W;aa=W+(oa?ca:$);$=+g[Da+28>>2];ca=+g[Da+12>>2];oa=$0){oa=0;do{ya=c[Ca+(oa<<2)>>2]|0;$=+g[ya+24>>2];do{if(!(!(Z<=$)|!(aa>=$))){ca=+g[ya+28>>2];if(!(ia<=ca)|!(da>=ca)){break}ua=ya+32|0;c[ua>>2]=c[ua>>2]|32}}while(0);oa=oa+1|0}while((oa|0)!=(Ea|0));Ja=Ea}else{Ja=Ea}}else{Ja=Ea}}while(0);Ga=Ga+1|0}while((Ga|0)<(Ja|0))}if((c[2466]|0)!=0){Id()}if((c[2462]|0)==0){nb(b|0,0)|0;Ka=c[b>>2]|0;La=(Ka|0)<0;Ma=La<<31>>31;Na=qe(Ka|0,Ma|0,1e6,0)|0;Oa=E;Pa=b+4|0;Qa=c[Pa>>2]|0;Ra=(Qa|0)<0;Sa=Ra<<31>>31;Ta=ee(Na|0,Oa|0,Qa|0,Sa|0)|0;Ua=E;Va=de(Ta|0,Ua|0,Aa|0,Ba|0)|0;Wa=E;Xa=9968;Ya=Xa;Za=c[Ya>>2]|0;_a=Xa+4|0;$a=_a;ab=c[$a>>2]|0;bb=ee(Va|0,Wa|0,Za|0,ab|0)|0;cb=E;db=9968;eb=db;c[eb>>2]=bb;fb=db+4|0;gb=fb;c[gb>>2]=cb;hb=c[2494]|0;ib=hb+1|0;c[2494]=ib;i=a;return}Ja=c[2456]|0;if((Ja|0)>0){Ga=Ja;Ja=0;Ca=0;while(1){Ea=c[2452]|0;Da=c[Ea+(Ja<<2)>>2]|0;do{if((Da|0)!=0){za=c[2454]|0;h=c[za+(Ja<<2)>>2]|0;if((h|0)==-2){jb=Ga;kb=Ca;break}else if((h|0)==-1){xa=c[Da+156>>2]|0;if((xa|0)==0){lb=Ga}else{xc[xa&7](Da);lb=c[2456]|0}c[Da+212>>2]=c[2448];c[2448]=Da;jb=lb;kb=Ca;break}else{if((Ja|0)>(Ca|0)){c[Ea+(Ca<<2)>>2]=Da;c[za+(Ca<<2)>>2]=h}jb=Ga;kb=Ca+1|0;break}}else{jb=Ga;kb=Ca}}while(0);Ja=Ja+1|0;if((Ja|0)>=(jb|0)){mb=kb;break}else{Ga=jb;Ca=kb}}}else{mb=0}c[2456]=mb;c[2462]=0;c[2460]=0;nb(b|0,0)|0;Ka=c[b>>2]|0;La=(Ka|0)<0;Ma=La<<31>>31;Na=qe(Ka|0,Ma|0,1e6,0)|0;Oa=E;Pa=b+4|0;Qa=c[Pa>>2]|0;Ra=(Qa|0)<0;Sa=Ra<<31>>31;Ta=ee(Na|0,Oa|0,Qa|0,Sa|0)|0;Ua=E;Va=de(Ta|0,Ua|0,Aa|0,Ba|0)|0;Wa=E;Xa=9968;Ya=Xa;Za=c[Ya>>2]|0;_a=Xa+4|0;$a=_a;ab=c[$a>>2]|0;bb=ee(Va|0,Wa|0,Za|0,ab|0)|0;cb=E;db=9968;eb=db;c[eb>>2]=bb;fb=db+4|0;gb=fb;c[gb>>2]=cb;hb=c[2494]|0;ib=hb+1|0;c[2494]=ib;i=a;return}function id(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0.0,P=0.0,Q=0.0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0,ca=0,da=0,ea=0;a=i;i=i+16|0;d=a;e=c[2476]|0;f=~~(+(e|0)+ +((c[2480]|0)-e|0)*b);e=c[2478]|0;h=~~(+(e|0)+ +((c[2482]|0)-e|0)*b);nb(d|0,0)|0;e=c[d>>2]|0;j=qe(e|0,((e|0)<0)<<31>>31|0,1e6,0)|0;e=c[d+4>>2]|0;k=ee(j|0,E|0,e|0,((e|0)<0)<<31>>31|0)|0;e=E;Tc();j=c[2456]|0;if((c[2462]|0)==0){l=j}else{if((j|0)>0){m=j;j=0;n=0;while(1){o=c[2452]|0;p=c[o+(j<<2)>>2]|0;do{if((p|0)!=0){q=c[2454]|0;r=c[q+(j<<2)>>2]|0;if((r|0)==-2){s=m;t=n;break}else if((r|0)==-1){u=c[p+156>>2]|0;if((u|0)==0){v=m}else{xc[u&7](p);v=c[2456]|0}c[p+212>>2]=c[2448];c[2448]=p;s=v;t=n;break}else{if((j|0)>(n|0)){c[o+(n<<2)>>2]=p;c[q+(n<<2)>>2]=r}s=m;t=n+1|0;break}}else{s=m;t=n}}while(0);j=j+1|0;if((j|0)>=(s|0)){w=t;break}else{m=s;n=t}}}else{w=0}c[2456]=w;c[2462]=0;c[2460]=0;l=w}c[2460]=1;if((l|0)>0){x=+(0-f|0);y=+(0-h|0);w=l;l=0;t=0;n=0;while(1){s=c[2452]|0;m=c[s+(l<<2)>>2]|0;j=c[2472]|0;v=c[2474]|0;p=c[m+104>>2]|0;if((p|0)==0){o=c[m+108>>2]|0;if((o|0)==0){z=t;A=n}else{z=c[o+16>>2]|0;A=c[o+12>>2]|0}}else{z=c[(c[p>>2]|0)+16>>2]|0;A=c[p+4>>2]|0}p=h-z|0;o=v+h+z|0;B=+g[m+24>>2];do{if(((!(B<+(f-A|0))?!(B>+(j+f+A|0)):0)?(C=+g[m+28>>2],!(C<+(p|0))):0)?!(C>+(o|0)):0){v=m+32|0;r=c[v>>2]|0;if((r&32|0)==0){D=+g[m+120>>2];F=+g[m+124>>2];G=+g[m+128>>2];H=+g[m+132>>2];I=r}else{if((r&16|0)==0){J=+g[m+136>>2];K=+g[m+140>>2];L=+g[m+144>>2];q=m+120|0;g[q>>2]=J;u=m+124|0;g[u>>2]=K;M=m+128|0;g[M>>2]=L;N=m+132|0;g[N>>2]=1.0;if((w|0)>0){O=J;P=K;Q=L;R=0;while(1){S=c[s+(R<<2)>>2]|0;if(((S|0)!=(m|0)?(c[S+32>>2]&16|0)!=0:0)?(T=B- +g[S+24>>2],U=C- +g[S+28>>2],V=T*T+U*U,U=+g[S+148>>2],T=U*U,V>2];V=U*+g[S+144>>2];W=U*+g[S+136>>2]+O;U=W>1.0?1.0:W;g[q>>2]=U;W=T+P;T=W>1.0?1.0:W;g[u>>2]=T;W=V+Q;V=W>1.0?1.0:W;g[M>>2]=V;g[N>>2]=1.0;X=V;Y=T;Z=U}else{X=Q;Y=P;Z=O}R=R+1|0;if((R|0)==(w|0)){_=X;$=Y;aa=Z;break}else{O=Z;P=Y;Q=X}}}else{_=L;$=K;aa=J}}else{g[m+120>>2]=1.0;g[m+124>>2]=1.0;g[m+128>>2]=1.0;g[m+132>>2]=1.0;_=1.0;$=1.0;aa=1.0}R=r&-33;c[v>>2]=R;D=aa;F=$;G=_;H=1.0;I=R}g[1566]=D;g[1568]=F;g[1570]=G;g[1572]=H;if((I&64|0)==0){ad(m+104|0,~~(x+B),~~(y+C));break}else{Q=+g[m+16>>2];P=+g[m+20>>2];ad(m+104|0,~~(x+(Q-(Q-B)*b)),~~(y+(P-(P-C)*b)));break}}}while(0);l=l+1|0;w=c[2456]|0;if((l|0)>=(w|0)){break}else{t=z;n=A}}}g[1566]=1.0;g[1568]=1.0;g[1570]=1.0;g[1572]=1.0;if((c[2468]|0)!=0){Dd(b)}if((c[2462]|0)!=0){A=c[2456]|0;if((A|0)>0){n=A;A=0;z=0;while(1){t=c[2452]|0;w=c[t+(A<<2)>>2]|0;do{if((w|0)!=0){l=c[2454]|0;I=c[l+(A<<2)>>2]|0;if((I|0)==-1){f=c[w+156>>2]|0;if((f|0)==0){ba=n}else{xc[f&7](w);ba=c[2456]|0}c[w+212>>2]=c[2448];c[2448]=w;ca=ba;da=z;break}else if((I|0)==-2){ca=n;da=z;break}else{if((A|0)>(z|0)){c[t+(z<<2)>>2]=w;c[l+(z<<2)>>2]=I}ca=n;da=z+1|0;break}}else{ca=n;da=z}}while(0);A=A+1|0;if((A|0)>=(ca|0)){ea=da;break}else{n=ca;z=da}}}else{ea=0}c[2456]=ea;c[2462]=0;c[2460]=0}nb(d|0,0)|0;ea=c[d>>2]|0;da=qe(ea|0,((ea|0)<0)<<31>>31|0,1e6,0)|0;ea=c[d+4>>2]|0;z=ee(da|0,E|0,ea|0,((ea|0)<0)<<31>>31|0)|0;ea=de(z|0,E|0,k|0,e|0)|0;e=9984;k=ee(ea|0,E|0,c[e>>2]|0,c[e+4>>2]|0)|0;e=9984;c[e>>2]=k;c[e+4>>2]=E;c[2498]=(c[2498]|0)+1;if((c[9260>>2]|0)!=1){i=a;return}Ja(10120)|0;e=c[2494]|0;if((e|0)>0){k=9944;ea=oe(c[k>>2]|0,c[k+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0;e=d;c[e>>2]=ea;c[e+4>>2]=E;eb(1e4,d|0)|0;e=9952;ea=c[2494]|0;k=oe(c[e>>2]|0,c[e+4>>2]|0,ea|0,((ea|0)<0)<<31>>31|0)|0;ea=d;c[ea>>2]=k;c[ea+4>>2]=E;eb(10024,d|0)|0;ea=9960;k=c[2494]|0;e=oe(c[ea>>2]|0,c[ea+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;k=d;c[k>>2]=e;c[k+4>>2]=E;eb(10048,d|0)|0;k=9968;e=c[2494]|0;ea=oe(c[k>>2]|0,c[k+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0;e=d;c[e>>2]=ea;c[e+4>>2]=E;eb(10072,d|0)|0}e=c[2498]|0;if((e|0)>0){ea=9984;k=oe(c[ea>>2]|0,c[ea+4>>2]|0,e|0,((e|0)<0)<<31>>31|0)|0;e=d;c[e>>2]=k;c[e+4>>2]=E;eb(10096,d|0)|0}d=9944;c[d>>2]=0;c[d+4>>2]=0;d=9952;c[d>>2]=0;c[d+4>>2]=0;d=9960;c[d>>2]=0;c[d+4>>2]=0;d=9968;c[d>>2]=0;c[d+4>>2]=0;d=9984;c[d>>2]=0;c[d+4>>2]=0;c[2494]=0;c[2498]=0;i=a;return}function jd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0;f=i;g=c[2472]|0;h=g>>>1;j=c[2474]|0;k=j>>>1;l=+(~~(+((g>>>0>j>>>0?h:k)|0)*1.2000000476837158)|0);j=~~(l/10.0);g=d-(h+(c[2480]|0))|0;m=+(g-j|0);n=+(e-(c[2482]|0)-k|0);o=n*n;n=1.0- +Q(+(o+m*m))/l;m=+(g+j|0);p=1.0- +Q(+(o+m*m))/l;l=p<0.0?0.0:p;p=n<0.0?0.0:n;if((!(l<=0.0)|!(p<=0.0))^1|(b|0)==0){i=f;return}j=c[2320]|0;if((j|0)==0){g=Pd(16)|0;c[g+12>>2]=0;q=g}else{g=j+12|0;c[2320]=c[g>>2];c[g>>2]=0;q=j}c[q>>2]=b;c[q+4>>2]=0;a[q+8>>0]=~~(p*255.0);a[q+9>>0]=~~(l*255.0);c[q+12>>2]=c[2318];c[2318]=q;i=f;return}function kd(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=+f;var h=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0;h=i;j=a+32|0;k=c[j>>2]|0;if((k&16|0)==0){g[a+136>>2]=b;g[a+140>>2]=d;g[a+144>>2]=e;g[a+148>>2]=f;c[j>>2]=k|32;i=h;return}l=c[2452]|0;m=c[2456]|0;n=+g[a+24>>2];o=+g[a+8>>2];p=n>2];s=(p?n:o)-r;t=r+(p?o:n);n=+g[a+28>>2];o=+g[a+12>>2];p=n0){p=0;do{w=c[l+(p<<2)>>2]|0;n=+g[w+24>>2];if(!(!(s<=n)|!(t>=n))?(n=+g[w+28>>2],!(!(u<=n)|!(v>=n))):0){x=w+32|0;c[x>>2]=c[x>>2]|32}p=p+1|0}while((p|0)!=(m|0));y=c[j>>2]|0}else{y=k}g[a+136>>2]=b;g[a+140>>2]=d;g[a+144>>2]=e;g[q>>2]=f;if((y&16|0)==0){c[j>>2]=y|32;i=h;return}e=+g[a+24>>2];d=+g[a+8>>2];y=e>2];d=+g[a+12>>2];a=e0){z=0}else{i=h;return}do{a=c[l+(z<<2)>>2]|0;f=+g[a+24>>2];if(!(!(b<=f)|!(v>=f))?(f=+g[a+28>>2],!(!(u<=f)|!(t>=f))):0){y=a+32|0;c[y>>2]=c[y>>2]|32}z=z+1|0}while((z|0)!=(m|0));i=h;return}function ld(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0;b=i;i=i+16|0;d=b+4|0;e=b;do{if((c[2470]|0)!=0&(c[9248>>2]|0)==1){f=a+32|0;h=c[f>>2]|0;if((h&1|0)==0){c[f>>2]=h|9;kd(a,.4000000059604645,.4000000059604645,.4000000059604645,160.0);break}else{c[f>>2]=h&-10;kd(a,.699999988079071,.699999988079071,.699999988079071,640.0);break}}}while(0);if((Db(d|0,e|0)|0)<<24>>24==0){j=(c[9232>>2]|0)==0?0.0:-1.0;if((c[9236>>2]|0)==0){k=j}else{k=j+1.0}j=(c[9240>>2]|0)==0?0.0:-1.0;if((c[9244>>2]|0)==0){l=j}else{l=j+1.0}j=l*l+k*k;if(j>0.0){m=1.0/+Q(+j);n=l*m;o=m*k;p=13}}else{k=+((c[d>>2]|0)-((c[1282]|0)>>>1)|0);m=+(c[e>>2]|0)- +(c[1284]|0)*.5;l=1.0/+Q(+(k*k+m*m));n=k*l;o=l*m;p=13}if((p|0)==13){m=n*0.0+o*-1.0;l=n+o*0.0;do{if(!(+P(+m)>=+P(+l))){p=a+104|0;if(l>0.0){e=c[2540]|0;c[p>>2]=0;c[a+108>>2]=e;c[a+116>>2]=0;break}else{e=c[2542]|0;c[p>>2]=0;c[a+108>>2]=e;c[a+116>>2]=0;break}}else{e=a+104|0;if(m>0.0){p=c[2536]|0;c[e>>2]=0;c[a+108>>2]=p;c[a+116>>2]=0;break}else{p=c[2538]|0;c[e>>2]=0;c[a+108>>2]=p;c[a+116>>2]=0;break}}}while(0);ed(a,n*7.0,o*7.0,15.0)}o=+(c[2480]|0);c[2480]=~~(o+(+g[a+24>>2]-(o+ +(c[2472]|0)*.5))*.30000001192092896);o=+(c[2482]|0);c[2482]=~~(o+(+g[a+28>>2]-(o+ +(c[2474]|0)*.5))*.30000001192092896);i=b;return}function md(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0.0;f=i;if((c[b+4>>2]|0)!=1){h=1;i=f;return h|0}j=+g[a+52>>2];k=+g[a+56>>2];l=+Q(+(j*j+k*k));if(!(l>0.0)){h=1;i=f;return h|0}m=1.0/l;l=+g[e>>2];n=e+4|0;o=+g[n>>2];if(!(j*m*l+k*m*o<-.8999999761581421)){h=1;i=f;return h|0}do{if(+P(+l)>+P(+o)){if(!(l>=0.0)){g[e>>2]=-1.0;g[n>>2]=0.0;break}else{g[e>>2]=1.0;g[n>>2]=0.0;break}}else{if(!(o>=0.0)){g[n>>2]=-1.0;g[e>>2]=0.0;break}else{g[n>>2]=1.0;g[e>>2]=0.0;break}}}while(0);dd(b,a,d,e);h=2;i=f;return h|0}function nd(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0,j=0;b=i;i=i+16|0;d=b;e=+g[a+52>>2];f=+g[a+56>>2];if(!(e*e+f*f>0.0)){i=b;return}nb(d|0,0)|0;h=c[d>>2]|0;j=qe(h|0,((h|0)<0)<<31>>31|0,1e6,0)|0;h=c[d+4>>2]|0;d=ee(j|0,E|0,h|0,((h|0)<0)<<31>>31|0)|0;h=oe(d|0,E|0,1e3,0)|0;d=a+176|0;if((h+ -250|0)<=(c[d>>2]|0)){i=b;return}jd(c[2544]|0,~~+g[a+24>>2],~~+g[a+28>>2]);c[d>>2]=h;i=b;return}function od(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0;d=i;e=b+4|0;f=c[e>>2]|0;if((f|0)==1){c[a+172>>2]=0;h=bd(c[2546]|0)|0;g[h+24>>2]=+g[a+24>>2];g[h+28>>2]=+g[a+28>>2];fd(h);jd(c[2548]|0,~~+g[b+24>>2],~~+g[b+28>>2]);gd(a)|0;gd(b)|0;j=c[e>>2]|0}else{j=f}if((j|0)!=0){i=d;return}j=bd(c[2550]|0)|0;f=b+24|0;g[j+24>>2]=+g[f>>2];e=b+28|0;g[j+28>>2]=+g[e>>2];fd(j);jd(c[2552]|0,~~+g[f>>2],~~+g[e>>2]);gd(b)|0;c[2910]=1;i=d;return}function pd(a){a=a|0;var b=0,d=0,e=0;b=i;d=(ce()|0)%1e3|0;if((c[a+104>>2]|0)==0){i=b;return}if((c[a+112>>2]|0)!=0){i=b;return}e=a+116|0;c[e>>2]=(c[e>>2]|0)+d;i=b;return}function qd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0;a=i;d=b+4|0;e=c[d>>2]|0;if((e|0)==1){f=bd(c[2554]|0)|0;h=b+24|0;g[f+24>>2]=+g[h>>2];j=b+28|0;g[f+28>>2]=+g[j>>2];fd(f);jd(c[2552]|0,~~+g[h>>2],~~+g[j>>2]);gd(b)|0;k=c[d>>2]|0}else{k=e}if((k|0)!=0){i=a;return}k=bd(c[2554]|0)|0;e=b+24|0;g[k+24>>2]=+g[e>>2];d=b+28|0;g[k+28>>2]=+g[d>>2];fd(k);k=bd(c[2550]|0)|0;g[k+24>>2]=+g[e>>2];g[k+28>>2]=+g[d>>2];fd(k);jd(c[2552]|0,~~+g[e>>2],~~+g[d>>2]);gd(b)|0;c[2910]=1;i=a;return}function rd(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;var f=0,h=0,j=0;e=i;if((c[a+164>>2]|0)!=0){i=e;return 0}f=c[b+4>>2]|0;if((f|0)==8|(f|0)==7){i=e;return 0}else if((f|0)==0){f=bd(c[2550]|0)|0;h=b+24|0;g[f+24>>2]=+g[h>>2];j=b+28|0;g[f+28>>2]=+g[j>>2];fd(f);gd(b)|0;jd(c[2552]|0,~~+g[h>>2],~~+g[j>>2]);c[2910]=1}gd(a)|0;jd(c[2556]|0,~~+g[a+24>>2],~~+g[a+28>>2]);i=e;return 0}function sd(a){a=a|0;var b=0;b=i;c[a+176>>2]=(ce()|0)%15|0;i=b;return}function td(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0;b=i;d=a+176|0;e=c[d>>2]|0;if((e|0)==0){f=bd(c[a+192>>2]|0)|0;h=a+24|0;g[f+24>>2]=+g[h>>2];j=a+28|0;g[f+28>>2]=+g[j>>2];fd(f);jd(c[2558]|0,~~+g[h>>2],~~+g[j>>2]);k=15;c[d>>2]=k;i=b;return}else{k=e+ -1|0;c[d>>2]=k;i=b;return}}function ud(a){a=a|0;if((c[2560]|0)==(a|0)){c[2560]=0}return}function vd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;if((c[b+4>>2]|0)!=0){i=d;return}b=c[a+176>>2]|0;if((c[2908]|0)!=(b|0)){c[2908]=b;jd(c[2562]|0,~~+g[a+24>>2],~~+g[a+28>>2]);Jd()}b=c[2560]|0;if((b|0)==(a|0)){i=d;return}e=c[2564]|0;c[a+112>>2]=0;f=a+104|0;if((c[f>>2]|0)!=(e|0)){c[f>>2]=e;c[a+108>>2]=0;c[a+116>>2]=0}kd(a,0.0,0.0,.5,128.0);if((b|0)!=0){e=c[2566]|0;c[b+104>>2]=0;c[b+108>>2]=e;c[b+116>>2]=0;kd(b,0.0,0.0,.5,64.0)}c[2560]=a;i=d;return}function wd(a,b){a=a|0;b=b|0;var d=0;d=i;if((c[b+4>>2]|0)!=0){i=d;return}c[2906]=(c[2906]|0)+1;c[2908]=1;c[2910]=2;gd(b)|0;jd(c[2568]|0,~~+g[a+24>>2],~~+g[a+28>>2]);Jd();i=d;return}function xd(a,b){a=a|0;b=b|0;var d=0;d=i;if((c[b+4>>2]|0)!=0){i=d;return}c[2910]=3;gd(b)|0;jd(c[2568]|0,~~+g[a+24>>2],~~+g[a+28>>2]);Jd();i=d;return}function yd(a,b){a=a|0;b=b|0;var d=0,e=0;b=i;d=a+176|0;e=c[d>>2]|0;if((e|0)==0){gd(a)|0;i=b;return}else{c[d>>2]=e+ -1;i=b;return}}function zd(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;if((c[a+4>>2]|0)!=12){e=0;i=d;return e|0}e=(c[a+176>>2]|0)==(c[b>>2]|0)&1;i=d;return e|0}function Ad(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0;d=i;e=a+176|0;a=c[2456]|0;if((a|0)<=0){i=d;return}f=c[2452]|0;h=0;while(1){j=c[f+(h<<2)>>2]|0;if((j|0)!=0?(zd(j,e)|0)!=0:0){break}h=h+1|0;if((h|0)>=(a|0)){k=7;break}}if((k|0)==7){i=d;return}g[b+24>>2]=+g[j+24>>2];g[b+28>>2]=+g[j+28>>2];i=d;return} + + + +function te(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,F=0,G=0,H=0;g=a;h=b;i=h;j=d;k=e;l=k;if((i|0)==0){m=(f|0)!=0;if((l|0)==0){if(m){c[f>>2]=(g>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(g>>>0)/(j>>>0)>>>0;return(E=n,o)|0}else{if(!m){n=0;o=0;return(E=n,o)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;o=0;return(E=n,o)|0}}m=(l|0)==0;do{if((j|0)!=0){if(!m){p=(le(l|0)|0)-(le(i|0)|0)|0;if(p>>>0<=31){q=p+1|0;r=31-p|0;s=p-31>>31;t=q;u=g>>>(q>>>0)&s|i<>>(q>>>0)&s;w=0;x=g<>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(E=n,o)|0}r=j-1|0;if((r&j|0)!=0){s=(le(j|0)|0)+33-(le(i|0)|0)|0;q=64-s|0;p=32-s|0;y=p>>31;z=s-32|0;A=z>>31;t=s;u=p-1>>31&i>>>(z>>>0)|(i<>>(s>>>0))&A;v=A&i>>>(s>>>0);w=g<>>(z>>>0))&y|g<>31;break}if((f|0)!=0){c[f>>2]=r&g;c[f+4>>2]=0}if((j|0)==1){n=h|b&0;o=a|0|0;return(E=n,o)|0}else{r=me(j|0)|0;n=i>>>(r>>>0)|0;o=i<<32-r|g>>>(r>>>0)|0;return(E=n,o)|0}}else{if(m){if((f|0)!=0){c[f>>2]=(i>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(i>>>0)/(j>>>0)>>>0;return(E=n,o)|0}if((g|0)==0){if((f|0)!=0){c[f>>2]=0;c[f+4>>2]=(i>>>0)%(l>>>0)}n=0;o=(i>>>0)/(l>>>0)>>>0;return(E=n,o)|0}r=l-1|0;if((r&l|0)==0){if((f|0)!=0){c[f>>2]=a|0;c[f+4>>2]=r&i|b&0}n=0;o=i>>>((me(l|0)|0)>>>0);return(E=n,o)|0}r=(le(l|0)|0)-(le(i|0)|0)|0;if(r>>>0<=30){s=r+1|0;p=31-r|0;t=s;u=i<>>(s>>>0);v=i>>>(s>>>0);w=0;x=g<>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(E=n,o)|0}}while(0);if((t|0)==0){B=x;C=w;D=v;F=u;G=0;H=0}else{b=d|0|0;d=k|e&0;e=ee(b,d,-1,-1)|0;k=E;h=x;x=w;w=v;v=u;u=t;t=0;do{a=h;h=x>>>31|h<<1;x=t|x<<1;g=v<<1|a>>>31|0;a=v>>>31|w<<1|0;de(e,k,g,a)|0;i=E;l=i>>31|((i|0)<0?-1:0)<<1;t=l&1;v=de(g,a,l&b,(((i|0)<0?-1:0)>>31|((i|0)<0?-1:0)<<1)&d)|0;w=E;u=u-1|0}while((u|0)!=0);B=h;C=x;D=w;F=v;G=0;H=t}t=C;C=0;if((f|0)!=0){c[f>>2]=F;c[f+4>>2]=D}n=(t|0)>>>31|(B|C)<<1|(C<<1|t>>>31)&0|G;o=(t<<1|0>>>31)&-2|H;return(E=n,o)|0}function ue(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return tc[a&0](b|0,c|0,d|0,e|0,f|0)|0}function ve(a,b){a=a|0;b=+b;uc[a&1](+b)}function we(a,b,c){a=a|0;b=b|0;c=+c;vc[a&3](b|0,+c)}function xe(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;return wc[a&3](b|0,c|0,+d,e|0)|0}function ye(a,b){a=a|0;b=b|0;xc[a&7](b|0)}function ze(a,b,c){a=a|0;b=b|0;c=c|0;yc[a&15](b|0,c|0)}function Ae(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return zc[a&3](b|0,c|0,d|0)|0}function Be(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ac[a&1](b|0,c|0,d|0)}function Ce(a){a=a|0;Bc[a&3]()}function De(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ba(0);return 0}function Ee(a){a=+a;ba(1)}function Fe(a,b){a=a|0;b=+b;ba(2)}function Ge(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;ba(3);return 0}function He(a){a=a|0;ba(4)}function Ie(a,b){a=a|0;b=b|0;ba(5)}function Je(a,b,c){a=a|0;b=b|0;c=c|0;ba(6);return 0}function Ke(a,b,c){a=a|0;b=b|0;c=c|0;ba(7)}function Le(){ba(8)} + + + + // EMSCRIPTEN_END_FUNCS -var bV=[dH,dH];var bW=[dI,dI,cK,dI,c4,dI,c6,dI];var bX=[dJ,dJ,c3,dJ];var bY=[dK,dK,cW,dK,cU,dK,c5,dK,cJ,dK,cR,dK,c2,dK,dK,dK];var bZ=[dL,dL,cS,dL,cX,dL,cQ,dL,cV,dL,cZ,dL,cN,dL,cY,dL,c_,dL,c0,dL,cP,dL,dL,dL,dL,dL,dL,dL,dL,dL,dL,dL];var b_=[dM,dM];var b$=[dN,dN,cA,dN];var b0=[dO,dO,c7,dO,c8,dO,cu,dO];var b1=[dP,dP];var b2=[dQ,dQ,cO,dQ,cT,dQ,dQ,dQ];return{_strlen:df,_free:dc,_main:da,_realloc:dd,_memset:dh,_malloc:db,_memcpy:dg,runPostSets:cj,stackAlloc:b3,stackSave:b4,stackRestore:b5,setThrew:b6,setTempRet0:b9,setTempRet1:ca,setTempRet2:cb,setTempRet3:cc,setTempRet4:cd,setTempRet5:ce,setTempRet6:cf,setTempRet7:cg,setTempRet8:ch,setTempRet9:ci,dynCall_ii:dx,dynCall_vif:dy,dynCall_vf:dz,dynCall_vi:dA,dynCall_vii:dB,dynCall_iiiiii:dC,dynCall_viii:dD,dynCall_v:dE,dynCall_iii:dF,dynCall_iiifi:dG}}) +var tc=[De];var uc=[Ee,Dd];var vc=[Fe,id,Gd,Ed];var wc=[Ge,md,rd,Ge];var xc=[He,hd,Fd,Cd,pd,sd,ud,He];var yc=[Ie,ld,nd,od,qd,yd,td,vd,wd,xd,Ad,Ie,Ie,Ie,Ie,Ie];var zc=[Je,$d,Od,Je];var Ac=[Ke,_c];var Bc=[Le,Hd,Id,Uc];return{_i64Subtract:de,_free:Qd,_main:Kd,_rand_r:be,_realloc:Rd,_i64Add:ee,_strlen:fe,_memset:he,_malloc:Pd,_memcpy:ie,_bitshift64Lshr:ge,_rand:ce,_bitshift64Shl:je,runPostSets:ae,stackAlloc:Cc,stackSave:Dc,stackRestore:Ec,setThrew:Fc,setTempRet0:Ic,getTempRet0:Jc,dynCall_iiiiii:ue,dynCall_vd:ve,dynCall_vid:we,dynCall_iiidi:xe,dynCall_vi:ye,dynCall_vii:ze,dynCall_iiii:Ae,dynCall_viii:Be,dynCall_v:Ce} // EMSCRIPTEN_END_ASM -({ "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array }, { "abort": abort, "assert": assert, "asmPrintInt": asmPrintInt, "asmPrintFloat": asmPrintFloat, "min": Math_min, "invoke_ii": invoke_ii, "invoke_vif": invoke_vif, "invoke_vf": invoke_vf, "invoke_vi": invoke_vi, "invoke_vii": invoke_vii, "invoke_iiiiii": invoke_iiiiii, "invoke_viii": invoke_viii, "invoke_v": invoke_v, "invoke_iii": invoke_iii, "invoke_iiifi": invoke_iiifi, "_llvm_lifetime_end": _llvm_lifetime_end, "_lseek": _lseek, "__scanString": __scanString, "_fclose": _fclose, "_glLinkProgram": _glLinkProgram, "_glBindTexture": _glBindTexture, "_fflush": _fflush, "_SDL_GetMouseState": _SDL_GetMouseState, "_fputc": _fputc, "_glGetString": _glGetString, "_fwrite": _fwrite, "_send": _send, "_fputs": _fputs, "_glCompileShader": _glCompileShader, "_read": _read, "_fsync": _fsync, "_glGenTextures": _glGenTextures, "_SDL_PauseAudio": _SDL_PauseAudio, "_glCreateShader": _glCreateShader, "_strcmp": _strcmp, "_glUniform1i": _glUniform1i, "_strncmp": _strncmp, "_snprintf": _snprintf, "_fgetc": _fgetc, "_glGetProgramiv": _glGetProgramiv, "_glVertexAttribPointer": _glVertexAttribPointer, "__getFloat": __getFloat, "_mknod": _mknod, "_SDL_GetKeyboardState": _SDL_GetKeyboardState, "_close": _close, "___setErrNo": ___setErrNo, "_glDrawArrays": _glDrawArrays, "_ftell": _ftell, "_glDeleteProgram": _glDeleteProgram, "_sprintf": _sprintf, "_glAttachShader": _glAttachShader, "_llvm_uadd_with_overflow_i32": _llvm_uadd_with_overflow_i32, "_printf": _printf, "_recv": _recv, "_SDL_GL_SwapBuffers": _SDL_GL_SwapBuffers, "_glBufferSubData": _glBufferSubData, "_puts": _puts, "_SDL_Init": _SDL_Init, "_glGetShaderiv": _glGetShaderiv, "_rand": _rand, "_fabsf": _fabsf, "_glShaderSource": _glShaderSource, "_pread": _pread, "_SDL_SetVideoMode": _SDL_SetVideoMode, "_fopen": _fopen, "_open": _open, "_sqrtf": _sqrtf, "_SDL_PollEvent": _SDL_PollEvent, "_mkdir": _mkdir, "_glEnableVertexAttribArray": _glEnableVertexAttribArray, "_glBindBuffer": _glBindBuffer, "_SDL_InitSubSystem": _SDL_InitSubSystem, "_SDL_GetError": _SDL_GetError, "_srand": _srand, "_glBufferData": _glBufferData, "__formatString": __formatString, "_gettimeofday": _gettimeofday, "_SDL_WM_SetCaption": _SDL_WM_SetCaption, "_sbrk": _sbrk, "___errno_location": ___errno_location, "_SDL_CloseAudio": _SDL_CloseAudio, "_llvm_lifetime_start": _llvm_lifetime_start, "_SDL_GetKeyState": _SDL_GetKeyState, "_SDL_OpenAudio": _SDL_OpenAudio, "_glUseProgram": _glUseProgram, "_sscanf": _sscanf, "_glTexImage2D": _glTexImage2D, "_sysconf": _sysconf, "_fread": _fread, "_glGetUniformLocation": _glGetUniformLocation, "_abort": _abort, "_fprintf": _fprintf, "_emscripten_asm_const": _emscripten_asm_const, "_glEnable": _glEnable, "__reallyNegative": __reallyNegative, "_fseek": _fseek, "_write": _write, "_glGenBuffers": _glGenBuffers, "_glGetAttribLocation": _glGetAttribLocation, "_rewind": _rewind, "_glDeleteShader": _glDeleteShader, "_glBlendFunc": _glBlendFunc, "_glCreateProgram": _glCreateProgram, "_llvm_trap": _llvm_trap, "_emscripten_set_main_loop": _emscripten_set_main_loop, "_glUniformMatrix4fv": _glUniformMatrix4fv, "_pwrite": _pwrite, "_glTexParameteri": _glTexParameteri, "_glPixelStorei": _glPixelStorei, "_time": _time, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "cttz_i8": cttz_i8, "ctlz_i8": ctlz_i8, "NaN": NaN, "Infinity": Infinity }, buffer); -var _strlen = Module["_strlen"] = asm["_strlen"]; -var _free = Module["_free"] = asm["_free"]; -var _main = Module["_main"] = asm["_main"]; -var _realloc = Module["_realloc"] = asm["_realloc"]; -var _memset = Module["_memset"] = asm["_memset"]; -var _malloc = Module["_malloc"] = asm["_malloc"]; -var _memcpy = Module["_memcpy"] = asm["_memcpy"]; -var runPostSets = Module["runPostSets"] = asm["runPostSets"]; -var dynCall_ii = Module["dynCall_ii"] = asm["dynCall_ii"]; -var dynCall_vif = Module["dynCall_vif"] = asm["dynCall_vif"]; -var dynCall_vf = Module["dynCall_vf"] = asm["dynCall_vf"]; -var dynCall_vi = Module["dynCall_vi"] = asm["dynCall_vi"]; -var dynCall_vii = Module["dynCall_vii"] = asm["dynCall_vii"]; -var dynCall_iiiiii = Module["dynCall_iiiiii"] = asm["dynCall_iiiiii"]; -var dynCall_viii = Module["dynCall_viii"] = asm["dynCall_viii"]; -var dynCall_v = Module["dynCall_v"] = asm["dynCall_v"]; -var dynCall_iii = Module["dynCall_iii"] = asm["dynCall_iii"]; -var dynCall_iiifi = Module["dynCall_iiifi"] = asm["dynCall_iiifi"]; -Runtime.stackAlloc = function(size) { return asm['stackAlloc'](size) }; -Runtime.stackSave = function() { return asm['stackSave']() }; -Runtime.stackRestore = function(top) { asm['stackRestore'](top) }; -// TODO: strip out parts of this we do not need -//======= begin closure i64 code ======= -// Copyright 2009 The Closure Library Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS-IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/** - * @fileoverview Defines a Long class for representing a 64-bit two's-complement - * integer value, which faithfully simulates the behavior of a Java "long". This - * implementation is derived from LongLib in GWT. - * - */ -var i64Math = (function() { // Emscripten wrapper - var goog = { math: {} }; - /** - * Constructs a 64-bit two's-complement integer, given its low and high 32-bit - * values as *signed* integers. See the from* functions below for more - * convenient ways of constructing Longs. - * - * The internal representation of a long is the two given signed, 32-bit values. - * We use 32-bit pieces because these are the size of integers on which - * Javascript performs bit-operations. For operations like addition and - * multiplication, we split each number into 16-bit pieces, which can easily be - * multiplied within Javascript's floating-point representation without overflow - * or change in sign. - * - * In the algorithms below, we frequently reduce the negative case to the - * positive case by negating the input(s) and then post-processing the result. - * Note that we must ALWAYS check specially whether those values are MIN_VALUE - * (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as - * a positive number, it overflows back into a negative). Not handling this - * case would often result in infinite recursion. - * - * @param {number} low The low (signed) 32 bits of the long. - * @param {number} high The high (signed) 32 bits of the long. - * @constructor - */ - goog.math.Long = function(low, high) { - /** - * @type {number} - * @private - */ - this.low_ = low | 0; // force into 32 signed bits. - /** - * @type {number} - * @private - */ - this.high_ = high | 0; // force into 32 signed bits. - }; - // NOTE: Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the - // from* methods on which they depend. - /** - * A cache of the Long representations of small integer values. - * @type {!Object} - * @private - */ - goog.math.Long.IntCache_ = {}; - /** - * Returns a Long representing the given (32-bit) integer value. - * @param {number} value The 32-bit integer in question. - * @return {!goog.math.Long} The corresponding Long value. - */ - goog.math.Long.fromInt = function(value) { - if (-128 <= value && value < 128) { - var cachedObj = goog.math.Long.IntCache_[value]; - if (cachedObj) { - return cachedObj; - } - } - var obj = new goog.math.Long(value | 0, value < 0 ? -1 : 0); - if (-128 <= value && value < 128) { - goog.math.Long.IntCache_[value] = obj; - } - return obj; - }; - /** - * Returns a Long representing the given value, provided that it is a finite - * number. Otherwise, zero is returned. - * @param {number} value The number in question. - * @return {!goog.math.Long} The corresponding Long value. - */ - goog.math.Long.fromNumber = function(value) { - if (isNaN(value) || !isFinite(value)) { - return goog.math.Long.ZERO; - } else if (value <= -goog.math.Long.TWO_PWR_63_DBL_) { - return goog.math.Long.MIN_VALUE; - } else if (value + 1 >= goog.math.Long.TWO_PWR_63_DBL_) { - return goog.math.Long.MAX_VALUE; - } else if (value < 0) { - return goog.math.Long.fromNumber(-value).negate(); - } else { - return new goog.math.Long( - (value % goog.math.Long.TWO_PWR_32_DBL_) | 0, - (value / goog.math.Long.TWO_PWR_32_DBL_) | 0); - } - }; - /** - * Returns a Long representing the 64-bit integer that comes by concatenating - * the given high and low bits. Each is assumed to use 32 bits. - * @param {number} lowBits The low 32-bits. - * @param {number} highBits The high 32-bits. - * @return {!goog.math.Long} The corresponding Long value. - */ - goog.math.Long.fromBits = function(lowBits, highBits) { - return new goog.math.Long(lowBits, highBits); - }; - /** - * Returns a Long representation of the given string, written using the given - * radix. - * @param {string} str The textual representation of the Long. - * @param {number=} opt_radix The radix in which the text is written. - * @return {!goog.math.Long} The corresponding Long value. - */ - goog.math.Long.fromString = function(str, opt_radix) { - if (str.length == 0) { - throw Error('number format error: empty string'); - } - var radix = opt_radix || 10; - if (radix < 2 || 36 < radix) { - throw Error('radix out of range: ' + radix); - } - if (str.charAt(0) == '-') { - return goog.math.Long.fromString(str.substring(1), radix).negate(); - } else if (str.indexOf('-') >= 0) { - throw Error('number format error: interior "-" character: ' + str); - } - // Do several (8) digits each time through the loop, so as to - // minimize the calls to the very expensive emulated div. - var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 8)); - var result = goog.math.Long.ZERO; - for (var i = 0; i < str.length; i += 8) { - var size = Math.min(8, str.length - i); - var value = parseInt(str.substring(i, i + size), radix); - if (size < 8) { - var power = goog.math.Long.fromNumber(Math.pow(radix, size)); - result = result.multiply(power).add(goog.math.Long.fromNumber(value)); - } else { - result = result.multiply(radixToPower); - result = result.add(goog.math.Long.fromNumber(value)); - } - } - return result; - }; - // NOTE: the compiler should inline these constant values below and then remove - // these variables, so there should be no runtime penalty for these. - /** - * Number used repeated below in calculations. This must appear before the - * first call to any from* function below. - * @type {number} - * @private - */ - goog.math.Long.TWO_PWR_16_DBL_ = 1 << 16; - /** - * @type {number} - * @private - */ - goog.math.Long.TWO_PWR_24_DBL_ = 1 << 24; - /** - * @type {number} - * @private - */ - goog.math.Long.TWO_PWR_32_DBL_ = - goog.math.Long.TWO_PWR_16_DBL_ * goog.math.Long.TWO_PWR_16_DBL_; - /** - * @type {number} - * @private - */ - goog.math.Long.TWO_PWR_31_DBL_ = - goog.math.Long.TWO_PWR_32_DBL_ / 2; - /** - * @type {number} - * @private - */ - goog.math.Long.TWO_PWR_48_DBL_ = - goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_16_DBL_; - /** - * @type {number} - * @private - */ - goog.math.Long.TWO_PWR_64_DBL_ = - goog.math.Long.TWO_PWR_32_DBL_ * goog.math.Long.TWO_PWR_32_DBL_; - /** - * @type {number} - * @private - */ - goog.math.Long.TWO_PWR_63_DBL_ = - goog.math.Long.TWO_PWR_64_DBL_ / 2; - /** @type {!goog.math.Long} */ - goog.math.Long.ZERO = goog.math.Long.fromInt(0); - /** @type {!goog.math.Long} */ - goog.math.Long.ONE = goog.math.Long.fromInt(1); - /** @type {!goog.math.Long} */ - goog.math.Long.NEG_ONE = goog.math.Long.fromInt(-1); - /** @type {!goog.math.Long} */ - goog.math.Long.MAX_VALUE = - goog.math.Long.fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0); - /** @type {!goog.math.Long} */ - goog.math.Long.MIN_VALUE = goog.math.Long.fromBits(0, 0x80000000 | 0); - /** - * @type {!goog.math.Long} - * @private - */ - goog.math.Long.TWO_PWR_24_ = goog.math.Long.fromInt(1 << 24); - /** @return {number} The value, assuming it is a 32-bit integer. */ - goog.math.Long.prototype.toInt = function() { - return this.low_; - }; - /** @return {number} The closest floating-point representation to this value. */ - goog.math.Long.prototype.toNumber = function() { - return this.high_ * goog.math.Long.TWO_PWR_32_DBL_ + - this.getLowBitsUnsigned(); - }; - /** - * @param {number=} opt_radix The radix in which the text should be written. - * @return {string} The textual representation of this value. - */ - goog.math.Long.prototype.toString = function(opt_radix) { - var radix = opt_radix || 10; - if (radix < 2 || 36 < radix) { - throw Error('radix out of range: ' + radix); - } - if (this.isZero()) { - return '0'; - } - if (this.isNegative()) { - if (this.equals(goog.math.Long.MIN_VALUE)) { - // We need to change the Long value before it can be negated, so we remove - // the bottom-most digit in this base and then recurse to do the rest. - var radixLong = goog.math.Long.fromNumber(radix); - var div = this.div(radixLong); - var rem = div.multiply(radixLong).subtract(this); - return div.toString(radix) + rem.toInt().toString(radix); - } else { - return '-' + this.negate().toString(radix); - } - } - // Do several (6) digits each time through the loop, so as to - // minimize the calls to the very expensive emulated div. - var radixToPower = goog.math.Long.fromNumber(Math.pow(radix, 6)); - var rem = this; - var result = ''; - while (true) { - var remDiv = rem.div(radixToPower); - var intval = rem.subtract(remDiv.multiply(radixToPower)).toInt(); - var digits = intval.toString(radix); - rem = remDiv; - if (rem.isZero()) { - return digits + result; - } else { - while (digits.length < 6) { - digits = '0' + digits; - } - result = '' + digits + result; - } - } - }; - /** @return {number} The high 32-bits as a signed value. */ - goog.math.Long.prototype.getHighBits = function() { - return this.high_; - }; - /** @return {number} The low 32-bits as a signed value. */ - goog.math.Long.prototype.getLowBits = function() { - return this.low_; - }; - /** @return {number} The low 32-bits as an unsigned value. */ - goog.math.Long.prototype.getLowBitsUnsigned = function() { - return (this.low_ >= 0) ? - this.low_ : goog.math.Long.TWO_PWR_32_DBL_ + this.low_; - }; - /** - * @return {number} Returns the number of bits needed to represent the absolute - * value of this Long. - */ - goog.math.Long.prototype.getNumBitsAbs = function() { - if (this.isNegative()) { - if (this.equals(goog.math.Long.MIN_VALUE)) { - return 64; - } else { - return this.negate().getNumBitsAbs(); - } - } else { - var val = this.high_ != 0 ? this.high_ : this.low_; - for (var bit = 31; bit > 0; bit--) { - if ((val & (1 << bit)) != 0) { - break; - } - } - return this.high_ != 0 ? bit + 33 : bit + 1; - } - }; - /** @return {boolean} Whether this value is zero. */ - goog.math.Long.prototype.isZero = function() { - return this.high_ == 0 && this.low_ == 0; - }; - /** @return {boolean} Whether this value is negative. */ - goog.math.Long.prototype.isNegative = function() { - return this.high_ < 0; - }; - /** @return {boolean} Whether this value is odd. */ - goog.math.Long.prototype.isOdd = function() { - return (this.low_ & 1) == 1; - }; - /** - * @param {goog.math.Long} other Long to compare against. - * @return {boolean} Whether this Long equals the other. - */ - goog.math.Long.prototype.equals = function(other) { - return (this.high_ == other.high_) && (this.low_ == other.low_); - }; - /** - * @param {goog.math.Long} other Long to compare against. - * @return {boolean} Whether this Long does not equal the other. - */ - goog.math.Long.prototype.notEquals = function(other) { - return (this.high_ != other.high_) || (this.low_ != other.low_); - }; - /** - * @param {goog.math.Long} other Long to compare against. - * @return {boolean} Whether this Long is less than the other. - */ - goog.math.Long.prototype.lessThan = function(other) { - return this.compare(other) < 0; - }; - /** - * @param {goog.math.Long} other Long to compare against. - * @return {boolean} Whether this Long is less than or equal to the other. - */ - goog.math.Long.prototype.lessThanOrEqual = function(other) { - return this.compare(other) <= 0; - }; - /** - * @param {goog.math.Long} other Long to compare against. - * @return {boolean} Whether this Long is greater than the other. - */ - goog.math.Long.prototype.greaterThan = function(other) { - return this.compare(other) > 0; - }; - /** - * @param {goog.math.Long} other Long to compare against. - * @return {boolean} Whether this Long is greater than or equal to the other. - */ - goog.math.Long.prototype.greaterThanOrEqual = function(other) { - return this.compare(other) >= 0; - }; - /** - * Compares this Long with the given one. - * @param {goog.math.Long} other Long to compare against. - * @return {number} 0 if they are the same, 1 if the this is greater, and -1 - * if the given one is greater. - */ - goog.math.Long.prototype.compare = function(other) { - if (this.equals(other)) { - return 0; - } - var thisNeg = this.isNegative(); - var otherNeg = other.isNegative(); - if (thisNeg && !otherNeg) { - return -1; - } - if (!thisNeg && otherNeg) { - return 1; - } - // at this point, the signs are the same, so subtraction will not overflow - if (this.subtract(other).isNegative()) { - return -1; - } else { - return 1; - } - }; - /** @return {!goog.math.Long} The negation of this value. */ - goog.math.Long.prototype.negate = function() { - if (this.equals(goog.math.Long.MIN_VALUE)) { - return goog.math.Long.MIN_VALUE; - } else { - return this.not().add(goog.math.Long.ONE); - } - }; - /** - * Returns the sum of this and the given Long. - * @param {goog.math.Long} other Long to add to this one. - * @return {!goog.math.Long} The sum of this and the given Long. - */ - goog.math.Long.prototype.add = function(other) { - // Divide each number into 4 chunks of 16 bits, and then sum the chunks. - var a48 = this.high_ >>> 16; - var a32 = this.high_ & 0xFFFF; - var a16 = this.low_ >>> 16; - var a00 = this.low_ & 0xFFFF; - var b48 = other.high_ >>> 16; - var b32 = other.high_ & 0xFFFF; - var b16 = other.low_ >>> 16; - var b00 = other.low_ & 0xFFFF; - var c48 = 0, c32 = 0, c16 = 0, c00 = 0; - c00 += a00 + b00; - c16 += c00 >>> 16; - c00 &= 0xFFFF; - c16 += a16 + b16; - c32 += c16 >>> 16; - c16 &= 0xFFFF; - c32 += a32 + b32; - c48 += c32 >>> 16; - c32 &= 0xFFFF; - c48 += a48 + b48; - c48 &= 0xFFFF; - return goog.math.Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32); - }; - /** - * Returns the difference of this and the given Long. - * @param {goog.math.Long} other Long to subtract from this. - * @return {!goog.math.Long} The difference of this and the given Long. - */ - goog.math.Long.prototype.subtract = function(other) { - return this.add(other.negate()); - }; - /** - * Returns the product of this and the given long. - * @param {goog.math.Long} other Long to multiply with this. - * @return {!goog.math.Long} The product of this and the other. - */ - goog.math.Long.prototype.multiply = function(other) { - if (this.isZero()) { - return goog.math.Long.ZERO; - } else if (other.isZero()) { - return goog.math.Long.ZERO; - } - if (this.equals(goog.math.Long.MIN_VALUE)) { - return other.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO; - } else if (other.equals(goog.math.Long.MIN_VALUE)) { - return this.isOdd() ? goog.math.Long.MIN_VALUE : goog.math.Long.ZERO; - } - if (this.isNegative()) { - if (other.isNegative()) { - return this.negate().multiply(other.negate()); - } else { - return this.negate().multiply(other).negate(); - } - } else if (other.isNegative()) { - return this.multiply(other.negate()).negate(); - } - // If both longs are small, use float multiplication - if (this.lessThan(goog.math.Long.TWO_PWR_24_) && - other.lessThan(goog.math.Long.TWO_PWR_24_)) { - return goog.math.Long.fromNumber(this.toNumber() * other.toNumber()); - } - // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products. - // We can skip products that would overflow. - var a48 = this.high_ >>> 16; - var a32 = this.high_ & 0xFFFF; - var a16 = this.low_ >>> 16; - var a00 = this.low_ & 0xFFFF; - var b48 = other.high_ >>> 16; - var b32 = other.high_ & 0xFFFF; - var b16 = other.low_ >>> 16; - var b00 = other.low_ & 0xFFFF; - var c48 = 0, c32 = 0, c16 = 0, c00 = 0; - c00 += a00 * b00; - c16 += c00 >>> 16; - c00 &= 0xFFFF; - c16 += a16 * b00; - c32 += c16 >>> 16; - c16 &= 0xFFFF; - c16 += a00 * b16; - c32 += c16 >>> 16; - c16 &= 0xFFFF; - c32 += a32 * b00; - c48 += c32 >>> 16; - c32 &= 0xFFFF; - c32 += a16 * b16; - c48 += c32 >>> 16; - c32 &= 0xFFFF; - c32 += a00 * b32; - c48 += c32 >>> 16; - c32 &= 0xFFFF; - c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; - c48 &= 0xFFFF; - return goog.math.Long.fromBits((c16 << 16) | c00, (c48 << 16) | c32); - }; - /** - * Returns this Long divided by the given one. - * @param {goog.math.Long} other Long by which to divide. - * @return {!goog.math.Long} This Long divided by the given one. - */ - goog.math.Long.prototype.div = function(other) { - if (other.isZero()) { - throw Error('division by zero'); - } else if (this.isZero()) { - return goog.math.Long.ZERO; - } - if (this.equals(goog.math.Long.MIN_VALUE)) { - if (other.equals(goog.math.Long.ONE) || - other.equals(goog.math.Long.NEG_ONE)) { - return goog.math.Long.MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE - } else if (other.equals(goog.math.Long.MIN_VALUE)) { - return goog.math.Long.ONE; - } else { - // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|. - var halfThis = this.shiftRight(1); - var approx = halfThis.div(other).shiftLeft(1); - if (approx.equals(goog.math.Long.ZERO)) { - return other.isNegative() ? goog.math.Long.ONE : goog.math.Long.NEG_ONE; - } else { - var rem = this.subtract(other.multiply(approx)); - var result = approx.add(rem.div(other)); - return result; - } - } - } else if (other.equals(goog.math.Long.MIN_VALUE)) { - return goog.math.Long.ZERO; - } - if (this.isNegative()) { - if (other.isNegative()) { - return this.negate().div(other.negate()); - } else { - return this.negate().div(other).negate(); - } - } else if (other.isNegative()) { - return this.div(other.negate()).negate(); - } - // Repeat the following until the remainder is less than other: find a - // floating-point that approximates remainder / other *from below*, add this - // into the result, and subtract it from the remainder. It is critical that - // the approximate value is less than or equal to the real value so that the - // remainder never becomes negative. - var res = goog.math.Long.ZERO; - var rem = this; - while (rem.greaterThanOrEqual(other)) { - // Approximate the result of division. This may be a little greater or - // smaller than the actual value. - var approx = Math.max(1, Math.floor(rem.toNumber() / other.toNumber())); - // We will tweak the approximate result by changing it in the 48-th digit or - // the smallest non-fractional digit, whichever is larger. - var log2 = Math.ceil(Math.log(approx) / Math.LN2); - var delta = (log2 <= 48) ? 1 : Math.pow(2, log2 - 48); - // Decrease the approximation until it is smaller than the remainder. Note - // that if it is too large, the product overflows and is negative. - var approxRes = goog.math.Long.fromNumber(approx); - var approxRem = approxRes.multiply(other); - while (approxRem.isNegative() || approxRem.greaterThan(rem)) { - approx -= delta; - approxRes = goog.math.Long.fromNumber(approx); - approxRem = approxRes.multiply(other); - } - // We know the answer can't be zero... and actually, zero would cause - // infinite recursion since we would make no progress. - if (approxRes.isZero()) { - approxRes = goog.math.Long.ONE; - } - res = res.add(approxRes); - rem = rem.subtract(approxRem); - } - return res; - }; - /** - * Returns this Long modulo the given one. - * @param {goog.math.Long} other Long by which to mod. - * @return {!goog.math.Long} This Long modulo the given one. - */ - goog.math.Long.prototype.modulo = function(other) { - return this.subtract(this.div(other).multiply(other)); - }; - /** @return {!goog.math.Long} The bitwise-NOT of this value. */ - goog.math.Long.prototype.not = function() { - return goog.math.Long.fromBits(~this.low_, ~this.high_); - }; - /** - * Returns the bitwise-AND of this Long and the given one. - * @param {goog.math.Long} other The Long with which to AND. - * @return {!goog.math.Long} The bitwise-AND of this and the other. - */ - goog.math.Long.prototype.and = function(other) { - return goog.math.Long.fromBits(this.low_ & other.low_, - this.high_ & other.high_); - }; - /** - * Returns the bitwise-OR of this Long and the given one. - * @param {goog.math.Long} other The Long with which to OR. - * @return {!goog.math.Long} The bitwise-OR of this and the other. - */ - goog.math.Long.prototype.or = function(other) { - return goog.math.Long.fromBits(this.low_ | other.low_, - this.high_ | other.high_); - }; - /** - * Returns the bitwise-XOR of this Long and the given one. - * @param {goog.math.Long} other The Long with which to XOR. - * @return {!goog.math.Long} The bitwise-XOR of this and the other. - */ - goog.math.Long.prototype.xor = function(other) { - return goog.math.Long.fromBits(this.low_ ^ other.low_, - this.high_ ^ other.high_); - }; - /** - * Returns this Long with bits shifted to the left by the given amount. - * @param {number} numBits The number of bits by which to shift. - * @return {!goog.math.Long} This shifted to the left by the given amount. - */ - goog.math.Long.prototype.shiftLeft = function(numBits) { - numBits &= 63; - if (numBits == 0) { - return this; - } else { - var low = this.low_; - if (numBits < 32) { - var high = this.high_; - return goog.math.Long.fromBits( - low << numBits, - (high << numBits) | (low >>> (32 - numBits))); - } else { - return goog.math.Long.fromBits(0, low << (numBits - 32)); - } - } - }; - /** - * Returns this Long with bits shifted to the right by the given amount. - * @param {number} numBits The number of bits by which to shift. - * @return {!goog.math.Long} This shifted to the right by the given amount. - */ - goog.math.Long.prototype.shiftRight = function(numBits) { - numBits &= 63; - if (numBits == 0) { - return this; - } else { - var high = this.high_; - if (numBits < 32) { - var low = this.low_; - return goog.math.Long.fromBits( - (low >>> numBits) | (high << (32 - numBits)), - high >> numBits); - } else { - return goog.math.Long.fromBits( - high >> (numBits - 32), - high >= 0 ? 0 : -1); - } - } - }; - /** - * Returns this Long with bits shifted to the right by the given amount, with - * the new top bits matching the current sign bit. - * @param {number} numBits The number of bits by which to shift. - * @return {!goog.math.Long} This shifted to the right by the given amount, with - * zeros placed into the new leading bits. - */ - goog.math.Long.prototype.shiftRightUnsigned = function(numBits) { - numBits &= 63; - if (numBits == 0) { - return this; - } else { - var high = this.high_; - if (numBits < 32) { - var low = this.low_; - return goog.math.Long.fromBits( - (low >>> numBits) | (high << (32 - numBits)), - high >>> numBits); - } else if (numBits == 32) { - return goog.math.Long.fromBits(high, 0); - } else { - return goog.math.Long.fromBits(high >>> (numBits - 32), 0); - } - } - }; - //======= begin jsbn ======= - var navigator = { appName: 'Modern Browser' }; // polyfill a little - // Copyright (c) 2005 Tom Wu - // All Rights Reserved. - // http://www-cs-students.stanford.edu/~tjw/jsbn/ - /* - * Copyright (c) 2003-2005 Tom Wu - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF - * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * In addition, the following condition applies: - * - * All redistributions must retain an intact copy of this copyright notice - * and disclaimer. - */ - // Basic JavaScript BN library - subset useful for RSA encryption. - // Bits per digit - var dbits; - // JavaScript engine analysis - var canary = 0xdeadbeefcafe; - var j_lm = ((canary&0xffffff)==0xefcafe); - // (public) Constructor - function BigInteger(a,b,c) { - if(a != null) - if("number" == typeof a) this.fromNumber(a,b,c); - else if(b == null && "string" != typeof a) this.fromString(a,256); - else this.fromString(a,b); - } - // return new, unset BigInteger - function nbi() { return new BigInteger(null); } - // am: Compute w_j += (x*this_i), propagate carries, - // c is initial carry, returns final carry. - // c < 3*dvalue, x < 2*dvalue, this_i < dvalue - // We need to select the fastest one that works in this environment. - // am1: use a single mult and divide to get the high bits, - // max digit bits should be 26 because - // max internal value = 2*dvalue^2-2*dvalue (< 2^53) - function am1(i,x,w,j,c,n) { - while(--n >= 0) { - var v = x*this[i++]+w[j]+c; - c = Math.floor(v/0x4000000); - w[j++] = v&0x3ffffff; - } - return c; - } - // am2 avoids a big mult-and-extract completely. - // Max digit bits should be <= 30 because we do bitwise ops - // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) - function am2(i,x,w,j,c,n) { - var xl = x&0x7fff, xh = x>>15; - while(--n >= 0) { - var l = this[i]&0x7fff; - var h = this[i++]>>15; - var m = xh*l+h*xl; - l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); - c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); - w[j++] = l&0x3fffffff; - } - return c; - } - // Alternately, set max digit bits to 28 since some - // browsers slow down when dealing with 32-bit numbers. - function am3(i,x,w,j,c,n) { - var xl = x&0x3fff, xh = x>>14; - while(--n >= 0) { - var l = this[i]&0x3fff; - var h = this[i++]>>14; - var m = xh*l+h*xl; - l = xl*l+((m&0x3fff)<<14)+w[j]+c; - c = (l>>28)+(m>>14)+xh*h; - w[j++] = l&0xfffffff; - } - return c; - } - if(j_lm && (navigator.appName == "Microsoft Internet Explorer")) { - BigInteger.prototype.am = am2; - dbits = 30; - } - else if(j_lm && (navigator.appName != "Netscape")) { - BigInteger.prototype.am = am1; - dbits = 26; - } - else { // Mozilla/Netscape seems to prefer am3 - BigInteger.prototype.am = am3; - dbits = 28; - } - BigInteger.prototype.DB = dbits; - BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i]; - r.t = this.t; - r.s = this.s; - } - // (protected) set from integer value x, -DV <= x < DV - function bnpFromInt(x) { - this.t = 1; - this.s = (x<0)?-1:0; - if(x > 0) this[0] = x; - else if(x < -1) this[0] = x+DV; - else this.t = 0; - } - // return bigint initialized to value - function nbv(i) { var r = nbi(); r.fromInt(i); return r; } - // (protected) set from string and radix - function bnpFromString(s,b) { - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 256) k = 8; // byte array - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else { this.fromRadix(s,b); return; } - this.t = 0; - this.s = 0; - var i = s.length, mi = false, sh = 0; - while(--i >= 0) { - var x = (k==8)?s[i]&0xff:intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-") mi = true; - continue; - } - mi = false; - if(sh == 0) - this[this.t++] = x; - else if(sh+k > this.DB) { - this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); - } - else - this[this.t-1] |= x<= this.DB) sh -= this.DB; - } - if(k == 8 && (s[0]&0x80) != 0) { - this.s = -1; - if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t; - } - // (public) return string representation in given radix - function bnToString(b) { - if(this.s < 0) return "-"+this.negate().toString(b); - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else return this.toRadix(b); - var km = (1< 0) { - if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } - while(i >= 0) { - if(p < k) { - d = (this[i]&((1<>(p+=this.DB-k); - } - else { - d = (this[i]>>(p-=k))&km; - if(p <= 0) { p += this.DB; --i; } - } - if(d > 0) m = true; - if(m) r += int2char(d); - } - } - return m?r:"0"; - } - // (public) -this - function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } - // (public) |this| - function bnAbs() { return (this.s<0)?this.negate():this; } - // (public) return + if this > a, - if this < a, 0 if equal - function bnCompareTo(a) { - var r = this.s-a.s; - if(r != 0) return r; - var i = this.t; - r = i-a.t; - if(r != 0) return (this.s<0)?-r:r; - while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; - return 0; - } - // returns bit length of the integer x - function nbits(x) { - var r = 1, t; - if((t=x>>>16) != 0) { x = t; r += 16; } - if((t=x>>8) != 0) { x = t; r += 8; } - if((t=x>>4) != 0) { x = t; r += 4; } - if((t=x>>2) != 0) { x = t; r += 2; } - if((t=x>>1) != 0) { x = t; r += 1; } - return r; - } - // (public) return the number of bits in "this" - function bnBitLength() { - if(this.t <= 0) return 0; - return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); - } - // (protected) r = this << n*DB - function bnpDLShiftTo(n,r) { - var i; - for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; - for(i = n-1; i >= 0; --i) r[i] = 0; - r.t = this.t+n; - r.s = this.s; - } - // (protected) r = this >> n*DB - function bnpDRShiftTo(n,r) { - for(var i = n; i < this.t; ++i) r[i-n] = this[i]; - r.t = Math.max(this.t-n,0); - r.s = this.s; - } - // (protected) r = this << n - function bnpLShiftTo(n,r) { - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<= 0; --i) { - r[i+ds+1] = (this[i]>>cbs)|c; - c = (this[i]&bm)<= 0; --i) r[i] = 0; - r[ds] = c; - r.t = this.t+ds+1; - r.s = this.s; - r.clamp(); - } - // (protected) r = this >> n - function bnpRShiftTo(n,r) { - r.s = this.s; - var ds = Math.floor(n/this.DB); - if(ds >= this.t) { r.t = 0; return; } - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<>bs; - for(var i = ds+1; i < this.t; ++i) { - r[i-ds-1] |= (this[i]&bm)<>bs; - } - if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB; - } - if(a.t < this.t) { - c -= a.s; - while(i < this.t) { - c += this[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c -= a[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c -= a.s; - } - r.s = (c<0)?-1:0; - if(c < -1) r[i++] = this.DV+c; - else if(c > 0) r[i++] = c; - r.t = i; - r.clamp(); - } - // (protected) r = this * a, r != this,a (HAC 14.12) - // "this" should be the larger one if appropriate. - function bnpMultiplyTo(a,r) { - var x = this.abs(), y = a.abs(); - var i = x.t; - r.t = i+y.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); - r.s = 0; - r.clamp(); - if(this.s != a.s) BigInteger.ZERO.subTo(r,r); - } - // (protected) r = this^2, r != this (HAC 14.16) - function bnpSquareTo(r) { - var x = this.abs(); - var i = r.t = 2*x.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < x.t-1; ++i) { - var c = x.am(i,x[i],r,2*i,0,1); - if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { - r[i+x.t] -= x.DV; - r[i+x.t+1] = 1; - } - } - if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); - r.s = 0; - r.clamp(); - } - // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) - // r != q, this != m. q or r may be null. - function bnpDivRemTo(m,q,r) { - var pm = m.abs(); - if(pm.t <= 0) return; - var pt = this.abs(); - if(pt.t < pm.t) { - if(q != null) q.fromInt(0); - if(r != null) this.copyTo(r); - return; - } - if(r == null) r = nbi(); - var y = nbi(), ts = this.s, ms = m.s; - var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus - if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } - else { pm.copyTo(y); pt.copyTo(r); } - var ys = y.t; - var y0 = y[ys-1]; - if(y0 == 0) return; - var yt = y0*(1<1)?y[ys-2]>>this.F2:0); - var d1 = this.FV/yt, d2 = (1<= 0) { - r[r.t++] = 1; - r.subTo(t,r); - } - BigInteger.ONE.dlShiftTo(ys,t); - t.subTo(y,y); // "negative" y so we can replace sub with am later - while(y.t < ys) y[y.t++] = 0; - while(--j >= 0) { - // Estimate quotient digit - var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); - if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out - y.dlShiftTo(j,t); - r.subTo(t,r); - while(r[i] < --qd) r.subTo(t,r); - } - } - if(q != null) { - r.drShiftTo(ys,q); - if(ts != ms) BigInteger.ZERO.subTo(q,q); - } - r.t = ys; - r.clamp(); - if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder - if(ts < 0) BigInteger.ZERO.subTo(r,r); - } - // (public) this mod a - function bnMod(a) { - var r = nbi(); - this.abs().divRemTo(a,null,r); - if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); - return r; - } - // Modular reduction using "classic" algorithm - function Classic(m) { this.m = m; } - function cConvert(x) { - if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); - else return x; - } - function cRevert(x) { return x; } - function cReduce(x) { x.divRemTo(this.m,null,x); } - function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - Classic.prototype.convert = cConvert; - Classic.prototype.revert = cRevert; - Classic.prototype.reduce = cReduce; - Classic.prototype.mulTo = cMulTo; - Classic.prototype.sqrTo = cSqrTo; - // (protected) return "-1/this % 2^DB"; useful for Mont. reduction - // justification: - // xy == 1 (mod m) - // xy = 1+km - // xy(2-xy) = (1+km)(1-km) - // x[y(2-xy)] = 1-k^2m^2 - // x[y(2-xy)] == 1 (mod m^2) - // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 - // should reduce x and y(2-xy) by m^2 at each step to keep size bounded. - // JS multiply "overflows" differently from C/C++, so care is needed here. - function bnpInvDigit() { - if(this.t < 1) return 0; - var x = this[0]; - if((x&1) == 0) return 0; - var y = x&3; // y == 1/x mod 2^2 - y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 - y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 - y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y>0)?this.DV-y:-y; - } - // Montgomery reduction - function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp&0x7fff; - this.mph = this.mp>>15; - this.um = (1<<(m.DB-15))-1; - this.mt2 = 2*m.t; - } - // xR mod m - function montConvert(x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t,r); - r.divRemTo(this.m,null,r); - if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); - return r; - } - // x/R mod m - function montRevert(x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; - } - // x = x/R mod m (HAC 14.32) - function montReduce(x) { - while(x.t <= this.mt2) // pad x so am has enough room later - x[x.t++] = 0; - for(var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x[i]*mp mod DV - var j = x[i]&0x7fff; - var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; - // use am to combine the multiply-shift-add into one call - j = i+this.m.t; - x[j] += this.m.am(0,u0,x,i,0,this.m.t); - // propagate carry - while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } - } - x.clamp(); - x.drShiftTo(this.m.t,x); - if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); - } - // r = "x^2/R mod m"; x != r - function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - // r = "xy/R mod m"; x,y != r - function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - Montgomery.prototype.convert = montConvert; - Montgomery.prototype.revert = montRevert; - Montgomery.prototype.reduce = montReduce; - Montgomery.prototype.mulTo = montMulTo; - Montgomery.prototype.sqrTo = montSqrTo; - // (protected) true iff this is even - function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } - // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) - function bnpExp(e,z) { - if(e > 0xffffffff || e < 1) return BigInteger.ONE; - var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; - g.copyTo(r); - while(--i >= 0) { - z.sqrTo(r,r2); - if((e&(1< 0) z.mulTo(r2,g,r); - else { var t = r; r = r2; r2 = t; } - } - return z.revert(r); - } - // (public) this^e % m, 0 <= e < 2^32 - function bnModPowInt(e,m) { - var z; - if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); - return this.exp(e,z); - } - // protected - BigInteger.prototype.copyTo = bnpCopyTo; - BigInteger.prototype.fromInt = bnpFromInt; - BigInteger.prototype.fromString = bnpFromString; - BigInteger.prototype.clamp = bnpClamp; - BigInteger.prototype.dlShiftTo = bnpDLShiftTo; - BigInteger.prototype.drShiftTo = bnpDRShiftTo; - BigInteger.prototype.lShiftTo = bnpLShiftTo; - BigInteger.prototype.rShiftTo = bnpRShiftTo; - BigInteger.prototype.subTo = bnpSubTo; - BigInteger.prototype.multiplyTo = bnpMultiplyTo; - BigInteger.prototype.squareTo = bnpSquareTo; - BigInteger.prototype.divRemTo = bnpDivRemTo; - BigInteger.prototype.invDigit = bnpInvDigit; - BigInteger.prototype.isEven = bnpIsEven; - BigInteger.prototype.exp = bnpExp; - // public - BigInteger.prototype.toString = bnToString; - BigInteger.prototype.negate = bnNegate; - BigInteger.prototype.abs = bnAbs; - BigInteger.prototype.compareTo = bnCompareTo; - BigInteger.prototype.bitLength = bnBitLength; - BigInteger.prototype.mod = bnMod; - BigInteger.prototype.modPowInt = bnModPowInt; - // "constants" - BigInteger.ZERO = nbv(0); - BigInteger.ONE = nbv(1); - // jsbn2 stuff - // (protected) convert from radix string - function bnpFromRadix(s,b) { - this.fromInt(0); - if(b == null) b = 10; - var cs = this.chunkSize(b); - var d = Math.pow(b,cs), mi = false, j = 0, w = 0; - for(var i = 0; i < s.length; ++i) { - var x = intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-" && this.signum() == 0) mi = true; - continue; - } - w = b*w+x; - if(++j >= cs) { - this.dMultiply(d); - this.dAddOffset(w,0); - j = 0; - w = 0; - } - } - if(j > 0) { - this.dMultiply(Math.pow(b,j)); - this.dAddOffset(w,0); - } - if(mi) BigInteger.ZERO.subTo(this,this); - } - // (protected) return x s.t. r^x < DV - function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); } - // (public) 0 if this == 0, 1 if this > 0 - function bnSigNum() { - if(this.s < 0) return -1; - else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; - else return 1; - } - // (protected) this *= n, this >= 0, 1 < n < DV - function bnpDMultiply(n) { - this[this.t] = this.am(0,n-1,this,0,0,this.t); - ++this.t; - this.clamp(); - } - // (protected) this += n << w words, this >= 0 - function bnpDAddOffset(n,w) { - if(n == 0) return; - while(this.t <= w) this[this.t++] = 0; - this[w] += n; - while(this[w] >= this.DV) { - this[w] -= this.DV; - if(++w >= this.t) this[this.t++] = 0; - ++this[w]; - } - } - // (protected) convert to radix string - function bnpToRadix(b) { - if(b == null) b = 10; - if(this.signum() == 0 || b < 2 || b > 36) return "0"; - var cs = this.chunkSize(b); - var a = Math.pow(b,cs); - var d = nbv(a), y = nbi(), z = nbi(), r = ""; - this.divRemTo(d,y,z); - while(y.signum() > 0) { - r = (a+z.intValue()).toString(b).substr(1) + r; - y.divRemTo(d,y,z); - } - return z.intValue().toString(b) + r; - } - // (public) return value as integer - function bnIntValue() { - if(this.s < 0) { - if(this.t == 1) return this[0]-this.DV; - else if(this.t == 0) return -1; - } - else if(this.t == 1) return this[0]; - else if(this.t == 0) return 0; - // assumes 16 < DB < 32 - return ((this[1]&((1<<(32-this.DB))-1))<>= this.DB; - } - if(a.t < this.t) { - c += a.s; - while(i < this.t) { - c += this[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c += a[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += a.s; - } - r.s = (c<0)?-1:0; - if(c > 0) r[i++] = c; - else if(c < -1) r[i++] = this.DV+c; - r.t = i; - r.clamp(); - } - BigInteger.prototype.fromRadix = bnpFromRadix; - BigInteger.prototype.chunkSize = bnpChunkSize; - BigInteger.prototype.signum = bnSigNum; - BigInteger.prototype.dMultiply = bnpDMultiply; - BigInteger.prototype.dAddOffset = bnpDAddOffset; - BigInteger.prototype.toRadix = bnpToRadix; - BigInteger.prototype.intValue = bnIntValue; - BigInteger.prototype.addTo = bnpAddTo; - //======= end jsbn ======= - // Emscripten wrapper - var Wrapper = { - abs: function(l, h) { - var x = new goog.math.Long(l, h); - var ret; - if (x.isNegative()) { - ret = x.negate(); - } else { - ret = x; - } - HEAP32[tempDoublePtr>>2] = ret.low_; - HEAP32[tempDoublePtr+4>>2] = ret.high_; - }, - ensureTemps: function() { - if (Wrapper.ensuredTemps) return; - Wrapper.ensuredTemps = true; - Wrapper.two32 = new BigInteger(); - Wrapper.two32.fromString('4294967296', 10); - Wrapper.two64 = new BigInteger(); - Wrapper.two64.fromString('18446744073709551616', 10); - Wrapper.temp1 = new BigInteger(); - Wrapper.temp2 = new BigInteger(); - }, - lh2bignum: function(l, h) { - var a = new BigInteger(); - a.fromString(h.toString(), 10); - var b = new BigInteger(); - a.multiplyTo(Wrapper.two32, b); - var c = new BigInteger(); - c.fromString(l.toString(), 10); - var d = new BigInteger(); - c.addTo(b, d); - return d; - }, - stringify: function(l, h, unsigned) { - var ret = new goog.math.Long(l, h).toString(); - if (unsigned && ret[0] == '-') { - // unsign slowly using jsbn bignums - Wrapper.ensureTemps(); - var bignum = new BigInteger(); - bignum.fromString(ret, 10); - ret = new BigInteger(); - Wrapper.two64.addTo(bignum, ret); - ret = ret.toString(10); - } - return ret; - }, - fromString: function(str, base, min, max, unsigned) { - Wrapper.ensureTemps(); - var bignum = new BigInteger(); - bignum.fromString(str, base); - var bigmin = new BigInteger(); - bigmin.fromString(min, 10); - var bigmax = new BigInteger(); - bigmax.fromString(max, 10); - if (unsigned && bignum.compareTo(BigInteger.ZERO) < 0) { - var temp = new BigInteger(); - bignum.addTo(Wrapper.two64, temp); - bignum = temp; - } - var error = false; - if (bignum.compareTo(bigmin) < 0) { - bignum = bigmin; - error = true; - } else if (bignum.compareTo(bigmax) > 0) { - bignum = bigmax; - error = true; - } - var ret = goog.math.Long.fromString(bignum.toString()); // min-max checks should have clamped this to a range goog.math.Long can handle well - HEAP32[tempDoublePtr>>2] = ret.low_; - HEAP32[tempDoublePtr+4>>2] = ret.high_; - if (error) throw 'range error'; - } - }; - return Wrapper; -})(); -//======= end closure i64 code ======= -// === Auto-generated postamble setup entry stuff === -if (memoryInitializer) { - function applyData(data) { - HEAPU8.set(data, STATIC_BASE); - } - if (ENVIRONMENT_IS_NODE || ENVIRONMENT_IS_SHELL) { - applyData(Module['readBinary'](memoryInitializer)); - } else { - addRunDependency('memory initializer'); - Browser.asyncLoad(memoryInitializer, function(data) { - applyData(data); - removeRunDependency('memory initializer'); - }, function(data) { - throw 'could not load memory initializer ' + memoryInitializer; - }); - } -} -function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status; -}; -ExitStatus.prototype = new Error(); -ExitStatus.prototype.constructor = ExitStatus; -var initialStackTop; -var preloadStartTime = null; -var calledMain = false; -dependenciesFulfilled = function runCaller() { - // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) - if (!Module['calledRun'] && shouldRunNow) run(); - if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled -} -Module['callMain'] = Module.callMain = function callMain(args) { - assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on __ATMAIN__)'); - assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called'); - args = args || []; - if (ENVIRONMENT_IS_WEB && preloadStartTime !== null) { - Module.printErr('preload time: ' + (Date.now() - preloadStartTime) + ' ms'); - } - ensureInitRuntime(); - var argc = args.length+1; - function pad() { - for (var i = 0; i < 4-1; i++) { - argv.push(0); - } - } - var argv = [allocate(intArrayFromString("/bin/this.program"), 'i8', ALLOC_NORMAL) ]; - pad(); - for (var i = 0; i < argc-1; i = i + 1) { - argv.push(allocate(intArrayFromString(args[i]), 'i8', ALLOC_NORMAL)); - pad(); - } - argv.push(0); - argv = allocate(argv, 'i32', ALLOC_NORMAL); - initialStackTop = STACKTOP; - try { - var ret = Module['_main'](argc, argv, 0); - // if we're not running an evented main loop, it's time to exit - if (!Module['noExitRuntime']) { - exit(ret); - } - } - catch(e) { - if (e instanceof ExitStatus) { - // exit() throws this once it's done to make sure execution - // has been stopped completely - return; - } else if (e == 'SimulateInfiniteLoop') { - // running an evented main loop, don't immediately exit - Module['noExitRuntime'] = true; - return; - } else { - if (e && typeof e === 'object' && e.stack) Module.printErr('exception thrown: ' + [e, e.stack]); - throw e; - } - } finally { - calledMain = true; - } -} -function run(args) { - args = args || Module['arguments']; - if (preloadStartTime === null) preloadStartTime = Date.now(); - if (runDependencies > 0) { - Module.printErr('run() called, but dependencies remain, so not running'); - return; - } - preRun(); - if (runDependencies > 0) { - // a preRun added a dependency, run will be called later - return; - } - function doRun() { - ensureInitRuntime(); - preMain(); - Module['calledRun'] = true; - if (Module['_main'] && shouldRunNow) { - Module['callMain'](args); - } - postRun(); - } - if (Module['setStatus']) { - Module['setStatus']('Running...'); - setTimeout(function() { - setTimeout(function() { - Module['setStatus'](''); - }, 1); - if (!ABORT) doRun(); - }, 1); - } else { - doRun(); - } -} -Module['run'] = Module.run = run; -function exit(status) { - ABORT = true; - EXITSTATUS = status; - STACKTOP = initialStackTop; - // exit the runtime - exitRuntime(); - // TODO We should handle this differently based on environment. - // In the browser, the best we can do is throw an exception - // to halt execution, but in node we could process.exit and - // I'd imagine SM shell would have something equivalent. - // This would let us set a proper exit status (which - // would be great for checking test exit statuses). - // https://github.com/kripken/emscripten/issues/1371 - // throw an exception to halt the current execution - throw new ExitStatus(status); -} -Module['exit'] = Module.exit = exit; -function abort(text) { - if (text) { - Module.print(text); - Module.printErr(text); - } - ABORT = true; - EXITSTATUS = 1; - throw 'abort() at ' + stackTrace(); -} -Module['abort'] = Module.abort = abort; -// {{PRE_RUN_ADDITIONS}} -if (Module['preInit']) { - if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; - while (Module['preInit'].length > 0) { - Module['preInit'].pop()(); - } -} -// shouldRunNow refers to calling main(), not run(). -var shouldRunNow = true; -if (Module['noInitialRun']) { - shouldRunNow = false; -} -run(); -// {{POST_RUN_ADDITIONS}} -// {{MODULE_ADDITIONS}} + +})({"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array},{"abort":abort,"assert":assert,"asmPrintInt":asmPrintInt,"asmPrintFloat":asmPrintFloat,"min":Math_min,"invoke_iiiiii":invoke_iiiiii,"invoke_vd":invoke_vd,"invoke_vid":invoke_vid,"invoke_iiidi":invoke_iiidi,"invoke_vi":invoke_vi,"invoke_vii":invoke_vii,"invoke_iiii":invoke_iiii,"invoke_viii":invoke_viii,"invoke_v":invoke_v,"_glUseProgram":_glUseProgram,"_fabs":_fabs,"_fread":_fread,"_glUniformMatrix4fv":_glUniformMatrix4fv,"_SDL_RWFromFile":_SDL_RWFromFile,"_glDeleteProgram":_glDeleteProgram,"_glBindBuffer":_glBindBuffer,"_glCreateProgram":_glCreateProgram,"_fsync":_fsync,"_SDL_GetError":_SDL_GetError,"_sbrk":_sbrk,"_glBlendFunc":_glBlendFunc,"_glGetAttribLocation":_glGetAttribLocation,"_Mix_PlayChannel":_Mix_PlayChannel,"_glCreateShader":_glCreateShader,"_sysconf":_sysconf,"_close":_close,"_SDL_InitSubSystem":_SDL_InitSubSystem,"_Mix_PlayMusic":_Mix_PlayMusic,"_rewind":_rewind,"_puts":_puts,"_Mix_FreeChunk":_Mix_FreeChunk,"_write":_write,"_ftell":_ftell,"_glGenBuffers":_glGenBuffers,"_glShaderSource":_glShaderSource,"_Mix_HaltMusic":_Mix_HaltMusic,"_mknod":_mknod,"_mkdir":_mkdir,"_llvm_trap":_llvm_trap,"_fmodl":_fmodl,"_glVertexAttribPointer":_glVertexAttribPointer,"_send":_send,"_SDL_GetTicks":_SDL_GetTicks,"_SDL_GetKeyboardState":_SDL_GetKeyboardState,"_glBufferSubData":_glBufferSubData,"_SDL_LockSurface":_SDL_LockSurface,"_strerror_r":_strerror_r,"__reallyNegative":__reallyNegative,"___setErrNo":___setErrNo,"_SDL_OpenAudio":_SDL_OpenAudio,"_srand":_srand,"_glEnable":_glEnable,"_printf":_printf,"_glGenTextures":_glGenTextures,"_glGetString":_glGetString,"_glAttachShader":_glAttachShader,"_read":_read,"_SDL_SetVideoMode":_SDL_SetVideoMode,"_fwrite":_fwrite,"_time":_time,"_fprintf":_fprintf,"_gettimeofday":_gettimeofday,"_putenv":_putenv,"_IMG_Load":_IMG_Load,"_fmod":_fmod,"_lseek":_lseek,"___buildEnvironment":___buildEnvironment,"_pwrite":_pwrite,"_glBindTexture":_glBindTexture,"_open":_open,"_fabsf":_fabsf,"_emscripten_asm_const":_emscripten_asm_const,"_SDL_Init":_SDL_Init,"_glUniform1i":_glUniform1i,"_glDrawArrays":_glDrawArrays,"_TTF_RenderText_Solid":_TTF_RenderText_Solid,"_fseek":_fseek,"_SDL_GetMouseState":_SDL_GetMouseState,"_getenv":_getenv,"_fclose":_fclose,"_sqrtf":_sqrtf,"_stime":_stime,"_recv":_recv,"_fgetc":_fgetc,"_glCompileShader":_glCompileShader,"_glEnableVertexAttribArray":_glEnableVertexAttribArray,"_abort":_abort,"_glBufferData":_glBufferData,"_glTexImage2D":_glTexImage2D,"_fopen":_fopen,"_glDeleteShader":_glDeleteShader,"_glGetProgramiv":_glGetProgramiv,"_SDL_CloseAudio":_SDL_CloseAudio,"_fflush":_fflush,"_SDL_FreeRW":_SDL_FreeRW,"_SDL_PauseAudio":_SDL_PauseAudio,"_SDL_PollEvent":_SDL_PollEvent,"_glGetUniformLocation":_glGetUniformLocation,"_glTexParameteri":_glTexParameteri,"_fileno":_fileno,"_Mix_LoadWAV_RW":_Mix_LoadWAV_RW,"_SDL_WM_SetCaption":_SDL_WM_SetCaption,"_IMG_Load_RW":_IMG_Load_RW,"_glPixelStorei":_glPixelStorei,"_glGetShaderiv":_glGetShaderiv,"_pread":_pread,"_mkport":_mkport,"_glLinkProgram":_glLinkProgram,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_emscripten_set_main_loop":_emscripten_set_main_loop,"___errno_location":___errno_location,"_copysign":_copysign,"_fputc":_fputc,"_copysignl":_copysignl,"_SDL_GL_SwapBuffers":_SDL_GL_SwapBuffers,"_strerror":_strerror,"__formatString":__formatString,"_fputs":_fputs,"_SDL_UpperBlit":_SDL_UpperBlit,"_SDL_RWFromConstMem":_SDL_RWFromConstMem,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"cttz_i8":cttz_i8,"ctlz_i8":ctlz_i8,"___rand_seed":___rand_seed,"NaN":NaN,"Infinity":Infinity},buffer);var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _free=Module["_free"]=asm["_free"];var _main=Module["_main"]=asm["_main"];var _rand_r=Module["_rand_r"]=asm["_rand_r"];var _realloc=Module["_realloc"]=asm["_realloc"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _strlen=Module["_strlen"]=asm["_strlen"];var _memset=Module["_memset"]=asm["_memset"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _rand=Module["_rand"]=asm["_rand"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_vd=Module["dynCall_vd"]=asm["dynCall_vd"];var dynCall_vid=Module["dynCall_vid"]=asm["dynCall_vid"];var dynCall_iiidi=Module["dynCall_iiidi"]=asm["dynCall_iiidi"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];var i64Math=(function(){var goog={math:{}};goog.math.Long=(function(low,high){this.low_=low|0;this.high_=high|0});goog.math.Long.IntCache_={};goog.math.Long.fromInt=(function(value){if(-128<=value&&value<128){var cachedObj=goog.math.Long.IntCache_[value];if(cachedObj){return cachedObj}}var obj=new goog.math.Long(value|0,value<0?-1:0);if(-128<=value&&value<128){goog.math.Long.IntCache_[value]=obj}return obj});goog.math.Long.fromNumber=(function(value){if(isNaN(value)||!isFinite(value)){return goog.math.Long.ZERO}else if(value<=-goog.math.Long.TWO_PWR_63_DBL_){return goog.math.Long.MIN_VALUE}else if(value+1>=goog.math.Long.TWO_PWR_63_DBL_){return goog.math.Long.MAX_VALUE}else if(value<0){return goog.math.Long.fromNumber(-value).negate()}else{return new goog.math.Long(value%goog.math.Long.TWO_PWR_32_DBL_|0,value/goog.math.Long.TWO_PWR_32_DBL_|0)}});goog.math.Long.fromBits=(function(lowBits,highBits){return new goog.math.Long(lowBits,highBits)});goog.math.Long.fromString=(function(str,opt_radix){if(str.length==0){throw Error("number format error: empty string")}var radix=opt_radix||10;if(radix<2||36=0){throw Error('number format error: interior "-" character: '+str)}var radixToPower=goog.math.Long.fromNumber(Math.pow(radix,8));var result=goog.math.Long.ZERO;for(var i=0;i=0?this.low_:goog.math.Long.TWO_PWR_32_DBL_+this.low_});goog.math.Long.prototype.getNumBitsAbs=(function(){if(this.isNegative()){if(this.equals(goog.math.Long.MIN_VALUE)){return 64}else{return this.negate().getNumBitsAbs()}}else{var val=this.high_!=0?this.high_:this.low_;for(var bit=31;bit>0;bit--){if((val&1<0});goog.math.Long.prototype.greaterThanOrEqual=(function(other){return this.compare(other)>=0});goog.math.Long.prototype.compare=(function(other){if(this.equals(other)){return 0}var thisNeg=this.isNegative();var otherNeg=other.isNegative();if(thisNeg&&!otherNeg){return-1}if(!thisNeg&&otherNeg){return 1}if(this.subtract(other).isNegative()){return-1}else{return 1}});goog.math.Long.prototype.negate=(function(){if(this.equals(goog.math.Long.MIN_VALUE)){return goog.math.Long.MIN_VALUE}else{return this.not().add(goog.math.Long.ONE)}});goog.math.Long.prototype.add=(function(other){var a48=this.high_>>>16;var a32=this.high_&65535;var a16=this.low_>>>16;var a00=this.low_&65535;var b48=other.high_>>>16;var b32=other.high_&65535;var b16=other.low_>>>16;var b00=other.low_&65535;var c48=0,c32=0,c16=0,c00=0;c00+=a00+b00;c16+=c00>>>16;c00&=65535;c16+=a16+b16;c32+=c16>>>16;c16&=65535;c32+=a32+b32;c48+=c32>>>16;c32&=65535;c48+=a48+b48;c48&=65535;return goog.math.Long.fromBits(c16<<16|c00,c48<<16|c32)});goog.math.Long.prototype.subtract=(function(other){return this.add(other.negate())});goog.math.Long.prototype.multiply=(function(other){if(this.isZero()){return goog.math.Long.ZERO}else if(other.isZero()){return goog.math.Long.ZERO}if(this.equals(goog.math.Long.MIN_VALUE)){return other.isOdd()?goog.math.Long.MIN_VALUE:goog.math.Long.ZERO}else if(other.equals(goog.math.Long.MIN_VALUE)){return this.isOdd()?goog.math.Long.MIN_VALUE:goog.math.Long.ZERO}if(this.isNegative()){if(other.isNegative()){return this.negate().multiply(other.negate())}else{return this.negate().multiply(other).negate()}}else if(other.isNegative()){return this.multiply(other.negate()).negate()}if(this.lessThan(goog.math.Long.TWO_PWR_24_)&&other.lessThan(goog.math.Long.TWO_PWR_24_)){return goog.math.Long.fromNumber(this.toNumber()*other.toNumber())}var a48=this.high_>>>16;var a32=this.high_&65535;var a16=this.low_>>>16;var a00=this.low_&65535;var b48=other.high_>>>16;var b32=other.high_&65535;var b16=other.low_>>>16;var b00=other.low_&65535;var c48=0,c32=0,c16=0,c00=0;c00+=a00*b00;c16+=c00>>>16;c00&=65535;c16+=a16*b00;c32+=c16>>>16;c16&=65535;c16+=a00*b16;c32+=c16>>>16;c16&=65535;c32+=a32*b00;c48+=c32>>>16;c32&=65535;c32+=a16*b16;c48+=c32>>>16;c32&=65535;c32+=a00*b32;c48+=c32>>>16;c32&=65535;c48+=a48*b00+a32*b16+a16*b32+a00*b48;c48&=65535;return goog.math.Long.fromBits(c16<<16|c00,c48<<16|c32)});goog.math.Long.prototype.div=(function(other){if(other.isZero()){throw Error("division by zero")}else if(this.isZero()){return goog.math.Long.ZERO}if(this.equals(goog.math.Long.MIN_VALUE)){if(other.equals(goog.math.Long.ONE)||other.equals(goog.math.Long.NEG_ONE)){return goog.math.Long.MIN_VALUE}else if(other.equals(goog.math.Long.MIN_VALUE)){return goog.math.Long.ONE}else{var halfThis=this.shiftRight(1);var approx=halfThis.div(other).shiftLeft(1);if(approx.equals(goog.math.Long.ZERO)){return other.isNegative()?goog.math.Long.ONE:goog.math.Long.NEG_ONE}else{var rem=this.subtract(other.multiply(approx));var result=approx.add(rem.div(other));return result}}}else if(other.equals(goog.math.Long.MIN_VALUE)){return goog.math.Long.ZERO}if(this.isNegative()){if(other.isNegative()){return this.negate().div(other.negate())}else{return this.negate().div(other).negate()}}else if(other.isNegative()){return this.div(other.negate()).negate()}var res=goog.math.Long.ZERO;var rem=this;while(rem.greaterThanOrEqual(other)){var approx=Math.max(1,Math.floor(rem.toNumber()/other.toNumber()));var log2=Math.ceil(Math.log(approx)/Math.LN2);var delta=log2<=48?1:Math.pow(2,log2-48);var approxRes=goog.math.Long.fromNumber(approx);var approxRem=approxRes.multiply(other);while(approxRem.isNegative()||approxRem.greaterThan(rem)){approx-=delta;approxRes=goog.math.Long.fromNumber(approx);approxRem=approxRes.multiply(other)}if(approxRes.isZero()){approxRes=goog.math.Long.ONE}res=res.add(approxRes);rem=rem.subtract(approxRem)}return res});goog.math.Long.prototype.modulo=(function(other){return this.subtract(this.div(other).multiply(other))});goog.math.Long.prototype.not=(function(){return goog.math.Long.fromBits(~this.low_,~this.high_)});goog.math.Long.prototype.and=(function(other){return goog.math.Long.fromBits(this.low_&other.low_,this.high_&other.high_)});goog.math.Long.prototype.or=(function(other){return goog.math.Long.fromBits(this.low_|other.low_,this.high_|other.high_)});goog.math.Long.prototype.xor=(function(other){return goog.math.Long.fromBits(this.low_^other.low_,this.high_^other.high_)});goog.math.Long.prototype.shiftLeft=(function(numBits){numBits&=63;if(numBits==0){return this}else{var low=this.low_;if(numBits<32){var high=this.high_;return goog.math.Long.fromBits(low<>>32-numBits)}else{return goog.math.Long.fromBits(0,low<>>numBits|high<<32-numBits,high>>numBits)}else{return goog.math.Long.fromBits(high>>numBits-32,high>=0?0:-1)}}});goog.math.Long.prototype.shiftRightUnsigned=(function(numBits){numBits&=63;if(numBits==0){return this}else{var high=this.high_;if(numBits<32){var low=this.low_;return goog.math.Long.fromBits(low>>>numBits|high<<32-numBits,high>>>numBits)}else if(numBits==32){return goog.math.Long.fromBits(high,0)}else{return goog.math.Long.fromBits(high>>>numBits-32,0)}}});var navigator={appName:"Modern Browser"};var dbits;var canary=0xdeadbeefcafe;var j_lm=(canary&16777215)==15715070;function BigInteger(a,b,c){if(a!=null)if("number"==typeof a)this.fromNumber(a,b,c);else if(b==null&&"string"!=typeof a)this.fromString(a,256);else this.fromString(a,b)}function nbi(){return new BigInteger(null)}function am1(i,x,w,j,c,n){while(--n>=0){var v=x*this[i++]+w[j]+c;c=Math.floor(v/67108864);w[j++]=v&67108863}return c}function am2(i,x,w,j,c,n){var xl=x&32767,xh=x>>15;while(--n>=0){var l=this[i]&32767;var h=this[i++]>>15;var m=xh*l+h*xl;l=xl*l+((m&32767)<<15)+w[j]+(c&1073741823);c=(l>>>30)+(m>>>15)+xh*h+(c>>>30);w[j++]=l&1073741823}return c}function am3(i,x,w,j,c,n){var xl=x&16383,xh=x>>14;while(--n>=0){var l=this[i]&16383;var h=this[i++]>>14;var m=xh*l+h*xl;l=xl*l+((m&16383)<<14)+w[j]+c;c=(l>>28)+(m>>14)+xh*h;w[j++]=l&268435455}return c}if(j_lm&&navigator.appName=="Microsoft Internet Explorer"){BigInteger.prototype.am=am2;dbits=30}else if(j_lm&&navigator.appName!="Netscape"){BigInteger.prototype.am=am1;dbits=26}else{BigInteger.prototype.am=am3;dbits=28}BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=(1<=0;--i)r[i]=this[i];r.t=this.t;r.s=this.s}function bnpFromInt(x){this.t=1;this.s=x<0?-1:0;if(x>0)this[0]=x;else if(x<-1)this[0]=x+DV;else this.t=0}function nbv(i){var r=nbi();r.fromInt(i);return r}function bnpFromString(s,b){var k;if(b==16)k=4;else if(b==8)k=3;else if(b==256)k=8;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else{this.fromRadix(s,b);return}this.t=0;this.s=0;var i=s.length,mi=false,sh=0;while(--i>=0){var x=k==8?s[i]&255:intAt(s,i);if(x<0){if(s.charAt(i)=="-")mi=true;continue}mi=false;if(sh==0)this[this.t++]=x;else if(sh+k>this.DB){this[this.t-1]|=(x&(1<>this.DB-sh}else this[this.t-1]|=x<=this.DB)sh-=this.DB}if(k==8&&(s[0]&128)!=0){this.s=-1;if(sh>0)this[this.t-1]|=(1<0&&this[this.t-1]==c)--this.t}function bnToString(b){if(this.s<0)return"-"+this.negate().toString(b);var k;if(b==16)k=4;else if(b==8)k=3;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else return this.toRadix(b);var km=(1<0){if(p>p)>0){m=true;r=int2char(d)}while(i>=0){if(p>(p+=this.DB-k)}else{d=this[i]>>(p-=k)&km;if(p<=0){p+=this.DB;--i}}if(d>0)m=true;if(m)r+=int2char(d)}}return m?r:"0"}function bnNegate(){var r=nbi();BigInteger.ZERO.subTo(this,r);return r}function bnAbs(){return this.s<0?this.negate():this}function bnCompareTo(a){var r=this.s-a.s;if(r!=0)return r;var i=this.t;r=i-a.t;if(r!=0)return this.s<0?-r:r;while(--i>=0)if((r=this[i]-a[i])!=0)return r;return 0}function nbits(x){var r=1,t;if((t=x>>>16)!=0){x=t;r+=16}if((t=x>>8)!=0){x=t;r+=8}if((t=x>>4)!=0){x=t;r+=4}if((t=x>>2)!=0){x=t;r+=2}if((t=x>>1)!=0){x=t;r+=1}return r}function bnBitLength(){if(this.t<=0)return 0;return this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)}function bnpDLShiftTo(n,r){var i;for(i=this.t-1;i>=0;--i)r[i+n]=this[i];for(i=n-1;i>=0;--i)r[i]=0;r.t=this.t+n;r.s=this.s}function bnpDRShiftTo(n,r){for(var i=n;i=0;--i){r[i+ds+1]=this[i]>>cbs|c;c=(this[i]&bm)<=0;--i)r[i]=0;r[ds]=c;r.t=this.t+ds+1;r.s=this.s;r.clamp()}function bnpRShiftTo(n,r){r.s=this.s;var ds=Math.floor(n/this.DB);if(ds>=this.t){r.t=0;return}var bs=n%this.DB;var cbs=this.DB-bs;var bm=(1<>bs;for(var i=ds+1;i>bs}if(bs>0)r[this.t-ds-1]|=(this.s&bm)<>=this.DB}if(a.t>=this.DB}c+=this.s}else{c+=this.s;while(i>=this.DB}c-=a.s}r.s=c<0?-1:0;if(c<-1)r[i++]=this.DV+c;else if(c>0)r[i++]=c;r.t=i;r.clamp()}function bnpMultiplyTo(a,r){var x=this.abs(),y=a.abs();var i=x.t;r.t=i+y.t;while(--i>=0)r[i]=0;for(i=0;i=0)r[i]=0;for(i=0;i=x.DV){r[i+x.t]-=x.DV;r[i+x.t+1]=1}}if(r.t>0)r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);r.s=0;r.clamp()}function bnpDivRemTo(m,q,r){var pm=m.abs();if(pm.t<=0)return;var pt=this.abs();if(pt.t0){pm.lShiftTo(nsh,y);pt.lShiftTo(nsh,r)}else{pm.copyTo(y);pt.copyTo(r)}var ys=y.t;var y0=y[ys-1];if(y0==0)return;var yt=y0*(1<1?y[ys-2]>>this.F2:0);var d1=this.FV/yt,d2=(1<=0){r[r.t++]=1;r.subTo(t,r)}BigInteger.ONE.dlShiftTo(ys,t);t.subTo(y,y);while(y.t=0){var qd=r[--i]==y0?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);if((r[i]+=y.am(0,qd,r,j,0,ys))0)r.rShiftTo(nsh,r);if(ts<0)BigInteger.ZERO.subTo(r,r)}function bnMod(a){var r=nbi();this.abs().divRemTo(a,null,r);if(this.s<0&&r.compareTo(BigInteger.ZERO)>0)a.subTo(r,r);return r}function Classic(m){this.m=m}function cConvert(x){if(x.s<0||x.compareTo(this.m)>=0)return x.mod(this.m);else return x}function cRevert(x){return x}function cReduce(x){x.divRemTo(this.m,null,x)}function cMulTo(x,y,r){x.multiplyTo(y,r);this.reduce(r)}function cSqrTo(x,r){x.squareTo(r);this.reduce(r)}Classic.prototype.convert=cConvert;Classic.prototype.revert=cRevert;Classic.prototype.reduce=cReduce;Classic.prototype.mulTo=cMulTo;Classic.prototype.sqrTo=cSqrTo;function bnpInvDigit(){if(this.t<1)return 0;var x=this[0];if((x&1)==0)return 0;var y=x&3;y=y*(2-(x&15)*y)&15;y=y*(2-(x&255)*y)&255;y=y*(2-((x&65535)*y&65535))&65535;y=y*(2-x*y%this.DV)%this.DV;return y>0?this.DV-y:-y}function Montgomery(m){this.m=m;this.mp=m.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<0)this.m.subTo(r,r);return r}function montRevert(x){var r=nbi();x.copyTo(r);this.reduce(r);return r}function montReduce(x){while(x.t<=this.mt2)x[x.t++]=0;for(var i=0;i>15)*this.mpl&this.um)<<15)&x.DM;j=i+this.m.t;x[j]+=this.m.am(0,u0,x,i,0,this.m.t);while(x[j]>=x.DV){x[j]-=x.DV;x[++j]++}}x.clamp();x.drShiftTo(this.m.t,x);if(x.compareTo(this.m)>=0)x.subTo(this.m,x)}function montSqrTo(x,r){x.squareTo(r);this.reduce(r)}function montMulTo(x,y,r){x.multiplyTo(y,r);this.reduce(r)}Montgomery.prototype.convert=montConvert;Montgomery.prototype.revert=montRevert;Montgomery.prototype.reduce=montReduce;Montgomery.prototype.mulTo=montMulTo;Montgomery.prototype.sqrTo=montSqrTo;function bnpIsEven(){return(this.t>0?this[0]&1:this.s)==0}function bnpExp(e,z){if(e>4294967295||e<1)return BigInteger.ONE;var r=nbi(),r2=nbi(),g=z.convert(this),i=nbits(e)-1;g.copyTo(r);while(--i>=0){z.sqrTo(r,r2);if((e&1<0)z.mulTo(r2,g,r);else{var t=r;r=r2;r2=t}}return z.revert(r)}function bnModPowInt(e,m){var z;if(e<256||m.isEven())z=new Classic(m);else z=new Montgomery(m);return this.exp(e,z)}BigInteger.prototype.copyTo=bnpCopyTo;BigInteger.prototype.fromInt=bnpFromInt;BigInteger.prototype.fromString=bnpFromString;BigInteger.prototype.clamp=bnpClamp;BigInteger.prototype.dlShiftTo=bnpDLShiftTo;BigInteger.prototype.drShiftTo=bnpDRShiftTo;BigInteger.prototype.lShiftTo=bnpLShiftTo;BigInteger.prototype.rShiftTo=bnpRShiftTo;BigInteger.prototype.subTo=bnpSubTo;BigInteger.prototype.multiplyTo=bnpMultiplyTo;BigInteger.prototype.squareTo=bnpSquareTo;BigInteger.prototype.divRemTo=bnpDivRemTo;BigInteger.prototype.invDigit=bnpInvDigit;BigInteger.prototype.isEven=bnpIsEven;BigInteger.prototype.exp=bnpExp;BigInteger.prototype.toString=bnToString;BigInteger.prototype.negate=bnNegate;BigInteger.prototype.abs=bnAbs;BigInteger.prototype.compareTo=bnCompareTo;BigInteger.prototype.bitLength=bnBitLength;BigInteger.prototype.mod=bnMod;BigInteger.prototype.modPowInt=bnModPowInt;BigInteger.ZERO=nbv(0);BigInteger.ONE=nbv(1);function bnpFromRadix(s,b){this.fromInt(0);if(b==null)b=10;var cs=this.chunkSize(b);var d=Math.pow(b,cs),mi=false,j=0,w=0;for(var i=0;i=cs){this.dMultiply(d);this.dAddOffset(w,0);j=0;w=0}}if(j>0){this.dMultiply(Math.pow(b,j));this.dAddOffset(w,0)}if(mi)BigInteger.ZERO.subTo(this,this)}function bnpChunkSize(r){return Math.floor(Math.LN2*this.DB/Math.log(r))}function bnSigNum(){if(this.s<0)return-1;else if(this.t<=0||this.t==1&&this[0]<=0)return 0;else return 1}function bnpDMultiply(n){this[this.t]=this.am(0,n-1,this,0,0,this.t);++this.t;this.clamp()}function bnpDAddOffset(n,w){if(n==0)return;while(this.t<=w)this[this.t++]=0;this[w]+=n;while(this[w]>=this.DV){this[w]-=this.DV;if(++w>=this.t)this[this.t++]=0;++this[w]}}function bnpToRadix(b){if(b==null)b=10;if(this.signum()==0||b<2||b>36)return"0";var cs=this.chunkSize(b);var a=Math.pow(b,cs);var d=nbv(a),y=nbi(),z=nbi(),r="";this.divRemTo(d,y,z);while(y.signum()>0){r=(a+z.intValue()).toString(b).substr(1)+r;y.divRemTo(d,y,z)}return z.intValue().toString(b)+r}function bnIntValue(){if(this.s<0){if(this.t==1)return this[0]-this.DV;else if(this.t==0)return-1}else if(this.t==1)return this[0];else if(this.t==0)return 0;return(this[1]&(1<<32-this.DB)-1)<>=this.DB}if(a.t>=this.DB}c+=this.s}else{c+=this.s;while(i>=this.DB}c+=a.s}r.s=c<0?-1:0;if(c>0)r[i++]=c;else if(c<-1)r[i++]=this.DV+c;r.t=i;r.clamp()}BigInteger.prototype.fromRadix=bnpFromRadix;BigInteger.prototype.chunkSize=bnpChunkSize;BigInteger.prototype.signum=bnSigNum;BigInteger.prototype.dMultiply=bnpDMultiply;BigInteger.prototype.dAddOffset=bnpDAddOffset;BigInteger.prototype.toRadix=bnpToRadix;BigInteger.prototype.intValue=bnIntValue;BigInteger.prototype.addTo=bnpAddTo;var Wrapper={abs:(function(l,h){var x=new goog.math.Long(l,h);var ret;if(x.isNegative()){ret=x.negate()}else{ret=x}HEAP32[tempDoublePtr>>2]=ret.low_;HEAP32[tempDoublePtr+4>>2]=ret.high_}),ensureTemps:(function(){if(Wrapper.ensuredTemps)return;Wrapper.ensuredTemps=true;Wrapper.two32=new BigInteger;Wrapper.two32.fromString("4294967296",10);Wrapper.two64=new BigInteger;Wrapper.two64.fromString("18446744073709551616",10);Wrapper.temp1=new BigInteger;Wrapper.temp2=new BigInteger}),lh2bignum:(function(l,h){var a=new BigInteger;a.fromString(h.toString(),10);var b=new BigInteger;a.multiplyTo(Wrapper.two32,b);var c=new BigInteger;c.fromString(l.toString(),10);var d=new BigInteger;c.addTo(b,d);return d}),stringify:(function(l,h,unsigned){var ret=(new goog.math.Long(l,h)).toString();if(unsigned&&ret[0]=="-"){Wrapper.ensureTemps();var bignum=new BigInteger;bignum.fromString(ret,10);ret=new BigInteger;Wrapper.two64.addTo(bignum,ret);ret=ret.toString(10)}return ret}),fromString:(function(str,base,min,max,unsigned){Wrapper.ensureTemps();var bignum=new BigInteger;bignum.fromString(str,base);var bigmin=new BigInteger;bigmin.fromString(min,10);var bigmax=new BigInteger;bigmax.fromString(max,10);if(unsigned&&bignum.compareTo(BigInteger.ZERO)<0){var temp=new BigInteger;bignum.addTo(Wrapper.two64,temp);bignum=temp}var error=false;if(bignum.compareTo(bigmin)<0){bignum=bigmin;error=true}else if(bignum.compareTo(bigmax)>0){bignum=bigmax;error=true}var ret=goog.math.Long.fromString(bignum.toString());HEAP32[tempDoublePtr>>2]=ret.low_;HEAP32[tempDoublePtr+4>>2]=ret.high_;if(error)throw"range error"})};return Wrapper})();if(memoryInitializer){if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,STATIC_BASE)}else{addRunDependency("memory initializer");Browser.asyncLoad(memoryInitializer,(function(data){HEAPU8.set(data,STATIC_BASE);removeRunDependency("memory initializer")}),(function(data){throw"could not load memory initializer "+memoryInitializer}))}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"]&&shouldRunNow)run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){assert(runDependencies==0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(__ATPRERUN__.length==0,"cannot call main when preRun functions remain to be called");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]||"/bin/this.program"),"i8",ALLOC_NORMAL)];pad();for(var i=0;i0){Module.printErr("run() called, but dependencies remain, so not running");return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;ensureInitRuntime();preMain();if(ENVIRONMENT_IS_WEB&&preloadStartTime!==null){Module.printErr("pre-main prep time: "+(Date.now()-preloadStartTime)+" ms")}if(Module["_main"]&&shouldRunNow){Module["callMain"](args)}postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);if(!ABORT)doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status){ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;function abort(text){if(text){Module.print(text);Module.printErr(text)}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";throw"abort() at "+stackTrace()+extra}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run() + + + + diff --git a/GameLib/Draw.c b/GameLib/Draw.c index 4b5df65..d523b4c 100644 --- a/GameLib/Draw.c +++ b/GameLib/Draw.c @@ -22,6 +22,7 @@ #include #define USE_OpenGL 0 #define USE_OpenGLES 1 + #define SDL_GetKeyState SDL_GetKeyboardState #else // UNIX #include diff --git a/GameLib/Input.c b/GameLib/Input.c index ccee8c2..3096542 100644 --- a/GameLib/Input.c +++ b/GameLib/Input.c @@ -2,11 +2,15 @@ #include #include +#ifdef EMSCRIPTEN +#define SDL_GetKeyState SDL_GetKeyboardState +#endif #include "Util.h" #include "Input.h" + // Globals InputKeyStatus _keys[InputKey_Max]; int _pointerDown=0; diff --git a/Makefile.emscripten b/Makefile.emscripten index 2a6892d..779f15f 100644 --- a/Makefile.emscripten +++ b/Makefile.emscripten @@ -3,7 +3,7 @@ LAUNCHER= start RM=rm -rf LIBS= -CFLAGS= -s FULL_ES2=1 -s ASM_JS=1 -O1 +CFLAGS= -s FULL_ES2=1 -s ASM_JS=1 -O1 -Wno-implicit-function-declaration #LDFLAGS= --embed-file data LDFLAGS= --preload-file data @@ -12,7 +12,7 @@ RESULT=game.html BUILDDIR=build-emscripten ifeq ($(target),release) - CFLAGS= -s FULL_ES2=1 -s ASM_JS=1 -O2 --llvm-lto 1 + CFLAGS= -s FULL_ES2=1 -s ASM_JS=1 -O2 --llvm-lto 1 -Wno-implicit-function-declaration BUILDDIR=build-emscripten-release endif diff --git a/main.c b/main.c index 3dc7143..8fe08ac 100644 --- a/main.c +++ b/main.c @@ -5,9 +5,11 @@ #include #include #include +#include #ifdef EMSCRIPTEN #include +#define time stime #endif @@ -28,6 +30,14 @@ DrawImg img_end; DrawFnt font; +void GameLib_MkDir(char *dir){ +#ifdef WIN32 + mkdir(dir); +#else + mkdir(dir,0777); +#endif +} + void ProcGame(); void PostProcGame(); @@ -162,7 +172,7 @@ void DrawGame(float f){ void LoadGame(){ FILE *f; - mkdir("saves"); + GameLib_MkDir("saves"); f=fopen(saveFilename,"rb"); if(!f) @@ -185,7 +195,7 @@ void LoadGame(){ void SaveGame(){ FILE *f; - mkdir("saves"); + GameLib_MkDir("saves"); f=fopen(saveFilename,"wb"); if(!f)