PageRenderTime 109ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 2ms

/test/mjsunit/asm/embenchen/lua_binarytrees.js

http://v8.googlecode.com/
JavaScript | 14373 lines | 13162 code | 592 blank | 619 comment | 3858 complexity | 4bf4fb04b77a8edbd76184a5ed3432a9 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. // Copyright 2014 the V8 project authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. var EXPECTED_OUTPUT =
  5. 'stretch tree of depth 10\t check: -1\n' +
  6. '1448\t trees of depth 4\t check: -1448\n' +
  7. '362\t trees of depth 6\t check: -362\n' +
  8. '90\t trees of depth 8\t check: -90\n' +
  9. 'long lived tree of depth 9\t check: -1\n';
  10. var Module = {
  11. arguments: [1],
  12. print: function(x) {Module.printBuffer += x + '\n';},
  13. preRun: [function() {Module.printBuffer = ''}],
  14. postRun: [function() {
  15. assertEquals(EXPECTED_OUTPUT, Module.printBuffer);
  16. }],
  17. };
  18. var Module;
  19. if (typeof Module === 'undefined') Module = eval('(function() { try { return Module || {} } catch(e) { return {} } })()');
  20. if (!Module.expectedDataFileDownloads) {
  21. Module.expectedDataFileDownloads = 0;
  22. Module.finishedDataFileDownloads = 0;
  23. }
  24. Module.expectedDataFileDownloads++;
  25. (function() {
  26. function runWithFS() {
  27. function assert(check, msg) {
  28. if (!check) throw msg + new Error().stack;
  29. }
  30. Module['FS_createDataFile']('/', 'binarytrees.lua', [45, 45, 32, 84, 104, 101, 32, 67, 111, 109, 112, 117, 116, 101, 114, 32, 76, 97, 110, 103, 117, 97, 103, 101, 32, 66, 101, 110, 99, 104, 109, 97, 114, 107, 115, 32, 71, 97, 109, 101, 10, 45, 45, 32, 104, 116, 116, 112, 58, 47, 47, 98, 101, 110, 99, 104, 109, 97, 114, 107, 115, 103, 97, 109, 101, 46, 97, 108, 105, 111, 116, 104, 46, 100, 101, 98, 105, 97, 110, 46, 111, 114, 103, 47, 10, 45, 45, 32, 99, 111, 110, 116, 114, 105, 98, 117, 116, 101, 100, 32, 98, 121, 32, 77, 105, 107, 101, 32, 80, 97, 108, 108, 10, 10, 108, 111, 99, 97, 108, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 66, 111, 116, 116, 111, 109, 85, 112, 84, 114, 101, 101, 40, 105, 116, 101, 109, 44, 32, 100, 101, 112, 116, 104, 41, 10, 32, 32, 105, 102, 32, 100, 101, 112, 116, 104, 32, 62, 32, 48, 32, 116, 104, 101, 110, 10, 32, 32, 32, 32, 108, 111, 99, 97, 108, 32, 105, 32, 61, 32, 105, 116, 101, 109, 32, 43, 32, 105, 116, 101, 109, 10, 32, 32, 32, 32, 100, 101, 112, 116, 104, 32, 61, 32, 100, 101, 112, 116, 104, 32, 45, 32, 49, 10, 32, 32, 32, 32, 108, 111, 99, 97, 108, 32, 108, 101, 102, 116, 44, 32, 114, 105, 103, 104, 116, 32, 61, 32, 66, 111, 116, 116, 111, 109, 85, 112, 84, 114, 101, 101, 40, 105, 45, 49, 44, 32, 100, 101, 112, 116, 104, 41, 44, 32, 66, 111, 116, 116, 111, 109, 85, 112, 84, 114, 101, 101, 40, 105, 44, 32, 100, 101, 112, 116, 104, 41, 10, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 123, 32, 105, 116, 101, 109, 44, 32, 108, 101, 102, 116, 44, 32, 114, 105, 103, 104, 116, 32, 125, 10, 32, 32, 101, 108, 115, 101, 10, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 123, 32, 105, 116, 101, 109, 32, 125, 10, 32, 32, 101, 110, 100, 10, 101, 110, 100, 10, 10, 108, 111, 99, 97, 108, 32, 102, 117, 110, 99, 116, 105, 111, 110, 32, 73, 116, 101, 109, 67, 104, 101, 99, 107, 40, 116, 114, 101, 101, 41, 10, 32, 32, 105, 102, 32, 116, 114, 101, 101, 91, 50, 93, 32, 116, 104, 101, 110, 10, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 116, 114, 101, 101, 91, 49, 93, 32, 43, 32, 73, 116, 101, 109, 67, 104, 101, 99, 107, 40, 116, 114, 101, 101, 91, 50, 93, 41, 32, 45, 32, 73, 116, 101, 109, 67, 104, 101, 99, 107, 40, 116, 114, 101, 101, 91, 51, 93, 41, 10, 32, 32, 101, 108, 115, 101, 10, 32, 32, 32, 32, 114, 101, 116, 117, 114, 110, 32, 116, 114, 101, 101, 91, 49, 93, 10, 32, 32, 101, 110, 100, 10, 101, 110, 100, 10, 10, 108, 111, 99, 97, 108, 32, 78, 32, 61, 32, 116, 111, 110, 117, 109, 98, 101, 114, 40, 97, 114, 103, 32, 97, 110, 100, 32, 97, 114, 103, 91, 49, 93, 41, 32, 111, 114, 32, 52, 10, 10, 105, 102, 32, 78, 32, 61, 61, 32, 48, 32, 116, 104, 101, 110, 10, 32, 32, 78, 32, 61, 32, 48, 10, 101, 108, 115, 101, 105, 102, 32, 78, 32, 61, 61, 32, 49, 32, 116, 104, 101, 110, 10, 32, 32, 78, 32, 61, 32, 57, 46, 53, 10, 101, 108, 115, 101, 105, 102, 32, 78, 32, 61, 61, 32, 50, 32, 116, 104, 101, 110, 10, 32, 32, 78, 32, 61, 32, 49, 49, 46, 57, 57, 10, 101, 108, 115, 101, 105, 102, 32, 78, 32, 61, 61, 32, 51, 32, 116, 104, 101, 110, 10, 32, 32, 78, 32, 61, 32, 49, 50, 46, 56, 53, 10, 101, 108, 115, 101, 105, 102, 32, 78, 32, 61, 61, 32, 52, 32, 116, 104, 101, 110, 10, 32, 32, 78, 32, 61, 32, 49, 52, 46, 55, 50, 10, 101, 108, 115, 101, 105, 102, 32, 78, 32, 61, 61, 32, 53, 32, 116, 104, 101, 110, 10, 32, 32, 78, 32, 61, 32, 49, 53, 46, 56, 50, 10, 101, 110, 100, 10, 10, 108, 111, 99, 97, 108, 32, 109, 105, 110, 100, 101, 112, 116, 104, 32, 61, 32, 52, 10, 108, 111, 99, 97, 108, 32, 109, 97, 120, 100, 101, 112, 116, 104, 32, 61, 32, 109, 105, 110, 100, 101, 112, 116, 104, 32, 43, 32, 50, 10, 105, 102, 32, 109, 97, 120, 100, 101, 112, 116, 104, 32, 60, 32, 78, 32, 116, 104, 101, 110, 32, 109, 97, 120, 100, 101, 112, 116, 104, 32, 61, 32, 78, 32, 101, 110, 100, 10, 10, 100, 111, 10, 32, 32, 108, 111, 99, 97, 108, 32, 115, 116, 114, 101, 116, 99, 104, 100, 101, 112, 116, 104, 32, 61, 32, 109, 97, 120, 100, 101, 112, 116, 104, 32, 43, 32, 49, 10, 32, 32, 108, 111, 99, 97, 108, 32, 115, 116, 114, 101, 116, 99, 104, 116, 114, 101, 101, 32, 61, 32, 66, 111, 116, 116, 111, 109, 85, 112, 84, 114, 101, 101, 40, 48, 44, 32, 115, 116, 114, 101, 116, 99, 104, 100, 101, 112, 116, 104, 41, 10, 32, 32, 105, 111, 46, 119, 114, 105, 116, 101, 40, 115, 116, 114, 105, 110, 103, 46, 102, 111, 114, 109, 97, 116, 40, 34, 115, 116, 114, 101, 116, 99, 104, 32, 116, 114, 101, 101, 32, 111, 102, 32, 100, 101, 112, 116, 104, 32, 37, 100, 92, 116, 32, 99, 104, 101, 99, 107, 58, 32, 37, 100, 92, 110, 34, 44, 10, 32, 32, 32, 32, 115, 116, 114, 101, 116, 99, 104, 100, 101, 112, 116, 104, 44, 32, 73, 116, 101, 109, 67, 104, 101, 99, 107, 40, 115, 116, 114, 101, 116, 99, 104, 116, 114, 101, 101, 41, 41, 41, 10, 101, 110, 100, 10, 10, 108, 111, 99, 97, 108, 32, 108, 111, 110, 103, 108, 105, 118, 101, 100, 116, 114, 101, 101, 32, 61, 32, 66, 111, 116, 116, 111, 109, 85, 112, 84, 114, 101, 101, 40, 48, 44, 32, 109, 97, 120, 100, 101, 112, 116, 104, 41, 10, 10, 102, 111, 114, 32, 100, 101, 112, 116, 104, 61, 109, 105, 110, 100, 101, 112, 116, 104, 44, 109, 97, 120, 100, 101, 112, 116, 104, 44, 50, 32, 100, 111, 10, 32, 32, 108, 111, 99, 97, 108, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 61, 32, 50, 32, 94, 32, 40, 109, 97, 120, 100, 101, 112, 116, 104, 32, 45, 32, 100, 101, 112, 116, 104, 32, 43, 32, 109, 105, 110, 100, 101, 112, 116, 104, 41, 10, 32, 32, 108, 111, 99, 97, 108, 32, 99, 104, 101, 99, 107, 32, 61, 32, 48, 10, 32, 32, 102, 111, 114, 32, 105, 61, 49, 44, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 32, 100, 111, 10, 32, 32, 32, 32, 99, 104, 101, 99, 107, 32, 61, 32, 99, 104, 101, 99, 107, 32, 43, 32, 73, 116, 101, 109, 67, 104, 101, 99, 107, 40, 66, 111, 116, 116, 111, 109, 85, 112, 84, 114, 101, 101, 40, 49, 44, 32, 100, 101, 112, 116, 104, 41, 41, 32, 43, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 73, 116, 101, 109, 67, 104, 101, 99, 107, 40, 66, 111, 116, 116, 111, 109, 85, 112, 84, 114, 101, 101, 40, 45, 49, 44, 32, 100, 101, 112, 116, 104, 41, 41, 10, 32, 32, 101, 110, 100, 10, 32, 32, 105, 111, 46, 119, 114, 105, 116, 101, 40, 115, 116, 114, 105, 110, 103, 46, 102, 111, 114, 109, 97, 116, 40, 34, 37, 100, 92, 116, 32, 116, 114, 101, 101, 115, 32, 111, 102, 32, 100, 101, 112, 116, 104, 32, 37, 100, 92, 116, 32, 99, 104, 101, 99, 107, 58, 32, 37, 100, 92, 110, 34, 44, 10, 32, 32, 32, 32, 105, 116, 101, 114, 97, 116, 105, 111, 110, 115, 42, 50, 44, 32, 100, 101, 112, 116, 104, 44, 32, 99, 104, 101, 99, 107, 41, 41, 10, 101, 110, 100, 10, 10, 105, 111, 46, 119, 114, 105, 116, 101, 40, 115, 116, 114, 105, 110, 103, 46, 102, 111, 114, 109, 97, 116, 40, 34, 108, 111, 110, 103, 32, 108, 105, 118, 101, 100, 32, 116, 114, 101, 101, 32, 111, 102, 32, 100, 101, 112, 116, 104, 32, 37, 100, 92, 116, 32, 99, 104, 101, 99, 107, 58, 32, 37, 100, 92, 110, 34, 44, 10, 32, 32, 109, 97, 120, 100, 101, 112, 116, 104, 44, 32, 73, 116, 101, 109, 67, 104, 101, 99, 107, 40, 108, 111, 110, 103, 108, 105, 118, 101, 100, 116, 114, 101, 101, 41, 41, 41, 10], true, true);
  31. }
  32. if (Module['calledRun']) {
  33. runWithFS();
  34. } else {
  35. if (!Module['preRun']) Module['preRun'] = [];
  36. Module["preRun"].push(runWithFS); // FS is not initialized yet, wait for it
  37. }
  38. })();
  39. // The Module object: Our interface to the outside world. We import
  40. // and export values on it, and do the work to get that through
  41. // closure compiler if necessary. There are various ways Module can be used:
  42. // 1. Not defined. We create it here
  43. // 2. A function parameter, function(Module) { ..generated code.. }
  44. // 3. pre-run appended it, var Module = {}; ..generated code..
  45. // 4. External script tag defines var Module.
  46. // We need to do an eval in order to handle the closure compiler
  47. // case, where this code here is minified but Module was defined
  48. // elsewhere (e.g. case 4 above). We also need to check if Module
  49. // already exists (e.g. case 3 above).
  50. // Note that if you want to run closure, and also to use Module
  51. // after the generated code, you will need to define var Module = {};
  52. // before the code. Then that object will be used in the code, and you
  53. // can continue to use Module afterwards as well.
  54. var Module;
  55. if (!Module) Module = (typeof Module !== 'undefined' ? Module : null) || {};
  56. // Sometimes an existing Module object exists with properties
  57. // meant to overwrite the default module functionality. Here
  58. // we collect those properties and reapply _after_ we configure
  59. // the current environment's defaults to avoid having to be so
  60. // defensive during initialization.
  61. var moduleOverrides = {};
  62. for (var key in Module) {
  63. if (Module.hasOwnProperty(key)) {
  64. moduleOverrides[key] = Module[key];
  65. }
  66. }
  67. // The environment setup code below is customized to use Module.
  68. // *** Environment setup code ***
  69. var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
  70. var ENVIRONMENT_IS_WEB = typeof window === 'object';
  71. var ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';
  72. var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;
  73. if (ENVIRONMENT_IS_NODE) {
  74. // Expose functionality in the same simple way that the shells work
  75. // Note that we pollute the global namespace here, otherwise we break in node
  76. if (!Module['print']) Module['print'] = function print(x) {
  77. process['stdout'].write(x + '\n');
  78. };
  79. if (!Module['printErr']) Module['printErr'] = function printErr(x) {
  80. process['stderr'].write(x + '\n');
  81. };
  82. var nodeFS = require('fs');
  83. var nodePath = require('path');
  84. Module['read'] = function read(filename, binary) {
  85. filename = nodePath['normalize'](filename);
  86. var ret = nodeFS['readFileSync'](filename);
  87. // The path is absolute if the normalized version is the same as the resolved.
  88. if (!ret && filename != nodePath['resolve'](filename)) {
  89. filename = path.join(__dirname, '..', 'src', filename);
  90. ret = nodeFS['readFileSync'](filename);
  91. }
  92. if (ret && !binary) ret = ret.toString();
  93. return ret;
  94. };
  95. Module['readBinary'] = function readBinary(filename) { return Module['read'](filename, true) };
  96. Module['load'] = function load(f) {
  97. globalEval(read(f));
  98. };
  99. Module['arguments'] = process['argv'].slice(2);
  100. module['exports'] = Module;
  101. }
  102. else if (ENVIRONMENT_IS_SHELL) {
  103. if (!Module['print']) Module['print'] = print;
  104. if (typeof printErr != 'undefined') Module['printErr'] = printErr; // not present in v8 or older sm
  105. if (typeof read != 'undefined') {
  106. Module['read'] = read;
  107. } else {
  108. Module['read'] = function read() { throw 'no read() available (jsc?)' };
  109. }
  110. Module['readBinary'] = function readBinary(f) {
  111. return read(f, 'binary');
  112. };
  113. if (typeof scriptArgs != 'undefined') {
  114. Module['arguments'] = scriptArgs;
  115. } else if (typeof arguments != 'undefined') {
  116. Module['arguments'] = arguments;
  117. }
  118. this['Module'] = Module;
  119. 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)
  120. }
  121. else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
  122. Module['read'] = function read(url) {
  123. var xhr = new XMLHttpRequest();
  124. xhr.open('GET', url, false);
  125. xhr.send(null);
  126. return xhr.responseText;
  127. };
  128. if (typeof arguments != 'undefined') {
  129. Module['arguments'] = arguments;
  130. }
  131. if (typeof console !== 'undefined') {
  132. if (!Module['print']) Module['print'] = function print(x) {
  133. console.log(x);
  134. };
  135. if (!Module['printErr']) Module['printErr'] = function printErr(x) {
  136. console.log(x);
  137. };
  138. } else {
  139. // Probably a worker, and without console.log. We can do very little here...
  140. var TRY_USE_DUMP = false;
  141. if (!Module['print']) Module['print'] = (TRY_USE_DUMP && (typeof(dump) !== "undefined") ? (function(x) {
  142. dump(x);
  143. }) : (function(x) {
  144. // self.postMessage(x); // enable this if you want stdout to be sent as messages
  145. }));
  146. }
  147. if (ENVIRONMENT_IS_WEB) {
  148. window['Module'] = Module;
  149. } else {
  150. Module['load'] = importScripts;
  151. }
  152. }
  153. else {
  154. // Unreachable because SHELL is dependant on the others
  155. throw 'Unknown runtime environment. Where are we?';
  156. }
  157. function globalEval(x) {
  158. eval.call(null, x);
  159. }
  160. if (!Module['load'] == 'undefined' && Module['read']) {
  161. Module['load'] = function load(f) {
  162. globalEval(Module['read'](f));
  163. };
  164. }
  165. if (!Module['print']) {
  166. Module['print'] = function(){};
  167. }
  168. if (!Module['printErr']) {
  169. Module['printErr'] = Module['print'];
  170. }
  171. if (!Module['arguments']) {
  172. Module['arguments'] = [];
  173. }
  174. // *** Environment setup code ***
  175. // Closure helpers
  176. Module.print = Module['print'];
  177. Module.printErr = Module['printErr'];
  178. // Callbacks
  179. Module['preRun'] = [];
  180. Module['postRun'] = [];
  181. // Merge back in the overrides
  182. for (var key in moduleOverrides) {
  183. if (moduleOverrides.hasOwnProperty(key)) {
  184. Module[key] = moduleOverrides[key];
  185. }
  186. }
  187. // === Auto-generated preamble library stuff ===
  188. //========================================
  189. // Runtime code shared with compiler
  190. //========================================
  191. var Runtime = {
  192. stackSave: function () {
  193. return STACKTOP;
  194. },
  195. stackRestore: function (stackTop) {
  196. STACKTOP = stackTop;
  197. },
  198. forceAlign: function (target, quantum) {
  199. quantum = quantum || 4;
  200. if (quantum == 1) return target;
  201. if (isNumber(target) && isNumber(quantum)) {
  202. return Math.ceil(target/quantum)*quantum;
  203. } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
  204. return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')';
  205. }
  206. return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
  207. },
  208. isNumberType: function (type) {
  209. return type in Runtime.INT_TYPES || type in Runtime.FLOAT_TYPES;
  210. },
  211. isPointerType: function isPointerType(type) {
  212. return type[type.length-1] == '*';
  213. },
  214. isStructType: function isStructType(type) {
  215. if (isPointerType(type)) return false;
  216. if (isArrayType(type)) return true;
  217. if (/<?\{ ?[^}]* ?\}>?/.test(type)) return true; // { i32, i8 } etc. - anonymous struct types
  218. // See comment in isStructPointerType()
  219. return type[0] == '%';
  220. },
  221. INT_TYPES: {"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},
  222. FLOAT_TYPES: {"float":0,"double":0},
  223. or64: function (x, y) {
  224. var l = (x | 0) | (y | 0);
  225. var h = (Math.round(x / 4294967296) | Math.round(y / 4294967296)) * 4294967296;
  226. return l + h;
  227. },
  228. and64: function (x, y) {
  229. var l = (x | 0) & (y | 0);
  230. var h = (Math.round(x / 4294967296) & Math.round(y / 4294967296)) * 4294967296;
  231. return l + h;
  232. },
  233. xor64: function (x, y) {
  234. var l = (x | 0) ^ (y | 0);
  235. var h = (Math.round(x / 4294967296) ^ Math.round(y / 4294967296)) * 4294967296;
  236. return l + h;
  237. },
  238. getNativeTypeSize: function (type) {
  239. switch (type) {
  240. case 'i1': case 'i8': return 1;
  241. case 'i16': return 2;
  242. case 'i32': return 4;
  243. case 'i64': return 8;
  244. case 'float': return 4;
  245. case 'double': return 8;
  246. default: {
  247. if (type[type.length-1] === '*') {
  248. return Runtime.QUANTUM_SIZE; // A pointer
  249. } else if (type[0] === 'i') {
  250. var bits = parseInt(type.substr(1));
  251. assert(bits % 8 === 0);
  252. return bits/8;
  253. } else {
  254. return 0;
  255. }
  256. }
  257. }
  258. },
  259. getNativeFieldSize: function (type) {
  260. return Math.max(Runtime.getNativeTypeSize(type), Runtime.QUANTUM_SIZE);
  261. },
  262. dedup: function dedup(items, ident) {
  263. var seen = {};
  264. if (ident) {
  265. return items.filter(function(item) {
  266. if (seen[item[ident]]) return false;
  267. seen[item[ident]] = true;
  268. return true;
  269. });
  270. } else {
  271. return items.filter(function(item) {
  272. if (seen[item]) return false;
  273. seen[item] = true;
  274. return true;
  275. });
  276. }
  277. },
  278. set: function set() {
  279. var args = typeof arguments[0] === 'object' ? arguments[0] : arguments;
  280. var ret = {};
  281. for (var i = 0; i < args.length; i++) {
  282. ret[args[i]] = 0;
  283. }
  284. return ret;
  285. },
  286. STACK_ALIGN: 8,
  287. getAlignSize: function (type, size, vararg) {
  288. // we align i64s and doubles on 64-bit boundaries, unlike x86
  289. if (!vararg && (type == 'i64' || type == 'double')) return 8;
  290. if (!type) return Math.min(size, 8); // align structures internally to 64 bits
  291. return Math.min(size || (type ? Runtime.getNativeFieldSize(type) : 0), Runtime.QUANTUM_SIZE);
  292. },
  293. calculateStructAlignment: function calculateStructAlignment(type) {
  294. type.flatSize = 0;
  295. type.alignSize = 0;
  296. var diffs = [];
  297. var prev = -1;
  298. var index = 0;
  299. type.flatIndexes = type.fields.map(function(field) {
  300. index++;
  301. var size, alignSize;
  302. if (Runtime.isNumberType(field) || Runtime.isPointerType(field)) {
  303. size = Runtime.getNativeTypeSize(field); // pack char; char; in structs, also char[X]s.
  304. alignSize = Runtime.getAlignSize(field, size);
  305. } else if (Runtime.isStructType(field)) {
  306. if (field[1] === '0') {
  307. // this is [0 x something]. When inside another structure like here, it must be at the end,
  308. // and it adds no size
  309. // XXX this happens in java-nbody for example... assert(index === type.fields.length, 'zero-length in the middle!');
  310. size = 0;
  311. if (Types.types[field]) {
  312. alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
  313. } else {
  314. alignSize = type.alignSize || QUANTUM_SIZE;
  315. }
  316. } else {
  317. size = Types.types[field].flatSize;
  318. alignSize = Runtime.getAlignSize(null, Types.types[field].alignSize);
  319. }
  320. } else if (field[0] == 'b') {
  321. // bN, large number field, like a [N x i8]
  322. size = field.substr(1)|0;
  323. alignSize = 1;
  324. } else if (field[0] === '<') {
  325. // vector type
  326. size = alignSize = Types.types[field].flatSize; // fully aligned
  327. } else if (field[0] === 'i') {
  328. // illegal integer field, that could not be legalized because it is an internal structure field
  329. // it is ok to have such fields, if we just use them as markers of field size and nothing more complex
  330. size = alignSize = parseInt(field.substr(1))/8;
  331. assert(size % 1 === 0, 'cannot handle non-byte-size field ' + field);
  332. } else {
  333. assert(false, 'invalid type for calculateStructAlignment');
  334. }
  335. if (type.packed) alignSize = 1;
  336. type.alignSize = Math.max(type.alignSize, alignSize);
  337. var curr = Runtime.alignMemory(type.flatSize, alignSize); // if necessary, place this on aligned memory
  338. type.flatSize = curr + size;
  339. if (prev >= 0) {
  340. diffs.push(curr-prev);
  341. }
  342. prev = curr;
  343. return curr;
  344. });
  345. if (type.name_ && type.name_[0] === '[') {
  346. // arrays have 2 elements, so we get the proper difference. then we scale here. that way we avoid
  347. // allocating a potentially huge array for [999999 x i8] etc.
  348. type.flatSize = parseInt(type.name_.substr(1))*type.flatSize/2;
  349. }
  350. type.flatSize = Runtime.alignMemory(type.flatSize, type.alignSize);
  351. if (diffs.length == 0) {
  352. type.flatFactor = type.flatSize;
  353. } else if (Runtime.dedup(diffs).length == 1) {
  354. type.flatFactor = diffs[0];
  355. }
  356. type.needsFlattening = (type.flatFactor != 1);
  357. return type.flatIndexes;
  358. },
  359. generateStructInfo: function (struct, typeName, offset) {
  360. var type, alignment;
  361. if (typeName) {
  362. offset = offset || 0;
  363. type = (typeof Types === 'undefined' ? Runtime.typeInfo : Types.types)[typeName];
  364. if (!type) return null;
  365. if (type.fields.length != struct.length) {
  366. printErr('Number of named fields must match the type for ' + typeName + ': possibly duplicate struct names. Cannot return structInfo');
  367. return null;
  368. }
  369. alignment = type.flatIndexes;
  370. } else {
  371. var type = { fields: struct.map(function(item) { return item[0] }) };
  372. alignment = Runtime.calculateStructAlignment(type);
  373. }
  374. var ret = {
  375. __size__: type.flatSize
  376. };
  377. if (typeName) {
  378. struct.forEach(function(item, i) {
  379. if (typeof item === 'string') {
  380. ret[item] = alignment[i] + offset;
  381. } else {
  382. // embedded struct
  383. var key;
  384. for (var k in item) key = k;
  385. ret[key] = Runtime.generateStructInfo(item[key], type.fields[i], alignment[i]);
  386. }
  387. });
  388. } else {
  389. struct.forEach(function(item, i) {
  390. ret[item[1]] = alignment[i];
  391. });
  392. }
  393. return ret;
  394. },
  395. dynCall: function (sig, ptr, args) {
  396. if (args && args.length) {
  397. if (!args.splice) args = Array.prototype.slice.call(args);
  398. args.splice(0, 0, ptr);
  399. return Module['dynCall_' + sig].apply(null, args);
  400. } else {
  401. return Module['dynCall_' + sig].call(null, ptr);
  402. }
  403. },
  404. functionPointers: [],
  405. addFunction: function (func) {
  406. for (var i = 0; i < Runtime.functionPointers.length; i++) {
  407. if (!Runtime.functionPointers[i]) {
  408. Runtime.functionPointers[i] = func;
  409. return 2*(1 + i);
  410. }
  411. }
  412. throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';
  413. },
  414. removeFunction: function (index) {
  415. Runtime.functionPointers[(index-2)/2] = null;
  416. },
  417. getAsmConst: function (code, numArgs) {
  418. // code is a constant string on the heap, so we can cache these
  419. if (!Runtime.asmConstCache) Runtime.asmConstCache = {};
  420. var func = Runtime.asmConstCache[code];
  421. if (func) return func;
  422. var args = [];
  423. for (var i = 0; i < numArgs; i++) {
  424. args.push(String.fromCharCode(36) + i); // $0, $1 etc
  425. }
  426. var source = Pointer_stringify(code);
  427. if (source[0] === '"') {
  428. // tolerate EM_ASM("..code..") even though EM_ASM(..code..) is correct
  429. if (source.indexOf('"', 1) === source.length-1) {
  430. source = source.substr(1, source.length-2);
  431. } else {
  432. // something invalid happened, e.g. EM_ASM("..code($0)..", input)
  433. abort('invalid EM_ASM input |' + source + '|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)');
  434. }
  435. }
  436. try {
  437. var evalled = eval('(function(' + args.join(',') + '){ ' + source + ' })'); // new Function does not allow upvars in node
  438. } catch(e) {
  439. Module.printErr('error in executing inline EM_ASM code: ' + e + ' on: \n\n' + source + '\n\nwith args |' + args + '| (make sure to use the right one out of EM_ASM, EM_ASM_ARGS, etc.)');
  440. throw e;
  441. }
  442. return Runtime.asmConstCache[code] = evalled;
  443. },
  444. warnOnce: function (text) {
  445. if (!Runtime.warnOnce.shown) Runtime.warnOnce.shown = {};
  446. if (!Runtime.warnOnce.shown[text]) {
  447. Runtime.warnOnce.shown[text] = 1;
  448. Module.printErr(text);
  449. }
  450. },
  451. funcWrappers: {},
  452. getFuncWrapper: function (func, sig) {
  453. assert(sig);
  454. if (!Runtime.funcWrappers[func]) {
  455. Runtime.funcWrappers[func] = function dynCall_wrapper() {
  456. return Runtime.dynCall(sig, func, arguments);
  457. };
  458. }
  459. return Runtime.funcWrappers[func];
  460. },
  461. UTF8Processor: function () {
  462. var buffer = [];
  463. var needed = 0;
  464. this.processCChar = function (code) {
  465. code = code & 0xFF;
  466. if (buffer.length == 0) {
  467. if ((code & 0x80) == 0x00) { // 0xxxxxxx
  468. return String.fromCharCode(code);
  469. }
  470. buffer.push(code);
  471. if ((code & 0xE0) == 0xC0) { // 110xxxxx
  472. needed = 1;
  473. } else if ((code & 0xF0) == 0xE0) { // 1110xxxx
  474. needed = 2;
  475. } else { // 11110xxx
  476. needed = 3;
  477. }
  478. return '';
  479. }
  480. if (needed) {
  481. buffer.push(code);
  482. needed--;
  483. if (needed > 0) return '';
  484. }
  485. var c1 = buffer[0];
  486. var c2 = buffer[1];
  487. var c3 = buffer[2];
  488. var c4 = buffer[3];
  489. var ret;
  490. if (buffer.length == 2) {
  491. ret = String.fromCharCode(((c1 & 0x1F) << 6) | (c2 & 0x3F));
  492. } else if (buffer.length == 3) {
  493. ret = String.fromCharCode(((c1 & 0x0F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F));
  494. } else {
  495. // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
  496. var codePoint = ((c1 & 0x07) << 18) | ((c2 & 0x3F) << 12) |
  497. ((c3 & 0x3F) << 6) | (c4 & 0x3F);
  498. ret = String.fromCharCode(
  499. Math.floor((codePoint - 0x10000) / 0x400) + 0xD800,
  500. (codePoint - 0x10000) % 0x400 + 0xDC00);
  501. }
  502. buffer.length = 0;
  503. return ret;
  504. }
  505. this.processJSString = function processJSString(string) {
  506. /* TODO: use TextEncoder when present,
  507. var encoder = new TextEncoder();
  508. encoder['encoding'] = "utf-8";
  509. var utf8Array = encoder['encode'](aMsg.data);
  510. */
  511. string = unescape(encodeURIComponent(string));
  512. var ret = [];
  513. for (var i = 0; i < string.length; i++) {
  514. ret.push(string.charCodeAt(i));
  515. }
  516. return ret;
  517. }
  518. },
  519. getCompilerSetting: function (name) {
  520. throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for Runtime.getCompilerSetting or emscripten_get_compiler_setting to work';
  521. },
  522. stackAlloc: function (size) { var ret = STACKTOP;STACKTOP = (STACKTOP + size)|0;STACKTOP = (((STACKTOP)+7)&-8); return ret; },
  523. staticAlloc: function (size) { var ret = STATICTOP;STATICTOP = (STATICTOP + size)|0;STATICTOP = (((STATICTOP)+7)&-8); return ret; },
  524. dynamicAlloc: function (size) { var ret = DYNAMICTOP;DYNAMICTOP = (DYNAMICTOP + size)|0;DYNAMICTOP = (((DYNAMICTOP)+7)&-8); if (DYNAMICTOP >= TOTAL_MEMORY) enlargeMemory();; return ret; },
  525. alignMemory: function (size,quantum) { var ret = size = Math.ceil((size)/(quantum ? quantum : 8))*(quantum ? quantum : 8); return ret; },
  526. makeBigInt: function (low,high,unsigned) { var ret = (unsigned ? ((+((low>>>0)))+((+((high>>>0)))*(+4294967296))) : ((+((low>>>0)))+((+((high|0)))*(+4294967296)))); return ret; },
  527. GLOBAL_BASE: 8,
  528. QUANTUM_SIZE: 4,
  529. __dummy__: 0
  530. }
  531. Module['Runtime'] = Runtime;
  532. //========================================
  533. // Runtime essentials
  534. //========================================
  535. var __THREW__ = 0; // Used in checking for thrown exceptions.
  536. var ABORT = false; // whether we are quitting the application. no code should run after this. set in exit() and abort()
  537. var EXITSTATUS = 0;
  538. var undef = 0;
  539. // tempInt is used for 32-bit signed values or smaller. tempBigInt is used
  540. // for 32-bit unsigned values or more than 32 bits. TODO: audit all uses of tempInt
  541. var tempValue, tempInt, tempBigInt, tempInt2, tempBigInt2, tempPair, tempBigIntI, tempBigIntR, tempBigIntS, tempBigIntP, tempBigIntD, tempDouble, tempFloat;
  542. var tempI64, tempI64b;
  543. var tempRet0, tempRet1, tempRet2, tempRet3, tempRet4, tempRet5, tempRet6, tempRet7, tempRet8, tempRet9;
  544. function assert(condition, text) {
  545. if (!condition) {
  546. abort('Assertion failed: ' + text);
  547. }
  548. }
  549. var globalScope = this;
  550. // C calling interface. A convenient way to call C functions (in C files, or
  551. // defined with extern "C").
  552. //
  553. // Note: LLVM optimizations can inline and remove functions, after which you will not be
  554. // able to call them. Closure can also do so. To avoid that, add your function to
  555. // the exports using something like
  556. //
  557. // -s EXPORTED_FUNCTIONS='["_main", "_myfunc"]'
  558. //
  559. // @param ident The name of the C function (note that C++ functions will be name-mangled - use extern "C")
  560. // @param returnType The return type of the function, one of the JS types 'number', 'string' or 'array' (use 'number' for any C pointer, and
  561. // 'array' for JavaScript arrays and typed arrays; note that arrays are 8-bit).
  562. // @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,
  563. // except that 'array' is not possible (there is no way for us to know the length of the array)
  564. // @param args An array of the arguments to the function, as native JS values (as in returnType)
  565. // Note that string arguments will be stored on the stack (the JS string will become a C string on the stack).
  566. // @return The return value, as a native JS value (as in returnType)
  567. function ccall(ident, returnType, argTypes, args) {
  568. return ccallFunc(getCFunc(ident), returnType, argTypes, args);
  569. }
  570. Module["ccall"] = ccall;
  571. // Returns the C function with a specified identifier (for C++, you need to do manual name mangling)
  572. function getCFunc(ident) {
  573. try {
  574. var func = Module['_' + ident]; // closure exported function
  575. if (!func) func = eval('_' + ident); // explicit lookup
  576. } catch(e) {
  577. }
  578. assert(func, 'Cannot call unknown function ' + ident + ' (perhaps LLVM optimizations or closure removed it?)');
  579. return func;
  580. }
  581. // Internal function that does a C call using a function, not an identifier
  582. function ccallFunc(func, returnType, argTypes, args) {
  583. var stack = 0;
  584. function toC(value, type) {
  585. if (type == 'string') {
  586. if (value === null || value === undefined || value === 0) return 0; // null string
  587. value = intArrayFromString(value);
  588. type = 'array';
  589. }
  590. if (type == 'array') {
  591. if (!stack) stack = Runtime.stackSave();
  592. var ret = Runtime.stackAlloc(value.length);
  593. writeArrayToMemory(value, ret);
  594. return ret;
  595. }
  596. return value;
  597. }
  598. function fromC(value, type) {
  599. if (type == 'string') {
  600. return Pointer_stringify(value);
  601. }
  602. assert(type != 'array');
  603. return value;
  604. }
  605. var i = 0;
  606. var cArgs = args ? args.map(function(arg) {
  607. return toC(arg, argTypes[i++]);
  608. }) : [];
  609. var ret = fromC(func.apply(null, cArgs), returnType);
  610. if (stack) Runtime.stackRestore(stack);
  611. return ret;
  612. }
  613. // Returns a native JS wrapper for a C function. This is similar to ccall, but
  614. // returns a function you can call repeatedly in a normal way. For example:
  615. //
  616. // var my_function = cwrap('my_c_function', 'number', ['number', 'number']);
  617. // alert(my_function(5, 22));
  618. // alert(my_function(99, 12));
  619. //
  620. function cwrap(ident, returnType, argTypes) {
  621. var func = getCFunc(ident);
  622. return function() {
  623. return ccallFunc(func, returnType, argTypes, Array.prototype.slice.call(arguments));
  624. }
  625. }
  626. Module["cwrap"] = cwrap;
  627. // Sets a value in memory in a dynamic way at run-time. Uses the
  628. // type data. This is the same as makeSetValue, except that
  629. // makeSetValue is done at compile-time and generates the needed
  630. // code then, whereas this function picks the right code at
  631. // run-time.
  632. // Note that setValue and getValue only do *aligned* writes and reads!
  633. // Note that ccall uses JS types as for defining types, while setValue and
  634. // getValue need LLVM types ('i8', 'i32') - this is a lower-level operation
  635. function setValue(ptr, value, type, noSafe) {
  636. type = type || 'i8';
  637. if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
  638. switch(type) {
  639. case 'i1': HEAP8[(ptr)]=value; break;
  640. case 'i8': HEAP8[(ptr)]=value; break;
  641. case 'i16': HEAP16[((ptr)>>1)]=value; break;
  642. case 'i32': HEAP32[((ptr)>>2)]=value; break;
  643. 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;
  644. case 'float': HEAPF32[((ptr)>>2)]=value; break;
  645. case 'double': HEAPF64[((ptr)>>3)]=value; break;
  646. default: abort('invalid type for setValue: ' + type);
  647. }
  648. }
  649. Module['setValue'] = setValue;
  650. // Parallel to setValue.
  651. function getValue(ptr, type, noSafe) {
  652. type = type || 'i8';
  653. if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit
  654. switch(type) {
  655. case 'i1': return HEAP8[(ptr)];
  656. case 'i8': return HEAP8[(ptr)];
  657. case 'i16': return HEAP16[((ptr)>>1)];
  658. case 'i32': return HEAP32[((ptr)>>2)];
  659. case 'i64': return HEAP32[((ptr)>>2)];
  660. case 'float': return HEAPF32[((ptr)>>2)];
  661. case 'double': return HEAPF64[((ptr)>>3)];
  662. default: abort('invalid type for setValue: ' + type);
  663. }
  664. return null;
  665. }
  666. Module['getValue'] = getValue;
  667. var ALLOC_NORMAL = 0; // Tries to use _malloc()
  668. var ALLOC_STACK = 1; // Lives for the duration of the current function call
  669. var ALLOC_STATIC = 2; // Cannot be freed
  670. var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk
  671. var ALLOC_NONE = 4; // Do not allocate
  672. Module['ALLOC_NORMAL'] = ALLOC_NORMAL;
  673. Module['ALLOC_STACK'] = ALLOC_STACK;
  674. Module['ALLOC_STATIC'] = ALLOC_STATIC;
  675. Module['ALLOC_DYNAMIC'] = ALLOC_DYNAMIC;
  676. Module['ALLOC_NONE'] = ALLOC_NONE;
  677. // allocate(): This is for internal use. You can use it yourself as well, but the interface
  678. // is a little tricky (see docs right below). The reason is that it is optimized
  679. // for multiple syntaxes to save space in generated code. So you should
  680. // normally not use allocate(), and instead allocate memory using _malloc(),
  681. // initialize it with setValue(), and so forth.
  682. // @slab: An array of data, or a number. If a number, then the size of the block to allocate,
  683. // in *bytes* (note that this is sometimes confusing: the next parameter does not
  684. // affect this!)
  685. // @types: Either an array of types, one for each byte (or 0 if no type at that position),
  686. // or a single type which is used for the entire block. This only matters if there
  687. // is initial data - if @slab is a number, then this does not matter at all and is
  688. // ignored.
  689. // @allocator: How to allocate memory, see ALLOC_*
  690. function allocate(slab, types, allocator, ptr) {
  691. var zeroinit, size;
  692. if (typeof slab === 'number') {
  693. zeroinit = true;
  694. size = slab;
  695. } else {
  696. zeroinit = false;
  697. size = slab.length;
  698. }
  699. var singleType = typeof types === 'string' ? types : null;
  700. var ret;
  701. if (allocator == ALLOC_NONE) {
  702. ret = ptr;
  703. } else {
  704. ret = [_malloc, Runtime.stackAlloc, Runtime.staticAlloc, Runtime.dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length));
  705. }
  706. if (zeroinit) {
  707. var ptr = ret, stop;
  708. assert((ret & 3) == 0);
  709. stop = ret + (size & ~3);
  710. for (; ptr < stop; ptr += 4) {
  711. HEAP32[((ptr)>>2)]=0;
  712. }
  713. stop = ret + size;
  714. while (ptr < stop) {
  715. HEAP8[((ptr++)|0)]=0;
  716. }
  717. return ret;
  718. }
  719. if (singleType === 'i8') {
  720. if (slab.subarray || slab.slice) {
  721. HEAPU8.set(slab, ret);
  722. } else {
  723. HEAPU8.set(new Uint8Array(slab), ret);
  724. }
  725. return ret;
  726. }
  727. var i = 0, type, typeSize, previousType;
  728. while (i < size) {
  729. var curr = slab[i];
  730. if (typeof curr === 'function') {
  731. curr = Runtime.getFunctionIndex(curr);
  732. }
  733. type = singleType || types[i];
  734. if (type === 0) {
  735. i++;
  736. continue;
  737. }
  738. if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later
  739. setValue(ret+i, curr, type);
  740. // no need to look up size unless type changes, so cache it
  741. if (previousType !== type) {
  742. typeSize = Runtime.getNativeTypeSize(type);
  743. previousType = type;
  744. }
  745. i += typeSize;
  746. }
  747. return ret;
  748. }
  749. Module['allocate'] = allocate;
  750. function Pointer_stringify(ptr, /* optional */ length) {
  751. // TODO: use TextDecoder
  752. // Find the length, and check for UTF while doing so
  753. var hasUtf = false;
  754. var t;
  755. var i = 0;
  756. while (1) {
  757. t = HEAPU8[(((ptr)+(i))|0)];
  758. if (t >= 128) hasUtf = true;
  759. else if (t == 0 && !length) break;
  760. i++;
  761. if (length && i == length) break;
  762. }
  763. if (!length) length = i;
  764. var ret = '';
  765. if (!hasUtf) {
  766. var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack
  767. var curr;
  768. while (length > 0) {
  769. curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
  770. ret = ret ? ret + curr : curr;
  771. ptr += MAX_CHUNK;
  772. length -= MAX_CHUNK;
  773. }
  774. return ret;
  775. }
  776. var utf8 = new Runtime.UTF8Processor();
  777. for (i = 0; i < length; i++) {
  778. t = HEAPU8[(((ptr)+(i))|0)];
  779. ret += utf8.processCChar(t);
  780. }
  781. return ret;
  782. }
  783. Module['Pointer_stringify'] = Pointer_stringify;
  784. // Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns
  785. // a copy of that string as a Javascript String object.
  786. function UTF16ToString(ptr) {
  787. var i = 0;
  788. var str = '';
  789. while (1) {
  790. var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];
  791. if (codeUnit == 0)
  792. return str;
  793. ++i;
  794. // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.
  795. str += String.fromCharCode(codeUnit);
  796. }
  797. }
  798. Module['UTF16ToString'] = UTF16ToString;
  799. // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
  800. // null-terminated and encoded in UTF16LE form. The copy will require at most (str.length*2+1)*2 bytes of space in the HEAP.
  801. function stringToUTF16(str, outPtr) {
  802. for(var i = 0; i < str.length; ++i) {
  803. // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.
  804. var codeUnit = str.charCodeAt(i); // possibly a lead surrogate
  805. HEAP16[(((outPtr)+(i*2))>>1)]=codeUnit;
  806. }
  807. // Null-terminate the pointer to the HEAP.
  808. HEAP16[(((outPtr)+(str.length*2))>>1)]=0;
  809. }
  810. Module['stringToUTF16'] = stringToUTF16;
  811. // Given a pointer 'ptr' to a null-terminated UTF32LE-encoded string in the emscripten HEAP, returns
  812. // a copy of that string as a Javascript String object.
  813. function UTF32ToString(ptr) {
  814. var i = 0;
  815. var str = '';
  816. while (1) {
  817. var utf32 = HEAP32[(((ptr)+(i*4))>>2)];
  818. if (utf32 == 0)
  819. return str;
  820. ++i;
  821. // 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.
  822. if (utf32 >= 0x10000) {
  823. var ch = utf32 - 0x10000;
  824. str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
  825. } else {
  826. str += String.fromCharCode(utf32);
  827. }
  828. }
  829. }
  830. Module['UTF32ToString'] = UTF32ToString;
  831. // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',
  832. // null-terminated and encoded in UTF32LE form. The copy will require at most (str.length+1)*4 bytes of space in the HEAP,
  833. // 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.
  834. function stringToUTF32(str, outPtr) {
  835. var iChar = 0;
  836. for(var iCodeUnit = 0; iCodeUnit < str.length; ++iCodeUnit) {
  837. // 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.
  838. var codeUnit = str.charCodeAt(iCodeUnit); // possibly a lead surrogate
  839. if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {
  840. var trailSurrogate = str.charCodeAt(++iCodeUnit);
  841. codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);
  842. }
  843. HEAP32[(((outPtr)+(iChar*4))>>2)]=codeUnit;
  844. ++iChar;
  845. }
  846. // Null-terminate the pointer to the HEAP.
  847. HEAP32[(((outPtr)+(iChar*4))>>2)]=0;
  848. }
  849. Module['stringToUTF32'] = stringToUTF32;
  850. function demangle(func) {
  851. var i = 3;
  852. // params, etc.
  853. var basicTypes = {
  854. 'v': 'void',
  855. 'b': 'bool',
  856. 'c': 'char',
  857. 's': 'short',
  858. 'i': 'int',
  859. 'l': 'long',
  860. 'f': 'float',
  861. 'd': 'double',
  862. 'w': 'wchar_t',
  863. 'a': 'signed char',
  864. 'h': 'unsigned char',
  865. 't': 'unsigned short',
  866. 'j': 'unsigned int',
  867. 'm': 'unsigned long',
  868. 'x': 'long long',
  869. 'y': 'unsigned long long',
  870. 'z': '...'
  871. };
  872. var subs = [];
  873. var first = true;
  874. function dump(x) {
  875. //return;
  876. if (x) Module.print(x);
  877. Module.print(func);
  878. var pre = '';
  879. for (var a = 0; a < i; a++) pre += ' ';
  880. Module.print (pre + '^');
  881. }
  882. function parseNested() {
  883. i++;
  884. if (func[i] === 'K') i++; // ignore const
  885. var parts = [];
  886. while (func[i] !== 'E') {
  887. if (func[i] === 'S') { // substitution
  888. i++;
  889. var next = func.indexOf('_', i);
  890. var num = func.substring(i, next) || 0;
  891. parts.push(subs[num] || '?');
  892. i = next+1;
  893. continue;
  894. }
  895. if (func[i] === 'C') { // constructor
  896. parts.push(parts[parts.length-1]);
  897. i += 2;
  898. continue;
  899. }
  900. var size = parseInt(func.substr(i));
  901. var pre = size.toString().length;
  902. if (!size || !pre) { i--; break; } // counter i++ below us
  903. var curr = func.substr(i + pre, size);
  904. parts.push(curr);
  905. subs.push(curr);
  906. i += pre + size;
  907. }
  908. i++; // skip E
  909. return parts;
  910. }
  911. function parse(rawList, limit, allowVoid) { // main parser
  912. limit = limit || Infinity;
  913. var ret = '', list = [];
  914. function flushList() {
  915. return '(' + list.join(', ') + ')';
  916. }
  917. var name;
  918. if (func[i] === 'N') {
  919. // namespaced N-E
  920. name = parseNested().join('::');
  921. limit--;
  922. if (limit === 0) return rawList ? [name] : name;
  923. } else {
  924. // not namespaced
  925. if (func[i] === 'K' || (first && func[i] === 'L')) i++; // ignore const and first 'L'
  926. var size = parseInt(func.substr(i));
  927. if (size) {
  928. var pre = size.toString().length;
  929. name = func.substr(i + pre, size);
  930. i += pre + size;
  931. }
  932. }
  933. first = false;
  934. if (func[i] === 'I') {
  935. i++;
  936. var iList = parse(true);
  937. var iRet = parse(true, 1, true);
  938. ret += iRet[0] + ' ' + name + '<' + iList.join(', ') + '>';
  939. } else {
  940. ret = name;
  941. }
  942. paramLoop: while (i < func.length && limit-- > 0) {
  943. //dump('paramLoop');
  944. var c = func[i++];
  945. if (c in basicTypes) {
  946. list.push(basicTypes[c]);
  947. } else {
  948. switch (c) {
  949. case 'P': list.push(parse(true, 1, true)[0] + '*'); break; // pointer
  950. case 'R': list.push(parse(true, 1, true)[0] + '&'); break; // reference
  951. case 'L': { // literal
  952. i++; // skip basic type
  953. var end = func.indexOf('E', i);
  954. var size = end - i;
  955. list.push(func.substr(i, size));
  956. i += size + 2; // size + 'EE'
  957. break;
  958. }
  959. case 'A': { // array
  960. var size = parseInt(func.substr(i));
  961. i += size.toString().length;
  962. if (func[i] !== '_') throw '?';
  963. i++; // skip _
  964. list.push(parse(true, 1, true)[0] + ' [' + size + ']');
  965. break;
  966. }
  967. case 'E': break paramLoop;
  968. default: ret += '?' + c; break paramLoop;
  969. }
  970. }
  971. }
  972. if (!allowVoid && list.length === 1 && list[0] === 'void') list = []; // avoid (void)
  973. if (rawList) {
  974. if (ret) {
  975. list.push(ret + '?');
  976. }
  977. return list;
  978. } else {
  979. return ret + flushList();
  980. }
  981. }
  982. try {
  983. // Special-case the entry point, since its name differs from other name mangling.
  984. if (func == 'Object._main' || func == '_main') {
  985. return 'main()';
  986. }
  987. if (typeof func === 'number') func = Pointer_stringify(func);
  988. if (func[0] !== '_') return func;
  989. if (func[1] !== '_') return func; // C function
  990. if (func[2] !== 'Z') return func;
  991. switch (func[3]) {
  992. case 'n': return 'operator new()';
  993. case 'd': return 'operator delete()';
  994. }
  995. return parse();
  996. } catch(e) {
  997. return func;
  998. }
  999. }
  1000. function demangleAll(text) {
  1001. return text.replace(/__Z[\w\d_]+/g, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']') });
  1002. }
  1003. function stackTrace() {
  1004. var stack = new Error().stack;
  1005. return stack ? demangleAll(stack) : '(no stack trace available)'; // Stack trace is not available at least on IE10 and Safari 6.
  1006. }
  1007. // Memory management
  1008. var PAGE_SIZE = 4096;
  1009. function alignMemoryPage(x) {
  1010. return (x+4095)&-4096;
  1011. }
  1012. var HEAP;
  1013. var HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
  1014. var STATIC_BASE = 0, STATICTOP = 0, staticSealed = false; // static area
  1015. var STACK_BASE = 0, STACKTOP = 0, STACK_MAX = 0; // stack area
  1016. var DYNAMIC_BASE = 0, DYNAMICTOP = 0; // dynamic area handled by sbrk
  1017. function enlargeMemory() {
  1018. 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.');
  1019. }
  1020. var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880;
  1021. var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;
  1022. var FAST_MEMORY = Module['FAST_MEMORY'] || 2097152;
  1023. var totalMemory = 4096;
  1024. while (totalMemory < TOTAL_MEMORY || totalMemory < 2*TOTAL_STACK) {
  1025. if (totalMemory < 16*1024*1024) {
  1026. totalMemory *= 2;
  1027. } else {
  1028. totalMemory += 16*1024*1024
  1029. }
  1030. }
  1031. if (totalMemory !== TOTAL_MEMORY) {
  1032. Module.printErr('increasing TOTAL_MEMORY to ' + totalMemory + ' to be more reasonable');
  1033. TOTAL_MEMORY = totalMemory;
  1034. }
  1035. // Initialize the runtime's memory
  1036. // check for full engine support (use string 'subarray' to avoid closure compiler confusion)
  1037. assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && !!(new Int32Array(1)['subarray']) && !!(new Int32Array(1)['set']),
  1038. 'JS engine does not provide full typed array support');
  1039. var buffer = new ArrayBuffer(TOTAL_MEMORY);
  1040. HEAP8 = new Int8Array(buffer);
  1041. HEAP16 = new Int16Array(buffer);
  1042. HEAP32 = new Int32Array(buffer);
  1043. HEAPU8 = new Uint8Array(buffer);
  1044. HEAPU16 = new Uint16Array(buffer);
  1045. HEAPU32 = new Uint32Array(buffer);
  1046. HEAPF32 = new Float32Array(buffer);
  1047. HEAPF64 = new Float64Array(buffer);
  1048. // Endianness check (note: assumes compiler arch was little-endian)
  1049. HEAP32[0] = 255;
  1050. assert(HEAPU8[0] === 255 && HEAPU8[3] === 0, 'Typed arrays 2 must be run on a little-endian system');
  1051. Module['HEAP'] = HEAP;
  1052. Module['HEAP8'] = HEAP8;
  1053. Module['HEAP16'] = HEAP16;
  1054. Module['HEAP32'] = HEAP32;
  1055. Module['HEAPU8'] = HEAPU8;
  1056. Module['HEAPU16'] = HEAPU16;
  1057. Module['HEAPU32'] = HEAPU32;
  1058. Module['HEAPF32'] = HEAPF32;
  1059. Module['HEAPF64'] = HEAPF64;
  1060. function callRuntimeCallbacks(callbacks) {
  1061. while(callbacks.length > 0) {
  1062. var callback = callbacks.shift();
  1063. if (typeof callback == 'function') {
  1064. callback();
  1065. continue;
  1066. }
  1067. var func = callback.func;
  1068. if (typeof func === 'number') {
  1069. if (callback.arg === undefined) {
  1070. Runtime.dynCall('v', func);
  1071. } else {
  1072. Runtime.dynCall('vi', func, [callback.arg]);
  1073. }
  1074. } else {
  1075. func(callback.arg === undefined ? null : callback.arg);
  1076. }
  1077. }
  1078. }
  1079. var __ATPRERUN__ = []; // functions called before the runtime is initialized
  1080. var __ATINIT__ = []; // functions called during startup
  1081. var __ATMAIN__ = []; // functions called when main() is to be run
  1082. var __ATEXIT__ = []; // functions called during shutdown
  1083. var __ATPOSTRUN__ = []; // functions called after the runtime has exited
  1084. var runtimeInitialized = false;
  1085. function preRun() {
  1086. // compatibility - merge in anything from Module['preRun'] at this time
  1087. if (Module['preRun']) {
  1088. if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
  1089. while (Module['preRun'].length) {
  1090. addOnPreRun(Module['preRun'].shift());
  1091. }
  1092. }
  1093. callRuntimeCallbacks(__ATPRERUN__);
  1094. }
  1095. function ensureInitRuntime() {
  1096. if (runtimeInitialized) return;
  1097. runtimeInitialized = true;
  1098. callRuntimeCallbacks(__ATINIT__);
  1099. }
  1100. function preMain() {
  1101. callRuntimeCallbacks(__ATMAIN__);
  1102. }
  1103. function exitRuntime() {
  1104. callRuntimeCallbacks(__ATEXIT__);
  1105. }
  1106. function postRun() {
  1107. // compatibility - merge in anything from Module['postRun'] at this time
  1108. if (Module['postRun']) {
  1109. if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
  1110. while (Module['postRun'].length) {
  1111. addOnPostRun(Module['postRun'].shift());
  1112. }
  1113. }
  1114. callRuntimeCallbacks(__ATPOSTRUN__);
  1115. }
  1116. function addOnPreRun(cb) {
  1117. __ATPRERUN__.unshift(cb);
  1118. }
  1119. Module['addOnPreRun'] = Module.addOnPreRun = addOnPreRun;
  1120. function addOnInit(cb) {
  1121. __ATINIT__.unshift(cb);
  1122. }
  1123. Module['addOnInit'] = Module.addOnInit = addOnInit;
  1124. function addOnPreMain(cb) {
  1125. __ATMAIN__.unshift(cb);
  1126. }
  1127. Module['addOnPreMain'] = Module.addOnPreMain = addOnPreMain;
  1128. function addOnExit(cb) {
  1129. __ATEXIT__.unshift(cb);
  1130. }
  1131. Module['addOnExit'] = Module.addOnExit = addOnExit;
  1132. function addOnPostRun(cb) {
  1133. __ATPOSTRUN__.unshift(cb);
  1134. }
  1135. Module['addOnPostRun'] = Module.addOnPostRun = addOnPostRun;
  1136. // Tools
  1137. // This processes a JS string into a C-line array of numbers, 0-terminated.
  1138. // For LLVM-originating strings, see parser.js:parseLLVMString function
  1139. function intArrayFromString(stringy, dontAddNull, length /* optional */) {
  1140. var ret = (new Runtime.UTF8Processor()).processJSString(stringy);
  1141. if (length) {
  1142. ret.length = length;
  1143. }
  1144. if (!dontAddNull) {
  1145. ret.push(0);
  1146. }
  1147. return ret;
  1148. }
  1149. Module['intArrayFromString'] = intArrayFromString;
  1150. function intArrayToString(array) {
  1151. var ret = [];
  1152. for (var i = 0; i < array.length; i++) {
  1153. var chr = array[i];
  1154. if (chr > 0xFF) {
  1155. chr &= 0xFF;
  1156. }
  1157. ret.push(String.fromCharCode(chr));
  1158. }
  1159. return ret.join('');
  1160. }
  1161. Module['intArrayToString'] = intArrayToString;
  1162. // Write a Javascript array to somewhere in the heap
  1163. function writeStringToMemory(string, buffer, dontAddNull) {
  1164. var array = intArrayFromString(string, dontAddNull);
  1165. var i = 0;
  1166. while (i < array.length) {
  1167. var chr = array[i];
  1168. HEAP8[(((buffer)+(i))|0)]=chr;
  1169. i = i + 1;
  1170. }
  1171. }
  1172. Module['writeStringToMemory'] = writeStringToMemory;
  1173. function writeArrayToMemory(array, buffer) {
  1174. for (var i = 0; i < array.length; i++) {
  1175. HEAP8[(((buffer)+(i))|0)]=array[i];
  1176. }
  1177. }
  1178. Module['writeArrayToMemory'] = writeArrayToMemory;
  1179. function writeAsciiToMemory(str, buffer, dontAddNull) {
  1180. for (var i = 0; i < str.length; i++) {
  1181. HEAP8[(((buffer)+(i))|0)]=str.charCodeAt(i);
  1182. }
  1183. if (!dontAddNull) HEAP8[(((buffer)+(str.length))|0)]=0;
  1184. }
  1185. Module['writeAsciiToMemory'] = writeAsciiToMemory;
  1186. function unSign(value, bits, ignore) {
  1187. if (value >= 0) {
  1188. return value;
  1189. }
  1190. 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
  1191. : Math.pow(2, bits) + value;
  1192. }
  1193. function reSign(value, bits, ignore) {
  1194. if (value <= 0) {
  1195. return value;
  1196. }
  1197. var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32
  1198. : Math.pow(2, bits-1);
  1199. 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
  1200. // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors
  1201. // TODO: In i64 mode 1, resign the two parts separately and safely
  1202. value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts
  1203. }
  1204. return value;
  1205. }
  1206. // check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 )
  1207. if (!Math['imul'] || Math['imul'](0xffffffff, 5) !== -5) Math['imul'] = function imul(a, b) {
  1208. var ah = a >>> 16;
  1209. var al = a & 0xffff;
  1210. var bh = b >>> 16;
  1211. var bl = b & 0xffff;
  1212. return (al*bl + ((ah*bl + al*bh) << 16))|0;
  1213. };
  1214. Math.imul = Math['imul'];
  1215. var Math_abs = Math.abs;
  1216. var Math_cos = Math.cos;
  1217. var Math_sin = Math.sin;
  1218. var Math_tan = Math.tan;
  1219. var Math_acos = Math.acos;
  1220. var Math_asin = Math.asin;
  1221. var Math_atan = Math.atan;
  1222. var Math_atan2 = Math.atan2;
  1223. var Math_exp = Math.exp;
  1224. var Math_log = Math.log;
  1225. var Math_sqrt = Math.sqrt;
  1226. var Math_ceil = Math.ceil;
  1227. var Math_floor = Math.floor;
  1228. var Math_pow = Math.pow;
  1229. var Math_imul = Math.imul;
  1230. var Math_fround = Math.fround;
  1231. var Math_min = Math.min;
  1232. // A counter of dependencies for calling run(). If we need to
  1233. // do asynchronous work before running, increment this and
  1234. // decrement it. Incrementing must happen in a place like
  1235. // PRE_RUN_ADDITIONS (used by emcc to add file preloading).
  1236. // Note that you can add dependencies in preRun, even though
  1237. // it happens right before run - run will be postponed until
  1238. // the dependencies are met.
  1239. var runDependencies = 0;
  1240. var runDependencyWatcher = null;
  1241. var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
  1242. function addRunDependency(id) {
  1243. runDependencies++;
  1244. if (Module['monitorRunDependencies']) {
  1245. Module['monitorRunDependencies'](runDependencies);
  1246. }
  1247. }
  1248. Module['addRunDependency'] = addRunDependency;
  1249. function removeRunDependency(id) {
  1250. runDependencies--;
  1251. if (Module['monitorRunDependencies']) {
  1252. Module['monitorRunDependencies'](runDependencies);
  1253. }
  1254. if (runDependencies == 0) {
  1255. if (runDependencyWatcher !== null) {
  1256. clearInterval(runDependencyWatcher);
  1257. runDependencyWatcher = null;
  1258. }
  1259. if (dependenciesFulfilled) {
  1260. var callback = dependenciesFulfilled;
  1261. dependenciesFulfilled = null;
  1262. callback(); // can add another dependenciesFulfilled
  1263. }
  1264. }
  1265. }
  1266. Module['removeRunDependency'] = removeRunDependency;
  1267. Module["preloadedImages"] = {}; // maps url to image data
  1268. Module["preloadedAudios"] = {}; // maps url to audio data
  1269. var memoryInitializer = null;
  1270. // === Body ===
  1271. STATIC_BASE = 8;
  1272. STATICTOP = STATIC_BASE + Runtime.alignMemory(13467);
  1273. /* global initializers */ __ATINIT__.push();
  1274. /* memory initializer */ allocate([99,97,110,110,111,116,32,99,114,101,97,116,101,32,115,116,97,116,101,58,32,110,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,0,0,40,101,114,114,111,114,32,111,98,106,101,99,116,32,105,115,32,110,111,116,32,97,32,115,116,114,105,110,103,41,0,0,88,0,0,0,0,0,0,0,108,117,97,0,0,0,0,0,76,85,65,95,78,79,69,78,86,0,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,114,101,115,117,108,116,115,32,116,111,32,112,114,105,110,116,0,0,0,0,0,0,0,112,114,105,110,116,0,0,0,101,114,114,111,114,32,99,97,108,108,105,110,103,32,39,112,114,105,110,116,39,32,40,37,115,41,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,110,116,101,114,114,117,112,116,101,100,33,0,0,0,0,95,95,116,111,115,116,114,105,110,103,0,0,0,0,0,0,40,110,111,32,101,114,114,111,114,32,109,101,115,115,97,103,101,41,0,0,0,0,0,0,61,115,116,100,105,110,0,0,60,101,111,102,62,0,0,0,114,101,116,117,114,110,32,37,115,0,0,0,0,0,0,0,95,80,82,79,77,80,84,0,95,80,82,79,77,80,84,50,0,0,0,0,0,0,0,0,62,32,0,0,0,0,0,0,62,62,32,0,0,0,0,0,97,114,103,0,0,0,0,0,45,0,0,0,0,0,0,0,45,45,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,97,114,103,117,109,101,110,116,115,32,116,111,32,115,99,114,105,112,116,0,0,0,0,61,40,99,111,109,109,97,110,100,32,108,105,110,101,41,0,114,101,113,117,105,114,101,0,61,76,85,65,95,73,78,73,84,95,53,95,50,0,0,0,61,76,85,65,95,73,78,73,84,0,0,0,0,0,0,0,76,117,97,32,53,46,50,46,50,32,32,67,111,112,121,114,105,103,104,116,32,40,67,41,32,49,57,57,52,45,50,48,49,51,32,76,117,97,46,111,114,103,44,32,80,85,67,45,82,105,111,0,0,0,0,0,37,115,58,32,0,0,0,0,39,37,115,39,32,110,101,101,100,115,32,97,114,103,117,109,101,110,116,10,0,0,0,0,117,110,114,101,99,111,103,110,105,122,101,100,32,111,112,116,105,111,110,32,39,37,115,39,10,0,0,0,0,0,0,0,117,115,97,103,101,58,32,37,115,32,91,111,112,116,105,111,110,115,93,32,91,115,99,114,105,112,116,32,91,97,114,103,115,93,93,10,65,118,97,105,108,97,98,108,101,32,111,112,116,105,111,110,115,32,97,114,101,58,10,32,32,45,101,32,115,116,97,116,32,32,101,120,101,99,117,116,101,32,115,116,114,105,110,103,32,39,115,116,97,116,39,10,32,32,45,105,32,32,32,32,32,32,32,101,110,116,101,114,32,105,110,116,101,114,97,99,116,105,118,101,32,109,111,100,101,32,97,102,116,101,114,32,101,120,101,99,117,116,105,110,103,32,39,115,99,114,105,112,116,39,10,32,32,45,108,32,110,97,109,101,32,32,114,101,113,117,105,114,101,32,108,105,98,114,97,114,121,32,39,110,97,109,101,39,10,32,32,45,118,32,32,32,32,32,32,32,115,104,111,119,32,118,101,114,115,105,111,110,32,105,110,102,111,114,109,97,116,105,111,110,10,32,32,45,69,32,32,32,32,32,32,32,105,103,110,111,114,101,32,101,110,118,105,114,111,110,109,101,110,116,32,118,97,114,105,97,98,108,101,115,10,32,32,45,45,32,32,32,32,32,32,32,115,116,111,112,32,104,97,110,100,108,105,110,103,32,111,112,116,105,111,110,115,10,32,32,45,32,32,32,32,32,32,32,32,115,116,111,112,32,104,97,110,100,108,105,110,103,32,111,112,116,105,111,110,115,32,97,110,100,32,101,120,101,99,117,116,101,32,115,116,100,105,110,10,0,0,0,0,0,0,0,37,115,10,0,0,0,0,0,0,0,0,0,0,96,127,64,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,115,10,0,0,0,0,0,115,116,97,99,107,32,116,114,97,99,101,98,97,99,107,58,0,0,0,0,0,0,0,0,10,9,46,46,46,0,0,0,83,108,110,116,0,0,0,0,10,9,37,115,58,0,0,0,37,100,58,0,0,0,0,0,32,105,110,32,0,0,0,0,10,9,40,46,46,46,116,97,105,108,32,99,97,108,108,115,46,46,46,41,0,0,0,0,98,97,100,32,97,114,103,117,109,101,110,116,32,35,37,100,32,40,37,115,41,0,0,0,110,0,0,0,0,0,0,0,109,101,116,104,111,100,0,0,99,97,108,108,105,110,103,32,39,37,115,39,32,111,110,32,98,97,100,32,115,101,108,102,32,40,37,115,41,0,0,0,63,0,0,0,0,0,0,0,98,97,100,32,97,114,103,117,109,101,110,116,32,35,37,100,32,116,111,32,39,37,115,39,32,40,37,115,41,0,0,0,83,108,0,0,0,0,0,0,37,115,58,37,100,58,32,0,0,0,0,0,0,0,0,0,37,115,58,32,37,115,0,0,101,120,105,116,0,0,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,39,37,115,39,0,0,0,0,0,115,116,97,99,107,32,111,118,101,114,102,108,111,119,32,40,37,115,41,0,0,0,0,0,115,116,97,99,107,32,111,118,101,114,102,108,111,119,0,0,118,97,108,117,101,32,101,120,112,101,99,116,101,100,0,0,98,117,102,102,101,114,32,116,111,111,32,108,97,114,103,101,0,0,0,0,0,0,0,0,61,115,116,100,105,110,0,0,64,37,115,0,0,0,0,0,114,0,0,0,0,0,0,0,111,112,101,110,0,0,0,0,114,98,0,0,0,0,0,0,114,101,111,112,101,110,0,0,114,101,97,100,0,0,0,0,111,98,106,101,99,116,32,108,101,110,103,116,104,32,105,115,32,110,111,116,32,97,32,110,117,109,98,101,114,0,0,0,95,95,116,111,115,116,114,105,110,103,0,0,0,0,0,0,116,114,117,101,0,0,0,0,102,97,108,115,101,0,0,0,110,105,108,0,0,0,0,0,37,115,58,32,37,112,0,0,95,76,79,65,68,69,68,0,110,97,109,101,32,99,111,110,102,108,105,99,116,32,102,111,114,32,109,111,100,117,108,101,32,39,37,115,39,0,0,0,116,111,111,32,109,97,110,121,32,117,112,118,97,108,117,101,115,0,0,0,0,0,0,0,109,117,108,116,105,112,108,101,32,76,117,97,32,86,77,115,32,100,101,116,101,99,116,101,100,0,0,0,0,0,0,0,118,101,114,115,105,111,110,32,109,105,115,109,97,116,99,104,58,32,97,112,112,46,32,110,101,101,100,115,32,37,102,44,32,76,117,97,32,99,111,114,101,32,112,114,111,118,105,100,101,115,32,37,102,0,0,0,98,97,100,32,99,111,110,118,101,114,115,105,111,110,32,110,117,109,98,101,114,45,62,105,110,116,59,32,109,117,115,116,32,114,101,99,111,109,112,105,108,101,32,76,117,97,32,119,105,116,104,32,112,114,111,112,101,114,32,115,101,116,116,105,110,103,115,0,0,0,0,0,80,65,78,73,67,58,32,117,110,112,114,111,116,101,99,116,101,100,32,101,114,114,111,114,32,105,110,32,99,97,108,108,32,116,111,32,76,117,97,32,65,80,73,32,40,37,115,41,10,0,0,0,0,0,0,0,239,187,191,0,0,0,0,0,99,97,110,110,111,116,32,37,115,32,37,115,58,32,37,115,0,0,0,0,0,0,0,0,37,115,32,101,120,112,101,99,116,101,100,44,32,103,111,116,32,37,115,0,0,0,0,0,102,0,0,0,0,0,0,0,46,0,0,0,0,0,0,0,102,117,110,99,116,105,111,110,32,39,37,115,39,0,0,0,109,97,105,110,32,99,104,117,110,107,0,0,0,0,0,0,102,117,110,99,116,105,111,110,32,60,37,115,58,37,100,62,0,0,0,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,37,115,32,37,115,32,39,37,115,39,32,40,97,32,37,115,32,118,97,108,117,101,41,0,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,37,115,32,97,32,37,115,32,118,97,108,117,101,0,0,0,0,0,0,0,0,99,111,110,99,97,116,101,110,97,116,101,0,0,0,0,0,112,101,114,102,111,114,109,32,97,114,105,116,104,109,101,116,105,99,32,111,110,0,0,0,97,116,116,101,109,112,116,32,116,111,32,99,111,109,112,97,114,101,32,116,119,111,32,37,115,32,118,97,108,117,101,115,0,0,0,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,99,111,109,112,97,114,101,32,37,115,32,119,105,116,104,32,37,115,0,0,0,37,115,58,37,100,58,32,37,115,0,0,0,0,0,0,0,108,111,99,97,108,0,0,0,95,69,78,86,0,0,0,0,103,108,111,98,97,108,0,0,102,105,101,108,100,0,0,0,117,112,118,97,108,117,101,0,99,111,110,115,116,97,110,116,0,0,0,0,0,0,0,0,109,101,116,104,111,100,0,0,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,111,114,32,105,116,101,114,97,116,111,114,0,0,0,0,109,101,116,97,109,101,116,104,111,100,0,0,0,0,0,0,61,91,67,93,0,0,0,0,67,0,0,0,0,0,0,0,61,63,0,0,0,0,0,0,109,97,105,110,0,0,0,0,76,117,97,0,0,0,0,0,40,42,116,101,109,112,111,114,97,114,121,41,0,0,0,0,40,42,118,97,114,97,114,103,41,0,0,0,0,0,0,0,115,116,97,99,107,32,111,118,101,114,102,108,111,119,0,0,67,32,115,116,97,99,107,32,111,118,101,114,102,108,111,119,0,0,0,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,121,105,101,108,100,32,97,99,114,111,115,115,32,97,32,67,45,99,97,108,108,32,98,111,117,110,100,97,114,121,0,0,0,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,121,105,101,108,100,32,102,114,111,109,32,111,117,116,115,105,100,101,32,97,32,99,111,114,111,117,116,105,110,101,0,0,0,0,0,0,0,98,105,110,97,114,121,0,0,116,101,120,116,0,0,0,0,97,116,116,101,109,112,116,32,116,111,32,108,111,97,100,32,97,32,37,115,32,99,104,117,110,107,32,40,109,111,100,101,32,105,115,32,39,37,115,39,41,0,0,0,0,0,0,0,101,114,114,111,114,32,105,110,32,101,114,114,111,114,32,104,97,110,100,108,105,110,103,0,99,97,110,110,111,116,32,114,101,115,117,109,101,32,110,111,110,45,115,117,115,112,101,110,100,101,100,32,99,111,114,111,117,116,105,110,101,0,0,0,99,97,110,110,111,116,32,114,101,115,117,109,101,32,100,101,97,100,32,99,111,114,111,117,116,105,110,101,0,0,0,0,99,97,108,108,0,0,0,0,110,111,32,109,101,115,115,97,103,101,0,0,0,0,0,0,101,114,114,111,114,32,105,110,32,95,95,103,99,32,109,101,116,97,109,101,116,104,111,100,32,40,37,115,41,0,0,0,95,80,82,69,76,79,65,68,0,0,0,0,0,0,0,0,95,71,0,0,0,0,0,0,112,97,99,107,97,103,101,0,99,111,114,111,117,116,105,110,101,0,0,0,0,0,0,0,116,97,98,108,101,0,0,0,105,111,0,0,0,0,0,0,111,115,0,0,0,0,0,0,115,116,114,105,110,103,0,0,98,105,116,51,50,0,0,0,109,97,116,104,0,0,0,0,100,101,98,117,103,0,0,0,144,11,0,0,1,0,0,0,152,11,0,0,2,0,0,0,48,13,0,0,3,0,0,0,160,11,0,0,4,0,0,0,56,13,0,0,5,0,0,0,64,13,0,0,6,0,0,0,72,13,0,0,7,0,0,0,168,11,0,0,8,0,0,0,80,13,0,0,9,0,0,0,88,13,0,0,10,0,0,0,192,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,95,73,79,95,105,110,112,117,116,0,0,0,0,0,0,0,115,116,100,105,110,0,0,0,95,73,79,95,111,117,116,112,117,116,0,0,0,0,0,0,115,116,100,111,117,116,0,0,115,116,100,101,114,114,0,0,70,73,76,69,42,0,0,0,99,97,110,110,111,116,32,99,108,111,115,101,32,115,116,97,110,100,97,114,100,32,102,105,108,101,0,0,0,0,0,0,95,95,105,110,100,101,120,0,144,11,0,0,1,0,0,0,152,11,0,0,12,0,0,0,160,11,0,0,13,0,0,0,168,11,0,0,14,0,0,0,176,11,0,0,15,0,0,0,184,11,0,0,16,0,0,0,192,11,0,0,17,0,0,0,200,11,0,0,18,0,0,0,208,11,0,0,19,0,0,0,0,0,0,0,0,0,0,0,99,108,111,115,101,0,0,0,102,108,117,115,104,0,0,0,108,105,110,101,115,0,0,0,114,101,97,100,0,0,0,0,115,101,101,107,0,0,0,0,115,101,116,118,98,117,102,0,119,114,105,116,101,0,0,0,95,95,103,99,0,0,0,0,95,95,116,111,115,116,114,105,110,103,0,0,0,0,0,0,102,105,108,101,32,40,99,108,111,115,101,100,41,0,0,0,102,105,108,101,32,40,37,112,41,0,0,0,0,0,0,0,37,46,49,52,103,0,0,0,97,116,116,101,109,112,116,32,116,111,32,117,115,101,32,97,32,99,108,111,115,101,100,32,102,105,108,101,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,72,12,0,0,80,12,0,0,88,12,0,0,0,0,0,0,110,111,0,0,0,0,0,0,102,117,108,108,0,0,0,0,108,105,110,101,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,128,12,0,0,136,12,0,0,144,12,0,0,0,0,0,0,115,101,116,0,0,0,0,0,99,117,114,0,0,0,0,0,101,110,100,0,0,0,0,0,110,111,116,32,97,110,32,105,110,116,101,103,101,114,32,105,110,32,112,114,111,112,101,114,32,114,97,110,103,101,0,0,116,111,111,32,109,97,110,121,32,97,114,103,117,109,101,110,116,115,0,0,0,0,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,0,0,105,110,118,97,108,105,100,32,102,111,114,109,97,116,0,0,37,108,102,0,0,0,0,0,116,111,111,32,109,97,110,121,32,111,112,116,105,111,110,115,0,0,0,0,0,0,0,0,102,105,108,101,32,105,115,32,97,108,114,101,97,100,121,32,99,108,111,115,101,100,0,0,37,115,0,0,0,0,0,0,105,110,112,117,116,0,0,0,111,112,101,110,0,0,0,0,111,117,116,112,117,116,0,0,112,111,112,101,110,0,0,0,116,109,112,102,105,108,101,0,116,121,112,101,0,0,0,0,115,116,97,110,100,97,114,100,32,37,115,32,102,105,108,101,32,105,115,32,99,108,111,115,101,100,0,0,0,0,0,0,99,108,111,115,101,100,32,102,105,108,101,0,0,0,0,0,102,105,108,101,0,0,0,0,114,0,0,0,0,0,0,0,39,112,111,112,101,110,39,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,0,0,119,0,0,0,0,0,0,0,99,97,110,110,111,116,32,111,112,101,110,32,102,105,108,101,32,39,37,115,39,32,40,37,115,41,0,0,0,0,0,0,114,119,97,0,0,0,0,0,105,110,118,97,108,105,100,32,109,111,100,101,0,0,0,0,240,14,0,0,20,0,0,0,248,14,0,0,21,0,0,0,0,15,0,0,22,0,0,0,8,15,0,0,23,0,0,0,16,15,0,0,24,0,0,0,24,15,0,0,25,0,0,0,32,15,0,0,26,0,0,0,40,15,0,0,27,0,0,0,48,15,0,0,28,0,0,0,56,15,0,0,29,0,0,0,64,15,0,0,30,0,0,0,72,15,0,0,31,0,0,0,80,15,0,0,32,0,0,0,88,15,0,0,33,0,0,0,96,15,0,0,34,0,0,0,104,15,0,0,35,0,0,0,112,15,0,0,36,0,0,0,120,15,0,0,37,0,0,0,128,15,0,0,38,0,0,0,136,15,0,0,39,0,0,0,144,15,0,0,40,0,0,0,152,15,0,0,41,0,0,0,160,15,0,0,42,0,0,0,176,15,0,0,43,0,0,0,184,15,0,0,44,0,0,0,192,15,0,0,45,0,0,0,200,15,0,0,46,0,0,0,208,15,0,0,47,0,0,0,0,0,0,0,0,0,0,0,112,105,0,0,0,0,0,0,104,117,103,101,0,0,0,0,97,98,115,0,0,0,0,0,97,99,111,115,0,0,0,0,97,115,105,110,0,0,0,0,97,116,97,110,50,0,0,0,97,116,97,110,0,0,0,0,99,101,105,108,0,0,0,0,99,111,115,104,0,0,0,0,99,111,115,0,0,0,0,0,100,101,103,0,0,0,0,0,101,120,112,0,0,0,0,0,102,108,111,111,114,0,0,0,102,109,111,100,0,0,0,0,102,114,101,120,112,0,0,0,108,100,101,120,112,0,0,0,108,111,103,49,48,0,0,0,108,111,103,0,0,0,0,0,109,97,120,0,0,0,0,0,109,105,110,0,0,0,0,0,109,111,100,102,0,0,0,0,112,111,119,0,0,0,0,0,114,97,100,0,0,0,0,0,114,97,110,100,111,109,0,0,114,97,110,100,111,109,115,101,101,100,0,0,0,0,0,0,115,105,110,104,0,0,0,0,115,105,110,0,0,0,0,0,115,113,114,116,0,0,0,0,116,97,110,104,0,0,0,0,116,97,110,0,0,0,0,0,105,110,116,101,114,118,97,108,32,105,115,32,101,109,112,116,121,0,0,0,0,0,0,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,0,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,37,115,32,40,108,105,109,105,116,32,105,115,32,37,100,41,0,0,0,0,0,0,0,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,101,114,114,111,114,58,32,98,108,111,99,107,32,116,111,111,32,98,105,103,0,0,95,67,76,73,66,83,0,0,95,95,103,99,0,0,0,0,16,20,0,0,48,0,0,0,24,20,0,0,49,0,0,0,40,20,0,0,50,0,0,0,0,0,0,0,0,0,0,0,108,111,97,100,101,114,115,0,115,101,97,114,99,104,101,114,115,0,0,0,0,0,0,0,112,97,116,104,0,0,0,0,76,85,65,95,80,65,84,72,95,53,95,50,0,0,0,0,76,85,65,95,80,65,84,72,0,0,0,0,0,0,0,0,47,117,115,114,47,108,111,99,97,108,47,115,104,97,114,101,47,108,117,97,47,53,46,50,47,63,46,108,117,97,59,47,117,115,114,47,108,111,99,97,108,47,115,104,97,114,101,47,108,117,97,47,53,46,50,47,63,47,105,110,105,116,46,108,117,97,59,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,108,117,97,47,53,46,50,47,63,46,108,117,97,59,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,108,117,97,47,53,46,50,47,63,47,105,110,105,116,46,108,117,97,59,46,47,63,46,108,117,97,0,0,0,0,0,0,0,99,112,97,116,104,0,0,0,76,85,65,95,67,80,65,84,72,95,53,95,50,0,0,0,76,85,65,95,67,80,65,84,72,0,0,0,0,0,0,0,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,108,117,97,47,53,46,50,47,63,46,115,111,59,47,117,115,114,47,108,111,99,97,108,47,108,105,98,47,108,117,97,47,53,46,50,47,108,111,97,100,97,108,108,46,115,111,59,46,47,63,46,115,111,0,0,0,0,47,10,59,10,63,10,33,10,45,10,0,0,0,0,0,0,99,111,110,102,105,103,0,0,95,76,79,65,68,69,68,0,108,111,97,100,101,100,0,0,95,80,82,69,76,79,65,68,0,0,0,0,0,0,0,0,112,114,101,108,111,97,100,0,32,18,0,0,51,0,0,0,40,18,0,0,52,0,0,0,0,0,0,0,0,0,0,0,109,111,100,117,108,101,0,0,114,101,113,117,105,114,101,0,39,112,97,99,107,97,103,101,46,115,101,97,114,99,104,101,114,115,39,32,109,117,115,116,32,98,101,32,97,32,116,97,98,108,101,0,0,0,0,0,109,111,100,117,108,101,32,39,37,115,39,32,110,111,116,32,102,111,117,110,100,58,37,115,0,0,0,0,0,0,0,0,95,78,65,77,69,0,0,0,102,0,0,0,0,0,0,0,39,109,111,100,117,108,101,39,32,110,111,116,32,99,97,108,108,101,100,32,102,114,111,109,32,97,32,76,117,97,32,102,117,110,99,116,105,111,110,0,95,77,0,0,0,0,0,0,95,80,65,67,75,65,71,69,0,0,0,0,0,0,0,0,59,59,0,0,0,0,0,0,59,1,59,0,0,0,0,0,1,0,0,0,0,0,0,0,76,85,65,95,78,79,69,78,86,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,10,9,110,111,32,109,111,100,117,108,101,32,39,37,115,39,32,105,110,32,102,105,108,101,32,39,37,115,39,0,0,0,101,114,114,111,114,32,108,111,97,100,105,110,103,32,109,111,100,117,108,101,32,39,37,115,39,32,102,114,111,109,32,102,105,108,101,32,39,37,115,39,58,10,9,37,115,0,0,0,46,0,0,0,0,0,0,0,95,0,0,0,0,0,0,0,108,117,97,111,112,101,110,95,37,115,0,0,0,0,0,0,100,121,110,97,109,105,99,32,108,105,98,114,97,114,105,101,115,32,110,111,116,32,101,110,97,98,108,101,100,59,32,99,104,101,99,107,32,121,111,117,114,32,76,117,97,32,105,110,115,116,97,108,108,97,116,105,111,110,0,0,0,0,0,0,39,112,97,99,107,97,103,101,46,37,115,39,32,109,117,115,116,32,98,101,32,97,32,115,116,114,105,110,103,0,0,0,63,0,0,0,0,0,0,0,10,9,110,111,32,102,105,108,101,32,39,37,115,39,0,0,114,0,0,0,0,0,0,0,10,9,110,111,32,102,105,101,108,100,32,112,97,99,107,97,103,101,46,112,114,101,108,111,97,100,91,39,37,115,39,93,0,0,0,0,0,0,0,0,108,111,97,100,108,105,98,0,115,101,97,114,99,104,112,97,116,104,0,0,0,0,0,0,115,101,101,97,108,108,0,0,95,95,105,110,100,101,120,0,97,98,115,101,110,116,0,0,105,110,105,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,110,78,0,0,0,0,0,0,120,88,0,0,0,0,0,0,40,110,117,108,108,41,0,0,37,112,0,0,0,0,0,0,37,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,39,37,37,37,99,39,32,116,111,32,39,108,117,97,95,112,117,115,104,102,115,116,114,105,110,103,39,0,0,0,0,0,0,46,46,46,0,0,0,0,0,91,115,116,114,105,110,103,32,34,0,0,0,0,0,0,0,34,93,0,0,0,0,0,0,96,113,65,84,80,80,92,108,60,16,60,84,108,124,124,124,124,124,124,96,96,96,104,34,188,188,188,132,228,84,84,16,98,98,4,98,20,81,80,23,88,22,0,0,53,0,0,0,96,22,0,0,54,0,0,0,104,22,0,0,55,0,0,0,120,22,0,0,56,0,0,0,128,22,0,0,57,0,0,0,136,22,0,0,58,0,0,0,144,22,0,0,59,0,0,0,152,22,0,0,60,0,0,0,160,22,0,0,61,0,0,0,176,22,0,0,62,0,0,0,184,22,0,0,63,0,0,0,0,0,0,0,0,0,0,0,99,108,111,99,107,0,0,0,100,97,116,101,0,0,0,0,100,105,102,102,116,105,109,101,0,0,0,0,0,0,0,0,101,120,101,99,117,116,101,0,101,120,105,116,0,0,0,0,103,101,116,101,110,118,0,0,114,101,109,111,118,101,0,0,114,101,110,97,109,101,0,0,115,101,116,108,111,99,97,108,101,0,0,0,0,0,0,0,116,105,109,101,0,0,0,0,116,109,112,110,97,109,101,0,117,110,97,98,108,101,32,116,111,32,103,101,110,101,114,97,116,101,32,97,32,117,110,105,113,117,101,32,102,105,108,101,110,97,109,101,0,0,0,0,115,101,99,0,0,0,0,0,109,105,110,0,0,0,0,0,104,111,117,114,0,0,0,0,100,97,121,0,0,0,0,0,109,111,110,116,104,0,0,0,121,101,97,114,0,0,0,0,105,115,100,115,116,0,0,0,102,105,101,108,100,32,39,37,115,39,32,109,105,115,115,105,110,103,32,105,110,32,100,97,116,101,32,116,97,98,108,101,0,0,0,0,0,0,0,0,6,0,0,0,3,0,0,0,0,0,0,0,4,0,0,0,1,0,0,0,2,0,0,0,128,23,0,0,136,23,0,0,144,23,0,0,152,23,0,0,168,23,0,0,176,22,0,0,0,0,0,0,0,0,0,0,97,108,108,0,0,0,0,0,99,111,108,108,97,116,101,0,99,116,121,112,101,0,0,0,109,111,110,101,116,97,114,121,0,0,0,0,0,0,0,0,110,117,109,101,114,105,99,0,37,99,0,0,0,0,0,0,42,116,0,0,0,0,0,0,119,100,97,121,0,0,0,0,121,100,97,121,0,0,0,0,97,65,98,66,99,100,72,73,106,109,77,112,83,85,119,87,120,88,121,89,122,37,0,0,105,110,118,97,108,105,100,32,99,111,110,118,101,114,115,105,111,110,32,115,112,101,99,105,102,105,101,114,32,39,37,37,37,115,39,0,0,0,0,0,60,37,115,62,32,97,116,32,108,105,110,101,32,37,100,32,110,111,116,32,105,110,115,105,100,101,32,97,32,108,111,111,112,0,0,0,0,0,0,0,110,111,32,118,105,115,105,98,108,101,32,108,97,98,101,108,32,39,37,115,39,32,102,111,114,32,60,103,111,116,111,62,32,97,116,32,108,105,110,101,32,37,100,0,0,0,0,0,60,103,111,116,111,32,37,115,62,32,97,116,32,108,105,110,101,32,37,100,32,106,117,109,112,115,32,105,110,116,111,32,116,104,101,32,115,99,111,112,101,32,111,102,32,108,111,99,97,108,32,39,37,115,39,0,98,114,101,97,107,0,0,0,108,97,98,101,108,115,47,103,111,116,111,115,0,0,0,0,37,115,32,101,120,112,101,99,116,101,100,0,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,0,0,0,0,67,32,108,101,118,101,108,115,0,0,0,0,0,0,0,0,6,6,6,6,7,7,7,7,7,7,10,9,5,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,1,1,0,0,99,97,110,110,111,116,32,117,115,101,32,39,46,46,46,39,32,111,117,116,115,105,100,101,32,97,32,118,97,114,97,114,103,32,102,117,110,99,116,105,111,110,0,0,0,0,0,0,115,101,108,102,0,0,0,0,60,110,97,109,101,62,32,111,114,32,39,46,46,46,39,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,0,108,111,99,97,108,32,118,97,114,105,97,98,108,101,115,0,102,117,110,99,116,105,111,110,115,0,0,0,0,0,0,0,105,116,101,109,115,32,105,110,32,97,32,99,111,110,115,116,114,117,99,116,111,114,0,0,109,97,105,110,32,102,117,110,99,116,105,111,110,0,0,0,102,117,110,99,116,105,111,110,32,97,116,32,108,105,110,101,32,37,100,0,0,0,0,0,116,111,111,32,109,97,110,121,32,37,115,32,40,108,105,109,105,116,32,105,115,32,37,100,41,32,105,110,32,37,115,0,102,117,110,99,116,105,111,110,32,97,114,103,117,109,101,110,116,115,32,101,120,112,101,99,116,101,100,0,0,0,0,0,117,110,101,120,112,101,99,116,101,100,32,115,121,109,98,111,108,0,0,0,0,0,0,0,108,97,98,101,108,32,39,37,115,39,32,97,108,114,101,97,100,121,32,100,101,102,105,110,101,100,32,111,110,32,108,105,110,101,32,37,100,0,0,0,39,61,39,32,111,114,32,39,105,110,39,32,101,120,112,101,99,116,101,100,0,0,0,0,40,102,111,114,32,103,101,110,101,114,97,116,111,114,41,0,40,102,111,114,32,115,116,97,116,101,41,0,0,0,0,0,40,102,111,114,32,99,111,110,116,114,111,108,41,0,0,0,40,102,111,114,32,105,110,100,101,120,41,0,0,0,0,0,40,102,111,114,32,108,105,109,105,116,41,0,0,0,0,0,40,102,111,114,32,115,116,101,112,41,0,0,0,0,0,0,37,115,32,101,120,112,101,99,116,101,100,32,40,116,111,32,99,108,111,115,101,32,37,115,32,97,116,32,108,105,110,101,32,37,100,41,0,0,0,0,117,112,118,97,108,117,101,115,0,0,0,0,0,0,0,0,110,111,116,32,101,110,111,117,103,104,32,109,101,109,111,114,121,0,0,0,0,0,0,0,144,27,0,0,64,0,0,0,152,27,0,0,65,0,0,0,160,27,0,0,66,0,0,0,168,27,0,0,67,0,0,0,176,27,0,0,68,0,0,0,184,27,0,0,69,0,0,0,192,27,0,0,70,0,0,0,200,27,0,0,71,0,0,0,208,27,0,0,72,0,0,0,216,27,0,0,73,0,0,0,224,27,0,0,74,0,0,0,232,27,0,0,75,0,0,0,240,27,0,0,76,0,0,0,248,27,0,0,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,95,105,110,100,101,120,0,98,121,116,101,0,0,0,0,99,104,97,114,0,0,0,0,100,117,109,112,0,0,0,0,102,105,110,100,0,0,0,0,102,111,114,109,97,116,0,0,103,109,97,116,99,104,0,0,103,115,117,98,0,0,0,0,108,101,110,0,0,0,0,0,108,111,119,101,114,0,0,0,109,97,116,99,104,0,0,0,114,101,112,0,0,0,0,0,114,101,118,101,114,115,101,0,115,117,98,0,0,0,0,0,117,112,112,101,114,0,0,0,114,101,115,117,108,116,105,110,103,32,115,116,114,105,110,103,32,116,111,111,32,108,97,114,103,101,0,0,0,0,0,0,116,111,111,32,109,97,110,121,32,99,97,112,116,117,114,101,115,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,99,97,112,116,117,114,101,32,105,110,100,101,120,0,0,0,117,110,102,105,110,105,115,104,101,100,32,99,97,112,116,117,114,101,0,0,0,0,0,0,112,97,116,116,101,114,110,32,116,111,111,32,99,111,109,112,108,101,120,0,0,0,0,0,109,105,115,115,105,110,103,32,39,91,39,32,97,102,116,101,114,32,39,37,37,102,39,32,105,110,32,112,97,116,116,101,114,110,0,0,0,0,0,0,105,110,118,97,108,105,100,32,99,97,112,116,117,114,101,32,105,110,100,101,120,32,37,37,37,100,0,0,0,0,0,0,109,97,108,102,111,114,109,101,100,32,112,97,116,116,101,114,110,32,40,101,110,100,115,32,119,105,116,104,32,39,37,37,39,41,0,0,0,0,0,0,109,97,108,102,111,114,109,101,100,32,112,97,116,116,101,114,110,32,40,109,105,115,115,105,110,103,32,39,93,39,41,0,109,97,108,102,111,114,109,101,100,32,112,97,116,116,101,114,110,32,40,109,105,115,115,105,110,103,32,97,114,103,117,109,101,110,116,115,32,116,111,32,39,37,37,98,39,41,0,0,105,110,118,97,108,105,100,32,112,97,116,116,101,114,110,32,99,97,112,116,117,114,101,0,94,36,42,43,63,46,40,91,37,45,0,0,0,0,0,0,115,116,114,105,110,103,47,102,117,110,99,116,105,111,110,47,116,97,98,108,101,32,101,120,112,101,99,116,101,100,0,0,105,110,118,97,108,105,100,32,114,101,112,108,97,99,101,109,101,110,116,32,118,97,108,117,101,32,40,97,32,37,115,41,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,117,115,101,32,111,102,32,39,37,99,39,32,105,110,32,114,101,112,108,97,99,101,109,101,110,116,32,115,116,114,105,110,103,0,0,0,0,0,0,0,110,111,32,118,97,108,117,101,0,0,0,0,0,0,0,0,110,111,116,32,97,32,110,117,109,98,101,114,32,105,110,32,112,114,111,112,101,114,32,114,97,110,103,101,0,0,0,0,110,111,116,32,97,32,110,111,110,45,110,101,103,97,116,105,118,101,32,110,117,109,98,101,114,32,105,110,32,112,114,111,112,101,114,32,114,97,110,103,101,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,32,39,37,37,37,99,39,32,116,111,32,39,102,111,114,109,97,116,39,0,0,0,0,0,0,0,92,37,100,0,0,0,0,0,92,37,48,51,100,0,0,0,45,43,32,35,48,0,0,0,105,110,118,97,108,105,100,32,102,111,114,109,97,116,32,40,114,101,112,101,97,116,101,100,32,102,108,97,103,115,41,0,105,110,118,97,108,105,100,32,102,111,114,109,97,116,32,40,119,105,100,116,104,32,111,114,32,112,114,101,99,105,115,105,111,110,32,116,111,111,32,108,111,110,103,41,0,0,0,0,117,110,97,98,108,101,32,116,111,32,100,117,109,112,32,103,105,118,101,110,32,102,117,110,99,116,105,111,110,0,0,0,118,97,108,117,101,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,115,116,114,105,110,103,32,115,108,105,99,101,32,116,111,111,32,108,111,110,103,0,0,0,116,97,98,108,101,32,105,110,100,101,120,32,105,115,32,110,105,108,0,0,0,0,0,0,116,97,98,108,101,32,105,110,100,101,120,32,105,115,32,78,97,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,97,98,108,101,32,111,118,101,114,102,108,111,119,0,0,105,110,118,97,108,105,100,32,107,101,121,32,116,111,32,39,110,101,120,116,39,0,0,0,224,31,0,0,78,0,0,0,232,31,0,0,79,0,0,0,240,31,0,0,80,0,0,0,248,31,0,0,81,0,0,0,216,31,0,0,82,0,0,0,0,32,0,0,83,0,0,0,8,32,0,0,84,0,0,0,0,0,0,0,0,0,0,0,117,110,112,97,99,107,0,0,99,111,110,99,97,116,0,0,109,97,120,110,0,0,0,0,105,110,115,101,114,116,0,0,112,97,99,107,0,0,0,0,114,101,109,111,118,101,0,0,115,111,114,116,0,0,0,0,0,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,111,114,100,101,114,32,102,117,110,99,116,105,111,110,32,102,111,114,32,115,111,114,116,105,110,103,0,0,0,0,0,0,112,111,115,105,116,105,111,110,32,111,117,116,32,111,102,32,98,111,117,110,100,115,0,0,116,111,111,32,109,97,110,121,32,114,101,115,117,108,116,115,32,116,111,32,117,110,112,97,99,107,0,0,0,0,0,0,110,0,0,0,0,0,0,0,119,114,111,110,103,32,110,117,109,98,101,114,32,111,102,32,97,114,103,117,109,101,110,116,115,32,116,111,32,39,105,110,115,101,114,116,39,0,0,0,105,110,118,97,108,105,100,32,118,97,108,117,101,32,40,37,115,41,32,97,116,32,105,110,100,101,120,32,37,100,32,105,110,32,116,97,98,108,101,32,102,111,114,32,39,99,111,110,99,97,116,39,0,0,0,0,110,111,32,118,97,108,117,101,0,0,0,0,0,0,0,0,110,105,108,0,0,0,0,0,98,111,111,108,101,97,110,0,117,115,101,114,100,97,116,97,0,0,0,0,0,0,0,0,110,117,109,98,101,114,0,0,115,116,114,105,110,103,0,0,116,97,98,108,101,0,0,0,102,117,110,99,116,105,111,110,0,0,0,0,0,0,0,0,116,104,114,101,97,100,0,0,112,114,111,116,111,0,0,0,117,112,118,97,108,0,0,0,224,32,0,0,240,32,0,0,248,32,0,0,0,33,0,0,16,33,0,0,24,33,0,0,32,33,0,0,40,33,0,0,0,33,0,0,56,33,0,0,64,33,0,0,72,33,0,0,200,33,0,0,208,33,0,0,224,33,0,0,232,33,0,0,240,33,0,0,248,33,0,0,0,34,0,0,8,34,0,0,16,34,0,0,24,34,0,0,32,34,0,0,40,34,0,0,48,34,0,0,56,34,0,0,64,34,0,0,72,34,0,0,88,34,0,0,0,0,0,0,95,95,105,110,100,101,120,0,95,95,110,101,119,105,110,100,101,120,0,0,0,0,0,0,95,95,103,99,0,0,0,0,95,95,109,111,100,101,0,0,95,95,108,101,110,0,0,0,95,95,101,113,0,0,0,0,95,95,97,100,100,0,0,0,95,95,115,117,98,0,0,0,95,95,109,117,108,0,0,0,95,95,100,105,118,0,0,0,95,95,109,111,100,0,0,0,95,95,112,111,119,0,0,0,95,95,117,110,109,0,0,0,95,95,108,116,0,0,0,0,95,95,108,101,0,0,0,0,95,95,99,111,110,99,97,116,0,0,0,0,0,0,0,0,95,95,99,97,108,108,0,0,98,105,110,97,114,121,32,115,116,114,105,110,103,0,0,0,25,147,13,10,26,10,0,0,116,114,117,110,99,97,116,101,100,0,0,0,0,0,0,0,37,115,58,32,37,115,32,112,114,101,99,111,109,112,105,108,101,100,32,99,104,117,110,107,0,0,0,0,0,0,0,0,99,111,114,114,117,112,116,101,100,0,0,0,0,0,0,0,110,111,116,32,97,0,0,0,118,101,114,115,105,111,110,32,109,105,115,109,97,116,99,104,32,105,110,0,0,0,0,0,105,110,99,111,109,112,97,116,105,98,108,101,0,0,0,0,37,46,49,52,103,0,0,0,105,110,100,101,120,0,0,0,108,111,111,112,32,105,110,32,103,101,116,116,97,98,108,101,0,0,0,0,0,0,0,0,108,111,111,112,32,105,110,32,115,101,116,116,97,98,108,101,0,0,0,0,0,0,0,0,115,116,114,105,110,103,32,108,101,110,103,116,104,32,111,118,101,114,102,108,111,119,0,0,103,101,116,32,108,101,110,103,116,104,32,111,102,0,0,0,39,102,111,114,39,32,105,110,105,116,105,97,108,32,118,97,108,117,101,32,109,117,115,116,32,98,101,32,97,32,110,117,109,98,101,114,0,0,0,0,39,102,111,114,39,32,108,105,109,105,116,32,109,117,115,116,32,98,101,32,97,32,110,117,109,98,101,114,0,0,0,0,39,102,111,114,39,32,115,116,101,112,32,109,117,115,116,32,98,101,32,97,32,110,117,109,98,101,114,0,0,0,0,0,95,71,0,0,0,0,0,0,152,36,0,0,85,0,0,0,160,36,0,0,86,0,0,0,176,36,0,0,87,0,0,0,184,36,0,0,88,0,0,0,192,36,0,0,89,0,0,0,208,36,0,0,90,0,0,0,216,36,0,0,91,0,0,0,232,36,0,0,92,0,0,0,240,36,0,0,92,0,0,0,0,37,0,0,93,0,0,0,8,37,0,0,94,0,0,0,16,37,0,0,95,0,0,0,24,37,0,0,96,0,0,0,32,37,0,0,97,0,0,0,48,37,0,0,98,0,0,0,56,37,0,0,99,0,0,0,64,37,0,0,100,0,0,0,72,37,0,0,101,0,0,0,80,37,0,0,102,0,0,0,96,37,0,0,103,0,0,0,112,37,0,0,104,0,0,0,128,37,0,0,105,0,0,0,136,37,0,0,106,0,0,0,0,0,0,0,0,0,0,0,76,117,97,32,53,46,50,0,95,86,69,82,83,73,79,78,0,0,0,0,0,0,0,0,97,115,115,101,114,116,0,0,99,111,108,108,101,99,116,103,97,114,98,97,103,101,0,0,100,111,102,105,108,101,0,0,101,114,114,111,114,0,0,0,103,101,116,109,101,116,97,116,97,98,108,101,0,0,0,0,105,112,97,105,114,115,0,0,108,111,97,100,102,105,108,101,0,0,0,0,0,0,0,0,108,111,97,100,0,0,0,0,108,111,97,100,115,116,114,105,110,103,0,0,0,0,0,0,110,101,120,116,0,0,0,0,112,97,105,114,115,0,0,0,112,99,97,108,108,0,0,0,112,114,105,110,116,0,0,0,114,97,119,101,113,117,97,108,0,0,0,0,0,0,0,0,114,97,119,108,101,110,0,0,114,97,119,103,101,116,0,0,114,97,119,115,101,116,0,0,115,101,108,101,99,116,0,0,115,101,116,109,101,116,97,116,97,98,108,101,0,0,0,0,116,111,110,117,109,98,101,114,0,0,0,0,0,0,0,0,116,111,115,116,114,105,110,103,0,0,0,0,0,0,0,0,116,121,112,101,0,0,0,0,120,112,99,97,108,108,0,0,118,97,108,117,101,32,101,120,112,101,99,116,101,100,0,0,115,116,97,99,107,32,111,118,101,114,102,108,111,119,0,0,98,97,115,101,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,0,32,12,10,13,9,11,0,0,110,105,108,32,111,114,32,116,97,98,108,101,32,101,120,112,101,99,116,101,100,0,0,0,95,95,109,101,116,97,116,97,98,108,101,0,0,0,0,0,99,97,110,110,111,116,32,99,104,97,110,103,101,32,97,32,112,114,111,116,101,99,116,101,100,32,109,101,116,97,116,97,98,108,101,0,0,0,0,0,105,110,100,101,120,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,116,97,98,108,101,32,111,114,32,115,116,114,105,110,103,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,0,0,39,116,111,115,116,114,105,110,103,39,32,109,117,115,116,32,114,101,116,117,114,110,32,97,32,115,116,114,105,110,103,32,116,111,32,39,112,114,105,110,116,39,0,0,0,0,0,0,95,95,112,97,105,114,115,0,98,116,0,0,0,0,0,0,61,40,108,111,97,100,41,0,116,111,111,32,109,97,110,121,32,110,101,115,116,101,100,32,102,117,110,99,116,105,111,110,115,0,0,0,0,0,0,0,114,101,97,100,101,114,32,102,117,110,99,116,105,111,110,32,109,117,115,116,32,114,101,116,117,114,110,32,97,32,115,116,114,105,110,103,0,0,0,0,95,95,105,112,97,105,114,115,0,0,0,0,0,0,0,0,40,39,0,0,48,39,0,0,56,39,0,0,64,39,0,0,72,39,0,0,80,39,0,0,96,39,0,0,112,39,0,0,128,39,0,0,144,39,0,0,160,39,0,0,0,0,0,0,115,116,111,112,0,0,0,0,114,101,115,116,97,114,116,0,99,111,108,108,101,99,116,0,99,111,117,110,116,0,0,0,115,116,101,112,0,0,0,0,115,101,116,112,97,117,115,101,0,0,0,0,0,0,0,0,115,101,116,115,116,101,112,109,117,108,0,0,0,0,0,0,115,101,116,109,97,106,111,114,105,110,99,0,0,0,0,0,105,115,114,117,110,110,105,110,103,0,0,0,0,0,0,0,103,101,110,101,114,97,116,105,111,110,97,108,0,0,0,0,105,110,99,114,101,109,101,110,116,97,108,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,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,0,0,0,0,37,115,0,0,0,0,0,0,97,115,115,101,114,116,105,111,110,32,102,97,105,108,101,100,33,0,0,0,0,0,0,0,104,40,0,0,107], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE);
  1275. /* memory initializer */ allocate([112,40,0,0,108,0,0,0,120,40,0,0,109,0,0,0,128,40,0,0,110,0,0,0,136,40,0,0,111,0,0,0,144,40,0,0,112,0,0,0,152,40,0,0,113,0,0,0,160,40,0,0,114,0,0,0,168,40,0,0,115,0,0,0,176,40,0,0,116,0,0,0,184,40,0,0,117,0,0,0,192,40,0,0,118,0,0,0,0,0,0,0,0,0,0,0,97,114,115,104,105,102,116,0,98,97,110,100,0,0,0,0,98,110,111,116,0,0,0,0,98,111,114,0,0,0,0,0,98,120,111,114,0,0,0,0,98,116,101,115,116,0,0,0,101,120,116,114,97,99,116,0,108,114,111,116,97,116,101,0,108,115,104,105,102,116,0,0,114,101,112,108,97,99,101,0,114,114,111,116,97,116,101,0,114,115,104,105,102,116,0,0,102,105,101,108,100,32,99,97,110,110,111,116,32,98,101,32,110,101,103,97,116,105,118,101,0,0,0,0,0,0,0,0,119,105,100,116,104,32,109,117,115,116,32,98,101,32,112,111,115,105,116,105,118,101,0,0,116,114,121,105,110,103,32,116,111,32,97,99,99,101,115,115,32,110,111,110,45,101,120,105,115,116,101,110,116,32,98,105,116,115,0,0,0,0,0,0,102,117,110,99,116,105,111,110,32,111,114,32,101,120,112,114,101,115,115,105,111,110,32,116,111,111,32,99,111,109,112,108,101,120,0,0,0,0,0,0,99,111,110,115,116,114,117,99,116,111,114,32,116,111,111,32,108,111,110,103,0,0,0,0,99,111,110,115,116,97,110,116,115,0,0,0,0,0,0,0,111,112,99,111,100,101,115,0,99,111,110,116,114,111,108,32,115,116,114,117,99,116,117,114,101,32,116,111,111,32,108,111,110,103,0,0,0,0,0,0,216,41,0,0,119,0,0,0,224,41,0,0,120,0,0,0,232,41,0,0,121,0,0,0,240,41,0,0,122,0,0,0,248,41,0,0,123,0,0,0,0,42,0,0,124,0,0,0,0,0,0,0,0,0,0,0,99,114,101,97,116,101,0,0,114,101,115,117,109,101,0,0,114,117,110,110,105,110,103,0,115,116,97,116,117,115,0,0,119,114,97,112,0,0,0,0,121,105,101,108,100,0,0,0,116,111,111,32,109,97,110,121,32,97,114,103,117,109,101,110,116,115,32,116,111,32,114,101,115,117,109,101,0,0,0,0,99,97,110,110,111,116,32,114,101,115,117,109,101,32,100,101,97,100,32,99,111,114,111,117,116,105,110,101,0,0,0,0,116,111,111,32,109,97,110,121,32,114,101,115,117,108,116,115,32,116,111,32,114,101,115,117,109,101,0,0,0,0,0,0,99,111,114,111,117,116,105,110,101,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,115,117,115,112,101,110,100,101,100,0,0,0,0,0,0,0,110,111,114,109,97,108,0,0,100,101,97,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8,8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,22,22,22,22,22,22,22,22,22,22,4,4,4,4,4,4,4,21,21,21,21,21,21,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,5,4,21,21,21,21,21,21,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,44,0,0,125,0,0,0,56,44,0,0,126,0,0,0,72,44,0,0,127,0,0,0,80,44,0,0,128,0,0,0,88,44,0,0,129,0,0,0,104,44,0,0,130,0,0,0,120,44,0,0,131,0,0,0,136,44,0,0,132,0,0,0,152,44,0,0,133,0,0,0,168,44,0,0,134,0,0,0,184,44,0,0,135,0,0,0,200,44,0,0,136,0,0,0,208,44,0,0,137,0,0,0,224,44,0,0,138,0,0,0,240,44,0,0,139,0,0,0,0,45,0,0,140,0,0,0,0,0,0,0,0,0,0,0,100,101,98,117,103,0,0,0,103,101,116,117,115,101,114,118,97,108,117,101,0,0,0,0,103,101,116,104,111,111,107,0,103,101,116,105,110,102,111,0,103,101,116,108,111,99,97,108,0,0,0,0,0,0,0,0,103,101,116,114,101,103,105,115,116,114,121,0,0,0,0,0,103,101,116,109,101,116,97,116,97,98,108,101,0,0,0,0,103,101,116,117,112,118,97,108,117,101,0,0,0,0,0,0,117,112,118,97,108,117,101,106,111,105,110,0,0,0,0,0,117,112,118,97,108,117,101,105,100,0,0,0,0,0,0,0,115,101,116,117,115,101,114,118,97,108,117,101,0,0,0,0,115,101,116,104,111,111,107,0,115,101,116,108,111,99,97,108,0,0,0,0,0,0,0,0,115,101,116,109,101,116,97,116,97,98,108,101,0,0,0,0,115,101,116,117,112,118,97,108,117,101,0,0,0,0,0,0,116,114,97,99,101,98,97,99,107,0,0,0,0,0,0,0,110,105,108,32,111,114,32,116,97,98,108,101,32,101,120,112,101,99,116,101,100,0,0,0,108,101,118,101,108,32,111,117,116,32,111,102,32,114,97,110,103,101,0,0,0,0,0,0,95,72,75,69,89,0,0,0,107,0,0,0,0,0,0,0,95,95,109,111,100,101,0,0,112,45,0,0,120,45,0,0,128,45,0,0,136,45,0,0,144,45,0,0,0,0,0,0,99,97,108,108,0,0,0,0,114,101,116,117,114,110,0,0,108,105,110,101,0,0,0,0,99,111,117,110,116,0,0,0,116,97,105,108,32,99,97,108,108,0,0,0,0,0,0,0,102,117,108,108,32,117,115,101,114,100,97,116,97,32,101,120,112,101,99,116,101,100,44,32,103,111,116,32,108,105,103,104,116,32,117,115,101,114,100,97,116,97,0,0,0,0,0,0,62,117,0,0,0,0,0,0,105,110,118,97,108,105,100,32,117,112,118,97,108,117,101,32,105,110,100,101,120,0,0,0,76,117,97,32,102,117,110,99,116,105,111,110,32,101,120,112,101,99,116,101,100,0,0,0,102,108,110,83,116,117,0,0,62,37,115,0,0,0,0,0,102,117,110,99,116,105,111,110,32,111,114,32,108,101,118,101,108,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,105,110,118,97,108,105,100,32,111,112,116,105,111,110,0,0,115,111,117,114,99,101,0,0,115,104,111,114,116,95,115,114,99,0,0,0,0,0,0,0,108,105,110,101,100,101,102,105,110,101,100,0,0,0,0,0,108,97,115,116,108,105,110,101,100,101,102,105,110,101,100,0,119,104,97,116,0,0,0,0,99,117,114,114,101,110,116,108,105,110,101,0,0,0,0,0,110,117,112,115,0,0,0,0,110,112,97,114,97,109,115,0,105,115,118,97,114,97,114,103,0,0,0,0,0,0,0,0,110,97,109,101,0,0,0,0,110,97,109,101,119,104,97,116,0,0,0,0,0,0,0,0,105,115,116,97,105,108,99,97,108,108,0,0,0,0,0,0,97,99,116,105,118,101,108,105,110,101,115,0,0,0,0,0,102,117,110,99,0,0,0,0,101,120,116,101,114,110,97,108,32,104,111,111,107,0,0,0,108,117,97,95,100,101,98,117,103,62,32,0,0,0,0,0,99,111,110,116,10,0,0,0,61,40,100,101,98,117,103,32,99,111,109,109,97,110,100,41,0,0,0,0,0,0,0,0,37,115,10,0,0,0,0,0,80,49,0,0,88,49,0,0,96,49,0,0,104,49,0,0,112,49,0,0,120,49,0,0,128,49,0,0,136,49,0,0,144,49,0,0,160,49,0,0,168,49,0,0,176,49,0,0,184,49,0,0,192,49,0,0,200,49,0,0,208,49,0,0,216,49,0,0,224,49,0,0,232,49,0,0,240,49,0,0,248,49,0,0,0,50,0,0,8,50,0,0,16,50,0,0,24,50,0,0,32,50,0,0,40,50,0,0,48,50,0,0,56,50,0,0,64,50,0,0,72,50,0,0,88,50,0,0,96,50,0,0,0,0,0,0,39,37,99,39,0,0,0,0,99,104,97,114,40,37,100,41,0,0,0,0,0,0,0,0,39,37,115,39,0,0,0,0,95,69,78,86,0,0,0,0,105,110,118,97,108,105,100,32,108,111,110,103,32,115,116,114,105,110,103,32,100,101,108,105,109,105,116,101,114,0,0,0,46,0,0,0,0,0,0,0,69,101,0,0,0,0,0,0,88,120,0,0,0,0,0,0,80,112,0,0,0,0,0,0,43,45,0,0,0,0,0,0,109,97,108,102,111,114,109,101,100,32,110,117,109,98,101,114,0,0,0,0,0,0,0,0,108,101,120,105,99,97,108,32,101,108,101,109,101,110,116,32,116,111,111,32,108,111,110,103,0,0,0,0,0,0,0,0,117,110,102,105,110,105,115,104,101,100,32,115,116,114,105,110,103,0,0,0,0,0,0,0,105,110,118,97,108,105,100,32,101,115,99,97,112,101,32,115,101,113,117,101,110,99,101,0,100,101,99,105,109,97,108,32,101,115,99,97,112,101,32,116,111,111,32,108,97,114,103,101,0,0,0,0,0,0,0,0,104,101,120,97,100,101,99,105,109,97,108,32,100,105,103,105,116,32,101,120,112,101,99,116,101,100,0,0,0,0,0,0,117,110,102,105,110,105,115,104,101,100,32,108,111,110,103,32,115,116,114,105,110,103,0,0,117,110,102,105,110,105,115,104,101,100,32,108,111,110,103,32,99,111,109,109,101,110,116,0,99,104,117,110,107,32,104,97,115,32,116,111,111,32,109,97,110,121,32,108,105,110,101,115,0,0,0,0,0,0,0,0,37,115,58,37,100,58,32,37,115,0,0,0,0,0,0,0,37,115,32,110,101,97,114,32,37,115,0,0,0,0,0,0,97,110,100,0,0,0,0,0,98,114,101,97,107,0,0,0,100,111,0,0,0,0,0,0,101,108,115,101,0,0,0,0,101,108,115,101,105,102,0,0,101,110,100,0,0,0,0,0,102,97,108,115,101,0,0,0,102,111,114,0,0,0,0,0,102,117,110,99,116,105,111,110,0,0,0,0,0,0,0,0,103,111,116,111,0,0,0,0,105,102,0,0,0,0,0,0,105,110,0,0,0,0,0,0,108,111,99,97,108,0,0,0,110,105,108,0,0,0,0,0,110,111,116,0,0,0,0,0,111,114,0,0,0,0,0,0,114,101,112,101,97,116,0,0,114,101,116,117,114,110,0,0,116,104,101,110,0,0,0,0,116,114,117,101,0,0,0,0,117,110,116,105,108,0,0,0,119,104,105,108,101,0,0,0,46,46,0,0,0,0,0,0,46,46,46,0,0,0,0,0,61,61,0,0,0,0,0,0,62,61,0,0,0,0,0,0,60,61,0,0,0,0,0,0,126,61,0,0,0,0,0,0,58,58,0,0,0,0,0,0,60,101,111,102,62,0,0,0,60,110,117,109,98,101,114,62,0,0,0,0,0,0,0,0,60,110,97,109,101,62,0,0,60,115,116,114,105,110,103,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,110,102,105,110,105,116,121,0,0,0,0,0,0,0,0,110,97,110,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], "i8", ALLOC_NONE, Runtime.GLOBAL_BASE+10240);
  1276. var tempDoublePtr = Runtime.alignMemory(allocate(12, "i8", ALLOC_STATIC), 8);
  1277. assert(tempDoublePtr % 8 == 0);
  1278. function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much
  1279. HEAP8[tempDoublePtr] = HEAP8[ptr];
  1280. HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
  1281. HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
  1282. HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
  1283. }
  1284. function copyTempDouble(ptr) {
  1285. HEAP8[tempDoublePtr] = HEAP8[ptr];
  1286. HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];
  1287. HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];
  1288. HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];
  1289. HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];
  1290. HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];
  1291. HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];
  1292. HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];
  1293. }
  1294. Module["_rand_r"] = _rand_r;
  1295. var ___rand_seed=allocate([0x0273459b, 0, 0, 0], "i32", ALLOC_STATIC);
  1296. Module["_rand"] = _rand;
  1297. 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};
  1298. 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"};
  1299. var ___errno_state=0;function ___setErrNo(value) {
  1300. // For convenient setting and returning of errno.
  1301. HEAP32[((___errno_state)>>2)]=value;
  1302. return value;
  1303. }
  1304. var PATH={splitPath:function (filename) {
  1305. var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
  1306. return splitPathRe.exec(filename).slice(1);
  1307. },normalizeArray:function (parts, allowAboveRoot) {
  1308. // if the path tries to go above the root, `up` ends up > 0
  1309. var up = 0;
  1310. for (var i = parts.length - 1; i >= 0; i--) {
  1311. var last = parts[i];
  1312. if (last === '.') {
  1313. parts.splice(i, 1);
  1314. } else if (last === '..') {
  1315. parts.splice(i, 1);
  1316. up++;
  1317. } else if (up) {
  1318. parts.splice(i, 1);
  1319. up--;
  1320. }
  1321. }
  1322. // if the path is allowed to go above the root, restore leading ..s
  1323. if (allowAboveRoot) {
  1324. for (; up--; up) {
  1325. parts.unshift('..');
  1326. }
  1327. }
  1328. return parts;
  1329. },normalize:function (path) {
  1330. var isAbsolute = path.charAt(0) === '/',
  1331. trailingSlash = path.substr(-1) === '/';
  1332. // Normalize the path
  1333. path = PATH.normalizeArray(path.split('/').filter(function(p) {
  1334. return !!p;
  1335. }), !isAbsolute).join('/');
  1336. if (!path && !isAbsolute) {
  1337. path = '.';
  1338. }
  1339. if (path && trailingSlash) {
  1340. path += '/';
  1341. }
  1342. return (isAbsolute ? '/' : '') + path;
  1343. },dirname:function (path) {
  1344. var result = PATH.splitPath(path),
  1345. root = result[0],
  1346. dir = result[1];
  1347. if (!root && !dir) {
  1348. // No dirname whatsoever
  1349. return '.';
  1350. }
  1351. if (dir) {
  1352. // It has a dirname, strip trailing slash
  1353. dir = dir.substr(0, dir.length - 1);
  1354. }
  1355. return root + dir;
  1356. },basename:function (path) {
  1357. // EMSCRIPTEN return '/'' for '/', not an empty string
  1358. if (path === '/') return '/';
  1359. var lastSlash = path.lastIndexOf('/');
  1360. if (lastSlash === -1) return path;
  1361. return path.substr(lastSlash+1);
  1362. },extname:function (path) {
  1363. return PATH.splitPath(path)[3];
  1364. },join:function () {
  1365. var paths = Array.prototype.slice.call(arguments, 0);
  1366. return PATH.normalize(paths.join('/'));
  1367. },join2:function (l, r) {
  1368. return PATH.normalize(l + '/' + r);
  1369. },resolve:function () {
  1370. var resolvedPath = '',
  1371. resolvedAbsolute = false;
  1372. for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
  1373. var path = (i >= 0) ? arguments[i] : FS.cwd();
  1374. // Skip empty and invalid entries
  1375. if (typeof path !== 'string') {
  1376. throw new TypeError('Arguments to path.resolve must be strings');
  1377. } else if (!path) {
  1378. continue;
  1379. }
  1380. resolvedPath = path + '/' + resolvedPath;
  1381. resolvedAbsolute = path.charAt(0) === '/';
  1382. }
  1383. // At this point the path should be resolved to a full absolute path, but
  1384. // handle relative paths to be safe (might happen when process.cwd() fails)
  1385. resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {
  1386. return !!p;
  1387. }), !resolvedAbsolute).join('/');
  1388. return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
  1389. },relative:function (from, to) {
  1390. from = PATH.resolve(from).substr(1);
  1391. to = PATH.resolve(to).substr(1);
  1392. function trim(arr) {
  1393. var start = 0;
  1394. for (; start < arr.length; start++) {
  1395. if (arr[start] !== '') break;
  1396. }
  1397. var end = arr.length - 1;
  1398. for (; end >= 0; end--) {
  1399. if (arr[end] !== '') break;
  1400. }
  1401. if (start > end) return [];
  1402. return arr.slice(start, end - start + 1);
  1403. }
  1404. var fromParts = trim(from.split('/'));
  1405. var toParts = trim(to.split('/'));
  1406. var length = Math.min(fromParts.length, toParts.length);
  1407. var samePartsLength = length;
  1408. for (var i = 0; i < length; i++) {
  1409. if (fromParts[i] !== toParts[i]) {
  1410. samePartsLength = i;
  1411. break;
  1412. }
  1413. }
  1414. var outputParts = [];
  1415. for (var i = samePartsLength; i < fromParts.length; i++) {
  1416. outputParts.push('..');
  1417. }
  1418. outputParts = outputParts.concat(toParts.slice(samePartsLength));
  1419. return outputParts.join('/');
  1420. }};
  1421. var TTY={ttys:[],init:function () {
  1422. // https://github.com/kripken/emscripten/pull/1555
  1423. // if (ENVIRONMENT_IS_NODE) {
  1424. // // currently, FS.init does not distinguish if process.stdin is a file or TTY
  1425. // // device, it always assumes it's a TTY device. because of this, we're forcing
  1426. // // process.stdin to UTF8 encoding to at least make stdin reading compatible
  1427. // // with text files until FS.init can be refactored.
  1428. // process['stdin']['setEncoding']('utf8');
  1429. // }
  1430. },shutdown:function () {
  1431. // https://github.com/kripken/emscripten/pull/1555
  1432. // if (ENVIRONMENT_IS_NODE) {
  1433. // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
  1434. // // 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
  1435. // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?
  1436. // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
  1437. // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call
  1438. // process['stdin']['pause']();
  1439. // }
  1440. },register:function (dev, ops) {
  1441. TTY.ttys[dev] = { input: [], output: [], ops: ops };
  1442. FS.registerDevice(dev, TTY.stream_ops);
  1443. },stream_ops:{open:function (stream) {
  1444. var tty = TTY.ttys[stream.node.rdev];
  1445. if (!tty) {
  1446. throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
  1447. }
  1448. stream.tty = tty;
  1449. stream.seekable = false;
  1450. },close:function (stream) {
  1451. // flush any pending line data
  1452. if (stream.tty.output.length) {
  1453. stream.tty.ops.put_char(stream.tty, 10);
  1454. }
  1455. },read:function (stream, buffer, offset, length, pos /* ignored */) {
  1456. if (!stream.tty || !stream.tty.ops.get_char) {
  1457. throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
  1458. }
  1459. var bytesRead = 0;
  1460. for (var i = 0; i < length; i++) {
  1461. var result;
  1462. try {
  1463. result = stream.tty.ops.get_char(stream.tty);
  1464. } catch (e) {
  1465. throw new FS.ErrnoError(ERRNO_CODES.EIO);
  1466. }
  1467. if (result === undefined && bytesRead === 0) {
  1468. throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
  1469. }
  1470. if (result === null || result === undefined) break;
  1471. bytesRead++;
  1472. buffer[offset+i] = result;
  1473. }
  1474. if (bytesRead) {
  1475. stream.node.timestamp = Date.now();
  1476. }
  1477. return bytesRead;
  1478. },write:function (stream, buffer, offset, length, pos) {
  1479. if (!stream.tty || !stream.tty.ops.put_char) {
  1480. throw new FS.ErrnoError(ERRNO_CODES.ENXIO);
  1481. }
  1482. for (var i = 0; i < length; i++) {
  1483. try {
  1484. stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
  1485. } catch (e) {
  1486. throw new FS.ErrnoError(ERRNO_CODES.EIO);
  1487. }
  1488. }
  1489. if (length) {
  1490. stream.node.timestamp = Date.now();
  1491. }
  1492. return i;
  1493. }},default_tty_ops:{get_char:function (tty) {
  1494. if (!tty.input.length) {
  1495. var result = null;
  1496. if (ENVIRONMENT_IS_NODE) {
  1497. result = process['stdin']['read']();
  1498. if (!result) {
  1499. if (process['stdin']['_readableState'] && process['stdin']['_readableState']['ended']) {
  1500. return null; // EOF
  1501. }
  1502. return undefined; // no data available
  1503. }
  1504. } else if (typeof window != 'undefined' &&
  1505. typeof window.prompt == 'function') {
  1506. // Browser.
  1507. result = window.prompt('Input: '); // returns null on cancel
  1508. if (result !== null) {
  1509. result += '\n';
  1510. }
  1511. } else if (typeof readline == 'function') {
  1512. // Command line.
  1513. result = readline();
  1514. if (result !== null) {
  1515. result += '\n';
  1516. }
  1517. }
  1518. if (!result) {
  1519. return null;
  1520. }
  1521. tty.input = intArrayFromString(result, true);
  1522. }
  1523. return tty.input.shift();
  1524. },put_char:function (tty, val) {
  1525. if (val === null || val === 10) {
  1526. Module['print'](tty.output.join(''));
  1527. tty.output = [];
  1528. } else {
  1529. tty.output.push(TTY.utf8.processCChar(val));
  1530. }
  1531. }},default_tty1_ops:{put_char:function (tty, val) {
  1532. if (val === null || val === 10) {
  1533. Module['printErr'](tty.output.join(''));
  1534. tty.output = [];
  1535. } else {
  1536. tty.output.push(TTY.utf8.processCChar(val));
  1537. }
  1538. }}};
  1539. var MEMFS={ops_table:null,CONTENT_OWNING:1,CONTENT_FLEXIBLE:2,CONTENT_FIXED:3,mount:function (mount) {
  1540. return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
  1541. },createNode:function (parent, name, mode, dev) {
  1542. if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
  1543. // no supported
  1544. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  1545. }
  1546. if (!MEMFS.ops_table) {
  1547. MEMFS.ops_table = {
  1548. dir: {
  1549. node: {
  1550. getattr: MEMFS.node_ops.getattr,
  1551. setattr: MEMFS.node_ops.setattr,
  1552. lookup: MEMFS.node_ops.lookup,
  1553. mknod: MEMFS.node_ops.mknod,
  1554. rename: MEMFS.node_ops.rename,
  1555. unlink: MEMFS.node_ops.unlink,
  1556. rmdir: MEMFS.node_ops.rmdir,
  1557. readdir: MEMFS.node_ops.readdir,
  1558. symlink: MEMFS.node_ops.symlink
  1559. },
  1560. stream: {
  1561. llseek: MEMFS.stream_ops.llseek
  1562. }
  1563. },
  1564. file: {
  1565. node: {
  1566. getattr: MEMFS.node_ops.getattr,
  1567. setattr: MEMFS.node_ops.setattr
  1568. },
  1569. stream: {
  1570. llseek: MEMFS.stream_ops.llseek,
  1571. read: MEMFS.stream_ops.read,
  1572. write: MEMFS.stream_ops.write,
  1573. allocate: MEMFS.stream_ops.allocate,
  1574. mmap: MEMFS.stream_ops.mmap
  1575. }
  1576. },
  1577. link: {
  1578. node: {
  1579. getattr: MEMFS.node_ops.getattr,
  1580. setattr: MEMFS.node_ops.setattr,
  1581. readlink: MEMFS.node_ops.readlink
  1582. },
  1583. stream: {}
  1584. },
  1585. chrdev: {
  1586. node: {
  1587. getattr: MEMFS.node_ops.getattr,
  1588. setattr: MEMFS.node_ops.setattr
  1589. },
  1590. stream: FS.chrdev_stream_ops
  1591. },
  1592. };
  1593. }
  1594. var node = FS.createNode(parent, name, mode, dev);
  1595. if (FS.isDir(node.mode)) {
  1596. node.node_ops = MEMFS.ops_table.dir.node;
  1597. node.stream_ops = MEMFS.ops_table.dir.stream;
  1598. node.contents = {};
  1599. } else if (FS.isFile(node.mode)) {
  1600. node.node_ops = MEMFS.ops_table.file.node;
  1601. node.stream_ops = MEMFS.ops_table.file.stream;
  1602. node.contents = [];
  1603. node.contentMode = MEMFS.CONTENT_FLEXIBLE;
  1604. } else if (FS.isLink(node.mode)) {
  1605. node.node_ops = MEMFS.ops_table.link.node;
  1606. node.stream_ops = MEMFS.ops_table.link.stream;
  1607. } else if (FS.isChrdev(node.mode)) {
  1608. node.node_ops = MEMFS.ops_table.chrdev.node;
  1609. node.stream_ops = MEMFS.ops_table.chrdev.stream;
  1610. }
  1611. node.timestamp = Date.now();
  1612. // add the new node to the parent
  1613. if (parent) {
  1614. parent.contents[name] = node;
  1615. }
  1616. return node;
  1617. },ensureFlexible:function (node) {
  1618. if (node.contentMode !== MEMFS.CONTENT_FLEXIBLE) {
  1619. var contents = node.contents;
  1620. node.contents = Array.prototype.slice.call(contents);
  1621. node.contentMode = MEMFS.CONTENT_FLEXIBLE;
  1622. }
  1623. },node_ops:{getattr:function (node) {
  1624. var attr = {};
  1625. // device numbers reuse inode numbers.
  1626. attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
  1627. attr.ino = node.id;
  1628. attr.mode = node.mode;
  1629. attr.nlink = 1;
  1630. attr.uid = 0;
  1631. attr.gid = 0;
  1632. attr.rdev = node.rdev;
  1633. if (FS.isDir(node.mode)) {
  1634. attr.size = 4096;
  1635. } else if (FS.isFile(node.mode)) {
  1636. attr.size = node.contents.length;
  1637. } else if (FS.isLink(node.mode)) {
  1638. attr.size = node.link.length;
  1639. } else {
  1640. attr.size = 0;
  1641. }
  1642. attr.atime = new Date(node.timestamp);
  1643. attr.mtime = new Date(node.timestamp);
  1644. attr.ctime = new Date(node.timestamp);
  1645. // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
  1646. // but this is not required by the standard.
  1647. attr.blksize = 4096;
  1648. attr.blocks = Math.ceil(attr.size / attr.blksize);
  1649. return attr;
  1650. },setattr:function (node, attr) {
  1651. if (attr.mode !== undefined) {
  1652. node.mode = attr.mode;
  1653. }
  1654. if (attr.timestamp !== undefined) {
  1655. node.timestamp = attr.timestamp;
  1656. }
  1657. if (attr.size !== undefined) {
  1658. MEMFS.ensureFlexible(node);
  1659. var contents = node.contents;
  1660. if (attr.size < contents.length) contents.length = attr.size;
  1661. else while (attr.size > contents.length) contents.push(0);
  1662. }
  1663. },lookup:function (parent, name) {
  1664. throw FS.genericErrors[ERRNO_CODES.ENOENT];
  1665. },mknod:function (parent, name, mode, dev) {
  1666. return MEMFS.createNode(parent, name, mode, dev);
  1667. },rename:function (old_node, new_dir, new_name) {
  1668. // if we're overwriting a directory at new_name, make sure it's empty.
  1669. if (FS.isDir(old_node.mode)) {
  1670. var new_node;
  1671. try {
  1672. new_node = FS.lookupNode(new_dir, new_name);
  1673. } catch (e) {
  1674. }
  1675. if (new_node) {
  1676. for (var i in new_node.contents) {
  1677. throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
  1678. }
  1679. }
  1680. }
  1681. // do the internal rewiring
  1682. delete old_node.parent.contents[old_node.name];
  1683. old_node.name = new_name;
  1684. new_dir.contents[new_name] = old_node;
  1685. old_node.parent = new_dir;
  1686. },unlink:function (parent, name) {
  1687. delete parent.contents[name];
  1688. },rmdir:function (parent, name) {
  1689. var node = FS.lookupNode(parent, name);
  1690. for (var i in node.contents) {
  1691. throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
  1692. }
  1693. delete parent.contents[name];
  1694. },readdir:function (node) {
  1695. var entries = ['.', '..']
  1696. for (var key in node.contents) {
  1697. if (!node.contents.hasOwnProperty(key)) {
  1698. continue;
  1699. }
  1700. entries.push(key);
  1701. }
  1702. return entries;
  1703. },symlink:function (parent, newname, oldpath) {
  1704. var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);
  1705. node.link = oldpath;
  1706. return node;
  1707. },readlink:function (node) {
  1708. if (!FS.isLink(node.mode)) {
  1709. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  1710. }
  1711. return node.link;
  1712. }},stream_ops:{read:function (stream, buffer, offset, length, position) {
  1713. var contents = stream.node.contents;
  1714. if (position >= contents.length)
  1715. return 0;
  1716. var size = Math.min(contents.length - position, length);
  1717. assert(size >= 0);
  1718. if (size > 8 && contents.subarray) { // non-trivial, and typed array
  1719. buffer.set(contents.subarray(position, position + size), offset);
  1720. } else
  1721. {
  1722. for (var i = 0; i < size; i++) {
  1723. buffer[offset + i] = contents[position + i];
  1724. }
  1725. }
  1726. return size;
  1727. },write:function (stream, buffer, offset, length, position, canOwn) {
  1728. var node = stream.node;
  1729. node.timestamp = Date.now();
  1730. var contents = node.contents;
  1731. if (length && contents.length === 0 && position === 0 && buffer.subarray) {
  1732. // just replace it with the new data
  1733. if (canOwn && offset === 0) {
  1734. node.contents = buffer; // this could be a subarray of Emscripten HEAP, or allocated from some other source.
  1735. node.contentMode = (buffer.buffer === HEAP8.buffer) ? MEMFS.CONTENT_OWNING : MEMFS.CONTENT_FIXED;
  1736. } else {
  1737. node.contents = new Uint8Array(buffer.subarray(offset, offset+length));
  1738. node.contentMode = MEMFS.CONTENT_FIXED;
  1739. }
  1740. return length;
  1741. }
  1742. MEMFS.ensureFlexible(node);
  1743. var contents = node.contents;
  1744. while (contents.length < position) contents.push(0);
  1745. for (var i = 0; i < length; i++) {
  1746. contents[position + i] = buffer[offset + i];
  1747. }
  1748. return length;
  1749. },llseek:function (stream, offset, whence) {
  1750. var position = offset;
  1751. if (whence === 1) { // SEEK_CUR.
  1752. position += stream.position;
  1753. } else if (whence === 2) { // SEEK_END.
  1754. if (FS.isFile(stream.node.mode)) {
  1755. position += stream.node.contents.length;
  1756. }
  1757. }
  1758. if (position < 0) {
  1759. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  1760. }
  1761. stream.ungotten = [];
  1762. stream.position = position;
  1763. return position;
  1764. },allocate:function (stream, offset, length) {
  1765. MEMFS.ensureFlexible(stream.node);
  1766. var contents = stream.node.contents;
  1767. var limit = offset + length;
  1768. while (limit > contents.length) contents.push(0);
  1769. },mmap:function (stream, buffer, offset, length, position, prot, flags) {
  1770. if (!FS.isFile(stream.node.mode)) {
  1771. throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
  1772. }
  1773. var ptr;
  1774. var allocated;
  1775. var contents = stream.node.contents;
  1776. // Only make a new copy when MAP_PRIVATE is specified.
  1777. if ( !(flags & 2) &&
  1778. (contents.buffer === buffer || contents.buffer === buffer.buffer) ) {
  1779. // We can't emulate MAP_SHARED when the file is not backed by the buffer
  1780. // we're mapping to (e.g. the HEAP buffer).
  1781. allocated = false;
  1782. ptr = contents.byteOffset;
  1783. } else {
  1784. // Try to avoid unnecessary slices.
  1785. if (position > 0 || position + length < contents.length) {
  1786. if (contents.subarray) {
  1787. contents = contents.subarray(position, position + length);
  1788. } else {
  1789. contents = Array.prototype.slice.call(contents, position, position + length);
  1790. }
  1791. }
  1792. allocated = true;
  1793. ptr = _malloc(length);
  1794. if (!ptr) {
  1795. throw new FS.ErrnoError(ERRNO_CODES.ENOMEM);
  1796. }
  1797. buffer.set(contents, ptr);
  1798. }
  1799. return { ptr: ptr, allocated: allocated };
  1800. }}};
  1801. var IDBFS={dbs:{},indexedDB:function () {
  1802. return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
  1803. },DB_VERSION:21,DB_STORE_NAME:"FILE_DATA",mount:function (mount) {
  1804. // reuse all of the core MEMFS functionality
  1805. return MEMFS.mount.apply(null, arguments);
  1806. },syncfs:function (mount, populate, callback) {
  1807. IDBFS.getLocalSet(mount, function(err, local) {
  1808. if (err) return callback(err);
  1809. IDBFS.getRemoteSet(mount, function(err, remote) {
  1810. if (err) return callback(err);
  1811. var src = populate ? remote : local;
  1812. var dst = populate ? local : remote;
  1813. IDBFS.reconcile(src, dst, callback);
  1814. });
  1815. });
  1816. },getDB:function (name, callback) {
  1817. // check the cache first
  1818. var db = IDBFS.dbs[name];
  1819. if (db) {
  1820. return callback(null, db);
  1821. }
  1822. var req;
  1823. try {
  1824. req = IDBFS.indexedDB().open(name, IDBFS.DB_VERSION);
  1825. } catch (e) {
  1826. return callback(e);
  1827. }
  1828. req.onupgradeneeded = function(e) {
  1829. var db = e.target.result;
  1830. var transaction = e.target.transaction;
  1831. var fileStore;
  1832. if (db.objectStoreNames.contains(IDBFS.DB_STORE_NAME)) {
  1833. fileStore = transaction.objectStore(IDBFS.DB_STORE_NAME);
  1834. } else {
  1835. fileStore = db.createObjectStore(IDBFS.DB_STORE_NAME);
  1836. }
  1837. fileStore.createIndex('timestamp', 'timestamp', { unique: false });
  1838. };
  1839. req.onsuccess = function() {
  1840. db = req.result;
  1841. // add to the cache
  1842. IDBFS.dbs[name] = db;
  1843. callback(null, db);
  1844. };
  1845. req.onerror = function() {
  1846. callback(this.error);
  1847. };
  1848. },getLocalSet:function (mount, callback) {
  1849. var entries = {};
  1850. function isRealDir(p) {
  1851. return p !== '.' && p !== '..';
  1852. };
  1853. function toAbsolute(root) {
  1854. return function(p) {
  1855. return PATH.join2(root, p);
  1856. }
  1857. };
  1858. var check = FS.readdir(mount.mountpoint).filter(isRealDir).map(toAbsolute(mount.mountpoint));
  1859. while (check.length) {
  1860. var path = check.pop();
  1861. var stat;
  1862. try {
  1863. stat = FS.stat(path);
  1864. } catch (e) {
  1865. return callback(e);
  1866. }
  1867. if (FS.isDir(stat.mode)) {
  1868. check.push.apply(check, FS.readdir(path).filter(isRealDir).map(toAbsolute(path)));
  1869. }
  1870. entries[path] = { timestamp: stat.mtime };
  1871. }
  1872. return callback(null, { type: 'local', entries: entries });
  1873. },getRemoteSet:function (mount, callback) {
  1874. var entries = {};
  1875. IDBFS.getDB(mount.mountpoint, function(err, db) {
  1876. if (err) return callback(err);
  1877. var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readonly');
  1878. transaction.onerror = function() { callback(this.error); };
  1879. var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
  1880. var index = store.index('timestamp');
  1881. index.openKeyCursor().onsuccess = function(event) {
  1882. var cursor = event.target.result;
  1883. if (!cursor) {
  1884. return callback(null, { type: 'remote', db: db, entries: entries });
  1885. }
  1886. entries[cursor.primaryKey] = { timestamp: cursor.key };
  1887. cursor.continue();
  1888. };
  1889. });
  1890. },loadLocalEntry:function (path, callback) {
  1891. var stat, node;
  1892. try {
  1893. var lookup = FS.lookupPath(path);
  1894. node = lookup.node;
  1895. stat = FS.stat(path);
  1896. } catch (e) {
  1897. return callback(e);
  1898. }
  1899. if (FS.isDir(stat.mode)) {
  1900. return callback(null, { timestamp: stat.mtime, mode: stat.mode });
  1901. } else if (FS.isFile(stat.mode)) {
  1902. return callback(null, { timestamp: stat.mtime, mode: stat.mode, contents: node.contents });
  1903. } else {
  1904. return callback(new Error('node type not supported'));
  1905. }
  1906. },storeLocalEntry:function (path, entry, callback) {
  1907. try {
  1908. if (FS.isDir(entry.mode)) {
  1909. FS.mkdir(path, entry.mode);
  1910. } else if (FS.isFile(entry.mode)) {
  1911. FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true });
  1912. } else {
  1913. return callback(new Error('node type not supported'));
  1914. }
  1915. FS.utime(path, entry.timestamp, entry.timestamp);
  1916. } catch (e) {
  1917. return callback(e);
  1918. }
  1919. callback(null);
  1920. },removeLocalEntry:function (path, callback) {
  1921. try {
  1922. var lookup = FS.lookupPath(path);
  1923. var stat = FS.stat(path);
  1924. if (FS.isDir(stat.mode)) {
  1925. FS.rmdir(path);
  1926. } else if (FS.isFile(stat.mode)) {
  1927. FS.unlink(path);
  1928. }
  1929. } catch (e) {
  1930. return callback(e);
  1931. }
  1932. callback(null);
  1933. },loadRemoteEntry:function (store, path, callback) {
  1934. var req = store.get(path);
  1935. req.onsuccess = function(event) { callback(null, event.target.result); };
  1936. req.onerror = function() { callback(this.error); };
  1937. },storeRemoteEntry:function (store, path, entry, callback) {
  1938. var req = store.put(entry, path);
  1939. req.onsuccess = function() { callback(null); };
  1940. req.onerror = function() { callback(this.error); };
  1941. },removeRemoteEntry:function (store, path, callback) {
  1942. var req = store.delete(path);
  1943. req.onsuccess = function() { callback(null); };
  1944. req.onerror = function() { callback(this.error); };
  1945. },reconcile:function (src, dst, callback) {
  1946. var total = 0;
  1947. var create = [];
  1948. Object.keys(src.entries).forEach(function (key) {
  1949. var e = src.entries[key];
  1950. var e2 = dst.entries[key];
  1951. if (!e2 || e.timestamp > e2.timestamp) {
  1952. create.push(key);
  1953. total++;
  1954. }
  1955. });
  1956. var remove = [];
  1957. Object.keys(dst.entries).forEach(function (key) {
  1958. var e = dst.entries[key];
  1959. var e2 = src.entries[key];
  1960. if (!e2) {
  1961. remove.push(key);
  1962. total++;
  1963. }
  1964. });
  1965. if (!total) {
  1966. return callback(null);
  1967. }
  1968. var errored = false;
  1969. var completed = 0;
  1970. var db = src.type === 'remote' ? src.db : dst.db;
  1971. var transaction = db.transaction([IDBFS.DB_STORE_NAME], 'readwrite');
  1972. var store = transaction.objectStore(IDBFS.DB_STORE_NAME);
  1973. function done(err) {
  1974. if (err) {
  1975. if (!done.errored) {
  1976. done.errored = true;
  1977. return callback(err);
  1978. }
  1979. return;
  1980. }
  1981. if (++completed >= total) {
  1982. return callback(null);
  1983. }
  1984. };
  1985. transaction.onerror = function() { done(this.error); };
  1986. // sort paths in ascending order so directory entries are created
  1987. // before the files inside them
  1988. create.sort().forEach(function (path) {
  1989. if (dst.type === 'local') {
  1990. IDBFS.loadRemoteEntry(store, path, function (err, entry) {
  1991. if (err) return done(err);
  1992. IDBFS.storeLocalEntry(path, entry, done);
  1993. });
  1994. } else {
  1995. IDBFS.loadLocalEntry(path, function (err, entry) {
  1996. if (err) return done(err);
  1997. IDBFS.storeRemoteEntry(store, path, entry, done);
  1998. });
  1999. }
  2000. });
  2001. // sort paths in descending order so files are deleted before their
  2002. // parent directories
  2003. remove.sort().reverse().forEach(function(path) {
  2004. if (dst.type === 'local') {
  2005. IDBFS.removeLocalEntry(path, done);
  2006. } else {
  2007. IDBFS.removeRemoteEntry(store, path, done);
  2008. }
  2009. });
  2010. }};
  2011. var NODEFS={isWindows:false,staticInit:function () {
  2012. NODEFS.isWindows = !!process.platform.match(/^win/);
  2013. },mount:function (mount) {
  2014. assert(ENVIRONMENT_IS_NODE);
  2015. return NODEFS.createNode(null, '/', NODEFS.getMode(mount.opts.root), 0);
  2016. },createNode:function (parent, name, mode, dev) {
  2017. if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
  2018. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  2019. }
  2020. var node = FS.createNode(parent, name, mode);
  2021. node.node_ops = NODEFS.node_ops;
  2022. node.stream_ops = NODEFS.stream_ops;
  2023. return node;
  2024. },getMode:function (path) {
  2025. var stat;
  2026. try {
  2027. stat = fs.lstatSync(path);
  2028. if (NODEFS.isWindows) {
  2029. // On Windows, directories return permission bits 'rw-rw-rw-', even though they have 'rwxrwxrwx', so
  2030. // propagate write bits to execute bits.
  2031. stat.mode = stat.mode | ((stat.mode & 146) >> 1);
  2032. }
  2033. } catch (e) {
  2034. if (!e.code) throw e;
  2035. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2036. }
  2037. return stat.mode;
  2038. },realPath:function (node) {
  2039. var parts = [];
  2040. while (node.parent !== node) {
  2041. parts.push(node.name);
  2042. node = node.parent;
  2043. }
  2044. parts.push(node.mount.opts.root);
  2045. parts.reverse();
  2046. return PATH.join.apply(null, parts);
  2047. },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) {
  2048. if (flags in NODEFS.flagsToPermissionStringMap) {
  2049. return NODEFS.flagsToPermissionStringMap[flags];
  2050. } else {
  2051. return flags;
  2052. }
  2053. },node_ops:{getattr:function (node) {
  2054. var path = NODEFS.realPath(node);
  2055. var stat;
  2056. try {
  2057. stat = fs.lstatSync(path);
  2058. } catch (e) {
  2059. if (!e.code) throw e;
  2060. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2061. }
  2062. // node.js v0.10.20 doesn't report blksize and blocks on Windows. Fake them with default blksize of 4096.
  2063. // See http://support.microsoft.com/kb/140365
  2064. if (NODEFS.isWindows && !stat.blksize) {
  2065. stat.blksize = 4096;
  2066. }
  2067. if (NODEFS.isWindows && !stat.blocks) {
  2068. stat.blocks = (stat.size+stat.blksize-1)/stat.blksize|0;
  2069. }
  2070. return {
  2071. dev: stat.dev,
  2072. ino: stat.ino,
  2073. mode: stat.mode,
  2074. nlink: stat.nlink,
  2075. uid: stat.uid,
  2076. gid: stat.gid,
  2077. rdev: stat.rdev,
  2078. size: stat.size,
  2079. atime: stat.atime,
  2080. mtime: stat.mtime,
  2081. ctime: stat.ctime,
  2082. blksize: stat.blksize,
  2083. blocks: stat.blocks
  2084. };
  2085. },setattr:function (node, attr) {
  2086. var path = NODEFS.realPath(node);
  2087. try {
  2088. if (attr.mode !== undefined) {
  2089. fs.chmodSync(path, attr.mode);
  2090. // update the common node structure mode as well
  2091. node.mode = attr.mode;
  2092. }
  2093. if (attr.timestamp !== undefined) {
  2094. var date = new Date(attr.timestamp);
  2095. fs.utimesSync(path, date, date);
  2096. }
  2097. if (attr.size !== undefined) {
  2098. fs.truncateSync(path, attr.size);
  2099. }
  2100. } catch (e) {
  2101. if (!e.code) throw e;
  2102. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2103. }
  2104. },lookup:function (parent, name) {
  2105. var path = PATH.join2(NODEFS.realPath(parent), name);
  2106. var mode = NODEFS.getMode(path);
  2107. return NODEFS.createNode(parent, name, mode);
  2108. },mknod:function (parent, name, mode, dev) {
  2109. var node = NODEFS.createNode(parent, name, mode, dev);
  2110. // create the backing node for this in the fs root as well
  2111. var path = NODEFS.realPath(node);
  2112. try {
  2113. if (FS.isDir(node.mode)) {
  2114. fs.mkdirSync(path, node.mode);
  2115. } else {
  2116. fs.writeFileSync(path, '', { mode: node.mode });
  2117. }
  2118. } catch (e) {
  2119. if (!e.code) throw e;
  2120. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2121. }
  2122. return node;
  2123. },rename:function (oldNode, newDir, newName) {
  2124. var oldPath = NODEFS.realPath(oldNode);
  2125. var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
  2126. try {
  2127. fs.renameSync(oldPath, newPath);
  2128. } catch (e) {
  2129. if (!e.code) throw e;
  2130. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2131. }
  2132. },unlink:function (parent, name) {
  2133. var path = PATH.join2(NODEFS.realPath(parent), name);
  2134. try {
  2135. fs.unlinkSync(path);
  2136. } catch (e) {
  2137. if (!e.code) throw e;
  2138. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2139. }
  2140. },rmdir:function (parent, name) {
  2141. var path = PATH.join2(NODEFS.realPath(parent), name);
  2142. try {
  2143. fs.rmdirSync(path);
  2144. } catch (e) {
  2145. if (!e.code) throw e;
  2146. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2147. }
  2148. },readdir:function (node) {
  2149. var path = NODEFS.realPath(node);
  2150. try {
  2151. return fs.readdirSync(path);
  2152. } catch (e) {
  2153. if (!e.code) throw e;
  2154. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2155. }
  2156. },symlink:function (parent, newName, oldPath) {
  2157. var newPath = PATH.join2(NODEFS.realPath(parent), newName);
  2158. try {
  2159. fs.symlinkSync(oldPath, newPath);
  2160. } catch (e) {
  2161. if (!e.code) throw e;
  2162. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2163. }
  2164. },readlink:function (node) {
  2165. var path = NODEFS.realPath(node);
  2166. try {
  2167. return fs.readlinkSync(path);
  2168. } catch (e) {
  2169. if (!e.code) throw e;
  2170. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2171. }
  2172. }},stream_ops:{open:function (stream) {
  2173. var path = NODEFS.realPath(stream.node);
  2174. try {
  2175. if (FS.isFile(stream.node.mode)) {
  2176. stream.nfd = fs.openSync(path, NODEFS.flagsToPermissionString(stream.flags));
  2177. }
  2178. } catch (e) {
  2179. if (!e.code) throw e;
  2180. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2181. }
  2182. },close:function (stream) {
  2183. try {
  2184. if (FS.isFile(stream.node.mode) && stream.nfd) {
  2185. fs.closeSync(stream.nfd);
  2186. }
  2187. } catch (e) {
  2188. if (!e.code) throw e;
  2189. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2190. }
  2191. },read:function (stream, buffer, offset, length, position) {
  2192. // FIXME this is terrible.
  2193. var nbuffer = new Buffer(length);
  2194. var res;
  2195. try {
  2196. res = fs.readSync(stream.nfd, nbuffer, 0, length, position);
  2197. } catch (e) {
  2198. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2199. }
  2200. if (res > 0) {
  2201. for (var i = 0; i < res; i++) {
  2202. buffer[offset + i] = nbuffer[i];
  2203. }
  2204. }
  2205. return res;
  2206. },write:function (stream, buffer, offset, length, position) {
  2207. // FIXME this is terrible.
  2208. var nbuffer = new Buffer(buffer.subarray(offset, offset + length));
  2209. var res;
  2210. try {
  2211. res = fs.writeSync(stream.nfd, nbuffer, 0, length, position);
  2212. } catch (e) {
  2213. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2214. }
  2215. return res;
  2216. },llseek:function (stream, offset, whence) {
  2217. var position = offset;
  2218. if (whence === 1) { // SEEK_CUR.
  2219. position += stream.position;
  2220. } else if (whence === 2) { // SEEK_END.
  2221. if (FS.isFile(stream.node.mode)) {
  2222. try {
  2223. var stat = fs.fstatSync(stream.nfd);
  2224. position += stat.size;
  2225. } catch (e) {
  2226. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  2227. }
  2228. }
  2229. }
  2230. if (position < 0) {
  2231. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  2232. }
  2233. stream.position = position;
  2234. return position;
  2235. }}};
  2236. var _stdin=allocate(1, "i32*", ALLOC_STATIC);
  2237. var _stdout=allocate(1, "i32*", ALLOC_STATIC);
  2238. var _stderr=allocate(1, "i32*", ALLOC_STATIC);
  2239. function _fflush(stream) {
  2240. // int fflush(FILE *stream);
  2241. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fflush.html
  2242. // we don't currently perform any user-space buffering of data
  2243. }var FS={root:null,mounts:[],devices:[null],streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},handleFSError:function (e) {
  2244. if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();
  2245. return ___setErrNo(e.errno);
  2246. },lookupPath:function (path, opts) {
  2247. path = PATH.resolve(FS.cwd(), path);
  2248. opts = opts || {};
  2249. var defaults = {
  2250. follow_mount: true,
  2251. recurse_count: 0
  2252. };
  2253. for (var key in defaults) {
  2254. if (opts[key] === undefined) {
  2255. opts[key] = defaults[key];
  2256. }
  2257. }
  2258. if (opts.recurse_count > 8) { // max recursive lookup of 8
  2259. throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
  2260. }
  2261. // split the path
  2262. var parts = PATH.normalizeArray(path.split('/').filter(function(p) {
  2263. return !!p;
  2264. }), false);
  2265. // start at the root
  2266. var current = FS.root;
  2267. var current_path = '/';
  2268. for (var i = 0; i < parts.length; i++) {
  2269. var islast = (i === parts.length-1);
  2270. if (islast && opts.parent) {
  2271. // stop resolving
  2272. break;
  2273. }
  2274. current = FS.lookupNode(current, parts[i]);
  2275. current_path = PATH.join2(current_path, parts[i]);
  2276. // jump to the mount's root node if this is a mountpoint
  2277. if (FS.isMountpoint(current)) {
  2278. if (!islast || (islast && opts.follow_mount)) {
  2279. current = current.mounted.root;
  2280. }
  2281. }
  2282. // by default, lookupPath will not follow a symlink if it is the final path component.
  2283. // setting opts.follow = true will override this behavior.
  2284. if (!islast || opts.follow) {
  2285. var count = 0;
  2286. while (FS.isLink(current.mode)) {
  2287. var link = FS.readlink(current_path);
  2288. current_path = PATH.resolve(PATH.dirname(current_path), link);
  2289. var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });
  2290. current = lookup.node;
  2291. if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
  2292. throw new FS.ErrnoError(ERRNO_CODES.ELOOP);
  2293. }
  2294. }
  2295. }
  2296. }
  2297. return { path: current_path, node: current };
  2298. },getPath:function (node) {
  2299. var path;
  2300. while (true) {
  2301. if (FS.isRoot(node)) {
  2302. var mount = node.mount.mountpoint;
  2303. if (!path) return mount;
  2304. return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;
  2305. }
  2306. path = path ? node.name + '/' + path : node.name;
  2307. node = node.parent;
  2308. }
  2309. },hashName:function (parentid, name) {
  2310. var hash = 0;
  2311. for (var i = 0; i < name.length; i++) {
  2312. hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
  2313. }
  2314. return ((parentid + hash) >>> 0) % FS.nameTable.length;
  2315. },hashAddNode:function (node) {
  2316. var hash = FS.hashName(node.parent.id, node.name);
  2317. node.name_next = FS.nameTable[hash];
  2318. FS.nameTable[hash] = node;
  2319. },hashRemoveNode:function (node) {
  2320. var hash = FS.hashName(node.parent.id, node.name);
  2321. if (FS.nameTable[hash] === node) {
  2322. FS.nameTable[hash] = node.name_next;
  2323. } else {
  2324. var current = FS.nameTable[hash];
  2325. while (current) {
  2326. if (current.name_next === node) {
  2327. current.name_next = node.name_next;
  2328. break;
  2329. }
  2330. current = current.name_next;
  2331. }
  2332. }
  2333. },lookupNode:function (parent, name) {
  2334. var err = FS.mayLookup(parent);
  2335. if (err) {
  2336. throw new FS.ErrnoError(err);
  2337. }
  2338. var hash = FS.hashName(parent.id, name);
  2339. for (var node = FS.nameTable[hash]; node; node = node.name_next) {
  2340. var nodeName = node.name;
  2341. if (node.parent.id === parent.id && nodeName === name) {
  2342. return node;
  2343. }
  2344. }
  2345. // if we failed to find it in the cache, call into the VFS
  2346. return FS.lookup(parent, name);
  2347. },createNode:function (parent, name, mode, rdev) {
  2348. if (!FS.FSNode) {
  2349. FS.FSNode = function(parent, name, mode, rdev) {
  2350. if (!parent) {
  2351. parent = this; // root node sets parent to itself
  2352. }
  2353. this.parent = parent;
  2354. this.mount = parent.mount;
  2355. this.mounted = null;
  2356. this.id = FS.nextInode++;
  2357. this.name = name;
  2358. this.mode = mode;
  2359. this.node_ops = {};
  2360. this.stream_ops = {};
  2361. this.rdev = rdev;
  2362. };
  2363. FS.FSNode.prototype = {};
  2364. // compatibility
  2365. var readMode = 292 | 73;
  2366. var writeMode = 146;
  2367. // NOTE we must use Object.defineProperties instead of individual calls to
  2368. // Object.defineProperty in order to make closure compiler happy
  2369. Object.defineProperties(FS.FSNode.prototype, {
  2370. read: {
  2371. get: function() { return (this.mode & readMode) === readMode; },
  2372. set: function(val) { val ? this.mode |= readMode : this.mode &= ~readMode; }
  2373. },
  2374. write: {
  2375. get: function() { return (this.mode & writeMode) === writeMode; },
  2376. set: function(val) { val ? this.mode |= writeMode : this.mode &= ~writeMode; }
  2377. },
  2378. isFolder: {
  2379. get: function() { return FS.isDir(this.mode); },
  2380. },
  2381. isDevice: {
  2382. get: function() { return FS.isChrdev(this.mode); },
  2383. },
  2384. });
  2385. }
  2386. var node = new FS.FSNode(parent, name, mode, rdev);
  2387. FS.hashAddNode(node);
  2388. return node;
  2389. },destroyNode:function (node) {
  2390. FS.hashRemoveNode(node);
  2391. },isRoot:function (node) {
  2392. return node === node.parent;
  2393. },isMountpoint:function (node) {
  2394. return !!node.mounted;
  2395. },isFile:function (mode) {
  2396. return (mode & 61440) === 32768;
  2397. },isDir:function (mode) {
  2398. return (mode & 61440) === 16384;
  2399. },isLink:function (mode) {
  2400. return (mode & 61440) === 40960;
  2401. },isChrdev:function (mode) {
  2402. return (mode & 61440) === 8192;
  2403. },isBlkdev:function (mode) {
  2404. return (mode & 61440) === 24576;
  2405. },isFIFO:function (mode) {
  2406. return (mode & 61440) === 4096;
  2407. },isSocket:function (mode) {
  2408. return (mode & 49152) === 49152;
  2409. },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) {
  2410. var flags = FS.flagModes[str];
  2411. if (typeof flags === 'undefined') {
  2412. throw new Error('Unknown file open mode: ' + str);
  2413. }
  2414. return flags;
  2415. },flagsToPermissionString:function (flag) {
  2416. var accmode = flag & 2097155;
  2417. var perms = ['r', 'w', 'rw'][accmode];
  2418. if ((flag & 512)) {
  2419. perms += 'w';
  2420. }
  2421. return perms;
  2422. },nodePermissions:function (node, perms) {
  2423. if (FS.ignorePermissions) {
  2424. return 0;
  2425. }
  2426. // return 0 if any user, group or owner bits are set.
  2427. if (perms.indexOf('r') !== -1 && !(node.mode & 292)) {
  2428. return ERRNO_CODES.EACCES;
  2429. } else if (perms.indexOf('w') !== -1 && !(node.mode & 146)) {
  2430. return ERRNO_CODES.EACCES;
  2431. } else if (perms.indexOf('x') !== -1 && !(node.mode & 73)) {
  2432. return ERRNO_CODES.EACCES;
  2433. }
  2434. return 0;
  2435. },mayLookup:function (dir) {
  2436. return FS.nodePermissions(dir, 'x');
  2437. },mayCreate:function (dir, name) {
  2438. try {
  2439. var node = FS.lookupNode(dir, name);
  2440. return ERRNO_CODES.EEXIST;
  2441. } catch (e) {
  2442. }
  2443. return FS.nodePermissions(dir, 'wx');
  2444. },mayDelete:function (dir, name, isdir) {
  2445. var node;
  2446. try {
  2447. node = FS.lookupNode(dir, name);
  2448. } catch (e) {
  2449. return e.errno;
  2450. }
  2451. var err = FS.nodePermissions(dir, 'wx');
  2452. if (err) {
  2453. return err;
  2454. }
  2455. if (isdir) {
  2456. if (!FS.isDir(node.mode)) {
  2457. return ERRNO_CODES.ENOTDIR;
  2458. }
  2459. if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
  2460. return ERRNO_CODES.EBUSY;
  2461. }
  2462. } else {
  2463. if (FS.isDir(node.mode)) {
  2464. return ERRNO_CODES.EISDIR;
  2465. }
  2466. }
  2467. return 0;
  2468. },mayOpen:function (node, flags) {
  2469. if (!node) {
  2470. return ERRNO_CODES.ENOENT;
  2471. }
  2472. if (FS.isLink(node.mode)) {
  2473. return ERRNO_CODES.ELOOP;
  2474. } else if (FS.isDir(node.mode)) {
  2475. if ((flags & 2097155) !== 0 || // opening for write
  2476. (flags & 512)) {
  2477. return ERRNO_CODES.EISDIR;
  2478. }
  2479. }
  2480. return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
  2481. },MAX_OPEN_FDS:4096,nextfd:function (fd_start, fd_end) {
  2482. fd_start = fd_start || 0;
  2483. fd_end = fd_end || FS.MAX_OPEN_FDS;
  2484. for (var fd = fd_start; fd <= fd_end; fd++) {
  2485. if (!FS.streams[fd]) {
  2486. return fd;
  2487. }
  2488. }
  2489. throw new FS.ErrnoError(ERRNO_CODES.EMFILE);
  2490. },getStream:function (fd) {
  2491. return FS.streams[fd];
  2492. },createStream:function (stream, fd_start, fd_end) {
  2493. if (!FS.FSStream) {
  2494. FS.FSStream = function(){};
  2495. FS.FSStream.prototype = {};
  2496. // compatibility
  2497. Object.defineProperties(FS.FSStream.prototype, {
  2498. object: {
  2499. get: function() { return this.node; },
  2500. set: function(val) { this.node = val; }
  2501. },
  2502. isRead: {
  2503. get: function() { return (this.flags & 2097155) !== 1; }
  2504. },
  2505. isWrite: {
  2506. get: function() { return (this.flags & 2097155) !== 0; }
  2507. },
  2508. isAppend: {
  2509. get: function() { return (this.flags & 1024); }
  2510. }
  2511. });
  2512. }
  2513. if (0) {
  2514. // reuse the object
  2515. stream.__proto__ = FS.FSStream.prototype;
  2516. } else {
  2517. var newStream = new FS.FSStream();
  2518. for (var p in stream) {
  2519. newStream[p] = stream[p];
  2520. }
  2521. stream = newStream;
  2522. }
  2523. var fd = FS.nextfd(fd_start, fd_end);
  2524. stream.fd = fd;
  2525. FS.streams[fd] = stream;
  2526. return stream;
  2527. },closeStream:function (fd) {
  2528. FS.streams[fd] = null;
  2529. },getStreamFromPtr:function (ptr) {
  2530. return FS.streams[ptr - 1];
  2531. },getPtrForStream:function (stream) {
  2532. return stream ? stream.fd + 1 : 0;
  2533. },chrdev_stream_ops:{open:function (stream) {
  2534. var device = FS.getDevice(stream.node.rdev);
  2535. // override node's stream ops with the device's
  2536. stream.stream_ops = device.stream_ops;
  2537. // forward the open call
  2538. if (stream.stream_ops.open) {
  2539. stream.stream_ops.open(stream);
  2540. }
  2541. },llseek:function () {
  2542. throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
  2543. }},major:function (dev) {
  2544. return ((dev) >> 8);
  2545. },minor:function (dev) {
  2546. return ((dev) & 0xff);
  2547. },makedev:function (ma, mi) {
  2548. return ((ma) << 8 | (mi));
  2549. },registerDevice:function (dev, ops) {
  2550. FS.devices[dev] = { stream_ops: ops };
  2551. },getDevice:function (dev) {
  2552. return FS.devices[dev];
  2553. },getMounts:function (mount) {
  2554. var mounts = [];
  2555. var check = [mount];
  2556. while (check.length) {
  2557. var m = check.pop();
  2558. mounts.push(m);
  2559. check.push.apply(check, m.mounts);
  2560. }
  2561. return mounts;
  2562. },syncfs:function (populate, callback) {
  2563. if (typeof(populate) === 'function') {
  2564. callback = populate;
  2565. populate = false;
  2566. }
  2567. var mounts = FS.getMounts(FS.root.mount);
  2568. var completed = 0;
  2569. function done(err) {
  2570. if (err) {
  2571. if (!done.errored) {
  2572. done.errored = true;
  2573. return callback(err);
  2574. }
  2575. return;
  2576. }
  2577. if (++completed >= mounts.length) {
  2578. callback(null);
  2579. }
  2580. };
  2581. // sync all mounts
  2582. mounts.forEach(function (mount) {
  2583. if (!mount.type.syncfs) {
  2584. return done(null);
  2585. }
  2586. mount.type.syncfs(mount, populate, done);
  2587. });
  2588. },mount:function (type, opts, mountpoint) {
  2589. var root = mountpoint === '/';
  2590. var pseudo = !mountpoint;
  2591. var node;
  2592. if (root && FS.root) {
  2593. throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
  2594. } else if (!root && !pseudo) {
  2595. var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
  2596. mountpoint = lookup.path; // use the absolute path
  2597. node = lookup.node;
  2598. if (FS.isMountpoint(node)) {
  2599. throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
  2600. }
  2601. if (!FS.isDir(node.mode)) {
  2602. throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
  2603. }
  2604. }
  2605. var mount = {
  2606. type: type,
  2607. opts: opts,
  2608. mountpoint: mountpoint,
  2609. mounts: []
  2610. };
  2611. // create a root node for the fs
  2612. var mountRoot = type.mount(mount);
  2613. mountRoot.mount = mount;
  2614. mount.root = mountRoot;
  2615. if (root) {
  2616. FS.root = mountRoot;
  2617. } else if (node) {
  2618. // set as a mountpoint
  2619. node.mounted = mount;
  2620. // add the new mount to the current mount's children
  2621. if (node.mount) {
  2622. node.mount.mounts.push(mount);
  2623. }
  2624. }
  2625. return mountRoot;
  2626. },unmount:function (mountpoint) {
  2627. var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
  2628. if (!FS.isMountpoint(lookup.node)) {
  2629. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  2630. }
  2631. // destroy the nodes for this mount, and all its child mounts
  2632. var node = lookup.node;
  2633. var mount = node.mounted;
  2634. var mounts = FS.getMounts(mount);
  2635. Object.keys(FS.nameTable).forEach(function (hash) {
  2636. var current = FS.nameTable[hash];
  2637. while (current) {
  2638. var next = current.name_next;
  2639. if (mounts.indexOf(current.mount) !== -1) {
  2640. FS.destroyNode(current);
  2641. }
  2642. current = next;
  2643. }
  2644. });
  2645. // no longer a mountpoint
  2646. node.mounted = null;
  2647. // remove this mount from the child mounts
  2648. var idx = node.mount.mounts.indexOf(mount);
  2649. assert(idx !== -1);
  2650. node.mount.mounts.splice(idx, 1);
  2651. },lookup:function (parent, name) {
  2652. return parent.node_ops.lookup(parent, name);
  2653. },mknod:function (path, mode, dev) {
  2654. var lookup = FS.lookupPath(path, { parent: true });
  2655. var parent = lookup.node;
  2656. var name = PATH.basename(path);
  2657. var err = FS.mayCreate(parent, name);
  2658. if (err) {
  2659. throw new FS.ErrnoError(err);
  2660. }
  2661. if (!parent.node_ops.mknod) {
  2662. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  2663. }
  2664. return parent.node_ops.mknod(parent, name, mode, dev);
  2665. },create:function (path, mode) {
  2666. mode = mode !== undefined ? mode : 438 /* 0666 */;
  2667. mode &= 4095;
  2668. mode |= 32768;
  2669. return FS.mknod(path, mode, 0);
  2670. },mkdir:function (path, mode) {
  2671. mode = mode !== undefined ? mode : 511 /* 0777 */;
  2672. mode &= 511 | 512;
  2673. mode |= 16384;
  2674. return FS.mknod(path, mode, 0);
  2675. },mkdev:function (path, mode, dev) {
  2676. if (typeof(dev) === 'undefined') {
  2677. dev = mode;
  2678. mode = 438 /* 0666 */;
  2679. }
  2680. mode |= 8192;
  2681. return FS.mknod(path, mode, dev);
  2682. },symlink:function (oldpath, newpath) {
  2683. var lookup = FS.lookupPath(newpath, { parent: true });
  2684. var parent = lookup.node;
  2685. var newname = PATH.basename(newpath);
  2686. var err = FS.mayCreate(parent, newname);
  2687. if (err) {
  2688. throw new FS.ErrnoError(err);
  2689. }
  2690. if (!parent.node_ops.symlink) {
  2691. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  2692. }
  2693. return parent.node_ops.symlink(parent, newname, oldpath);
  2694. },rename:function (old_path, new_path) {
  2695. var old_dirname = PATH.dirname(old_path);
  2696. var new_dirname = PATH.dirname(new_path);
  2697. var old_name = PATH.basename(old_path);
  2698. var new_name = PATH.basename(new_path);
  2699. // parents must exist
  2700. var lookup, old_dir, new_dir;
  2701. try {
  2702. lookup = FS.lookupPath(old_path, { parent: true });
  2703. old_dir = lookup.node;
  2704. lookup = FS.lookupPath(new_path, { parent: true });
  2705. new_dir = lookup.node;
  2706. } catch (e) {
  2707. throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
  2708. }
  2709. // need to be part of the same mount
  2710. if (old_dir.mount !== new_dir.mount) {
  2711. throw new FS.ErrnoError(ERRNO_CODES.EXDEV);
  2712. }
  2713. // source must exist
  2714. var old_node = FS.lookupNode(old_dir, old_name);
  2715. // old path should not be an ancestor of the new path
  2716. var relative = PATH.relative(old_path, new_dirname);
  2717. if (relative.charAt(0) !== '.') {
  2718. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  2719. }
  2720. // new path should not be an ancestor of the old path
  2721. relative = PATH.relative(new_path, old_dirname);
  2722. if (relative.charAt(0) !== '.') {
  2723. throw new FS.ErrnoError(ERRNO_CODES.ENOTEMPTY);
  2724. }
  2725. // see if the new path already exists
  2726. var new_node;
  2727. try {
  2728. new_node = FS.lookupNode(new_dir, new_name);
  2729. } catch (e) {
  2730. // not fatal
  2731. }
  2732. // early out if nothing needs to change
  2733. if (old_node === new_node) {
  2734. return;
  2735. }
  2736. // we'll need to delete the old entry
  2737. var isdir = FS.isDir(old_node.mode);
  2738. var err = FS.mayDelete(old_dir, old_name, isdir);
  2739. if (err) {
  2740. throw new FS.ErrnoError(err);
  2741. }
  2742. // need delete permissions if we'll be overwriting.
  2743. // need create permissions if new doesn't already exist.
  2744. err = new_node ?
  2745. FS.mayDelete(new_dir, new_name, isdir) :
  2746. FS.mayCreate(new_dir, new_name);
  2747. if (err) {
  2748. throw new FS.ErrnoError(err);
  2749. }
  2750. if (!old_dir.node_ops.rename) {
  2751. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  2752. }
  2753. if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
  2754. throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
  2755. }
  2756. // if we are going to change the parent, check write permissions
  2757. if (new_dir !== old_dir) {
  2758. err = FS.nodePermissions(old_dir, 'w');
  2759. if (err) {
  2760. throw new FS.ErrnoError(err);
  2761. }
  2762. }
  2763. // remove the node from the lookup hash
  2764. FS.hashRemoveNode(old_node);
  2765. // do the underlying fs rename
  2766. try {
  2767. old_dir.node_ops.rename(old_node, new_dir, new_name);
  2768. } catch (e) {
  2769. throw e;
  2770. } finally {
  2771. // add the node back to the hash (in case node_ops.rename
  2772. // changed its name)
  2773. FS.hashAddNode(old_node);
  2774. }
  2775. },rmdir:function (path) {
  2776. var lookup = FS.lookupPath(path, { parent: true });
  2777. var parent = lookup.node;
  2778. var name = PATH.basename(path);
  2779. var node = FS.lookupNode(parent, name);
  2780. var err = FS.mayDelete(parent, name, true);
  2781. if (err) {
  2782. throw new FS.ErrnoError(err);
  2783. }
  2784. if (!parent.node_ops.rmdir) {
  2785. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  2786. }
  2787. if (FS.isMountpoint(node)) {
  2788. throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
  2789. }
  2790. parent.node_ops.rmdir(parent, name);
  2791. FS.destroyNode(node);
  2792. },readdir:function (path) {
  2793. var lookup = FS.lookupPath(path, { follow: true });
  2794. var node = lookup.node;
  2795. if (!node.node_ops.readdir) {
  2796. throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
  2797. }
  2798. return node.node_ops.readdir(node);
  2799. },unlink:function (path) {
  2800. var lookup = FS.lookupPath(path, { parent: true });
  2801. var parent = lookup.node;
  2802. var name = PATH.basename(path);
  2803. var node = FS.lookupNode(parent, name);
  2804. var err = FS.mayDelete(parent, name, false);
  2805. if (err) {
  2806. // POSIX says unlink should set EPERM, not EISDIR
  2807. if (err === ERRNO_CODES.EISDIR) err = ERRNO_CODES.EPERM;
  2808. throw new FS.ErrnoError(err);
  2809. }
  2810. if (!parent.node_ops.unlink) {
  2811. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  2812. }
  2813. if (FS.isMountpoint(node)) {
  2814. throw new FS.ErrnoError(ERRNO_CODES.EBUSY);
  2815. }
  2816. parent.node_ops.unlink(parent, name);
  2817. FS.destroyNode(node);
  2818. },readlink:function (path) {
  2819. var lookup = FS.lookupPath(path);
  2820. var link = lookup.node;
  2821. if (!link.node_ops.readlink) {
  2822. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  2823. }
  2824. return link.node_ops.readlink(link);
  2825. },stat:function (path, dontFollow) {
  2826. var lookup = FS.lookupPath(path, { follow: !dontFollow });
  2827. var node = lookup.node;
  2828. if (!node.node_ops.getattr) {
  2829. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  2830. }
  2831. return node.node_ops.getattr(node);
  2832. },lstat:function (path) {
  2833. return FS.stat(path, true);
  2834. },chmod:function (path, mode, dontFollow) {
  2835. var node;
  2836. if (typeof path === 'string') {
  2837. var lookup = FS.lookupPath(path, { follow: !dontFollow });
  2838. node = lookup.node;
  2839. } else {
  2840. node = path;
  2841. }
  2842. if (!node.node_ops.setattr) {
  2843. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  2844. }
  2845. node.node_ops.setattr(node, {
  2846. mode: (mode & 4095) | (node.mode & ~4095),
  2847. timestamp: Date.now()
  2848. });
  2849. },lchmod:function (path, mode) {
  2850. FS.chmod(path, mode, true);
  2851. },fchmod:function (fd, mode) {
  2852. var stream = FS.getStream(fd);
  2853. if (!stream) {
  2854. throw new FS.ErrnoError(ERRNO_CODES.EBADF);
  2855. }
  2856. FS.chmod(stream.node, mode);
  2857. },chown:function (path, uid, gid, dontFollow) {
  2858. var node;
  2859. if (typeof path === 'string') {
  2860. var lookup = FS.lookupPath(path, { follow: !dontFollow });
  2861. node = lookup.node;
  2862. } else {
  2863. node = path;
  2864. }
  2865. if (!node.node_ops.setattr) {
  2866. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  2867. }
  2868. node.node_ops.setattr(node, {
  2869. timestamp: Date.now()
  2870. // we ignore the uid / gid for now
  2871. });
  2872. },lchown:function (path, uid, gid) {
  2873. FS.chown(path, uid, gid, true);
  2874. },fchown:function (fd, uid, gid) {
  2875. var stream = FS.getStream(fd);
  2876. if (!stream) {
  2877. throw new FS.ErrnoError(ERRNO_CODES.EBADF);
  2878. }
  2879. FS.chown(stream.node, uid, gid);
  2880. },truncate:function (path, len) {
  2881. if (len < 0) {
  2882. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  2883. }
  2884. var node;
  2885. if (typeof path === 'string') {
  2886. var lookup = FS.lookupPath(path, { follow: true });
  2887. node = lookup.node;
  2888. } else {
  2889. node = path;
  2890. }
  2891. if (!node.node_ops.setattr) {
  2892. throw new FS.ErrnoError(ERRNO_CODES.EPERM);
  2893. }
  2894. if (FS.isDir(node.mode)) {
  2895. throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
  2896. }
  2897. if (!FS.isFile(node.mode)) {
  2898. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  2899. }
  2900. var err = FS.nodePermissions(node, 'w');
  2901. if (err) {
  2902. throw new FS.ErrnoError(err);
  2903. }
  2904. node.node_ops.setattr(node, {
  2905. size: len,
  2906. timestamp: Date.now()
  2907. });
  2908. },ftruncate:function (fd, len) {
  2909. var stream = FS.getStream(fd);
  2910. if (!stream) {
  2911. throw new FS.ErrnoError(ERRNO_CODES.EBADF);
  2912. }
  2913. if ((stream.flags & 2097155) === 0) {
  2914. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  2915. }
  2916. FS.truncate(stream.node, len);
  2917. },utime:function (path, atime, mtime) {
  2918. var lookup = FS.lookupPath(path, { follow: true });
  2919. var node = lookup.node;
  2920. node.node_ops.setattr(node, {
  2921. timestamp: Math.max(atime, mtime)
  2922. });
  2923. },open:function (path, flags, mode, fd_start, fd_end) {
  2924. flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;
  2925. mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode;
  2926. if ((flags & 64)) {
  2927. mode = (mode & 4095) | 32768;
  2928. } else {
  2929. mode = 0;
  2930. }
  2931. var node;
  2932. if (typeof path === 'object') {
  2933. node = path;
  2934. } else {
  2935. path = PATH.normalize(path);
  2936. try {
  2937. var lookup = FS.lookupPath(path, {
  2938. follow: !(flags & 131072)
  2939. });
  2940. node = lookup.node;
  2941. } catch (e) {
  2942. // ignore
  2943. }
  2944. }
  2945. // perhaps we need to create the node
  2946. if ((flags & 64)) {
  2947. if (node) {
  2948. // if O_CREAT and O_EXCL are set, error out if the node already exists
  2949. if ((flags & 128)) {
  2950. throw new FS.ErrnoError(ERRNO_CODES.EEXIST);
  2951. }
  2952. } else {
  2953. // node doesn't exist, try to create it
  2954. node = FS.mknod(path, mode, 0);
  2955. }
  2956. }
  2957. if (!node) {
  2958. throw new FS.ErrnoError(ERRNO_CODES.ENOENT);
  2959. }
  2960. // can't truncate a device
  2961. if (FS.isChrdev(node.mode)) {
  2962. flags &= ~512;
  2963. }
  2964. // check permissions
  2965. var err = FS.mayOpen(node, flags);
  2966. if (err) {
  2967. throw new FS.ErrnoError(err);
  2968. }
  2969. // do truncation if necessary
  2970. if ((flags & 512)) {
  2971. FS.truncate(node, 0);
  2972. }
  2973. // we've already handled these, don't pass down to the underlying vfs
  2974. flags &= ~(128 | 512);
  2975. // register the stream with the filesystem
  2976. var stream = FS.createStream({
  2977. node: node,
  2978. path: FS.getPath(node), // we want the absolute path to the node
  2979. flags: flags,
  2980. seekable: true,
  2981. position: 0,
  2982. stream_ops: node.stream_ops,
  2983. // used by the file family libc calls (fopen, fwrite, ferror, etc.)
  2984. ungotten: [],
  2985. error: false
  2986. }, fd_start, fd_end);
  2987. // call the new stream's open function
  2988. if (stream.stream_ops.open) {
  2989. stream.stream_ops.open(stream);
  2990. }
  2991. if (Module['logReadFiles'] && !(flags & 1)) {
  2992. if (!FS.readFiles) FS.readFiles = {};
  2993. if (!(path in FS.readFiles)) {
  2994. FS.readFiles[path] = 1;
  2995. Module['printErr']('read file: ' + path);
  2996. }
  2997. }
  2998. return stream;
  2999. },close:function (stream) {
  3000. try {
  3001. if (stream.stream_ops.close) {
  3002. stream.stream_ops.close(stream);
  3003. }
  3004. } catch (e) {
  3005. throw e;
  3006. } finally {
  3007. FS.closeStream(stream.fd);
  3008. }
  3009. },llseek:function (stream, offset, whence) {
  3010. if (!stream.seekable || !stream.stream_ops.llseek) {
  3011. throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
  3012. }
  3013. return stream.stream_ops.llseek(stream, offset, whence);
  3014. },read:function (stream, buffer, offset, length, position) {
  3015. if (length < 0 || position < 0) {
  3016. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  3017. }
  3018. if ((stream.flags & 2097155) === 1) {
  3019. throw new FS.ErrnoError(ERRNO_CODES.EBADF);
  3020. }
  3021. if (FS.isDir(stream.node.mode)) {
  3022. throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
  3023. }
  3024. if (!stream.stream_ops.read) {
  3025. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  3026. }
  3027. var seeking = true;
  3028. if (typeof position === 'undefined') {
  3029. position = stream.position;
  3030. seeking = false;
  3031. } else if (!stream.seekable) {
  3032. throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
  3033. }
  3034. var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
  3035. if (!seeking) stream.position += bytesRead;
  3036. return bytesRead;
  3037. },write:function (stream, buffer, offset, length, position, canOwn) {
  3038. if (length < 0 || position < 0) {
  3039. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  3040. }
  3041. if ((stream.flags & 2097155) === 0) {
  3042. throw new FS.ErrnoError(ERRNO_CODES.EBADF);
  3043. }
  3044. if (FS.isDir(stream.node.mode)) {
  3045. throw new FS.ErrnoError(ERRNO_CODES.EISDIR);
  3046. }
  3047. if (!stream.stream_ops.write) {
  3048. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  3049. }
  3050. var seeking = true;
  3051. if (typeof position === 'undefined') {
  3052. position = stream.position;
  3053. seeking = false;
  3054. } else if (!stream.seekable) {
  3055. throw new FS.ErrnoError(ERRNO_CODES.ESPIPE);
  3056. }
  3057. if (stream.flags & 1024) {
  3058. // seek to the end before writing in append mode
  3059. FS.llseek(stream, 0, 2);
  3060. }
  3061. var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
  3062. if (!seeking) stream.position += bytesWritten;
  3063. return bytesWritten;
  3064. },allocate:function (stream, offset, length) {
  3065. if (offset < 0 || length <= 0) {
  3066. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  3067. }
  3068. if ((stream.flags & 2097155) === 0) {
  3069. throw new FS.ErrnoError(ERRNO_CODES.EBADF);
  3070. }
  3071. if (!FS.isFile(stream.node.mode) && !FS.isDir(node.mode)) {
  3072. throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
  3073. }
  3074. if (!stream.stream_ops.allocate) {
  3075. throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
  3076. }
  3077. stream.stream_ops.allocate(stream, offset, length);
  3078. },mmap:function (stream, buffer, offset, length, position, prot, flags) {
  3079. // TODO if PROT is PROT_WRITE, make sure we have write access
  3080. if ((stream.flags & 2097155) === 1) {
  3081. throw new FS.ErrnoError(ERRNO_CODES.EACCES);
  3082. }
  3083. if (!stream.stream_ops.mmap) {
  3084. throw new FS.ErrnoError(ERRNO_CODES.ENODEV);
  3085. }
  3086. return stream.stream_ops.mmap(stream, buffer, offset, length, position, prot, flags);
  3087. },ioctl:function (stream, cmd, arg) {
  3088. if (!stream.stream_ops.ioctl) {
  3089. throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
  3090. }
  3091. return stream.stream_ops.ioctl(stream, cmd, arg);
  3092. },readFile:function (path, opts) {
  3093. opts = opts || {};
  3094. opts.flags = opts.flags || 'r';
  3095. opts.encoding = opts.encoding || 'binary';
  3096. if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
  3097. throw new Error('Invalid encoding type "' + opts.encoding + '"');
  3098. }
  3099. var ret;
  3100. var stream = FS.open(path, opts.flags);
  3101. var stat = FS.stat(path);
  3102. var length = stat.size;
  3103. var buf = new Uint8Array(length);
  3104. FS.read(stream, buf, 0, length, 0);
  3105. if (opts.encoding === 'utf8') {
  3106. ret = '';
  3107. var utf8 = new Runtime.UTF8Processor();
  3108. for (var i = 0; i < length; i++) {
  3109. ret += utf8.processCChar(buf[i]);
  3110. }
  3111. } else if (opts.encoding === 'binary') {
  3112. ret = buf;
  3113. }
  3114. FS.close(stream);
  3115. return ret;
  3116. },writeFile:function (path, data, opts) {
  3117. opts = opts || {};
  3118. opts.flags = opts.flags || 'w';
  3119. opts.encoding = opts.encoding || 'utf8';
  3120. if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
  3121. throw new Error('Invalid encoding type "' + opts.encoding + '"');
  3122. }
  3123. var stream = FS.open(path, opts.flags, opts.mode);
  3124. if (opts.encoding === 'utf8') {
  3125. var utf8 = new Runtime.UTF8Processor();
  3126. var buf = new Uint8Array(utf8.processJSString(data));
  3127. FS.write(stream, buf, 0, buf.length, 0, opts.canOwn);
  3128. } else if (opts.encoding === 'binary') {
  3129. FS.write(stream, data, 0, data.length, 0, opts.canOwn);
  3130. }
  3131. FS.close(stream);
  3132. },cwd:function () {
  3133. return FS.currentPath;
  3134. },chdir:function (path) {
  3135. var lookup = FS.lookupPath(path, { follow: true });
  3136. if (!FS.isDir(lookup.node.mode)) {
  3137. throw new FS.ErrnoError(ERRNO_CODES.ENOTDIR);
  3138. }
  3139. var err = FS.nodePermissions(lookup.node, 'x');
  3140. if (err) {
  3141. throw new FS.ErrnoError(err);
  3142. }
  3143. FS.currentPath = lookup.path;
  3144. },createDefaultDirectories:function () {
  3145. FS.mkdir('/tmp');
  3146. },createDefaultDevices:function () {
  3147. // create /dev
  3148. FS.mkdir('/dev');
  3149. // setup /dev/null
  3150. FS.registerDevice(FS.makedev(1, 3), {
  3151. read: function() { return 0; },
  3152. write: function() { return 0; }
  3153. });
  3154. FS.mkdev('/dev/null', FS.makedev(1, 3));
  3155. // setup /dev/tty and /dev/tty1
  3156. // stderr needs to print output using Module['printErr']
  3157. // so we register a second tty just for it.
  3158. TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
  3159. TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
  3160. FS.mkdev('/dev/tty', FS.makedev(5, 0));
  3161. FS.mkdev('/dev/tty1', FS.makedev(6, 0));
  3162. // we're not going to emulate the actual shm device,
  3163. // just create the tmp dirs that reside in it commonly
  3164. FS.mkdir('/dev/shm');
  3165. FS.mkdir('/dev/shm/tmp');
  3166. },createStandardStreams:function () {
  3167. // TODO deprecate the old functionality of a single
  3168. // input / output callback and that utilizes FS.createDevice
  3169. // and instead require a unique set of stream ops
  3170. // by default, we symlink the standard streams to the
  3171. // default tty devices. however, if the standard streams
  3172. // have been overwritten we create a unique device for
  3173. // them instead.
  3174. if (Module['stdin']) {
  3175. FS.createDevice('/dev', 'stdin', Module['stdin']);
  3176. } else {
  3177. FS.symlink('/dev/tty', '/dev/stdin');
  3178. }
  3179. if (Module['stdout']) {
  3180. FS.createDevice('/dev', 'stdout', null, Module['stdout']);
  3181. } else {
  3182. FS.symlink('/dev/tty', '/dev/stdout');
  3183. }
  3184. if (Module['stderr']) {
  3185. FS.createDevice('/dev', 'stderr', null, Module['stderr']);
  3186. } else {
  3187. FS.symlink('/dev/tty1', '/dev/stderr');
  3188. }
  3189. // open default streams for the stdin, stdout and stderr devices
  3190. var stdin = FS.open('/dev/stdin', 'r');
  3191. HEAP32[((_stdin)>>2)]=FS.getPtrForStream(stdin);
  3192. assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
  3193. var stdout = FS.open('/dev/stdout', 'w');
  3194. HEAP32[((_stdout)>>2)]=FS.getPtrForStream(stdout);
  3195. assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');
  3196. var stderr = FS.open('/dev/stderr', 'w');
  3197. HEAP32[((_stderr)>>2)]=FS.getPtrForStream(stderr);
  3198. assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');
  3199. },ensureErrnoError:function () {
  3200. if (FS.ErrnoError) return;
  3201. FS.ErrnoError = function ErrnoError(errno) {
  3202. this.errno = errno;
  3203. for (var key in ERRNO_CODES) {
  3204. if (ERRNO_CODES[key] === errno) {
  3205. this.code = key;
  3206. break;
  3207. }
  3208. }
  3209. this.message = ERRNO_MESSAGES[errno];
  3210. };
  3211. FS.ErrnoError.prototype = new Error();
  3212. FS.ErrnoError.prototype.constructor = FS.ErrnoError;
  3213. // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
  3214. [ERRNO_CODES.ENOENT].forEach(function(code) {
  3215. FS.genericErrors[code] = new FS.ErrnoError(code);
  3216. FS.genericErrors[code].stack = '<generic error, no stack>';
  3217. });
  3218. },staticInit:function () {
  3219. FS.ensureErrnoError();
  3220. FS.nameTable = new Array(4096);
  3221. FS.mount(MEMFS, {}, '/');
  3222. FS.createDefaultDirectories();
  3223. FS.createDefaultDevices();
  3224. },init:function (input, output, error) {
  3225. 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)');
  3226. FS.init.initialized = true;
  3227. FS.ensureErrnoError();
  3228. // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
  3229. Module['stdin'] = input || Module['stdin'];
  3230. Module['stdout'] = output || Module['stdout'];
  3231. Module['stderr'] = error || Module['stderr'];
  3232. FS.createStandardStreams();
  3233. },quit:function () {
  3234. FS.init.initialized = false;
  3235. for (var i = 0; i < FS.streams.length; i++) {
  3236. var stream = FS.streams[i];
  3237. if (!stream) {
  3238. continue;
  3239. }
  3240. FS.close(stream);
  3241. }
  3242. },getMode:function (canRead, canWrite) {
  3243. var mode = 0;
  3244. if (canRead) mode |= 292 | 73;
  3245. if (canWrite) mode |= 146;
  3246. return mode;
  3247. },joinPath:function (parts, forceRelative) {
  3248. var path = PATH.join.apply(null, parts);
  3249. if (forceRelative && path[0] == '/') path = path.substr(1);
  3250. return path;
  3251. },absolutePath:function (relative, base) {
  3252. return PATH.resolve(base, relative);
  3253. },standardizePath:function (path) {
  3254. return PATH.normalize(path);
  3255. },findObject:function (path, dontResolveLastLink) {
  3256. var ret = FS.analyzePath(path, dontResolveLastLink);
  3257. if (ret.exists) {
  3258. return ret.object;
  3259. } else {
  3260. ___setErrNo(ret.error);
  3261. return null;
  3262. }
  3263. },analyzePath:function (path, dontResolveLastLink) {
  3264. // operate from within the context of the symlink's target
  3265. try {
  3266. var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
  3267. path = lookup.path;
  3268. } catch (e) {
  3269. }
  3270. var ret = {
  3271. isRoot: false, exists: false, error: 0, name: null, path: null, object: null,
  3272. parentExists: false, parentPath: null, parentObject: null
  3273. };
  3274. try {
  3275. var lookup = FS.lookupPath(path, { parent: true });
  3276. ret.parentExists = true;
  3277. ret.parentPath = lookup.path;
  3278. ret.parentObject = lookup.node;
  3279. ret.name = PATH.basename(path);
  3280. lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
  3281. ret.exists = true;
  3282. ret.path = lookup.path;
  3283. ret.object = lookup.node;
  3284. ret.name = lookup.node.name;
  3285. ret.isRoot = lookup.path === '/';
  3286. } catch (e) {
  3287. ret.error = e.errno;
  3288. };
  3289. return ret;
  3290. },createFolder:function (parent, name, canRead, canWrite) {
  3291. var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
  3292. var mode = FS.getMode(canRead, canWrite);
  3293. return FS.mkdir(path, mode);
  3294. },createPath:function (parent, path, canRead, canWrite) {
  3295. parent = typeof parent === 'string' ? parent : FS.getPath(parent);
  3296. var parts = path.split('/').reverse();
  3297. while (parts.length) {
  3298. var part = parts.pop();
  3299. if (!part) continue;
  3300. var current = PATH.join2(parent, part);
  3301. try {
  3302. FS.mkdir(current);
  3303. } catch (e) {
  3304. // ignore EEXIST
  3305. }
  3306. parent = current;
  3307. }
  3308. return current;
  3309. },createFile:function (parent, name, properties, canRead, canWrite) {
  3310. var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
  3311. var mode = FS.getMode(canRead, canWrite);
  3312. return FS.create(path, mode);
  3313. },createDataFile:function (parent, name, data, canRead, canWrite, canOwn) {
  3314. var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;
  3315. var mode = FS.getMode(canRead, canWrite);
  3316. var node = FS.create(path, mode);
  3317. if (data) {
  3318. if (typeof data === 'string') {
  3319. var arr = new Array(data.length);
  3320. for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
  3321. data = arr;
  3322. }
  3323. // make sure we can write to the file
  3324. FS.chmod(node, mode | 146);
  3325. var stream = FS.open(node, 'w');
  3326. FS.write(stream, data, 0, data.length, 0, canOwn);
  3327. FS.close(stream);
  3328. FS.chmod(node, mode);
  3329. }
  3330. return node;
  3331. },createDevice:function (parent, name, input, output) {
  3332. var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
  3333. var mode = FS.getMode(!!input, !!output);
  3334. if (!FS.createDevice.major) FS.createDevice.major = 64;
  3335. var dev = FS.makedev(FS.createDevice.major++, 0);
  3336. // Create a fake device that a set of stream ops to emulate
  3337. // the old behavior.
  3338. FS.registerDevice(dev, {
  3339. open: function(stream) {
  3340. stream.seekable = false;
  3341. },
  3342. close: function(stream) {
  3343. // flush any pending line data
  3344. if (output && output.buffer && output.buffer.length) {
  3345. output(10);
  3346. }
  3347. },
  3348. read: function(stream, buffer, offset, length, pos /* ignored */) {
  3349. var bytesRead = 0;
  3350. for (var i = 0; i < length; i++) {
  3351. var result;
  3352. try {
  3353. result = input();
  3354. } catch (e) {
  3355. throw new FS.ErrnoError(ERRNO_CODES.EIO);
  3356. }
  3357. if (result === undefined && bytesRead === 0) {
  3358. throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
  3359. }
  3360. if (result === null || result === undefined) break;
  3361. bytesRead++;
  3362. buffer[offset+i] = result;
  3363. }
  3364. if (bytesRead) {
  3365. stream.node.timestamp = Date.now();
  3366. }
  3367. return bytesRead;
  3368. },
  3369. write: function(stream, buffer, offset, length, pos) {
  3370. for (var i = 0; i < length; i++) {
  3371. try {
  3372. output(buffer[offset+i]);
  3373. } catch (e) {
  3374. throw new FS.ErrnoError(ERRNO_CODES.EIO);
  3375. }
  3376. }
  3377. if (length) {
  3378. stream.node.timestamp = Date.now();
  3379. }
  3380. return i;
  3381. }
  3382. });
  3383. return FS.mkdev(path, mode, dev);
  3384. },createLink:function (parent, name, target, canRead, canWrite) {
  3385. var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);
  3386. return FS.symlink(target, path);
  3387. },forceLoadFile:function (obj) {
  3388. if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
  3389. var success = true;
  3390. if (typeof XMLHttpRequest !== 'undefined') {
  3391. 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.");
  3392. } else if (Module['read']) {
  3393. // Command-line.
  3394. try {
  3395. // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
  3396. // read() will try to parse UTF8.
  3397. obj.contents = intArrayFromString(Module['read'](obj.url), true);
  3398. } catch (e) {
  3399. success = false;
  3400. }
  3401. } else {
  3402. throw new Error('Cannot load without read() or XMLHttpRequest.');
  3403. }
  3404. if (!success) ___setErrNo(ERRNO_CODES.EIO);
  3405. return success;
  3406. },createLazyFile:function (parent, name, url, canRead, canWrite) {
  3407. // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
  3408. function LazyUint8Array() {
  3409. this.lengthKnown = false;
  3410. this.chunks = []; // Loaded chunks. Index is the chunk number
  3411. }
  3412. LazyUint8Array.prototype.get = function LazyUint8Array_get(idx) {
  3413. if (idx > this.length-1 || idx < 0) {
  3414. return undefined;
  3415. }
  3416. var chunkOffset = idx % this.chunkSize;
  3417. var chunkNum = Math.floor(idx / this.chunkSize);
  3418. return this.getter(chunkNum)[chunkOffset];
  3419. }
  3420. LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
  3421. this.getter = getter;
  3422. }
  3423. LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
  3424. // Find length
  3425. var xhr = new XMLHttpRequest();
  3426. xhr.open('HEAD', url, false);
  3427. xhr.send(null);
  3428. if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
  3429. var datalength = Number(xhr.getResponseHeader("Content-length"));
  3430. var header;
  3431. var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes";
  3432. var chunkSize = 1024*1024; // Chunk size in bytes
  3433. if (!hasByteServing) chunkSize = datalength;
  3434. // Function to get a range from the remote URL.
  3435. var doXHR = (function(from, to) {
  3436. if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!");
  3437. if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!");
  3438. // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
  3439. var xhr = new XMLHttpRequest();
  3440. xhr.open('GET', url, false);
  3441. if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
  3442. // Some hints to the browser that we want binary data.
  3443. if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';
  3444. if (xhr.overrideMimeType) {
  3445. xhr.overrideMimeType('text/plain; charset=x-user-defined');
  3446. }
  3447. xhr.send(null);
  3448. if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status);
  3449. if (xhr.response !== undefined) {
  3450. return new Uint8Array(xhr.response || []);
  3451. } else {
  3452. return intArrayFromString(xhr.responseText || '', true);
  3453. }
  3454. });
  3455. var lazyArray = this;
  3456. lazyArray.setDataGetter(function(chunkNum) {
  3457. var start = chunkNum * chunkSize;
  3458. var end = (chunkNum+1) * chunkSize - 1; // including this byte
  3459. end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
  3460. if (typeof(lazyArray.chunks[chunkNum]) === "undefined") {
  3461. lazyArray.chunks[chunkNum] = doXHR(start, end);
  3462. }
  3463. if (typeof(lazyArray.chunks[chunkNum]) === "undefined") throw new Error("doXHR failed!");
  3464. return lazyArray.chunks[chunkNum];
  3465. });
  3466. this._length = datalength;
  3467. this._chunkSize = chunkSize;
  3468. this.lengthKnown = true;
  3469. }
  3470. if (typeof XMLHttpRequest !== 'undefined') {
  3471. if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';
  3472. var lazyArray = new LazyUint8Array();
  3473. Object.defineProperty(lazyArray, "length", {
  3474. get: function() {
  3475. if(!this.lengthKnown) {
  3476. this.cacheLength();
  3477. }
  3478. return this._length;
  3479. }
  3480. });
  3481. Object.defineProperty(lazyArray, "chunkSize", {
  3482. get: function() {
  3483. if(!this.lengthKnown) {
  3484. this.cacheLength();
  3485. }
  3486. return this._chunkSize;
  3487. }
  3488. });
  3489. var properties = { isDevice: false, contents: lazyArray };
  3490. } else {
  3491. var properties = { isDevice: false, url: url };
  3492. }
  3493. var node = FS.createFile(parent, name, properties, canRead, canWrite);
  3494. // This is a total hack, but I want to get this lazy file code out of the
  3495. // core of MEMFS. If we want to keep this lazy file concept I feel it should
  3496. // be its own thin LAZYFS proxying calls to MEMFS.
  3497. if (properties.contents) {
  3498. node.contents = properties.contents;
  3499. } else if (properties.url) {
  3500. node.contents = null;
  3501. node.url = properties.url;
  3502. }
  3503. // override each stream op with one that tries to force load the lazy file first
  3504. var stream_ops = {};
  3505. var keys = Object.keys(node.stream_ops);
  3506. keys.forEach(function(key) {
  3507. var fn = node.stream_ops[key];
  3508. stream_ops[key] = function forceLoadLazyFile() {
  3509. if (!FS.forceLoadFile(node)) {
  3510. throw new FS.ErrnoError(ERRNO_CODES.EIO);
  3511. }
  3512. return fn.apply(null, arguments);
  3513. };
  3514. });
  3515. // use a custom read function
  3516. stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {
  3517. if (!FS.forceLoadFile(node)) {
  3518. throw new FS.ErrnoError(ERRNO_CODES.EIO);
  3519. }
  3520. var contents = stream.node.contents;
  3521. if (position >= contents.length)
  3522. return 0;
  3523. var size = Math.min(contents.length - position, length);
  3524. assert(size >= 0);
  3525. if (contents.slice) { // normal array
  3526. for (var i = 0; i < size; i++) {
  3527. buffer[offset + i] = contents[position + i];
  3528. }
  3529. } else {
  3530. for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
  3531. buffer[offset + i] = contents.get(position + i);
  3532. }
  3533. }
  3534. return size;
  3535. };
  3536. node.stream_ops = stream_ops;
  3537. return node;
  3538. },createPreloadedFile:function (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn) {
  3539. Browser.init();
  3540. // TODO we should allow people to just pass in a complete filename instead
  3541. // of parent and name being that we just join them anyways
  3542. var fullname = name ? PATH.resolve(PATH.join2(parent, name)) : parent;
  3543. function processData(byteArray) {
  3544. function finish(byteArray) {
  3545. if (!dontCreateFile) {
  3546. FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
  3547. }
  3548. if (onload) onload();
  3549. removeRunDependency('cp ' + fullname);
  3550. }
  3551. var handled = false;
  3552. Module['preloadPlugins'].forEach(function(plugin) {
  3553. if (handled) return;
  3554. if (plugin['canHandle'](fullname)) {
  3555. plugin['handle'](byteArray, fullname, finish, function() {
  3556. if (onerror) onerror();
  3557. removeRunDependency('cp ' + fullname);
  3558. });
  3559. handled = true;
  3560. }
  3561. });
  3562. if (!handled) finish(byteArray);
  3563. }
  3564. addRunDependency('cp ' + fullname);
  3565. if (typeof url == 'string') {
  3566. Browser.asyncLoad(url, function(byteArray) {
  3567. processData(byteArray);
  3568. }, onerror);
  3569. } else {
  3570. processData(url);
  3571. }
  3572. },indexedDB:function () {
  3573. return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
  3574. },DB_NAME:function () {
  3575. return 'EM_FS_' + window.location.pathname;
  3576. },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:function (paths, onload, onerror) {
  3577. onload = onload || function(){};
  3578. onerror = onerror || function(){};
  3579. var indexedDB = FS.indexedDB();
  3580. try {
  3581. var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
  3582. } catch (e) {
  3583. return onerror(e);
  3584. }
  3585. openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
  3586. console.log('creating db');
  3587. var db = openRequest.result;
  3588. db.createObjectStore(FS.DB_STORE_NAME);
  3589. };
  3590. openRequest.onsuccess = function openRequest_onsuccess() {
  3591. var db = openRequest.result;
  3592. var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
  3593. var files = transaction.objectStore(FS.DB_STORE_NAME);
  3594. var ok = 0, fail = 0, total = paths.length;
  3595. function finish() {
  3596. if (fail == 0) onload(); else onerror();
  3597. }
  3598. paths.forEach(function(path) {
  3599. var putRequest = files.put(FS.analyzePath(path).object.contents, path);
  3600. putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() };
  3601. putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };
  3602. });
  3603. transaction.onerror = onerror;
  3604. };
  3605. openRequest.onerror = onerror;
  3606. },loadFilesFromDB:function (paths, onload, onerror) {
  3607. onload = onload || function(){};
  3608. onerror = onerror || function(){};
  3609. var indexedDB = FS.indexedDB();
  3610. try {
  3611. var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
  3612. } catch (e) {
  3613. return onerror(e);
  3614. }
  3615. openRequest.onupgradeneeded = onerror; // no database to load from
  3616. openRequest.onsuccess = function openRequest_onsuccess() {
  3617. var db = openRequest.result;
  3618. try {
  3619. var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
  3620. } catch(e) {
  3621. onerror(e);
  3622. return;
  3623. }
  3624. var files = transaction.objectStore(FS.DB_STORE_NAME);
  3625. var ok = 0, fail = 0, total = paths.length;
  3626. function finish() {
  3627. if (fail == 0) onload(); else onerror();
  3628. }
  3629. paths.forEach(function(path) {
  3630. var getRequest = files.get(path);
  3631. getRequest.onsuccess = function getRequest_onsuccess() {
  3632. if (FS.analyzePath(path).exists) {
  3633. FS.unlink(path);
  3634. }
  3635. FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
  3636. ok++;
  3637. if (ok + fail == total) finish();
  3638. };
  3639. getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };
  3640. });
  3641. transaction.onerror = onerror;
  3642. };
  3643. openRequest.onerror = onerror;
  3644. }};
  3645. function _lseek(fildes, offset, whence) {
  3646. // off_t lseek(int fildes, off_t offset, int whence);
  3647. // http://pubs.opengroup.org/onlinepubs/000095399/functions/lseek.html
  3648. var stream = FS.getStream(fildes);
  3649. if (!stream) {
  3650. ___setErrNo(ERRNO_CODES.EBADF);
  3651. return -1;
  3652. }
  3653. try {
  3654. return FS.llseek(stream, offset, whence);
  3655. } catch (e) {
  3656. FS.handleFSError(e);
  3657. return -1;
  3658. }
  3659. }
  3660. function _fileno(stream) {
  3661. // int fileno(FILE *stream);
  3662. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fileno.html
  3663. stream = FS.getStreamFromPtr(stream);
  3664. if (!stream) return -1;
  3665. return stream.fd;
  3666. }function _fseek(stream, offset, whence) {
  3667. // int fseek(FILE *stream, long offset, int whence);
  3668. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fseek.html
  3669. var fd = _fileno(stream);
  3670. var ret = _lseek(fd, offset, whence);
  3671. if (ret == -1) {
  3672. return -1;
  3673. }
  3674. stream = FS.getStreamFromPtr(stream);
  3675. stream.eof = false;
  3676. return 0;
  3677. }
  3678. Module["_i64Subtract"] = _i64Subtract;
  3679. Module["_i64Add"] = _i64Add;
  3680. function _setlocale(category, locale) {
  3681. if (!_setlocale.ret) _setlocale.ret = allocate([0], 'i8', ALLOC_NORMAL);
  3682. return _setlocale.ret;
  3683. }
  3684. function _close(fildes) {
  3685. // int close(int fildes);
  3686. // http://pubs.opengroup.org/onlinepubs/000095399/functions/close.html
  3687. var stream = FS.getStream(fildes);
  3688. if (!stream) {
  3689. ___setErrNo(ERRNO_CODES.EBADF);
  3690. return -1;
  3691. }
  3692. try {
  3693. FS.close(stream);
  3694. return 0;
  3695. } catch (e) {
  3696. FS.handleFSError(e);
  3697. return -1;
  3698. }
  3699. }
  3700. function _fsync(fildes) {
  3701. // int fsync(int fildes);
  3702. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fsync.html
  3703. var stream = FS.getStream(fildes);
  3704. if (stream) {
  3705. // We write directly to the file system, so there's nothing to do here.
  3706. return 0;
  3707. } else {
  3708. ___setErrNo(ERRNO_CODES.EBADF);
  3709. return -1;
  3710. }
  3711. }function _fclose(stream) {
  3712. // int fclose(FILE *stream);
  3713. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fclose.html
  3714. var fd = _fileno(stream);
  3715. _fsync(fd);
  3716. return _close(fd);
  3717. }
  3718. function _mkport() { throw 'TODO' }var SOCKFS={mount:function (mount) {
  3719. return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
  3720. },createSocket:function (family, type, protocol) {
  3721. var streaming = type == 1;
  3722. if (protocol) {
  3723. assert(streaming == (protocol == 6)); // if SOCK_STREAM, must be tcp
  3724. }
  3725. // create our internal socket structure
  3726. var sock = {
  3727. family: family,
  3728. type: type,
  3729. protocol: protocol,
  3730. server: null,
  3731. peers: {},
  3732. pending: [],
  3733. recv_queue: [],
  3734. sock_ops: SOCKFS.websocket_sock_ops
  3735. };
  3736. // create the filesystem node to store the socket structure
  3737. var name = SOCKFS.nextname();
  3738. var node = FS.createNode(SOCKFS.root, name, 49152, 0);
  3739. node.sock = sock;
  3740. // and the wrapping stream that enables library functions such
  3741. // as read and write to indirectly interact with the socket
  3742. var stream = FS.createStream({
  3743. path: name,
  3744. node: node,
  3745. flags: FS.modeStringToFlags('r+'),
  3746. seekable: false,
  3747. stream_ops: SOCKFS.stream_ops
  3748. });
  3749. // map the new stream to the socket structure (sockets have a 1:1
  3750. // relationship with a stream)
  3751. sock.stream = stream;
  3752. return sock;
  3753. },getSocket:function (fd) {
  3754. var stream = FS.getStream(fd);
  3755. if (!stream || !FS.isSocket(stream.node.mode)) {
  3756. return null;
  3757. }
  3758. return stream.node.sock;
  3759. },stream_ops:{poll:function (stream) {
  3760. var sock = stream.node.sock;
  3761. return sock.sock_ops.poll(sock);
  3762. },ioctl:function (stream, request, varargs) {
  3763. var sock = stream.node.sock;
  3764. return sock.sock_ops.ioctl(sock, request, varargs);
  3765. },read:function (stream, buffer, offset, length, position /* ignored */) {
  3766. var sock = stream.node.sock;
  3767. var msg = sock.sock_ops.recvmsg(sock, length);
  3768. if (!msg) {
  3769. // socket is closed
  3770. return 0;
  3771. }
  3772. buffer.set(msg.buffer, offset);
  3773. return msg.buffer.length;
  3774. },write:function (stream, buffer, offset, length, position /* ignored */) {
  3775. var sock = stream.node.sock;
  3776. return sock.sock_ops.sendmsg(sock, buffer, offset, length);
  3777. },close:function (stream) {
  3778. var sock = stream.node.sock;
  3779. sock.sock_ops.close(sock);
  3780. }},nextname:function () {
  3781. if (!SOCKFS.nextname.current) {
  3782. SOCKFS.nextname.current = 0;
  3783. }
  3784. return 'socket[' + (SOCKFS.nextname.current++) + ']';
  3785. },websocket_sock_ops:{createPeer:function (sock, addr, port) {
  3786. var ws;
  3787. if (typeof addr === 'object') {
  3788. ws = addr;
  3789. addr = null;
  3790. port = null;
  3791. }
  3792. if (ws) {
  3793. // for sockets that've already connected (e.g. we're the server)
  3794. // we can inspect the _socket property for the address
  3795. if (ws._socket) {
  3796. addr = ws._socket.remoteAddress;
  3797. port = ws._socket.remotePort;
  3798. }
  3799. // if we're just now initializing a connection to the remote,
  3800. // inspect the url property
  3801. else {
  3802. var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);
  3803. if (!result) {
  3804. throw new Error('WebSocket URL must be in the format ws(s)://address:port');
  3805. }
  3806. addr = result[1];
  3807. port = parseInt(result[2], 10);
  3808. }
  3809. } else {
  3810. // create the actual websocket object and connect
  3811. try {
  3812. // runtimeConfig gets set to true if WebSocket runtime configuration is available.
  3813. var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket']));
  3814. // The default value is 'ws://' the replace is needed because the compiler replaces "//" comments with '#'
  3815. // comments without checking context, so we'd end up with ws:#, the replace swaps the "#" for "//" again.
  3816. var url = 'ws:#'.replace('#', '//');
  3817. if (runtimeConfig) {
  3818. if ('string' === typeof Module['websocket']['url']) {
  3819. url = Module['websocket']['url']; // Fetch runtime WebSocket URL config.
  3820. }
  3821. }
  3822. if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it.
  3823. url = url + addr + ':' + port;
  3824. }
  3825. // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set.
  3826. var subProtocols = 'binary'; // The default value is 'binary'
  3827. if (runtimeConfig) {
  3828. if ('string' === typeof Module['websocket']['subprotocol']) {
  3829. subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config.
  3830. }
  3831. }
  3832. // The regex trims the string (removes spaces at the beginning and end, then splits the string by
  3833. // <any space>,<any space> into an Array. Whitespace removal is important for Websockify and ws.
  3834. subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */);
  3835. // The node ws library API for specifying optional subprotocol is slightly different than the browser's.
  3836. var opts = ENVIRONMENT_IS_NODE ? {'protocol': subProtocols.toString()} : subProtocols;
  3837. // If node we use the ws library.
  3838. var WebSocket = ENVIRONMENT_IS_NODE ? require('ws') : window['WebSocket'];
  3839. ws = new WebSocket(url, opts);
  3840. ws.binaryType = 'arraybuffer';
  3841. } catch (e) {
  3842. throw new FS.ErrnoError(ERRNO_CODES.EHOSTUNREACH);
  3843. }
  3844. }
  3845. var peer = {
  3846. addr: addr,
  3847. port: port,
  3848. socket: ws,
  3849. dgram_send_queue: []
  3850. };
  3851. SOCKFS.websocket_sock_ops.addPeer(sock, peer);
  3852. SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer);
  3853. // if this is a bound dgram socket, send the port number first to allow
  3854. // us to override the ephemeral port reported to us by remotePort on the
  3855. // remote end.
  3856. if (sock.type === 2 && typeof sock.sport !== 'undefined') {
  3857. peer.dgram_send_queue.push(new Uint8Array([
  3858. 255, 255, 255, 255,
  3859. 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0),
  3860. ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff)
  3861. ]));
  3862. }
  3863. return peer;
  3864. },getPeer:function (sock, addr, port) {
  3865. return sock.peers[addr + ':' + port];
  3866. },addPeer:function (sock, peer) {
  3867. sock.peers[peer.addr + ':' + peer.port] = peer;
  3868. },removePeer:function (sock, peer) {
  3869. delete sock.peers[peer.addr + ':' + peer.port];
  3870. },handlePeerEvents:function (sock, peer) {
  3871. var first = true;
  3872. var handleOpen = function () {
  3873. try {
  3874. var queued = peer.dgram_send_queue.shift();
  3875. while (queued) {
  3876. peer.socket.send(queued);
  3877. queued = peer.dgram_send_queue.shift();
  3878. }
  3879. } catch (e) {
  3880. // not much we can do here in the way of proper error handling as we've already
  3881. // lied and said this data was sent. shut it down.
  3882. peer.socket.close();
  3883. }
  3884. };
  3885. function handleMessage(data) {
  3886. assert(typeof data !== 'string' && data.byteLength !== undefined); // must receive an ArrayBuffer
  3887. data = new Uint8Array(data); // make a typed array view on the array buffer
  3888. // if this is the port message, override the peer's port with it
  3889. var wasfirst = first;
  3890. first = false;
  3891. if (wasfirst &&
  3892. data.length === 10 &&
  3893. data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 &&
  3894. data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) {
  3895. // update the peer's port and it's key in the peer map
  3896. var newport = ((data[8] << 8) | data[9]);
  3897. SOCKFS.websocket_sock_ops.removePeer(sock, peer);
  3898. peer.port = newport;
  3899. SOCKFS.websocket_sock_ops.addPeer(sock, peer);
  3900. return;
  3901. }
  3902. sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data });
  3903. };
  3904. if (ENVIRONMENT_IS_NODE) {
  3905. peer.socket.on('open', handleOpen);
  3906. peer.socket.on('message', function(data, flags) {
  3907. if (!flags.binary) {
  3908. return;
  3909. }
  3910. handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer
  3911. });
  3912. peer.socket.on('error', function() {
  3913. // don't throw
  3914. });
  3915. } else {
  3916. peer.socket.onopen = handleOpen;
  3917. peer.socket.onmessage = function peer_socket_onmessage(event) {
  3918. handleMessage(event.data);
  3919. };
  3920. }
  3921. },poll:function (sock) {
  3922. if (sock.type === 1 && sock.server) {
  3923. // listen sockets should only say they're available for reading
  3924. // if there are pending clients.
  3925. return sock.pending.length ? (64 | 1) : 0;
  3926. }
  3927. var mask = 0;
  3928. var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets
  3929. SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) :
  3930. null;
  3931. if (sock.recv_queue.length ||
  3932. !dest || // connection-less sockets are always ready to read
  3933. (dest && dest.socket.readyState === dest.socket.CLOSING) ||
  3934. (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed
  3935. mask |= (64 | 1);
  3936. }
  3937. if (!dest || // connection-less sockets are always ready to write
  3938. (dest && dest.socket.readyState === dest.socket.OPEN)) {
  3939. mask |= 4;
  3940. }
  3941. if ((dest && dest.socket.readyState === dest.socket.CLOSING) ||
  3942. (dest && dest.socket.readyState === dest.socket.CLOSED)) {
  3943. mask |= 16;
  3944. }
  3945. return mask;
  3946. },ioctl:function (sock, request, arg) {
  3947. switch (request) {
  3948. case 21531:
  3949. var bytes = 0;
  3950. if (sock.recv_queue.length) {
  3951. bytes = sock.recv_queue[0].data.length;
  3952. }
  3953. HEAP32[((arg)>>2)]=bytes;
  3954. return 0;
  3955. default:
  3956. return ERRNO_CODES.EINVAL;
  3957. }
  3958. },close:function (sock) {
  3959. // if we've spawned a listen server, close it
  3960. if (sock.server) {
  3961. try {
  3962. sock.server.close();
  3963. } catch (e) {
  3964. }
  3965. sock.server = null;
  3966. }
  3967. // close any peer connections
  3968. var peers = Object.keys(sock.peers);
  3969. for (var i = 0; i < peers.length; i++) {
  3970. var peer = sock.peers[peers[i]];
  3971. try {
  3972. peer.socket.close();
  3973. } catch (e) {
  3974. }
  3975. SOCKFS.websocket_sock_ops.removePeer(sock, peer);
  3976. }
  3977. return 0;
  3978. },bind:function (sock, addr, port) {
  3979. if (typeof sock.saddr !== 'undefined' || typeof sock.sport !== 'undefined') {
  3980. throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already bound
  3981. }
  3982. sock.saddr = addr;
  3983. sock.sport = port || _mkport();
  3984. // in order to emulate dgram sockets, we need to launch a listen server when
  3985. // binding on a connection-less socket
  3986. // note: this is only required on the server side
  3987. if (sock.type === 2) {
  3988. // close the existing server if it exists
  3989. if (sock.server) {
  3990. sock.server.close();
  3991. sock.server = null;
  3992. }
  3993. // swallow error operation not supported error that occurs when binding in the
  3994. // browser where this isn't supported
  3995. try {
  3996. sock.sock_ops.listen(sock, 0);
  3997. } catch (e) {
  3998. if (!(e instanceof FS.ErrnoError)) throw e;
  3999. if (e.errno !== ERRNO_CODES.EOPNOTSUPP) throw e;
  4000. }
  4001. }
  4002. },connect:function (sock, addr, port) {
  4003. if (sock.server) {
  4004. throw new FS.ErrnoError(ERRNO_CODS.EOPNOTSUPP);
  4005. }
  4006. // TODO autobind
  4007. // if (!sock.addr && sock.type == 2) {
  4008. // }
  4009. // early out if we're already connected / in the middle of connecting
  4010. if (typeof sock.daddr !== 'undefined' && typeof sock.dport !== 'undefined') {
  4011. var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
  4012. if (dest) {
  4013. if (dest.socket.readyState === dest.socket.CONNECTING) {
  4014. throw new FS.ErrnoError(ERRNO_CODES.EALREADY);
  4015. } else {
  4016. throw new FS.ErrnoError(ERRNO_CODES.EISCONN);
  4017. }
  4018. }
  4019. }
  4020. // add the socket to our peer list and set our
  4021. // destination address / port to match
  4022. var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
  4023. sock.daddr = peer.addr;
  4024. sock.dport = peer.port;
  4025. // always "fail" in non-blocking mode
  4026. throw new FS.ErrnoError(ERRNO_CODES.EINPROGRESS);
  4027. },listen:function (sock, backlog) {
  4028. if (!ENVIRONMENT_IS_NODE) {
  4029. throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
  4030. }
  4031. if (sock.server) {
  4032. throw new FS.ErrnoError(ERRNO_CODES.EINVAL); // already listening
  4033. }
  4034. var WebSocketServer = require('ws').Server;
  4035. var host = sock.saddr;
  4036. sock.server = new WebSocketServer({
  4037. host: host,
  4038. port: sock.sport
  4039. // TODO support backlog
  4040. });
  4041. sock.server.on('connection', function(ws) {
  4042. if (sock.type === 1) {
  4043. var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol);
  4044. // create a peer on the new socket
  4045. var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws);
  4046. newsock.daddr = peer.addr;
  4047. newsock.dport = peer.port;
  4048. // push to queue for accept to pick up
  4049. sock.pending.push(newsock);
  4050. } else {
  4051. // create a peer on the listen socket so calling sendto
  4052. // with the listen socket and an address will resolve
  4053. // to the correct client
  4054. SOCKFS.websocket_sock_ops.createPeer(sock, ws);
  4055. }
  4056. });
  4057. sock.server.on('closed', function() {
  4058. sock.server = null;
  4059. });
  4060. sock.server.on('error', function() {
  4061. // don't throw
  4062. });
  4063. },accept:function (listensock) {
  4064. if (!listensock.server) {
  4065. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  4066. }
  4067. var newsock = listensock.pending.shift();
  4068. newsock.stream.flags = listensock.stream.flags;
  4069. return newsock;
  4070. },getname:function (sock, peer) {
  4071. var addr, port;
  4072. if (peer) {
  4073. if (sock.daddr === undefined || sock.dport === undefined) {
  4074. throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
  4075. }
  4076. addr = sock.daddr;
  4077. port = sock.dport;
  4078. } else {
  4079. // TODO saddr and sport will be set for bind()'d UDP sockets, but what
  4080. // should we be returning for TCP sockets that've been connect()'d?
  4081. addr = sock.saddr || 0;
  4082. port = sock.sport || 0;
  4083. }
  4084. return { addr: addr, port: port };
  4085. },sendmsg:function (sock, buffer, offset, length, addr, port) {
  4086. if (sock.type === 2) {
  4087. // connection-less sockets will honor the message address,
  4088. // and otherwise fall back to the bound destination address
  4089. if (addr === undefined || port === undefined) {
  4090. addr = sock.daddr;
  4091. port = sock.dport;
  4092. }
  4093. // if there was no address to fall back to, error out
  4094. if (addr === undefined || port === undefined) {
  4095. throw new FS.ErrnoError(ERRNO_CODES.EDESTADDRREQ);
  4096. }
  4097. } else {
  4098. // connection-based sockets will only use the bound
  4099. addr = sock.daddr;
  4100. port = sock.dport;
  4101. }
  4102. // find the peer for the destination address
  4103. var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port);
  4104. // early out if not connected with a connection-based socket
  4105. if (sock.type === 1) {
  4106. if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
  4107. throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
  4108. } else if (dest.socket.readyState === dest.socket.CONNECTING) {
  4109. throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
  4110. }
  4111. }
  4112. // create a copy of the incoming data to send, as the WebSocket API
  4113. // doesn't work entirely with an ArrayBufferView, it'll just send
  4114. // the entire underlying buffer
  4115. var data;
  4116. if (buffer instanceof Array || buffer instanceof ArrayBuffer) {
  4117. data = buffer.slice(offset, offset + length);
  4118. } else { // ArrayBufferView
  4119. data = buffer.buffer.slice(buffer.byteOffset + offset, buffer.byteOffset + offset + length);
  4120. }
  4121. // if we're emulating a connection-less dgram socket and don't have
  4122. // a cached connection, queue the buffer to send upon connect and
  4123. // lie, saying the data was sent now.
  4124. if (sock.type === 2) {
  4125. if (!dest || dest.socket.readyState !== dest.socket.OPEN) {
  4126. // if we're not connected, open a new connection
  4127. if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
  4128. dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
  4129. }
  4130. dest.dgram_send_queue.push(data);
  4131. return length;
  4132. }
  4133. }
  4134. try {
  4135. // send the actual data
  4136. dest.socket.send(data);
  4137. return length;
  4138. } catch (e) {
  4139. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  4140. }
  4141. },recvmsg:function (sock, length) {
  4142. // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html
  4143. if (sock.type === 1 && sock.server) {
  4144. // tcp servers should not be recv()'ing on the listen socket
  4145. throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
  4146. }
  4147. var queued = sock.recv_queue.shift();
  4148. if (!queued) {
  4149. if (sock.type === 1) {
  4150. var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
  4151. if (!dest) {
  4152. // if we have a destination address but are not connected, error out
  4153. throw new FS.ErrnoError(ERRNO_CODES.ENOTCONN);
  4154. }
  4155. else if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
  4156. // return null if the socket has closed
  4157. return null;
  4158. }
  4159. else {
  4160. // else, our socket is in a valid state but truly has nothing available
  4161. throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
  4162. }
  4163. } else {
  4164. throw new FS.ErrnoError(ERRNO_CODES.EAGAIN);
  4165. }
  4166. }
  4167. // queued.data will be an ArrayBuffer if it's unadulterated, but if it's
  4168. // requeued TCP data it'll be an ArrayBufferView
  4169. var queuedLength = queued.data.byteLength || queued.data.length;
  4170. var queuedOffset = queued.data.byteOffset || 0;
  4171. var queuedBuffer = queued.data.buffer || queued.data;
  4172. var bytesRead = Math.min(length, queuedLength);
  4173. var res = {
  4174. buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead),
  4175. addr: queued.addr,
  4176. port: queued.port
  4177. };
  4178. // push back any unread data for TCP connections
  4179. if (sock.type === 1 && bytesRead < queuedLength) {
  4180. var bytesRemaining = queuedLength - bytesRead;
  4181. queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining);
  4182. sock.recv_queue.unshift(queued);
  4183. }
  4184. return res;
  4185. }}};function _recv(fd, buf, len, flags) {
  4186. var sock = SOCKFS.getSocket(fd);
  4187. if (!sock) {
  4188. ___setErrNo(ERRNO_CODES.EBADF);
  4189. return -1;
  4190. }
  4191. // TODO honor flags
  4192. return _read(fd, buf, len);
  4193. }
  4194. function _pread(fildes, buf, nbyte, offset) {
  4195. // ssize_t pread(int fildes, void *buf, size_t nbyte, off_t offset);
  4196. // http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
  4197. var stream = FS.getStream(fildes);
  4198. if (!stream) {
  4199. ___setErrNo(ERRNO_CODES.EBADF);
  4200. return -1;
  4201. }
  4202. try {
  4203. var slab = HEAP8;
  4204. return FS.read(stream, slab, buf, nbyte, offset);
  4205. } catch (e) {
  4206. FS.handleFSError(e);
  4207. return -1;
  4208. }
  4209. }function _read(fildes, buf, nbyte) {
  4210. // ssize_t read(int fildes, void *buf, size_t nbyte);
  4211. // http://pubs.opengroup.org/onlinepubs/000095399/functions/read.html
  4212. var stream = FS.getStream(fildes);
  4213. if (!stream) {
  4214. ___setErrNo(ERRNO_CODES.EBADF);
  4215. return -1;
  4216. }
  4217. try {
  4218. var slab = HEAP8;
  4219. return FS.read(stream, slab, buf, nbyte);
  4220. } catch (e) {
  4221. FS.handleFSError(e);
  4222. return -1;
  4223. }
  4224. }function _fread(ptr, size, nitems, stream) {
  4225. // size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
  4226. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
  4227. var bytesToRead = nitems * size;
  4228. if (bytesToRead == 0) {
  4229. return 0;
  4230. }
  4231. var bytesRead = 0;
  4232. var streamObj = FS.getStreamFromPtr(stream);
  4233. if (!streamObj) {
  4234. ___setErrNo(ERRNO_CODES.EBADF);
  4235. return 0;
  4236. }
  4237. while (streamObj.ungotten.length && bytesToRead > 0) {
  4238. HEAP8[((ptr++)|0)]=streamObj.ungotten.pop();
  4239. bytesToRead--;
  4240. bytesRead++;
  4241. }
  4242. var err = _read(streamObj.fd, ptr, bytesToRead);
  4243. if (err == -1) {
  4244. if (streamObj) streamObj.error = true;
  4245. return 0;
  4246. }
  4247. bytesRead += err;
  4248. if (bytesRead < bytesToRead) streamObj.eof = true;
  4249. return Math.floor(bytesRead / size);
  4250. }
  4251. function _toupper(chr) {
  4252. if (chr >= 97 && chr <= 122) {
  4253. return chr - 97 + 65;
  4254. } else {
  4255. return chr;
  4256. }
  4257. }
  4258. function _open(path, oflag, varargs) {
  4259. // int open(const char *path, int oflag, ...);
  4260. // http://pubs.opengroup.org/onlinepubs/009695399/functions/open.html
  4261. var mode = HEAP32[((varargs)>>2)];
  4262. path = Pointer_stringify(path);
  4263. try {
  4264. var stream = FS.open(path, oflag, mode);
  4265. return stream.fd;
  4266. } catch (e) {
  4267. FS.handleFSError(e);
  4268. return -1;
  4269. }
  4270. }function _fopen(filename, mode) {
  4271. // FILE *fopen(const char *restrict filename, const char *restrict mode);
  4272. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fopen.html
  4273. var flags;
  4274. mode = Pointer_stringify(mode);
  4275. if (mode[0] == 'r') {
  4276. if (mode.indexOf('+') != -1) {
  4277. flags = 2;
  4278. } else {
  4279. flags = 0;
  4280. }
  4281. } else if (mode[0] == 'w') {
  4282. if (mode.indexOf('+') != -1) {
  4283. flags = 2;
  4284. } else {
  4285. flags = 1;
  4286. }
  4287. flags |= 64;
  4288. flags |= 512;
  4289. } else if (mode[0] == 'a') {
  4290. if (mode.indexOf('+') != -1) {
  4291. flags = 2;
  4292. } else {
  4293. flags = 1;
  4294. }
  4295. flags |= 64;
  4296. flags |= 1024;
  4297. } else {
  4298. ___setErrNo(ERRNO_CODES.EINVAL);
  4299. return 0;
  4300. }
  4301. var fd = _open(filename, flags, allocate([0x1FF, 0, 0, 0], 'i32', ALLOC_STACK)); // All creation permissions.
  4302. return fd === -1 ? 0 : FS.getPtrForStream(FS.getStream(fd));
  4303. }
  4304. var _emscripten_check_longjmp=true;
  4305. function _send(fd, buf, len, flags) {
  4306. var sock = SOCKFS.getSocket(fd);
  4307. if (!sock) {
  4308. ___setErrNo(ERRNO_CODES.EBADF);
  4309. return -1;
  4310. }
  4311. // TODO honor flags
  4312. return _write(fd, buf, len);
  4313. }
  4314. function _pwrite(fildes, buf, nbyte, offset) {
  4315. // ssize_t pwrite(int fildes, const void *buf, size_t nbyte, off_t offset);
  4316. // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
  4317. var stream = FS.getStream(fildes);
  4318. if (!stream) {
  4319. ___setErrNo(ERRNO_CODES.EBADF);
  4320. return -1;
  4321. }
  4322. try {
  4323. var slab = HEAP8;
  4324. return FS.write(stream, slab, buf, nbyte, offset);
  4325. } catch (e) {
  4326. FS.handleFSError(e);
  4327. return -1;
  4328. }
  4329. }function _write(fildes, buf, nbyte) {
  4330. // ssize_t write(int fildes, const void *buf, size_t nbyte);
  4331. // http://pubs.opengroup.org/onlinepubs/000095399/functions/write.html
  4332. var stream = FS.getStream(fildes);
  4333. if (!stream) {
  4334. ___setErrNo(ERRNO_CODES.EBADF);
  4335. return -1;
  4336. }
  4337. try {
  4338. var slab = HEAP8;
  4339. return FS.write(stream, slab, buf, nbyte);
  4340. } catch (e) {
  4341. FS.handleFSError(e);
  4342. return -1;
  4343. }
  4344. }function _fputc(c, stream) {
  4345. // int fputc(int c, FILE *stream);
  4346. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputc.html
  4347. var chr = unSign(c & 0xFF);
  4348. HEAP8[((_fputc.ret)|0)]=chr;
  4349. var fd = _fileno(stream);
  4350. var ret = _write(fd, _fputc.ret, 1);
  4351. if (ret == -1) {
  4352. var streamObj = FS.getStreamFromPtr(stream);
  4353. if (streamObj) streamObj.error = true;
  4354. return -1;
  4355. } else {
  4356. return chr;
  4357. }
  4358. }
  4359. var _log=Math_log;
  4360. var _emscripten_postinvoke=true;
  4361. function _putchar(c) {
  4362. // int putchar(int c);
  4363. // http://pubs.opengroup.org/onlinepubs/000095399/functions/putchar.html
  4364. return _fputc(c, HEAP32[((_stdout)>>2)]);
  4365. }
  4366. Module["_saveSetjmp"] = _saveSetjmp;
  4367. function _fwrite(ptr, size, nitems, stream) {
  4368. // size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
  4369. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fwrite.html
  4370. var bytesToWrite = nitems * size;
  4371. if (bytesToWrite == 0) return 0;
  4372. var fd = _fileno(stream);
  4373. var bytesWritten = _write(fd, ptr, bytesToWrite);
  4374. if (bytesWritten == -1) {
  4375. var streamObj = FS.getStreamFromPtr(stream);
  4376. if (streamObj) streamObj.error = true;
  4377. return 0;
  4378. } else {
  4379. return Math.floor(bytesWritten / size);
  4380. }
  4381. }
  4382. function _system(command) {
  4383. // int system(const char *command);
  4384. // http://pubs.opengroup.org/onlinepubs/000095399/functions/system.html
  4385. // Can't call external programs.
  4386. ___setErrNo(ERRNO_CODES.EAGAIN);
  4387. return -1;
  4388. }
  4389. function _frexp(x, exp_addr) {
  4390. var sig = 0, exp_ = 0;
  4391. if (x !== 0) {
  4392. var sign = 1;
  4393. if (x < 0) {
  4394. x = -x;
  4395. sign = -1;
  4396. }
  4397. var raw_exp = Math.log(x)/Math.log(2);
  4398. exp_ = Math.ceil(raw_exp);
  4399. if (exp_ === raw_exp) exp_ += 1;
  4400. sig = sign*x/Math.pow(2, exp_);
  4401. }
  4402. HEAP32[((exp_addr)>>2)]=exp_;
  4403. return sig;
  4404. }
  4405. var _tzname=allocate(8, "i32*", ALLOC_STATIC);
  4406. var _daylight=allocate(1, "i32*", ALLOC_STATIC);
  4407. var _timezone=allocate(1, "i32*", ALLOC_STATIC);function _tzset() {
  4408. // TODO: Use (malleable) environment variables instead of system settings.
  4409. if (_tzset.called) return;
  4410. _tzset.called = true;
  4411. HEAP32[((_timezone)>>2)]=-(new Date()).getTimezoneOffset() * 60;
  4412. var winter = new Date(2000, 0, 1);
  4413. var summer = new Date(2000, 6, 1);
  4414. HEAP32[((_daylight)>>2)]=Number(winter.getTimezoneOffset() != summer.getTimezoneOffset());
  4415. var winterName = 'GMT'; // XXX do not rely on browser timezone info, it is very unpredictable | winter.toString().match(/\(([A-Z]+)\)/)[1];
  4416. var summerName = 'GMT'; // XXX do not rely on browser timezone info, it is very unpredictable | summer.toString().match(/\(([A-Z]+)\)/)[1];
  4417. var winterNamePtr = allocate(intArrayFromString(winterName), 'i8', ALLOC_NORMAL);
  4418. var summerNamePtr = allocate(intArrayFromString(summerName), 'i8', ALLOC_NORMAL);
  4419. HEAP32[((_tzname)>>2)]=winterNamePtr;
  4420. HEAP32[(((_tzname)+(4))>>2)]=summerNamePtr;
  4421. }function _mktime(tmPtr) {
  4422. _tzset();
  4423. var year = HEAP32[(((tmPtr)+(20))>>2)];
  4424. var timestamp = new Date(year >= 1900 ? year : year + 1900,
  4425. HEAP32[(((tmPtr)+(16))>>2)],
  4426. HEAP32[(((tmPtr)+(12))>>2)],
  4427. HEAP32[(((tmPtr)+(8))>>2)],
  4428. HEAP32[(((tmPtr)+(4))>>2)],
  4429. HEAP32[((tmPtr)>>2)],
  4430. 0).getTime() / 1000;
  4431. HEAP32[(((tmPtr)+(24))>>2)]=new Date(timestamp).getDay();
  4432. var yday = Math.round((timestamp - (new Date(year, 0, 1)).getTime()) / (1000 * 60 * 60 * 24));
  4433. HEAP32[(((tmPtr)+(28))>>2)]=yday;
  4434. return timestamp;
  4435. }
  4436. function _isalpha(chr) {
  4437. return (chr >= 97 && chr <= 122) ||
  4438. (chr >= 65 && chr <= 90);
  4439. }
  4440. function _malloc(bytes) {
  4441. /* Over-allocate to make sure it is byte-aligned by 8.
  4442. * This will leak memory, but this is only the dummy
  4443. * implementation (replaced by dlmalloc normally) so
  4444. * not an issue.
  4445. */
  4446. var ptr = Runtime.dynamicAlloc(bytes + 8);
  4447. return (ptr+8) & 0xFFFFFFF8;
  4448. }
  4449. Module["_malloc"] = _malloc;function _tmpnam(s, dir, prefix) {
  4450. // char *tmpnam(char *s);
  4451. // http://pubs.opengroup.org/onlinepubs/000095399/functions/tmpnam.html
  4452. // NOTE: The dir and prefix arguments are for internal use only.
  4453. var folder = FS.findObject(dir || '/tmp');
  4454. if (!folder || !folder.isFolder) {
  4455. dir = '/tmp';
  4456. folder = FS.findObject(dir);
  4457. if (!folder || !folder.isFolder) return 0;
  4458. }
  4459. var name = prefix || 'file';
  4460. do {
  4461. name += String.fromCharCode(65 + Math.floor(Math.random() * 25));
  4462. } while (name in folder.contents);
  4463. var result = dir + '/' + name;
  4464. if (!_tmpnam.buffer) _tmpnam.buffer = _malloc(256);
  4465. if (!s) s = _tmpnam.buffer;
  4466. writeAsciiToMemory(result, s);
  4467. return s;
  4468. }
  4469. var Browser={mainLoop:{scheduler:null,method:"",shouldPause:false,paused:false,queue:[],pause:function () {
  4470. Browser.mainLoop.shouldPause = true;
  4471. },resume:function () {
  4472. if (Browser.mainLoop.paused) {
  4473. Browser.mainLoop.paused = false;
  4474. Browser.mainLoop.scheduler();
  4475. }
  4476. Browser.mainLoop.shouldPause = false;
  4477. },updateStatus:function () {
  4478. if (Module['setStatus']) {
  4479. var message = Module['statusMessage'] || 'Please wait...';
  4480. var remaining = Browser.mainLoop.remainingBlockers;
  4481. var expected = Browser.mainLoop.expectedBlockers;
  4482. if (remaining) {
  4483. if (remaining < expected) {
  4484. Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');
  4485. } else {
  4486. Module['setStatus'](message);
  4487. }
  4488. } else {
  4489. Module['setStatus']('');
  4490. }
  4491. }
  4492. }},isFullScreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function () {
  4493. if (!Module["preloadPlugins"]) Module["preloadPlugins"] = []; // needs to exist even in workers
  4494. if (Browser.initted || ENVIRONMENT_IS_WORKER) return;
  4495. Browser.initted = true;
  4496. try {
  4497. new Blob();
  4498. Browser.hasBlobConstructor = true;
  4499. } catch(e) {
  4500. Browser.hasBlobConstructor = false;
  4501. console.log("warning: no blob constructor, cannot create blobs with mimetypes");
  4502. }
  4503. Browser.BlobBuilder = typeof MozBlobBuilder != "undefined" ? MozBlobBuilder : (typeof WebKitBlobBuilder != "undefined" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log("warning: no BlobBuilder") : null));
  4504. Browser.URLObject = typeof window != "undefined" ? (window.URL ? window.URL : window.webkitURL) : undefined;
  4505. if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {
  4506. console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.");
  4507. Module.noImageDecoding = true;
  4508. }
  4509. // Support for plugins that can process preloaded files. You can add more of these to
  4510. // your app by creating and appending to Module.preloadPlugins.
  4511. //
  4512. // Each plugin is asked if it can handle a file based on the file's name. If it can,
  4513. // it is given the file's raw data. When it is done, it calls a callback with the file's
  4514. // (possibly modified) data. For example, a plugin might decompress a file, or it
  4515. // might create some side data structure for use later (like an Image element, etc.).
  4516. var imagePlugin = {};
  4517. imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {
  4518. return !Module.noImageDecoding && /\.(jpg|jpeg|png|bmp)$/i.test(name);
  4519. };
  4520. imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {
  4521. var b = null;
  4522. if (Browser.hasBlobConstructor) {
  4523. try {
  4524. b = new Blob([byteArray], { type: Browser.getMimetype(name) });
  4525. if (b.size !== byteArray.length) { // Safari bug #118630
  4526. // Safari's Blob can only take an ArrayBuffer
  4527. b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });
  4528. }
  4529. } catch(e) {
  4530. Runtime.warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');
  4531. }
  4532. }
  4533. if (!b) {
  4534. var bb = new Browser.BlobBuilder();
  4535. bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range
  4536. b = bb.getBlob();
  4537. }
  4538. var url = Browser.URLObject.createObjectURL(b);
  4539. var img = new Image();
  4540. img.onload = function img_onload() {
  4541. assert(img.complete, 'Image ' + name + ' could not be decoded');
  4542. var canvas = document.createElement('canvas');
  4543. canvas.width = img.width;
  4544. canvas.height = img.height;
  4545. var ctx = canvas.getContext('2d');
  4546. ctx.drawImage(img, 0, 0);
  4547. Module["preloadedImages"][name] = canvas;
  4548. Browser.URLObject.revokeObjectURL(url);
  4549. if (onload) onload(byteArray);
  4550. };
  4551. img.onerror = function img_onerror(event) {
  4552. console.log('Image ' + url + ' could not be decoded');
  4553. if (onerror) onerror();
  4554. };
  4555. img.src = url;
  4556. };
  4557. Module['preloadPlugins'].push(imagePlugin);
  4558. var audioPlugin = {};
  4559. audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {
  4560. return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };
  4561. };
  4562. audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {
  4563. var done = false;
  4564. function finish(audio) {
  4565. if (done) return;
  4566. done = true;
  4567. Module["preloadedAudios"][name] = audio;
  4568. if (onload) onload(byteArray);
  4569. }
  4570. function fail() {
  4571. if (done) return;
  4572. done = true;
  4573. Module["preloadedAudios"][name] = new Audio(); // empty shim
  4574. if (onerror) onerror();
  4575. }
  4576. if (Browser.hasBlobConstructor) {
  4577. try {
  4578. var b = new Blob([byteArray], { type: Browser.getMimetype(name) });
  4579. } catch(e) {
  4580. return fail();
  4581. }
  4582. var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!
  4583. var audio = new Audio();
  4584. audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926
  4585. audio.onerror = function audio_onerror(event) {
  4586. if (done) return;
  4587. console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');
  4588. function encode64(data) {
  4589. var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  4590. var PAD = '=';
  4591. var ret = '';
  4592. var leftchar = 0;
  4593. var leftbits = 0;
  4594. for (var i = 0; i < data.length; i++) {
  4595. leftchar = (leftchar << 8) | data[i];
  4596. leftbits += 8;
  4597. while (leftbits >= 6) {
  4598. var curr = (leftchar >> (leftbits-6)) & 0x3f;
  4599. leftbits -= 6;
  4600. ret += BASE[curr];
  4601. }
  4602. }
  4603. if (leftbits == 2) {
  4604. ret += BASE[(leftchar&3) << 4];
  4605. ret += PAD + PAD;
  4606. } else if (leftbits == 4) {
  4607. ret += BASE[(leftchar&0xf) << 2];
  4608. ret += PAD;
  4609. }
  4610. return ret;
  4611. }
  4612. audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);
  4613. finish(audio); // we don't wait for confirmation this worked - but it's worth trying
  4614. };
  4615. audio.src = url;
  4616. // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror
  4617. Browser.safeSetTimeout(function() {
  4618. finish(audio); // try to use it even though it is not necessarily ready to play
  4619. }, 10000);
  4620. } else {
  4621. return fail();
  4622. }
  4623. };
  4624. Module['preloadPlugins'].push(audioPlugin);
  4625. // Canvas event setup
  4626. var canvas = Module['canvas'];
  4627. // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module
  4628. // Module['forcedAspectRatio'] = 4 / 3;
  4629. canvas.requestPointerLock = canvas['requestPointerLock'] ||
  4630. canvas['mozRequestPointerLock'] ||
  4631. canvas['webkitRequestPointerLock'] ||
  4632. canvas['msRequestPointerLock'] ||
  4633. function(){};
  4634. canvas.exitPointerLock = document['exitPointerLock'] ||
  4635. document['mozExitPointerLock'] ||
  4636. document['webkitExitPointerLock'] ||
  4637. document['msExitPointerLock'] ||
  4638. function(){}; // no-op if function does not exist
  4639. canvas.exitPointerLock = canvas.exitPointerLock.bind(document);
  4640. function pointerLockChange() {
  4641. Browser.pointerLock = document['pointerLockElement'] === canvas ||
  4642. document['mozPointerLockElement'] === canvas ||
  4643. document['webkitPointerLockElement'] === canvas ||
  4644. document['msPointerLockElement'] === canvas;
  4645. }
  4646. document.addEventListener('pointerlockchange', pointerLockChange, false);
  4647. document.addEventListener('mozpointerlockchange', pointerLockChange, false);
  4648. document.addEventListener('webkitpointerlockchange', pointerLockChange, false);
  4649. document.addEventListener('mspointerlockchange', pointerLockChange, false);
  4650. if (Module['elementPointerLock']) {
  4651. canvas.addEventListener("click", function(ev) {
  4652. if (!Browser.pointerLock && canvas.requestPointerLock) {
  4653. canvas.requestPointerLock();
  4654. ev.preventDefault();
  4655. }
  4656. }, false);
  4657. }
  4658. },createContext:function (canvas, useWebGL, setInModule, webGLContextAttributes) {
  4659. var ctx;
  4660. var errorInfo = '?';
  4661. function onContextCreationError(event) {
  4662. errorInfo = event.statusMessage || errorInfo;
  4663. }
  4664. try {
  4665. if (useWebGL) {
  4666. var contextAttributes = {
  4667. antialias: false,
  4668. alpha: false
  4669. };
  4670. if (webGLContextAttributes) {
  4671. for (var attribute in webGLContextAttributes) {
  4672. contextAttributes[attribute] = webGLContextAttributes[attribute];
  4673. }
  4674. }
  4675. canvas.addEventListener('webglcontextcreationerror', onContextCreationError, false);
  4676. try {
  4677. ['experimental-webgl', 'webgl'].some(function(webglId) {
  4678. return ctx = canvas.getContext(webglId, contextAttributes);
  4679. });
  4680. } finally {
  4681. canvas.removeEventListener('webglcontextcreationerror', onContextCreationError, false);
  4682. }
  4683. } else {
  4684. ctx = canvas.getContext('2d');
  4685. }
  4686. if (!ctx) throw ':(';
  4687. } catch (e) {
  4688. Module.print('Could not create canvas: ' + [errorInfo, e]);
  4689. return null;
  4690. }
  4691. if (useWebGL) {
  4692. // Set the background of the WebGL canvas to black
  4693. canvas.style.backgroundColor = "black";
  4694. // Warn on context loss
  4695. canvas.addEventListener('webglcontextlost', function(event) {
  4696. alert('WebGL context lost. You will need to reload the page.');
  4697. }, false);
  4698. }
  4699. if (setInModule) {
  4700. GLctx = Module.ctx = ctx;
  4701. Module.useWebGL = useWebGL;
  4702. Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });
  4703. Browser.init();
  4704. }
  4705. return ctx;
  4706. },destroyContext:function (canvas, useWebGL, setInModule) {},fullScreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullScreen:function (lockPointer, resizeCanvas) {
  4707. Browser.lockPointer = lockPointer;
  4708. Browser.resizeCanvas = resizeCanvas;
  4709. if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;
  4710. if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;
  4711. var canvas = Module['canvas'];
  4712. function fullScreenChange() {
  4713. Browser.isFullScreen = false;
  4714. var canvasContainer = canvas.parentNode;
  4715. if ((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
  4716. document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
  4717. document['fullScreenElement'] || document['fullscreenElement'] ||
  4718. document['msFullScreenElement'] || document['msFullscreenElement'] ||
  4719. document['webkitCurrentFullScreenElement']) === canvasContainer) {
  4720. canvas.cancelFullScreen = document['cancelFullScreen'] ||
  4721. document['mozCancelFullScreen'] ||
  4722. document['webkitCancelFullScreen'] ||
  4723. document['msExitFullscreen'] ||
  4724. document['exitFullscreen'] ||
  4725. function() {};
  4726. canvas.cancelFullScreen = canvas.cancelFullScreen.bind(document);
  4727. if (Browser.lockPointer) canvas.requestPointerLock();
  4728. Browser.isFullScreen = true;
  4729. if (Browser.resizeCanvas) Browser.setFullScreenCanvasSize();
  4730. } else {
  4731. // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen
  4732. canvasContainer.parentNode.insertBefore(canvas, canvasContainer);
  4733. canvasContainer.parentNode.removeChild(canvasContainer);
  4734. if (Browser.resizeCanvas) Browser.setWindowedCanvasSize();
  4735. }
  4736. if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullScreen);
  4737. Browser.updateCanvasDimensions(canvas);
  4738. }
  4739. if (!Browser.fullScreenHandlersInstalled) {
  4740. Browser.fullScreenHandlersInstalled = true;
  4741. document.addEventListener('fullscreenchange', fullScreenChange, false);
  4742. document.addEventListener('mozfullscreenchange', fullScreenChange, false);
  4743. document.addEventListener('webkitfullscreenchange', fullScreenChange, false);
  4744. document.addEventListener('MSFullscreenChange', fullScreenChange, false);
  4745. }
  4746. // create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root
  4747. var canvasContainer = document.createElement("div");
  4748. canvas.parentNode.insertBefore(canvasContainer, canvas);
  4749. canvasContainer.appendChild(canvas);
  4750. // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size)
  4751. canvasContainer.requestFullScreen = canvasContainer['requestFullScreen'] ||
  4752. canvasContainer['mozRequestFullScreen'] ||
  4753. canvasContainer['msRequestFullscreen'] ||
  4754. (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);
  4755. canvasContainer.requestFullScreen();
  4756. },requestAnimationFrame:function requestAnimationFrame(func) {
  4757. if (typeof window === 'undefined') { // Provide fallback to setTimeout if window is undefined (e.g. in Node.js)
  4758. setTimeout(func, 1000/60);
  4759. } else {
  4760. if (!window.requestAnimationFrame) {
  4761. window.requestAnimationFrame = window['requestAnimationFrame'] ||
  4762. window['mozRequestAnimationFrame'] ||
  4763. window['webkitRequestAnimationFrame'] ||
  4764. window['msRequestAnimationFrame'] ||
  4765. window['oRequestAnimationFrame'] ||
  4766. window['setTimeout'];
  4767. }
  4768. window.requestAnimationFrame(func);
  4769. }
  4770. },safeCallback:function (func) {
  4771. return function() {
  4772. if (!ABORT) return func.apply(null, arguments);
  4773. };
  4774. },safeRequestAnimationFrame:function (func) {
  4775. return Browser.requestAnimationFrame(function() {
  4776. if (!ABORT) func();
  4777. });
  4778. },safeSetTimeout:function (func, timeout) {
  4779. return setTimeout(function() {
  4780. if (!ABORT) func();
  4781. }, timeout);
  4782. },safeSetInterval:function (func, timeout) {
  4783. return setInterval(function() {
  4784. if (!ABORT) func();
  4785. }, timeout);
  4786. },getMimetype:function (name) {
  4787. return {
  4788. 'jpg': 'image/jpeg',
  4789. 'jpeg': 'image/jpeg',
  4790. 'png': 'image/png',
  4791. 'bmp': 'image/bmp',
  4792. 'ogg': 'audio/ogg',
  4793. 'wav': 'audio/wav',
  4794. 'mp3': 'audio/mpeg'
  4795. }[name.substr(name.lastIndexOf('.')+1)];
  4796. },getUserMedia:function (func) {
  4797. if(!window.getUserMedia) {
  4798. window.getUserMedia = navigator['getUserMedia'] ||
  4799. navigator['mozGetUserMedia'];
  4800. }
  4801. window.getUserMedia(func);
  4802. },getMovementX:function (event) {
  4803. return event['movementX'] ||
  4804. event['mozMovementX'] ||
  4805. event['webkitMovementX'] ||
  4806. 0;
  4807. },getMovementY:function (event) {
  4808. return event['movementY'] ||
  4809. event['mozMovementY'] ||
  4810. event['webkitMovementY'] ||
  4811. 0;
  4812. },getMouseWheelDelta:function (event) {
  4813. return Math.max(-1, Math.min(1, event.type === 'DOMMouseScroll' ? event.detail : -event.wheelDelta));
  4814. },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,calculateMouseEvent:function (event) { // event should be mousemove, mousedown or mouseup
  4815. if (Browser.pointerLock) {
  4816. // When the pointer is locked, calculate the coordinates
  4817. // based on the movement of the mouse.
  4818. // Workaround for Firefox bug 764498
  4819. if (event.type != 'mousemove' &&
  4820. ('mozMovementX' in event)) {
  4821. Browser.mouseMovementX = Browser.mouseMovementY = 0;
  4822. } else {
  4823. Browser.mouseMovementX = Browser.getMovementX(event);
  4824. Browser.mouseMovementY = Browser.getMovementY(event);
  4825. }
  4826. // check if SDL is available
  4827. if (typeof SDL != "undefined") {
  4828. Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;
  4829. Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;
  4830. } else {
  4831. // just add the mouse delta to the current absolut mouse position
  4832. // FIXME: ideally this should be clamped against the canvas size and zero
  4833. Browser.mouseX += Browser.mouseMovementX;
  4834. Browser.mouseY += Browser.mouseMovementY;
  4835. }
  4836. } else {
  4837. // Otherwise, calculate the movement based on the changes
  4838. // in the coordinates.
  4839. var rect = Module["canvas"].getBoundingClientRect();
  4840. var x, y;
  4841. // Neither .scrollX or .pageXOffset are defined in a spec, but
  4842. // we prefer .scrollX because it is currently in a spec draft.
  4843. // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)
  4844. var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset);
  4845. var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset);
  4846. if (event.type == 'touchstart' ||
  4847. event.type == 'touchend' ||
  4848. event.type == 'touchmove') {
  4849. var t = event.touches.item(0);
  4850. if (t) {
  4851. x = t.pageX - (scrollX + rect.left);
  4852. y = t.pageY - (scrollY + rect.top);
  4853. } else {
  4854. return;
  4855. }
  4856. } else {
  4857. x = event.pageX - (scrollX + rect.left);
  4858. y = event.pageY - (scrollY + rect.top);
  4859. }
  4860. // the canvas might be CSS-scaled compared to its backbuffer;
  4861. // SDL-using content will want mouse coordinates in terms
  4862. // of backbuffer units.
  4863. var cw = Module["canvas"].width;
  4864. var ch = Module["canvas"].height;
  4865. x = x * (cw / rect.width);
  4866. y = y * (ch / rect.height);
  4867. Browser.mouseMovementX = x - Browser.mouseX;
  4868. Browser.mouseMovementY = y - Browser.mouseY;
  4869. Browser.mouseX = x;
  4870. Browser.mouseY = y;
  4871. }
  4872. },xhrLoad:function (url, onload, onerror) {
  4873. var xhr = new XMLHttpRequest();
  4874. xhr.open('GET', url, true);
  4875. xhr.responseType = 'arraybuffer';
  4876. xhr.onload = function xhr_onload() {
  4877. if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0
  4878. onload(xhr.response);
  4879. } else {
  4880. onerror();
  4881. }
  4882. };
  4883. xhr.onerror = onerror;
  4884. xhr.send(null);
  4885. },asyncLoad:function (url, onload, onerror, noRunDep) {
  4886. Browser.xhrLoad(url, function(arrayBuffer) {
  4887. assert(arrayBuffer, 'Loading data file "' + url + '" failed (no arrayBuffer).');
  4888. onload(new Uint8Array(arrayBuffer));
  4889. if (!noRunDep) removeRunDependency('al ' + url);
  4890. }, function(event) {
  4891. if (onerror) {
  4892. onerror();
  4893. } else {
  4894. throw 'Loading data file "' + url + '" failed.';
  4895. }
  4896. });
  4897. if (!noRunDep) addRunDependency('al ' + url);
  4898. },resizeListeners:[],updateResizeListeners:function () {
  4899. var canvas = Module['canvas'];
  4900. Browser.resizeListeners.forEach(function(listener) {
  4901. listener(canvas.width, canvas.height);
  4902. });
  4903. },setCanvasSize:function (width, height, noUpdates) {
  4904. var canvas = Module['canvas'];
  4905. Browser.updateCanvasDimensions(canvas, width, height);
  4906. if (!noUpdates) Browser.updateResizeListeners();
  4907. },windowedWidth:0,windowedHeight:0,setFullScreenCanvasSize:function () {
  4908. // check if SDL is available
  4909. if (typeof SDL != "undefined") {
  4910. var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
  4911. flags = flags | 0x00800000; // set SDL_FULLSCREEN flag
  4912. HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
  4913. }
  4914. Browser.updateResizeListeners();
  4915. },setWindowedCanvasSize:function () {
  4916. // check if SDL is available
  4917. if (typeof SDL != "undefined") {
  4918. var flags = HEAPU32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)];
  4919. flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag
  4920. HEAP32[((SDL.screen+Runtime.QUANTUM_SIZE*0)>>2)]=flags
  4921. }
  4922. Browser.updateResizeListeners();
  4923. },updateCanvasDimensions:function (canvas, wNative, hNative) {
  4924. if (wNative && hNative) {
  4925. canvas.widthNative = wNative;
  4926. canvas.heightNative = hNative;
  4927. } else {
  4928. wNative = canvas.widthNative;
  4929. hNative = canvas.heightNative;
  4930. }
  4931. var w = wNative;
  4932. var h = hNative;
  4933. if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) {
  4934. if (w/h < Module['forcedAspectRatio']) {
  4935. w = Math.round(h * Module['forcedAspectRatio']);
  4936. } else {
  4937. h = Math.round(w / Module['forcedAspectRatio']);
  4938. }
  4939. }
  4940. if (((document['webkitFullScreenElement'] || document['webkitFullscreenElement'] ||
  4941. document['mozFullScreenElement'] || document['mozFullscreenElement'] ||
  4942. document['fullScreenElement'] || document['fullscreenElement'] ||
  4943. document['msFullScreenElement'] || document['msFullscreenElement'] ||
  4944. document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) {
  4945. var factor = Math.min(screen.width / w, screen.height / h);
  4946. w = Math.round(w * factor);
  4947. h = Math.round(h * factor);
  4948. }
  4949. if (Browser.resizeCanvas) {
  4950. if (canvas.width != w) canvas.width = w;
  4951. if (canvas.height != h) canvas.height = h;
  4952. if (typeof canvas.style != 'undefined') {
  4953. canvas.style.removeProperty( "width");
  4954. canvas.style.removeProperty("height");
  4955. }
  4956. } else {
  4957. if (canvas.width != wNative) canvas.width = wNative;
  4958. if (canvas.height != hNative) canvas.height = hNative;
  4959. if (typeof canvas.style != 'undefined') {
  4960. if (w != wNative || h != hNative) {
  4961. canvas.style.setProperty( "width", w + "px", "important");
  4962. canvas.style.setProperty("height", h + "px", "important");
  4963. } else {
  4964. canvas.style.removeProperty( "width");
  4965. canvas.style.removeProperty("height");
  4966. }
  4967. }
  4968. }
  4969. }};
  4970. function _log10(x) {
  4971. return Math.log(x) / Math.LN10;
  4972. }
  4973. function _isspace(chr) {
  4974. return (chr == 32) || (chr >= 9 && chr <= 13);
  4975. }
  4976. var ___tm_current=allocate(44, "i8", ALLOC_STATIC);
  4977. var ___tm_timezone=allocate(intArrayFromString("GMT"), "i8", ALLOC_STATIC);function _localtime_r(time, tmPtr) {
  4978. _tzset();
  4979. var date = new Date(HEAP32[((time)>>2)]*1000);
  4980. HEAP32[((tmPtr)>>2)]=date.getSeconds();
  4981. HEAP32[(((tmPtr)+(4))>>2)]=date.getMinutes();
  4982. HEAP32[(((tmPtr)+(8))>>2)]=date.getHours();
  4983. HEAP32[(((tmPtr)+(12))>>2)]=date.getDate();
  4984. HEAP32[(((tmPtr)+(16))>>2)]=date.getMonth();
  4985. HEAP32[(((tmPtr)+(20))>>2)]=date.getFullYear()-1900;
  4986. HEAP32[(((tmPtr)+(24))>>2)]=date.getDay();
  4987. var start = new Date(date.getFullYear(), 0, 1);
  4988. var yday = Math.floor((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
  4989. HEAP32[(((tmPtr)+(28))>>2)]=yday;
  4990. HEAP32[(((tmPtr)+(36))>>2)]=start.getTimezoneOffset() * 60;
  4991. var dst = Number(start.getTimezoneOffset() != date.getTimezoneOffset());
  4992. HEAP32[(((tmPtr)+(32))>>2)]=dst;
  4993. HEAP32[(((tmPtr)+(40))>>2)]=___tm_timezone;
  4994. return tmPtr;
  4995. }function _localtime(time) {
  4996. return _localtime_r(time, ___tm_current);
  4997. }
  4998. function _srand(seed) {
  4999. HEAP32[((___rand_seed)>>2)]=seed
  5000. }
  5001. var _emscripten_prep_setjmp=true;
  5002. Module["_testSetjmp"] = _testSetjmp;function _longjmp(env, value) {
  5003. asm['setThrew'](env, value || 1);
  5004. throw 'longjmp';
  5005. }function _emscripten_longjmp(env, value) {
  5006. _longjmp(env, value);
  5007. }
  5008. var _ceil=Math_ceil;
  5009. function _emscripten_memcpy_big(dest, src, num) {
  5010. HEAPU8.set(HEAPU8.subarray(src, src+num), dest);
  5011. return dest;
  5012. }
  5013. Module["_memcpy"] = _memcpy;
  5014. var _llvm_pow_f64=Math_pow;
  5015. Module["_strlen"] = _strlen;function _fputs(s, stream) {
  5016. // int fputs(const char *restrict s, FILE *restrict stream);
  5017. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fputs.html
  5018. var fd = _fileno(stream);
  5019. return _write(fd, s, _strlen(s));
  5020. }
  5021. function _sbrk(bytes) {
  5022. // Implement a Linux-like 'memory area' for our 'process'.
  5023. // Changes the size of the memory area by |bytes|; returns the
  5024. // address of the previous top ('break') of the memory area
  5025. // We control the "dynamic" memory - DYNAMIC_BASE to DYNAMICTOP
  5026. var self = _sbrk;
  5027. if (!self.called) {
  5028. DYNAMICTOP = alignMemoryPage(DYNAMICTOP); // make sure we start out aligned
  5029. self.called = true;
  5030. assert(Runtime.dynamicAlloc);
  5031. self.alloc = Runtime.dynamicAlloc;
  5032. Runtime.dynamicAlloc = function() { abort('cannot dynamically allocate, sbrk now has control') };
  5033. }
  5034. var ret = DYNAMICTOP;
  5035. if (bytes != 0) self.alloc(bytes);
  5036. return ret; // Previous break location.
  5037. }
  5038. function _sinh(x) {
  5039. var p = Math.pow(Math.E, x);
  5040. return (p - (1 / p)) / 2;
  5041. }
  5042. function _cosh(x) {
  5043. var p = Math.pow(Math.E, x);
  5044. return (p + (1 / p)) / 2;
  5045. }function _tanh(x) {
  5046. return _sinh(x) / _cosh(x);
  5047. }
  5048. function _signal(sig, func) {
  5049. // TODO
  5050. return 0;
  5051. }
  5052. function __getFloat(text) {
  5053. return /^[+-]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?/.exec(text);
  5054. }function __scanString(format, get, unget, varargs) {
  5055. if (!__scanString.whiteSpace) {
  5056. __scanString.whiteSpace = {};
  5057. __scanString.whiteSpace[32] = 1;
  5058. __scanString.whiteSpace[9] = 1;
  5059. __scanString.whiteSpace[10] = 1;
  5060. __scanString.whiteSpace[11] = 1;
  5061. __scanString.whiteSpace[12] = 1;
  5062. __scanString.whiteSpace[13] = 1;
  5063. }
  5064. // Supports %x, %4x, %d.%d, %lld, %s, %f, %lf.
  5065. // TODO: Support all format specifiers.
  5066. format = Pointer_stringify(format);
  5067. var soFar = 0;
  5068. if (format.indexOf('%n') >= 0) {
  5069. // need to track soFar
  5070. var _get = get;
  5071. get = function get() {
  5072. soFar++;
  5073. return _get();
  5074. }
  5075. var _unget = unget;
  5076. unget = function unget() {
  5077. soFar--;
  5078. return _unget();
  5079. }
  5080. }
  5081. var formatIndex = 0;
  5082. var argsi = 0;
  5083. var fields = 0;
  5084. var argIndex = 0;
  5085. var next;
  5086. mainLoop:
  5087. for (var formatIndex = 0; formatIndex < format.length;) {
  5088. if (format[formatIndex] === '%' && format[formatIndex+1] == 'n') {
  5089. var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
  5090. argIndex += Runtime.getAlignSize('void*', null, true);
  5091. HEAP32[((argPtr)>>2)]=soFar;
  5092. formatIndex += 2;
  5093. continue;
  5094. }
  5095. if (format[formatIndex] === '%') {
  5096. var nextC = format.indexOf('c', formatIndex+1);
  5097. if (nextC > 0) {
  5098. var maxx = 1;
  5099. if (nextC > formatIndex+1) {
  5100. var sub = format.substring(formatIndex+1, nextC);
  5101. maxx = parseInt(sub);
  5102. if (maxx != sub) maxx = 0;
  5103. }
  5104. if (maxx) {
  5105. var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
  5106. argIndex += Runtime.getAlignSize('void*', null, true);
  5107. fields++;
  5108. for (var i = 0; i < maxx; i++) {
  5109. next = get();
  5110. HEAP8[((argPtr++)|0)]=next;
  5111. if (next === 0) return i > 0 ? fields : fields-1; // we failed to read the full length of this field
  5112. }
  5113. formatIndex += nextC - formatIndex + 1;
  5114. continue;
  5115. }
  5116. }
  5117. }
  5118. // handle %[...]
  5119. if (format[formatIndex] === '%' && format.indexOf('[', formatIndex+1) > 0) {
  5120. var match = /\%([0-9]*)\[(\^)?(\]?[^\]]*)\]/.exec(format.substring(formatIndex));
  5121. if (match) {
  5122. var maxNumCharacters = parseInt(match[1]) || Infinity;
  5123. var negateScanList = (match[2] === '^');
  5124. var scanList = match[3];
  5125. // expand "middle" dashs into character sets
  5126. var middleDashMatch;
  5127. while ((middleDashMatch = /([^\-])\-([^\-])/.exec(scanList))) {
  5128. var rangeStartCharCode = middleDashMatch[1].charCodeAt(0);
  5129. var rangeEndCharCode = middleDashMatch[2].charCodeAt(0);
  5130. for (var expanded = ''; rangeStartCharCode <= rangeEndCharCode; expanded += String.fromCharCode(rangeStartCharCode++));
  5131. scanList = scanList.replace(middleDashMatch[1] + '-' + middleDashMatch[2], expanded);
  5132. }
  5133. var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
  5134. argIndex += Runtime.getAlignSize('void*', null, true);
  5135. fields++;
  5136. for (var i = 0; i < maxNumCharacters; i++) {
  5137. next = get();
  5138. if (negateScanList) {
  5139. if (scanList.indexOf(String.fromCharCode(next)) < 0) {
  5140. HEAP8[((argPtr++)|0)]=next;
  5141. } else {
  5142. unget();
  5143. break;
  5144. }
  5145. } else {
  5146. if (scanList.indexOf(String.fromCharCode(next)) >= 0) {
  5147. HEAP8[((argPtr++)|0)]=next;
  5148. } else {
  5149. unget();
  5150. break;
  5151. }
  5152. }
  5153. }
  5154. // write out null-terminating character
  5155. HEAP8[((argPtr++)|0)]=0;
  5156. formatIndex += match[0].length;
  5157. continue;
  5158. }
  5159. }
  5160. // remove whitespace
  5161. while (1) {
  5162. next = get();
  5163. if (next == 0) return fields;
  5164. if (!(next in __scanString.whiteSpace)) break;
  5165. }
  5166. unget();
  5167. if (format[formatIndex] === '%') {
  5168. formatIndex++;
  5169. var suppressAssignment = false;
  5170. if (format[formatIndex] == '*') {
  5171. suppressAssignment = true;
  5172. formatIndex++;
  5173. }
  5174. var maxSpecifierStart = formatIndex;
  5175. while (format[formatIndex].charCodeAt(0) >= 48 &&
  5176. format[formatIndex].charCodeAt(0) <= 57) {
  5177. formatIndex++;
  5178. }
  5179. var max_;
  5180. if (formatIndex != maxSpecifierStart) {
  5181. max_ = parseInt(format.slice(maxSpecifierStart, formatIndex), 10);
  5182. }
  5183. var long_ = false;
  5184. var half = false;
  5185. var longLong = false;
  5186. if (format[formatIndex] == 'l') {
  5187. long_ = true;
  5188. formatIndex++;
  5189. if (format[formatIndex] == 'l') {
  5190. longLong = true;
  5191. formatIndex++;
  5192. }
  5193. } else if (format[formatIndex] == 'h') {
  5194. half = true;
  5195. formatIndex++;
  5196. }
  5197. var type = format[formatIndex];
  5198. formatIndex++;
  5199. var curr = 0;
  5200. var buffer = [];
  5201. // 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
  5202. if (type == 'f' || type == 'e' || type == 'g' ||
  5203. type == 'F' || type == 'E' || type == 'G') {
  5204. next = get();
  5205. while (next > 0 && (!(next in __scanString.whiteSpace))) {
  5206. buffer.push(String.fromCharCode(next));
  5207. next = get();
  5208. }
  5209. var m = __getFloat(buffer.join(''));
  5210. var last = m ? m[0].length : 0;
  5211. for (var i = 0; i < buffer.length - last + 1; i++) {
  5212. unget();
  5213. }
  5214. buffer.length = last;
  5215. } else {
  5216. next = get();
  5217. var first = true;
  5218. // Strip the optional 0x prefix for %x.
  5219. if ((type == 'x' || type == 'X') && (next == 48)) {
  5220. var peek = get();
  5221. if (peek == 120 || peek == 88) {
  5222. next = get();
  5223. } else {
  5224. unget();
  5225. }
  5226. }
  5227. while ((curr < max_ || isNaN(max_)) && next > 0) {
  5228. if (!(next in __scanString.whiteSpace) && // stop on whitespace
  5229. (type == 's' ||
  5230. ((type === 'd' || type == 'u' || type == 'i') && ((next >= 48 && next <= 57) ||
  5231. (first && next == 45))) ||
  5232. ((type === 'x' || type === 'X') && (next >= 48 && next <= 57 ||
  5233. next >= 97 && next <= 102 ||
  5234. next >= 65 && next <= 70))) &&
  5235. (formatIndex >= format.length || next !== format[formatIndex].charCodeAt(0))) { // Stop when we read something that is coming up
  5236. buffer.push(String.fromCharCode(next));
  5237. next = get();
  5238. curr++;
  5239. first = false;
  5240. } else {
  5241. break;
  5242. }
  5243. }
  5244. unget();
  5245. }
  5246. if (buffer.length === 0) return 0; // Failure.
  5247. if (suppressAssignment) continue;
  5248. var text = buffer.join('');
  5249. var argPtr = HEAP32[(((varargs)+(argIndex))>>2)];
  5250. argIndex += Runtime.getAlignSize('void*', null, true);
  5251. switch (type) {
  5252. case 'd': case 'u': case 'i':
  5253. if (half) {
  5254. HEAP16[((argPtr)>>1)]=parseInt(text, 10);
  5255. } else if (longLong) {
  5256. (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]);
  5257. } else {
  5258. HEAP32[((argPtr)>>2)]=parseInt(text, 10);
  5259. }
  5260. break;
  5261. case 'X':
  5262. case 'x':
  5263. HEAP32[((argPtr)>>2)]=parseInt(text, 16);
  5264. break;
  5265. case 'F':
  5266. case 'f':
  5267. case 'E':
  5268. case 'e':
  5269. case 'G':
  5270. case 'g':
  5271. case 'E':
  5272. // fallthrough intended
  5273. if (long_) {
  5274. HEAPF64[((argPtr)>>3)]=parseFloat(text);
  5275. } else {
  5276. HEAPF32[((argPtr)>>2)]=parseFloat(text);
  5277. }
  5278. break;
  5279. case 's':
  5280. var array = intArrayFromString(text);
  5281. for (var j = 0; j < array.length; j++) {
  5282. HEAP8[(((argPtr)+(j))|0)]=array[j];
  5283. }
  5284. break;
  5285. }
  5286. fields++;
  5287. } else if (format[formatIndex].charCodeAt(0) in __scanString.whiteSpace) {
  5288. next = get();
  5289. while (next in __scanString.whiteSpace) {
  5290. if (next <= 0) break mainLoop; // End of input.
  5291. next = get();
  5292. }
  5293. unget(next);
  5294. formatIndex++;
  5295. } else {
  5296. // Not a specifier.
  5297. next = get();
  5298. if (format[formatIndex].charCodeAt(0) !== next) {
  5299. unget(next);
  5300. break mainLoop;
  5301. }
  5302. formatIndex++;
  5303. }
  5304. }
  5305. return fields;
  5306. }
  5307. function _fgetc(stream) {
  5308. // int fgetc(FILE *stream);
  5309. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fgetc.html
  5310. var streamObj = FS.getStreamFromPtr(stream);
  5311. if (!streamObj) return -1;
  5312. if (streamObj.eof || streamObj.error) return -1;
  5313. var ret = _fread(_fgetc.ret, 1, 1, stream);
  5314. if (ret == 0) {
  5315. return -1;
  5316. } else if (ret == -1) {
  5317. streamObj.error = true;
  5318. return -1;
  5319. } else {
  5320. return HEAPU8[((_fgetc.ret)|0)];
  5321. }
  5322. }
  5323. function _ungetc(c, stream) {
  5324. // int ungetc(int c, FILE *stream);
  5325. // http://pubs.opengroup.org/onlinepubs/000095399/functions/ungetc.html
  5326. stream = FS.getStreamFromPtr(stream);
  5327. if (!stream) {
  5328. return -1;
  5329. }
  5330. if (c === -1) {
  5331. // do nothing for EOF character
  5332. return c;
  5333. }
  5334. c = unSign(c & 0xFF);
  5335. stream.ungotten.push(c);
  5336. stream.eof = false;
  5337. return c;
  5338. }function _fscanf(stream, format, varargs) {
  5339. // int fscanf(FILE *restrict stream, const char *restrict format, ... );
  5340. // http://pubs.opengroup.org/onlinepubs/000095399/functions/scanf.html
  5341. var streamObj = FS.getStreamFromPtr(stream);
  5342. if (!streamObj) {
  5343. return -1;
  5344. }
  5345. var buffer = [];
  5346. function get() {
  5347. var c = _fgetc(stream);
  5348. buffer.push(c);
  5349. return c;
  5350. };
  5351. function unget() {
  5352. _ungetc(buffer.pop(), stream);
  5353. };
  5354. return __scanString(format, get, unget, varargs);
  5355. }
  5356. var _emscripten_preinvoke=true;
  5357. function _localeconv() {
  5358. // %struct.timeval = type { char* decimal point, other stuff... }
  5359. // var indexes = Runtime.calculateStructAlignment({ fields: ['i32', 'i32'] });
  5360. var me = _localeconv;
  5361. if (!me.ret) {
  5362. // These are defaults from the "C" locale
  5363. me.ret = allocate([
  5364. allocate(intArrayFromString('.'), 'i8', ALLOC_NORMAL),0,0,0, // decimal_point
  5365. allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),0,0,0, // thousands_sep
  5366. allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),0,0,0, // grouping
  5367. allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),0,0,0, // int_curr_symbol
  5368. allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),0,0,0, // currency_symbol
  5369. allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),0,0,0, // mon_decimal_point
  5370. allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),0,0,0, // mon_thousands_sep
  5371. allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),0,0,0, // mon_grouping
  5372. allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),0,0,0, // positive_sign
  5373. allocate(intArrayFromString(''), 'i8', ALLOC_NORMAL),0,0,0 // negative_sign
  5374. ], 'i8*', ALLOC_NORMAL); // Allocate strings in lconv, still don't allocate chars
  5375. }
  5376. return me.ret;
  5377. }
  5378. function _unlink(path) {
  5379. // int unlink(const char *path);
  5380. // http://pubs.opengroup.org/onlinepubs/000095399/functions/unlink.html
  5381. path = Pointer_stringify(path);
  5382. try {
  5383. FS.unlink(path);
  5384. return 0;
  5385. } catch (e) {
  5386. FS.handleFSError(e);
  5387. return -1;
  5388. }
  5389. }
  5390. function _rmdir(path) {
  5391. // int rmdir(const char *path);
  5392. // http://pubs.opengroup.org/onlinepubs/000095399/functions/rmdir.html
  5393. path = Pointer_stringify(path);
  5394. try {
  5395. FS.rmdir(path);
  5396. return 0;
  5397. } catch (e) {
  5398. FS.handleFSError(e);
  5399. return -1;
  5400. }
  5401. }function _remove(path) {
  5402. // int remove(const char *path);
  5403. // http://pubs.opengroup.org/onlinepubs/000095399/functions/remove.html
  5404. var ret = _unlink(path);
  5405. if (ret == -1) ret = _rmdir(path);
  5406. return ret;
  5407. }
  5408. function _freopen(filename, mode, stream) {
  5409. // FILE *freopen(const char *restrict filename, const char *restrict mode, FILE *restrict stream);
  5410. // http://pubs.opengroup.org/onlinepubs/000095399/functions/freopen.html
  5411. if (!filename) {
  5412. var streamObj = FS.getStreamFromPtr(stream);
  5413. if (!streamObj) {
  5414. ___setErrNo(ERRNO_CODES.EBADF);
  5415. return 0;
  5416. }
  5417. if (_freopen.buffer) _free(_freopen.buffer);
  5418. filename = intArrayFromString(streamObj.path);
  5419. filename = allocate(filename, 'i8', ALLOC_NORMAL);
  5420. }
  5421. _fclose(stream);
  5422. return _fopen(filename, mode);
  5423. }
  5424. function _rename(old_path, new_path) {
  5425. // int rename(const char *old, const char *new);
  5426. // http://pubs.opengroup.org/onlinepubs/000095399/functions/rename.html
  5427. old_path = Pointer_stringify(old_path);
  5428. new_path = Pointer_stringify(new_path);
  5429. try {
  5430. FS.rename(old_path, new_path);
  5431. return 0;
  5432. } catch (e) {
  5433. FS.handleFSError(e);
  5434. return -1;
  5435. }
  5436. }
  5437. function _tmpfile() {
  5438. // FILE *tmpfile(void);
  5439. // http://pubs.opengroup.org/onlinepubs/000095399/functions/tmpfile.html
  5440. // TODO: Delete the created file on closing.
  5441. if (_tmpfile.mode) {
  5442. _tmpfile.mode = allocate(intArrayFromString('w+'), 'i8', ALLOC_NORMAL);
  5443. }
  5444. return _fopen(_tmpnam(0), _tmpfile.mode);
  5445. }
  5446. function _sysconf(name) {
  5447. // long sysconf(int name);
  5448. // http://pubs.opengroup.org/onlinepubs/009695399/functions/sysconf.html
  5449. switch(name) {
  5450. case 30: return PAGE_SIZE;
  5451. case 132:
  5452. case 133:
  5453. case 12:
  5454. case 137:
  5455. case 138:
  5456. case 15:
  5457. case 235:
  5458. case 16:
  5459. case 17:
  5460. case 18:
  5461. case 19:
  5462. case 20:
  5463. case 149:
  5464. case 13:
  5465. case 10:
  5466. case 236:
  5467. case 153:
  5468. case 9:
  5469. case 21:
  5470. case 22:
  5471. case 159:
  5472. case 154:
  5473. case 14:
  5474. case 77:
  5475. case 78:
  5476. case 139:
  5477. case 80:
  5478. case 81:
  5479. case 79:
  5480. case 82:
  5481. case 68:
  5482. case 67:
  5483. case 164:
  5484. case 11:
  5485. case 29:
  5486. case 47:
  5487. case 48:
  5488. case 95:
  5489. case 52:
  5490. case 51:
  5491. case 46:
  5492. return 200809;
  5493. case 27:
  5494. case 246:
  5495. case 127:
  5496. case 128:
  5497. case 23:
  5498. case 24:
  5499. case 160:
  5500. case 161:
  5501. case 181:
  5502. case 182:
  5503. case 242:
  5504. case 183:
  5505. case 184:
  5506. case 243:
  5507. case 244:
  5508. case 245:
  5509. case 165:
  5510. case 178:
  5511. case 179:
  5512. case 49:
  5513. case 50:
  5514. case 168:
  5515. case 169:
  5516. case 175:
  5517. case 170:
  5518. case 171:
  5519. case 172:
  5520. case 97:
  5521. case 76:
  5522. case 32:
  5523. case 173:
  5524. case 35:
  5525. return -1;
  5526. case 176:
  5527. case 177:
  5528. case 7:
  5529. case 155:
  5530. case 8:
  5531. case 157:
  5532. case 125:
  5533. case 126:
  5534. case 92:
  5535. case 93:
  5536. case 129:
  5537. case 130:
  5538. case 131:
  5539. case 94:
  5540. case 91:
  5541. return 1;
  5542. case 74:
  5543. case 60:
  5544. case 69:
  5545. case 70:
  5546. case 4:
  5547. return 1024;
  5548. case 31:
  5549. case 42:
  5550. case 72:
  5551. return 32;
  5552. case 87:
  5553. case 26:
  5554. case 33:
  5555. return 2147483647;
  5556. case 34:
  5557. case 1:
  5558. return 47839;
  5559. case 38:
  5560. case 36:
  5561. return 99;
  5562. case 43:
  5563. case 37:
  5564. return 2048;
  5565. case 0: return 2097152;
  5566. case 3: return 65536;
  5567. case 28: return 32768;
  5568. case 44: return 32767;
  5569. case 75: return 16384;
  5570. case 39: return 1000;
  5571. case 89: return 700;
  5572. case 71: return 256;
  5573. case 40: return 255;
  5574. case 2: return 100;
  5575. case 180: return 64;
  5576. case 25: return 20;
  5577. case 5: return 16;
  5578. case 6: return 6;
  5579. case 73: return 4;
  5580. case 84: return 1;
  5581. }
  5582. ___setErrNo(ERRNO_CODES.EINVAL);
  5583. return -1;
  5584. }
  5585. function ___errno_location() {
  5586. return ___errno_state;
  5587. }
  5588. Module["_memset"] = _memset;
  5589. Module["_bitshift64Shl"] = _bitshift64Shl;
  5590. function _abort() {
  5591. Module['abort']();
  5592. }
  5593. function __reallyNegative(x) {
  5594. return x < 0 || (x === 0 && (1/x) === -Infinity);
  5595. }function __formatString(format, varargs) {
  5596. var textIndex = format;
  5597. var argIndex = 0;
  5598. function getNextArg(type) {
  5599. // NOTE: Explicitly ignoring type safety. Otherwise this fails:
  5600. // int x = 4; printf("%c\n", (char)x);
  5601. var ret;
  5602. if (type === 'double') {
  5603. ret = HEAPF64[(((varargs)+(argIndex))>>3)];
  5604. } else if (type == 'i64') {
  5605. ret = [HEAP32[(((varargs)+(argIndex))>>2)],
  5606. HEAP32[(((varargs)+(argIndex+4))>>2)]];
  5607. } else {
  5608. type = 'i32'; // varargs are always i32, i64, or double
  5609. ret = HEAP32[(((varargs)+(argIndex))>>2)];
  5610. }
  5611. argIndex += Runtime.getNativeFieldSize(type);
  5612. return ret;
  5613. }
  5614. var ret = [];
  5615. var curr, next, currArg;
  5616. while(1) {
  5617. var startTextIndex = textIndex;
  5618. curr = HEAP8[(textIndex)];
  5619. if (curr === 0) break;
  5620. next = HEAP8[((textIndex+1)|0)];
  5621. if (curr == 37) {
  5622. // Handle flags.
  5623. var flagAlwaysSigned = false;
  5624. var flagLeftAlign = false;
  5625. var flagAlternative = false;
  5626. var flagZeroPad = false;
  5627. var flagPadSign = false;
  5628. flagsLoop: while (1) {
  5629. switch (next) {
  5630. case 43:
  5631. flagAlwaysSigned = true;
  5632. break;
  5633. case 45:
  5634. flagLeftAlign = true;
  5635. break;
  5636. case 35:
  5637. flagAlternative = true;
  5638. break;
  5639. case 48:
  5640. if (flagZeroPad) {
  5641. break flagsLoop;
  5642. } else {
  5643. flagZeroPad = true;
  5644. break;
  5645. }
  5646. case 32:
  5647. flagPadSign = true;
  5648. break;
  5649. default:
  5650. break flagsLoop;
  5651. }
  5652. textIndex++;
  5653. next = HEAP8[((textIndex+1)|0)];
  5654. }
  5655. // Handle width.
  5656. var width = 0;
  5657. if (next == 42) {
  5658. width = getNextArg('i32');
  5659. textIndex++;
  5660. next = HEAP8[((textIndex+1)|0)];
  5661. } else {
  5662. while (next >= 48 && next <= 57) {
  5663. width = width * 10 + (next - 48);
  5664. textIndex++;
  5665. next = HEAP8[((textIndex+1)|0)];
  5666. }
  5667. }
  5668. // Handle precision.
  5669. var precisionSet = false, precision = -1;
  5670. if (next == 46) {
  5671. precision = 0;
  5672. precisionSet = true;
  5673. textIndex++;
  5674. next = HEAP8[((textIndex+1)|0)];
  5675. if (next == 42) {
  5676. precision = getNextArg('i32');
  5677. textIndex++;
  5678. } else {
  5679. while(1) {
  5680. var precisionChr = HEAP8[((textIndex+1)|0)];
  5681. if (precisionChr < 48 ||
  5682. precisionChr > 57) break;
  5683. precision = precision * 10 + (precisionChr - 48);
  5684. textIndex++;
  5685. }
  5686. }
  5687. next = HEAP8[((textIndex+1)|0)];
  5688. }
  5689. if (precision < 0) {
  5690. precision = 6; // Standard default.
  5691. precisionSet = false;
  5692. }
  5693. // Handle integer sizes. WARNING: These assume a 32-bit architecture!
  5694. var argSize;
  5695. switch (String.fromCharCode(next)) {
  5696. case 'h':
  5697. var nextNext = HEAP8[((textIndex+2)|0)];
  5698. if (nextNext == 104) {
  5699. textIndex++;
  5700. argSize = 1; // char (actually i32 in varargs)
  5701. } else {
  5702. argSize = 2; // short (actually i32 in varargs)
  5703. }
  5704. break;
  5705. case 'l':
  5706. var nextNext = HEAP8[((textIndex+2)|0)];
  5707. if (nextNext == 108) {
  5708. textIndex++;
  5709. argSize = 8; // long long
  5710. } else {
  5711. argSize = 4; // long
  5712. }
  5713. break;
  5714. case 'L': // long long
  5715. case 'q': // int64_t
  5716. case 'j': // intmax_t
  5717. argSize = 8;
  5718. break;
  5719. case 'z': // size_t
  5720. case 't': // ptrdiff_t
  5721. case 'I': // signed ptrdiff_t or unsigned size_t
  5722. argSize = 4;
  5723. break;
  5724. default:
  5725. argSize = null;
  5726. }
  5727. if (argSize) textIndex++;
  5728. next = HEAP8[((textIndex+1)|0)];
  5729. // Handle type specifier.
  5730. switch (String.fromCharCode(next)) {
  5731. case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': {
  5732. // Integer.
  5733. var signed = next == 100 || next == 105;
  5734. argSize = argSize || 4;
  5735. var currArg = getNextArg('i' + (argSize * 8));
  5736. var origArg = currArg;
  5737. var argText;
  5738. // Flatten i64-1 [low, high] into a (slightly rounded) double
  5739. if (argSize == 8) {
  5740. currArg = Runtime.makeBigInt(currArg[0], currArg[1], next == 117);
  5741. }
  5742. // Truncate to requested size.
  5743. if (argSize <= 4) {
  5744. var limit = Math.pow(256, argSize) - 1;
  5745. currArg = (signed ? reSign : unSign)(currArg & limit, argSize * 8);
  5746. }
  5747. // Format the number.
  5748. var currAbsArg = Math.abs(currArg);
  5749. var prefix = '';
  5750. if (next == 100 || next == 105) {
  5751. if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], null); else
  5752. argText = reSign(currArg, 8 * argSize, 1).toString(10);
  5753. } else if (next == 117) {
  5754. if (argSize == 8 && i64Math) argText = i64Math.stringify(origArg[0], origArg[1], true); else
  5755. argText = unSign(currArg, 8 * argSize, 1).toString(10);
  5756. currArg = Math.abs(currArg);
  5757. } else if (next == 111) {
  5758. argText = (flagAlternative ? '0' : '') + currAbsArg.toString(8);
  5759. } else if (next == 120 || next == 88) {
  5760. prefix = (flagAlternative && currArg != 0) ? '0x' : '';
  5761. if (argSize == 8 && i64Math) {
  5762. if (origArg[1]) {
  5763. argText = (origArg[1]>>>0).toString(16);
  5764. var lower = (origArg[0]>>>0).toString(16);
  5765. while (lower.length < 8) lower = '0' + lower;
  5766. argText += lower;
  5767. } else {
  5768. argText = (origArg[0]>>>0).toString(16);
  5769. }
  5770. } else
  5771. if (currArg < 0) {
  5772. // Represent negative numbers in hex as 2's complement.
  5773. currArg = -currArg;
  5774. argText = (currAbsArg - 1).toString(16);
  5775. var buffer = [];
  5776. for (var i = 0; i < argText.length; i++) {
  5777. buffer.push((0xF - parseInt(argText[i], 16)).toString(16));
  5778. }
  5779. argText = buffer.join('');
  5780. while (argText.length < argSize * 2) argText = 'f' + argText;
  5781. } else {
  5782. argText = currAbsArg.toString(16);
  5783. }
  5784. if (next == 88) {
  5785. prefix = prefix.toUpperCase();
  5786. argText = argText.toUpperCase();
  5787. }
  5788. } else if (next == 112) {
  5789. if (currAbsArg === 0) {
  5790. argText = '(nil)';
  5791. } else {
  5792. prefix = '0x';
  5793. argText = currAbsArg.toString(16);
  5794. }
  5795. }
  5796. if (precisionSet) {
  5797. while (argText.length < precision) {
  5798. argText = '0' + argText;
  5799. }
  5800. }
  5801. // Add sign if needed
  5802. if (currArg >= 0) {
  5803. if (flagAlwaysSigned) {
  5804. prefix = '+' + prefix;
  5805. } else if (flagPadSign) {
  5806. prefix = ' ' + prefix;
  5807. }
  5808. }
  5809. // Move sign to prefix so we zero-pad after the sign
  5810. if (argText.charAt(0) == '-') {
  5811. prefix = '-' + prefix;
  5812. argText = argText.substr(1);
  5813. }
  5814. // Add padding.
  5815. while (prefix.length + argText.length < width) {
  5816. if (flagLeftAlign) {
  5817. argText += ' ';
  5818. } else {
  5819. if (flagZeroPad) {
  5820. argText = '0' + argText;
  5821. } else {
  5822. prefix = ' ' + prefix;
  5823. }
  5824. }
  5825. }
  5826. // Insert the result into the buffer.
  5827. argText = prefix + argText;
  5828. argText.split('').forEach(function(chr) {
  5829. ret.push(chr.charCodeAt(0));
  5830. });
  5831. break;
  5832. }
  5833. case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': {
  5834. // Float.
  5835. var currArg = getNextArg('double');
  5836. var argText;
  5837. if (isNaN(currArg)) {
  5838. argText = 'nan';
  5839. flagZeroPad = false;
  5840. } else if (!isFinite(currArg)) {
  5841. argText = (currArg < 0 ? '-' : '') + 'inf';
  5842. flagZeroPad = false;
  5843. } else {
  5844. var isGeneral = false;
  5845. var effectivePrecision = Math.min(precision, 20);
  5846. // Convert g/G to f/F or e/E, as per:
  5847. // http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
  5848. if (next == 103 || next == 71) {
  5849. isGeneral = true;
  5850. precision = precision || 1;
  5851. var exponent = parseInt(currArg.toExponential(effectivePrecision).split('e')[1], 10);
  5852. if (precision > exponent && exponent >= -4) {
  5853. next = ((next == 103) ? 'f' : 'F').charCodeAt(0);
  5854. precision -= exponent + 1;
  5855. } else {
  5856. next = ((next == 103) ? 'e' : 'E').charCodeAt(0);
  5857. precision--;
  5858. }
  5859. effectivePrecision = Math.min(precision, 20);
  5860. }
  5861. if (next == 101 || next == 69) {
  5862. argText = currArg.toExponential(effectivePrecision);
  5863. // Make sure the exponent has at least 2 digits.
  5864. if (/[eE][-+]\d$/.test(argText)) {
  5865. argText = argText.slice(0, -1) + '0' + argText.slice(-1);
  5866. }
  5867. } else if (next == 102 || next == 70) {
  5868. argText = currArg.toFixed(effectivePrecision);
  5869. if (currArg === 0 && __reallyNegative(currArg)) {
  5870. argText = '-' + argText;
  5871. }
  5872. }
  5873. var parts = argText.split('e');
  5874. if (isGeneral && !flagAlternative) {
  5875. // Discard trailing zeros and periods.
  5876. while (parts[0].length > 1 && parts[0].indexOf('.') != -1 &&
  5877. (parts[0].slice(-1) == '0' || parts[0].slice(-1) == '.')) {
  5878. parts[0] = parts[0].slice(0, -1);
  5879. }
  5880. } else {
  5881. // Make sure we have a period in alternative mode.
  5882. if (flagAlternative && argText.indexOf('.') == -1) parts[0] += '.';
  5883. // Zero pad until required precision.
  5884. while (precision > effectivePrecision++) parts[0] += '0';
  5885. }
  5886. argText = parts[0] + (parts.length > 1 ? 'e' + parts[1] : '');
  5887. // Capitalize 'E' if needed.
  5888. if (next == 69) argText = argText.toUpperCase();
  5889. // Add sign.
  5890. if (currArg >= 0) {
  5891. if (flagAlwaysSigned) {
  5892. argText = '+' + argText;
  5893. } else if (flagPadSign) {
  5894. argText = ' ' + argText;
  5895. }
  5896. }
  5897. }
  5898. // Add padding.
  5899. while (argText.length < width) {
  5900. if (flagLeftAlign) {
  5901. argText += ' ';
  5902. } else {
  5903. if (flagZeroPad && (argText[0] == '-' || argText[0] == '+')) {
  5904. argText = argText[0] + '0' + argText.slice(1);
  5905. } else {
  5906. argText = (flagZeroPad ? '0' : ' ') + argText;
  5907. }
  5908. }
  5909. }
  5910. // Adjust case.
  5911. if (next < 97) argText = argText.toUpperCase();
  5912. // Insert the result into the buffer.
  5913. argText.split('').forEach(function(chr) {
  5914. ret.push(chr.charCodeAt(0));
  5915. });
  5916. break;
  5917. }
  5918. case 's': {
  5919. // String.
  5920. var arg = getNextArg('i8*');
  5921. var argLength = arg ? _strlen(arg) : '(null)'.length;
  5922. if (precisionSet) argLength = Math.min(argLength, precision);
  5923. if (!flagLeftAlign) {
  5924. while (argLength < width--) {
  5925. ret.push(32);
  5926. }
  5927. }
  5928. if (arg) {
  5929. for (var i = 0; i < argLength; i++) {
  5930. ret.push(HEAPU8[((arg++)|0)]);
  5931. }
  5932. } else {
  5933. ret = ret.concat(intArrayFromString('(null)'.substr(0, argLength), true));
  5934. }
  5935. if (flagLeftAlign) {
  5936. while (argLength < width--) {
  5937. ret.push(32);
  5938. }
  5939. }
  5940. break;
  5941. }
  5942. case 'c': {
  5943. // Character.
  5944. if (flagLeftAlign) ret.push(getNextArg('i8'));
  5945. while (--width > 0) {
  5946. ret.push(32);
  5947. }
  5948. if (!flagLeftAlign) ret.push(getNextArg('i8'));
  5949. break;
  5950. }
  5951. case 'n': {
  5952. // Write the length written so far to the next parameter.
  5953. var ptr = getNextArg('i32*');
  5954. HEAP32[((ptr)>>2)]=ret.length;
  5955. break;
  5956. }
  5957. case '%': {
  5958. // Literal percent sign.
  5959. ret.push(curr);
  5960. break;
  5961. }
  5962. default: {
  5963. // Unknown specifiers remain untouched.
  5964. for (var i = startTextIndex; i < textIndex + 2; i++) {
  5965. ret.push(HEAP8[(i)]);
  5966. }
  5967. }
  5968. }
  5969. textIndex += 2;
  5970. // TODO: Support a/A (hex float) and m (last error) specifiers.
  5971. // TODO: Support %1${specifier} for arg selection.
  5972. } else {
  5973. ret.push(curr);
  5974. textIndex += 1;
  5975. }
  5976. }
  5977. return ret;
  5978. }function _fprintf(stream, format, varargs) {
  5979. // int fprintf(FILE *restrict stream, const char *restrict format, ...);
  5980. // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
  5981. var result = __formatString(format, varargs);
  5982. var stack = Runtime.stackSave();
  5983. var ret = _fwrite(allocate(result, 'i8', ALLOC_STACK), 1, result.length, stream);
  5984. Runtime.stackRestore(stack);
  5985. return ret;
  5986. }
  5987. function _fgets(s, n, stream) {
  5988. // char *fgets(char *restrict s, int n, FILE *restrict stream);
  5989. // http://pubs.opengroup.org/onlinepubs/000095399/functions/fgets.html
  5990. var streamObj = FS.getStreamFromPtr(stream);
  5991. if (!streamObj) return 0;
  5992. if (streamObj.error || streamObj.eof) return 0;
  5993. var byte_;
  5994. for (var i = 0; i < n - 1 && byte_ != 10; i++) {
  5995. byte_ = _fgetc(stream);
  5996. if (byte_ == -1) {
  5997. if (streamObj.error || (streamObj.eof && i == 0)) return 0;
  5998. else if (streamObj.eof) break;
  5999. }
  6000. HEAP8[(((s)+(i))|0)]=byte_;
  6001. }
  6002. HEAP8[(((s)+(i))|0)]=0;
  6003. return s;
  6004. }
  6005. var _tan=Math_tan;
  6006. function _ispunct(chr) {
  6007. return (chr >= 33 && chr <= 47) ||
  6008. (chr >= 58 && chr <= 64) ||
  6009. (chr >= 91 && chr <= 96) ||
  6010. (chr >= 123 && chr <= 126);
  6011. }
  6012. function _feof(stream) {
  6013. // int feof(FILE *stream);
  6014. // http://pubs.opengroup.org/onlinepubs/000095399/functions/feof.html
  6015. stream = FS.getStreamFromPtr(stream);
  6016. return Number(stream && stream.eof);
  6017. }
  6018. Module["_tolower"] = _tolower;
  6019. var _asin=Math_asin;
  6020. function _clearerr(stream) {
  6021. // void clearerr(FILE *stream);
  6022. // http://pubs.opengroup.org/onlinepubs/000095399/functions/clearerr.html
  6023. stream = FS.getStreamFromPtr(stream);
  6024. if (!stream) {
  6025. return;
  6026. }
  6027. stream.eof = false;
  6028. stream.error = false;
  6029. }
  6030. var _fabs=Math_abs;
  6031. function _clock() {
  6032. if (_clock.start === undefined) _clock.start = Date.now();
  6033. return Math.floor((Date.now() - _clock.start) * (1000000/1000));
  6034. }
  6035. var _getc=_fgetc;
  6036. function _modf(x, intpart) {
  6037. HEAPF64[((intpart)>>3)]=Math.floor(x);
  6038. return x - HEAPF64[((intpart)>>3)];
  6039. }
  6040. var _sqrt=Math_sqrt;
  6041. function _isxdigit(chr) {
  6042. return (chr >= 48 && chr <= 57) ||
  6043. (chr >= 97 && chr <= 102) ||
  6044. (chr >= 65 && chr <= 70);
  6045. }
  6046. function _ftell(stream) {
  6047. // long ftell(FILE *stream);
  6048. // http://pubs.opengroup.org/onlinepubs/000095399/functions/ftell.html
  6049. stream = FS.getStreamFromPtr(stream);
  6050. if (!stream) {
  6051. ___setErrNo(ERRNO_CODES.EBADF);
  6052. return -1;
  6053. }
  6054. if (FS.isChrdev(stream.node.mode)) {
  6055. ___setErrNo(ERRNO_CODES.ESPIPE);
  6056. return -1;
  6057. } else {
  6058. return stream.position;
  6059. }
  6060. }
  6061. function __exit(status) {
  6062. // void _exit(int status);
  6063. // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html
  6064. Module['exit'](status);
  6065. }function _exit(status) {
  6066. __exit(status);
  6067. }
  6068. function _snprintf(s, n, format, varargs) {
  6069. // int snprintf(char *restrict s, size_t n, const char *restrict format, ...);
  6070. // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
  6071. var result = __formatString(format, varargs);
  6072. var limit = (n === undefined) ? result.length
  6073. : Math.min(result.length, Math.max(n - 1, 0));
  6074. if (s < 0) {
  6075. s = -s;
  6076. var buf = _malloc(limit+1);
  6077. HEAP32[((s)>>2)]=buf;
  6078. s = buf;
  6079. }
  6080. for (var i = 0; i < limit; i++) {
  6081. HEAP8[(((s)+(i))|0)]=result[i];
  6082. }
  6083. if (limit < n || (n === undefined)) HEAP8[(((s)+(i))|0)]=0;
  6084. return result.length;
  6085. }function _sprintf(s, format, varargs) {
  6086. // int sprintf(char *restrict s, const char *restrict format, ...);
  6087. // http://pubs.opengroup.org/onlinepubs/000095399/functions/printf.html
  6088. return _snprintf(s, undefined, format, varargs);
  6089. }
  6090. var _emscripten_get_longjmp_result=true;
  6091. var _sin=Math_sin;
  6092. function _fmod(x, y) {
  6093. return x % y;
  6094. }var _fmodl=_fmod;
  6095. var _atan=Math_atan;
  6096. function _ferror(stream) {
  6097. // int ferror(FILE *stream);
  6098. // http://pubs.opengroup.org/onlinepubs/000095399/functions/ferror.html
  6099. stream = FS.getStreamFromPtr(stream);
  6100. return Number(stream && stream.error);
  6101. }
  6102. function _time(ptr) {
  6103. var ret = Math.floor(Date.now()/1000);
  6104. if (ptr) {
  6105. HEAP32[((ptr)>>2)]=ret;
  6106. }
  6107. return ret;
  6108. }
  6109. function _copysign(a, b) {
  6110. return __reallyNegative(a) === __reallyNegative(b) ? a : -a;
  6111. }
  6112. function _gmtime_r(time, tmPtr) {
  6113. var date = new Date(HEAP32[((time)>>2)]*1000);
  6114. HEAP32[((tmPtr)>>2)]=date.getUTCSeconds();
  6115. HEAP32[(((tmPtr)+(4))>>2)]=date.getUTCMinutes();
  6116. HEAP32[(((tmPtr)+(8))>>2)]=date.getUTCHours();
  6117. HEAP32[(((tmPtr)+(12))>>2)]=date.getUTCDate();
  6118. HEAP32[(((tmPtr)+(16))>>2)]=date.getUTCMonth();
  6119. HEAP32[(((tmPtr)+(20))>>2)]=date.getUTCFullYear()-1900;
  6120. HEAP32[(((tmPtr)+(24))>>2)]=date.getUTCDay();
  6121. HEAP32[(((tmPtr)+(36))>>2)]=0;
  6122. HEAP32[(((tmPtr)+(32))>>2)]=0;
  6123. var start = new Date(date); // define date using UTC, start from Jan 01 00:00:00 UTC
  6124. start.setUTCDate(1);
  6125. start.setUTCMonth(0);
  6126. start.setUTCHours(0);
  6127. start.setUTCMinutes(0);
  6128. start.setUTCSeconds(0);
  6129. start.setUTCMilliseconds(0);
  6130. var yday = Math.floor((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24));
  6131. HEAP32[(((tmPtr)+(28))>>2)]=yday;
  6132. HEAP32[(((tmPtr)+(40))>>2)]=___tm_timezone;
  6133. return tmPtr;
  6134. }function _gmtime(time) {
  6135. return _gmtime_r(time, ___tm_current);
  6136. }
  6137. function _isgraph(chr) {
  6138. return 0x20 < chr && chr < 0x7F;
  6139. }
  6140. function _strerror_r(errnum, strerrbuf, buflen) {
  6141. if (errnum in ERRNO_MESSAGES) {
  6142. if (ERRNO_MESSAGES[errnum].length > buflen - 1) {
  6143. return ___setErrNo(ERRNO_CODES.ERANGE);
  6144. } else {
  6145. var msg = ERRNO_MESSAGES[errnum];
  6146. writeAsciiToMemory(msg, strerrbuf);
  6147. return 0;
  6148. }
  6149. } else {
  6150. return ___setErrNo(ERRNO_CODES.EINVAL);
  6151. }
  6152. }function _strerror(errnum) {
  6153. if (!_strerror.buffer) _strerror.buffer = _malloc(256);
  6154. _strerror_r(errnum, _strerror.buffer, 256);
  6155. return _strerror.buffer;
  6156. }
  6157. var _environ=allocate(1, "i32*", ALLOC_STATIC);var ___environ=_environ;function ___buildEnvironment(env) {
  6158. // WARNING: Arbitrary limit!
  6159. var MAX_ENV_VALUES = 64;
  6160. var TOTAL_ENV_SIZE = 1024;
  6161. // Statically allocate memory for the environment.
  6162. var poolPtr;
  6163. var envPtr;
  6164. if (!___buildEnvironment.called) {
  6165. ___buildEnvironment.called = true;
  6166. // Set default values. Use string keys for Closure Compiler compatibility.
  6167. ENV['USER'] = 'root';
  6168. ENV['PATH'] = '/';
  6169. ENV['PWD'] = '/';
  6170. ENV['HOME'] = '/home/emscripten';
  6171. ENV['LANG'] = 'en_US.UTF-8';
  6172. ENV['_'] = './this.program';
  6173. // Allocate memory.
  6174. poolPtr = allocate(TOTAL_ENV_SIZE, 'i8', ALLOC_STATIC);
  6175. envPtr = allocate(MAX_ENV_VALUES * 4,
  6176. 'i8*', ALLOC_STATIC);
  6177. HEAP32[((envPtr)>>2)]=poolPtr;
  6178. HEAP32[((_environ)>>2)]=envPtr;
  6179. } else {
  6180. envPtr = HEAP32[((_environ)>>2)];
  6181. poolPtr = HEAP32[((envPtr)>>2)];
  6182. }
  6183. // Collect key=value lines.
  6184. var strings = [];
  6185. var totalSize = 0;
  6186. for (var key in env) {
  6187. if (typeof env[key] === 'string') {
  6188. var line = key + '=' + env[key];
  6189. strings.push(line);
  6190. totalSize += line.length;
  6191. }
  6192. }
  6193. if (totalSize > TOTAL_ENV_SIZE) {
  6194. throw new Error('Environment size exceeded TOTAL_ENV_SIZE!');
  6195. }
  6196. // Make new.
  6197. var ptrSize = 4;
  6198. for (var i = 0; i < strings.length; i++) {
  6199. var line = strings[i];
  6200. writeAsciiToMemory(line, poolPtr);
  6201. HEAP32[(((envPtr)+(i * ptrSize))>>2)]=poolPtr;
  6202. poolPtr += line.length + 1;
  6203. }
  6204. HEAP32[(((envPtr)+(strings.length * ptrSize))>>2)]=0;
  6205. }var ENV={};function _getenv(name) {
  6206. // char *getenv(const char *name);
  6207. // http://pubs.opengroup.org/onlinepubs/009695399/functions/getenv.html
  6208. if (name === 0) return 0;
  6209. name = Pointer_stringify(name);
  6210. if (!ENV.hasOwnProperty(name)) return 0;
  6211. if (_getenv.ret) _free(_getenv.ret);
  6212. _getenv.ret = allocate(intArrayFromString(ENV[name]), 'i8', ALLOC_NORMAL);
  6213. return _getenv.ret;
  6214. }
  6215. var _emscripten_setjmp=true;
  6216. var _cos=Math_cos;
  6217. function _isalnum(chr) {
  6218. return (chr >= 48 && chr <= 57) ||
  6219. (chr >= 97 && chr <= 122) ||
  6220. (chr >= 65 && chr <= 90);
  6221. }
  6222. var _BItoD=true;
  6223. function _difftime(time1, time0) {
  6224. return time1 - time0;
  6225. }
  6226. var _floor=Math_floor;
  6227. function _iscntrl(chr) {
  6228. return (0 <= chr && chr <= 0x1F) || chr === 0x7F;
  6229. }
  6230. var _atan2=Math_atan2;
  6231. function _setvbuf(stream, buf, type, size) {
  6232. // int setvbuf(FILE *restrict stream, char *restrict buf, int type, size_t size);
  6233. // http://pubs.opengroup.org/onlinepubs/000095399/functions/setvbuf.html
  6234. // TODO: Implement custom buffering.
  6235. return 0;
  6236. }
  6237. var _exp=Math_exp;
  6238. var _copysignl=_copysign;
  6239. function _islower(chr) {
  6240. return chr >= 97 && chr <= 122;
  6241. }
  6242. var _acos=Math_acos;
  6243. function _isupper(chr) {
  6244. return chr >= 65 && chr <= 90;
  6245. }
  6246. function __isLeapYear(year) {
  6247. return year%4 === 0 && (year%100 !== 0 || year%400 === 0);
  6248. }
  6249. function __arraySum(array, index) {
  6250. var sum = 0;
  6251. for (var i = 0; i <= index; sum += array[i++]);
  6252. return sum;
  6253. }
  6254. var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];
  6255. var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date, days) {
  6256. var newDate = new Date(date.getTime());
  6257. while(days > 0) {
  6258. var leap = __isLeapYear(newDate.getFullYear());
  6259. var currentMonth = newDate.getMonth();
  6260. var daysInCurrentMonth = (leap ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR)[currentMonth];
  6261. if (days > daysInCurrentMonth-newDate.getDate()) {
  6262. // we spill over to next month
  6263. days -= (daysInCurrentMonth-newDate.getDate()+1);
  6264. newDate.setDate(1);
  6265. if (currentMonth < 11) {
  6266. newDate.setMonth(currentMonth+1)
  6267. } else {
  6268. newDate.setMonth(0);
  6269. newDate.setFullYear(newDate.getFullYear()+1);
  6270. }
  6271. } else {
  6272. // we stay in current month
  6273. newDate.setDate(newDate.getDate()+days);
  6274. return newDate;
  6275. }
  6276. }
  6277. return newDate;
  6278. }function _strftime(s, maxsize, format, tm) {
  6279. // size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr);
  6280. // http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html
  6281. var date = {
  6282. tm_sec: HEAP32[((tm)>>2)],
  6283. tm_min: HEAP32[(((tm)+(4))>>2)],
  6284. tm_hour: HEAP32[(((tm)+(8))>>2)],
  6285. tm_mday: HEAP32[(((tm)+(12))>>2)],
  6286. tm_mon: HEAP32[(((tm)+(16))>>2)],
  6287. tm_year: HEAP32[(((tm)+(20))>>2)],
  6288. tm_wday: HEAP32[(((tm)+(24))>>2)],
  6289. tm_yday: HEAP32[(((tm)+(28))>>2)],
  6290. tm_isdst: HEAP32[(((tm)+(32))>>2)]
  6291. };
  6292. var pattern = Pointer_stringify(format);
  6293. // expand format
  6294. var EXPANSION_RULES_1 = {
  6295. '%c': '%a %b %d %H:%M:%S %Y', // Replaced by the locale's appropriate date and time representation - e.g., Mon Aug 3 14:02:01 2013
  6296. '%D': '%m/%d/%y', // Equivalent to %m / %d / %y
  6297. '%F': '%Y-%m-%d', // Equivalent to %Y - %m - %d
  6298. '%h': '%b', // Equivalent to %b
  6299. '%r': '%I:%M:%S %p', // Replaced by the time in a.m. and p.m. notation
  6300. '%R': '%H:%M', // Replaced by the time in 24-hour notation
  6301. '%T': '%H:%M:%S', // Replaced by the time
  6302. '%x': '%m/%d/%y', // Replaced by the locale's appropriate date representation
  6303. '%X': '%H:%M:%S', // Replaced by the locale's appropriate date representation
  6304. };
  6305. for (var rule in EXPANSION_RULES_1) {
  6306. pattern = pattern.replace(new RegExp(rule, 'g'), EXPANSION_RULES_1[rule]);
  6307. }
  6308. var WEEKDAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  6309. var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
  6310. function leadingSomething(value, digits, character) {
  6311. var str = typeof value === 'number' ? value.toString() : (value || '');
  6312. while (str.length < digits) {
  6313. str = character[0]+str;
  6314. }
  6315. return str;
  6316. };
  6317. function leadingNulls(value, digits) {
  6318. return leadingSomething(value, digits, '0');
  6319. };
  6320. function compareByDay(date1, date2) {
  6321. function sgn(value) {
  6322. return value < 0 ? -1 : (value > 0 ? 1 : 0);
  6323. };
  6324. var compare;
  6325. if ((compare = sgn(date1.getFullYear()-date2.getFullYear())) === 0) {
  6326. if ((compare = sgn(date1.getMonth()-date2.getMonth())) === 0) {
  6327. compare = sgn(date1.getDate()-date2.getDate());
  6328. }
  6329. }
  6330. return compare;
  6331. };
  6332. function getFirstWeekStartDate(janFourth) {
  6333. switch (janFourth.getDay()) {
  6334. case 0: // Sunday
  6335. return new Date(janFourth.getFullYear()-1, 11, 29);
  6336. case 1: // Monday
  6337. return janFourth;
  6338. case 2: // Tuesday
  6339. return new Date(janFourth.getFullYear(), 0, 3);
  6340. case 3: // Wednesday
  6341. return new Date(janFourth.getFullYear(), 0, 2);
  6342. case 4: // Thursday
  6343. return new Date(janFourth.getFullYear(), 0, 1);
  6344. case 5: // Friday
  6345. return new Date(janFourth.getFullYear()-1, 11, 31);
  6346. case 6: // Saturday
  6347. return new Date(janFourth.getFullYear()-1, 11, 30);
  6348. }
  6349. };
  6350. function getWeekBasedYear(date) {
  6351. var thisDate = __addDays(new Date(date.tm_year+1900, 0, 1), date.tm_yday);
  6352. var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4);
  6353. var janFourthNextYear = new Date(thisDate.getFullYear()+1, 0, 4);
  6354. var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear);
  6355. var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear);
  6356. if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) {
  6357. // this date is after the start of the first week of this year
  6358. if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) {
  6359. return thisDate.getFullYear()+1;
  6360. } else {
  6361. return thisDate.getFullYear();
  6362. }
  6363. } else {
  6364. return thisDate.getFullYear()-1;
  6365. }
  6366. };
  6367. var EXPANSION_RULES_2 = {
  6368. '%a': function(date) {
  6369. return WEEKDAYS[date.tm_wday].substring(0,3);
  6370. },
  6371. '%A': function(date) {
  6372. return WEEKDAYS[date.tm_wday];
  6373. },
  6374. '%b': function(date) {
  6375. return MONTHS[date.tm_mon].substring(0,3);
  6376. },
  6377. '%B': function(date) {
  6378. return MONTHS[date.tm_mon];
  6379. },
  6380. '%C': function(date) {
  6381. var year = date.tm_year+1900;
  6382. return leadingNulls(Math.floor(year/100),2);
  6383. },
  6384. '%d': function(date) {
  6385. return leadingNulls(date.tm_mday, 2);
  6386. },
  6387. '%e': function(date) {
  6388. return leadingSomething(date.tm_mday, 2, ' ');
  6389. },
  6390. '%g': function(date) {
  6391. // %g, %G, and %V give values according to the ISO 8601:2000 standard week-based year.
  6392. // In this system, weeks begin on a Monday and week 1 of the year is the week that includes
  6393. // January 4th, which is also the week that includes the first Thursday of the year, and
  6394. // is also the first week that contains at least four days in the year.
  6395. // If the first Monday of January is the 2nd, 3rd, or 4th, the preceding days are part of
  6396. // the last week of the preceding year; thus, for Saturday 2nd January 1999,
  6397. // %G is replaced by 1998 and %V is replaced by 53. If December 29th, 30th,
  6398. // or 31st is a Monday, it and any following days are part of week 1 of the following year.
  6399. // Thus, for Tuesday 30th December 1997, %G is replaced by 1998 and %V is replaced by 01.
  6400. return getWeekBasedYear(date).toString().substring(2);
  6401. },
  6402. '%G': function(date) {
  6403. return getWeekBasedYear(date);
  6404. },
  6405. '%H': function(date) {
  6406. return leadingNulls(date.tm_hour, 2);
  6407. },
  6408. '%I': function(date) {
  6409. return leadingNulls(date.tm_hour < 13 ? date.tm_hour : date.tm_hour-12, 2);
  6410. },
  6411. '%j': function(date) {
  6412. // Day of the year (001-366)
  6413. return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon-1), 3);
  6414. },
  6415. '%m': function(date) {
  6416. return leadingNulls(date.tm_mon+1, 2);
  6417. },
  6418. '%M': function(date) {
  6419. return leadingNulls(date.tm_min, 2);
  6420. },
  6421. '%n': function() {
  6422. return '\n';
  6423. },
  6424. '%p': function(date) {
  6425. if (date.tm_hour > 0 && date.tm_hour < 13) {
  6426. return 'AM';
  6427. } else {
  6428. return 'PM';
  6429. }
  6430. },
  6431. '%S': function(date) {
  6432. return leadingNulls(date.tm_sec, 2);
  6433. },
  6434. '%t': function() {
  6435. return '\t';
  6436. },
  6437. '%u': function(date) {
  6438. var day = new Date(date.tm_year+1900, date.tm_mon+1, date.tm_mday, 0, 0, 0, 0);
  6439. return day.getDay() || 7;
  6440. },
  6441. '%U': function(date) {
  6442. // Replaced by the week number of the year as a decimal number [00,53].
  6443. // The first Sunday of January is the first day of week 1;
  6444. // days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]
  6445. var janFirst = new Date(date.tm_year+1900, 0, 1);
  6446. var firstSunday = janFirst.getDay() === 0 ? janFirst : __addDays(janFirst, 7-janFirst.getDay());
  6447. var endDate = new Date(date.tm_year+1900, date.tm_mon, date.tm_mday);
  6448. // is target date after the first Sunday?
  6449. if (compareByDay(firstSunday, endDate) < 0) {
  6450. // calculate difference in days between first Sunday and endDate
  6451. var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth()-1)-31;
  6452. var firstSundayUntilEndJanuary = 31-firstSunday.getDate();
  6453. var days = firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();
  6454. return leadingNulls(Math.ceil(days/7), 2);
  6455. }
  6456. return compareByDay(firstSunday, janFirst) === 0 ? '01': '00';
  6457. },
  6458. '%V': function(date) {
  6459. // Replaced by the week number of the year (Monday as the first day of the week)
  6460. // as a decimal number [01,53]. If the week containing 1 January has four
  6461. // or more days in the new year, then it is considered week 1.
  6462. // Otherwise, it is the last week of the previous year, and the next week is week 1.
  6463. // Both January 4th and the first Thursday of January are always in week 1. [ tm_year, tm_wday, tm_yday]
  6464. var janFourthThisYear = new Date(date.tm_year+1900, 0, 4);
  6465. var janFourthNextYear = new Date(date.tm_year+1901, 0, 4);
  6466. var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear);
  6467. var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear);
  6468. var endDate = __addDays(new Date(date.tm_year+1900, 0, 1), date.tm_yday);
  6469. if (compareByDay(endDate, firstWeekStartThisYear) < 0) {
  6470. // if given date is before this years first week, then it belongs to the 53rd week of last year
  6471. return '53';
  6472. }
  6473. if (compareByDay(firstWeekStartNextYear, endDate) <= 0) {
  6474. // if given date is after next years first week, then it belongs to the 01th week of next year
  6475. return '01';
  6476. }
  6477. // given date is in between CW 01..53 of this calendar year
  6478. var daysDifference;
  6479. if (firstWeekStartThisYear.getFullYear() < date.tm_year+1900) {
  6480. // first CW of this year starts last year
  6481. daysDifference = date.tm_yday+32-firstWeekStartThisYear.getDate()
  6482. } else {
  6483. // first CW of this year starts this year
  6484. daysDifference = date.tm_yday+1-firstWeekStartThisYear.getDate();
  6485. }
  6486. return leadingNulls(Math.ceil(daysDifference/7), 2);
  6487. },
  6488. '%w': function(date) {
  6489. var day = new Date(date.tm_year+1900, date.tm_mon+1, date.tm_mday, 0, 0, 0, 0);
  6490. return day.getDay();
  6491. },
  6492. '%W': function(date) {
  6493. // Replaced by the week number of the year as a decimal number [00,53].
  6494. // The first Monday of January is the first day of week 1;
  6495. // days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]
  6496. var janFirst = new Date(date.tm_year, 0, 1);
  6497. var firstMonday = janFirst.getDay() === 1 ? janFirst : __addDays(janFirst, janFirst.getDay() === 0 ? 1 : 7-janFirst.getDay()+1);
  6498. var endDate = new Date(date.tm_year+1900, date.tm_mon, date.tm_mday);
  6499. // is target date after the first Monday?
  6500. if (compareByDay(firstMonday, endDate) < 0) {
  6501. var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth()-1)-31;
  6502. var firstMondayUntilEndJanuary = 31-firstMonday.getDate();
  6503. var days = firstMondayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();
  6504. return leadingNulls(Math.ceil(days/7), 2);
  6505. }
  6506. return compareByDay(firstMonday, janFirst) === 0 ? '01': '00';
  6507. },
  6508. '%y': function(date) {
  6509. // Replaced by the last two digits of the year as a decimal number [00,99]. [ tm_year]
  6510. return (date.tm_year+1900).toString().substring(2);
  6511. },
  6512. '%Y': function(date) {
  6513. // Replaced by the year as a decimal number (for example, 1997). [ tm_year]
  6514. return date.tm_year+1900;
  6515. },
  6516. '%z': function(date) {
  6517. // Replaced by the offset from UTC in the ISO 8601:2000 standard format ( +hhmm or -hhmm ),
  6518. // or by no characters if no timezone is determinable.
  6519. // For example, "-0430" means 4 hours 30 minutes behind UTC (west of Greenwich).
  6520. // If tm_isdst is zero, the standard time offset is used.
  6521. // If tm_isdst is greater than zero, the daylight savings time offset is used.
  6522. // If tm_isdst is negative, no characters are returned.
  6523. // FIXME: we cannot determine time zone (or can we?)
  6524. return '';
  6525. },
  6526. '%Z': function(date) {
  6527. // Replaced by the timezone name or abbreviation, or by no bytes if no timezone information exists. [ tm_isdst]
  6528. // FIXME: we cannot determine time zone (or can we?)
  6529. return '';
  6530. },
  6531. '%%': function() {
  6532. return '%';
  6533. }
  6534. };
  6535. for (var rule in EXPANSION_RULES_2) {
  6536. if (pattern.indexOf(rule) >= 0) {
  6537. pattern = pattern.replace(new RegExp(rule, 'g'), EXPANSION_RULES_2[rule](date));
  6538. }
  6539. }
  6540. var bytes = intArrayFromString(pattern, false);
  6541. if (bytes.length > maxsize) {
  6542. return 0;
  6543. }
  6544. writeArrayToMemory(bytes, s);
  6545. return bytes.length-1;
  6546. }
  6547. 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;
  6548. ___errno_state = Runtime.staticAlloc(4); HEAP32[((___errno_state)>>2)]=0;
  6549. __ATINIT__.unshift({ func: function() { TTY.init() } });__ATEXIT__.push({ func: function() { TTY.shutdown() } });TTY.utf8 = new Runtime.UTF8Processor();
  6550. if (ENVIRONMENT_IS_NODE) { var fs = require("fs"); NODEFS.staticInit(); }
  6551. __ATINIT__.push({ func: function() { SOCKFS.root = FS.mount(SOCKFS, {}, null); } });
  6552. _fputc.ret = allocate([0], "i8", ALLOC_STATIC);
  6553. Module["requestFullScreen"] = function Module_requestFullScreen(lockPointer, resizeCanvas) { Browser.requestFullScreen(lockPointer, resizeCanvas) };
  6554. Module["requestAnimationFrame"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };
  6555. Module["setCanvasSize"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };
  6556. Module["pauseMainLoop"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() };
  6557. Module["resumeMainLoop"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() };
  6558. Module["getUserMedia"] = function Module_getUserMedia() { Browser.getUserMedia() }
  6559. _fgetc.ret = allocate([0], "i8", ALLOC_STATIC);
  6560. ___buildEnvironment(ENV);
  6561. STACK_BASE = STACKTOP = Runtime.alignMemory(STATICTOP);
  6562. staticSealed = true; // seal the static portion of memory
  6563. STACK_MAX = STACK_BASE + 5242880;
  6564. DYNAMIC_BASE = DYNAMICTOP = Runtime.alignMemory(STACK_MAX);
  6565. assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack");
  6566. 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);
  6567. 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);
  6568. var Math_min = Math.min;
  6569. function invoke_iiii(index,a1,a2,a3) {
  6570. try {
  6571. return Module["dynCall_iiii"](index,a1,a2,a3);
  6572. } catch(e) {
  6573. if (typeof e !== 'number' && e !== 'longjmp') throw e;
  6574. asm["setThrew"](1, 0);
  6575. }
  6576. }
  6577. function invoke_vi(index,a1) {
  6578. try {
  6579. Module["dynCall_vi"](index,a1);
  6580. } catch(e) {
  6581. if (typeof e !== 'number' && e !== 'longjmp') throw e;
  6582. asm["setThrew"](1, 0);
  6583. }
  6584. }
  6585. function invoke_vii(index,a1,a2) {
  6586. try {
  6587. Module["dynCall_vii"](index,a1,a2);
  6588. } catch(e) {
  6589. if (typeof e !== 'number' && e !== 'longjmp') throw e;
  6590. asm["setThrew"](1, 0);
  6591. }
  6592. }
  6593. function invoke_ii(index,a1) {
  6594. try {
  6595. return Module["dynCall_ii"](index,a1);
  6596. } catch(e) {
  6597. if (typeof e !== 'number' && e !== 'longjmp') throw e;
  6598. asm["setThrew"](1, 0);
  6599. }
  6600. }
  6601. function invoke_iiiii(index,a1,a2,a3,a4) {
  6602. try {
  6603. return Module["dynCall_iiiii"](index,a1,a2,a3,a4);
  6604. } catch(e) {
  6605. if (typeof e !== 'number' && e !== 'longjmp') throw e;
  6606. asm["setThrew"](1, 0);
  6607. }
  6608. }
  6609. function invoke_iii(index,a1,a2) {
  6610. try {
  6611. return Module["dynCall_iii"](index,a1,a2);
  6612. } catch(e) {
  6613. if (typeof e !== 'number' && e !== 'longjmp') throw e;
  6614. asm["setThrew"](1, 0);
  6615. }
  6616. }
  6617. function asmPrintInt(x, y) {
  6618. Module.print('int ' + x + ',' + y);// + ' ' + new Error().stack);
  6619. }
  6620. function asmPrintFloat(x, y) {
  6621. Module.print('float ' + x + ',' + y);// + ' ' + new Error().stack);
  6622. }
  6623. // EMSCRIPTEN_START_ASM
  6624. var asm = (function(global, env, buffer) {
  6625. 'use asm';
  6626. var HEAP8 = new global.Int8Array(buffer);
  6627. var HEAP16 = new global.Int16Array(buffer);
  6628. var HEAP32 = new global.Int32Array(buffer);
  6629. var HEAPU8 = new global.Uint8Array(buffer);
  6630. var HEAPU16 = new global.Uint16Array(buffer);
  6631. var HEAPU32 = new global.Uint32Array(buffer);
  6632. var HEAPF32 = new global.Float32Array(buffer);
  6633. var HEAPF64 = new global.Float64Array(buffer);
  6634. var STACKTOP=env.STACKTOP|0;
  6635. var STACK_MAX=env.STACK_MAX|0;
  6636. var tempDoublePtr=env.tempDoublePtr|0;
  6637. var ABORT=env.ABORT|0;
  6638. var cttz_i8=env.cttz_i8|0;
  6639. var ctlz_i8=env.ctlz_i8|0;
  6640. var ___rand_seed=env.___rand_seed|0;
  6641. var _stderr=env._stderr|0;
  6642. var _stdin=env._stdin|0;
  6643. var _stdout=env._stdout|0;
  6644. var __THREW__ = 0;
  6645. var threwValue = 0;
  6646. var setjmpId = 0;
  6647. var undef = 0;
  6648. var nan = +env.NaN, inf = +env.Infinity;
  6649. var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0;
  6650. var tempRet0 = 0;
  6651. var tempRet1 = 0;
  6652. var tempRet2 = 0;
  6653. var tempRet3 = 0;
  6654. var tempRet4 = 0;
  6655. var tempRet5 = 0;
  6656. var tempRet6 = 0;
  6657. var tempRet7 = 0;
  6658. var tempRet8 = 0;
  6659. var tempRet9 = 0;
  6660. var Math_floor=global.Math.floor;
  6661. var Math_abs=global.Math.abs;
  6662. var Math_sqrt=global.Math.sqrt;
  6663. var Math_pow=global.Math.pow;
  6664. var Math_cos=global.Math.cos;
  6665. var Math_sin=global.Math.sin;
  6666. var Math_tan=global.Math.tan;
  6667. var Math_acos=global.Math.acos;
  6668. var Math_asin=global.Math.asin;
  6669. var Math_atan=global.Math.atan;
  6670. var Math_atan2=global.Math.atan2;
  6671. var Math_exp=global.Math.exp;
  6672. var Math_log=global.Math.log;
  6673. var Math_ceil=global.Math.ceil;
  6674. var Math_imul=global.Math.imul;
  6675. var abort=env.abort;
  6676. var assert=env.assert;
  6677. var asmPrintInt=env.asmPrintInt;
  6678. var asmPrintFloat=env.asmPrintFloat;
  6679. var Math_min=env.min;
  6680. var invoke_iiii=env.invoke_iiii;
  6681. var invoke_vi=env.invoke_vi;
  6682. var invoke_vii=env.invoke_vii;
  6683. var invoke_ii=env.invoke_ii;
  6684. var invoke_iiiii=env.invoke_iiiii;
  6685. var invoke_iii=env.invoke_iii;
  6686. var _isalnum=env._isalnum;
  6687. var _fabs=env._fabs;
  6688. var _frexp=env._frexp;
  6689. var _exp=env._exp;
  6690. var _fread=env._fread;
  6691. var __reallyNegative=env.__reallyNegative;
  6692. var _longjmp=env._longjmp;
  6693. var __addDays=env.__addDays;
  6694. var _fsync=env._fsync;
  6695. var _signal=env._signal;
  6696. var _rename=env._rename;
  6697. var _sbrk=env._sbrk;
  6698. var _emscripten_memcpy_big=env._emscripten_memcpy_big;
  6699. var _sinh=env._sinh;
  6700. var _sysconf=env._sysconf;
  6701. var _close=env._close;
  6702. var _ferror=env._ferror;
  6703. var _clock=env._clock;
  6704. var _cos=env._cos;
  6705. var _tanh=env._tanh;
  6706. var _unlink=env._unlink;
  6707. var _write=env._write;
  6708. var __isLeapYear=env.__isLeapYear;
  6709. var _ftell=env._ftell;
  6710. var _isupper=env._isupper;
  6711. var _gmtime_r=env._gmtime_r;
  6712. var _islower=env._islower;
  6713. var _tmpnam=env._tmpnam;
  6714. var _tmpfile=env._tmpfile;
  6715. var _send=env._send;
  6716. var _abort=env._abort;
  6717. var _setvbuf=env._setvbuf;
  6718. var _atan2=env._atan2;
  6719. var _setlocale=env._setlocale;
  6720. var _isgraph=env._isgraph;
  6721. var _modf=env._modf;
  6722. var _strerror_r=env._strerror_r;
  6723. var _fscanf=env._fscanf;
  6724. var ___setErrNo=env.___setErrNo;
  6725. var _isalpha=env._isalpha;
  6726. var _srand=env._srand;
  6727. var _mktime=env._mktime;
  6728. var _putchar=env._putchar;
  6729. var _gmtime=env._gmtime;
  6730. var _localeconv=env._localeconv;
  6731. var _sprintf=env._sprintf;
  6732. var _localtime=env._localtime;
  6733. var _read=env._read;
  6734. var _fwrite=env._fwrite;
  6735. var _time=env._time;
  6736. var _fprintf=env._fprintf;
  6737. var _exit=env._exit;
  6738. var _freopen=env._freopen;
  6739. var _llvm_pow_f64=env._llvm_pow_f64;
  6740. var _fgetc=env._fgetc;
  6741. var _fmod=env._fmod;
  6742. var _lseek=env._lseek;
  6743. var _rmdir=env._rmdir;
  6744. var _asin=env._asin;
  6745. var _floor=env._floor;
  6746. var _pwrite=env._pwrite;
  6747. var _localtime_r=env._localtime_r;
  6748. var _tzset=env._tzset;
  6749. var _open=env._open;
  6750. var _remove=env._remove;
  6751. var _snprintf=env._snprintf;
  6752. var __scanString=env.__scanString;
  6753. var _strftime=env._strftime;
  6754. var _fseek=env._fseek;
  6755. var _iscntrl=env._iscntrl;
  6756. var _isxdigit=env._isxdigit;
  6757. var _fclose=env._fclose;
  6758. var _log=env._log;
  6759. var _recv=env._recv;
  6760. var _tan=env._tan;
  6761. var _copysign=env._copysign;
  6762. var __getFloat=env.__getFloat;
  6763. var _fputc=env._fputc;
  6764. var _ispunct=env._ispunct;
  6765. var _ceil=env._ceil;
  6766. var _isspace=env._isspace;
  6767. var _fopen=env._fopen;
  6768. var _sin=env._sin;
  6769. var _acos=env._acos;
  6770. var _cosh=env._cosh;
  6771. var ___buildEnvironment=env.___buildEnvironment;
  6772. var _difftime=env._difftime;
  6773. var _ungetc=env._ungetc;
  6774. var _system=env._system;
  6775. var _fflush=env._fflush;
  6776. var _log10=env._log10;
  6777. var _fileno=env._fileno;
  6778. var __exit=env.__exit;
  6779. var __arraySum=env.__arraySum;
  6780. var _fgets=env._fgets;
  6781. var _atan=env._atan;
  6782. var _pread=env._pread;
  6783. var _mkport=env._mkport;
  6784. var _toupper=env._toupper;
  6785. var _feof=env._feof;
  6786. var ___errno_location=env.___errno_location;
  6787. var _clearerr=env._clearerr;
  6788. var _getenv=env._getenv;
  6789. var _strerror=env._strerror;
  6790. var _emscripten_longjmp=env._emscripten_longjmp;
  6791. var __formatString=env.__formatString;
  6792. var _fputs=env._fputs;
  6793. var _sqrt=env._sqrt;
  6794. var tempFloat = 0.0;
  6795. // EMSCRIPTEN_START_FUNCS
  6796. function _malloc(i12) {
  6797. i12 = i12 | 0;
  6798. var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0;
  6799. i1 = STACKTOP;
  6800. do {
  6801. if (i12 >>> 0 < 245) {
  6802. if (i12 >>> 0 < 11) {
  6803. i12 = 16;
  6804. } else {
  6805. i12 = i12 + 11 & -8;
  6806. }
  6807. i20 = i12 >>> 3;
  6808. i18 = HEAP32[3228] | 0;
  6809. i21 = i18 >>> i20;
  6810. if ((i21 & 3 | 0) != 0) {
  6811. i6 = (i21 & 1 ^ 1) + i20 | 0;
  6812. i5 = i6 << 1;
  6813. i3 = 12952 + (i5 << 2) | 0;
  6814. i5 = 12952 + (i5 + 2 << 2) | 0;
  6815. i7 = HEAP32[i5 >> 2] | 0;
  6816. i2 = i7 + 8 | 0;
  6817. i4 = HEAP32[i2 >> 2] | 0;
  6818. do {
  6819. if ((i3 | 0) != (i4 | 0)) {
  6820. if (i4 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  6821. _abort();
  6822. }
  6823. i8 = i4 + 12 | 0;
  6824. if ((HEAP32[i8 >> 2] | 0) == (i7 | 0)) {
  6825. HEAP32[i8 >> 2] = i3;
  6826. HEAP32[i5 >> 2] = i4;
  6827. break;
  6828. } else {
  6829. _abort();
  6830. }
  6831. } else {
  6832. HEAP32[3228] = i18 & ~(1 << i6);
  6833. }
  6834. } while (0);
  6835. i32 = i6 << 3;
  6836. HEAP32[i7 + 4 >> 2] = i32 | 3;
  6837. i32 = i7 + (i32 | 4) | 0;
  6838. HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
  6839. i32 = i2;
  6840. STACKTOP = i1;
  6841. return i32 | 0;
  6842. }
  6843. if (i12 >>> 0 > (HEAP32[12920 >> 2] | 0) >>> 0) {
  6844. if ((i21 | 0) != 0) {
  6845. i7 = 2 << i20;
  6846. i7 = i21 << i20 & (i7 | 0 - i7);
  6847. i7 = (i7 & 0 - i7) + -1 | 0;
  6848. i2 = i7 >>> 12 & 16;
  6849. i7 = i7 >>> i2;
  6850. i6 = i7 >>> 5 & 8;
  6851. i7 = i7 >>> i6;
  6852. i5 = i7 >>> 2 & 4;
  6853. i7 = i7 >>> i5;
  6854. i4 = i7 >>> 1 & 2;
  6855. i7 = i7 >>> i4;
  6856. i3 = i7 >>> 1 & 1;
  6857. i3 = (i6 | i2 | i5 | i4 | i3) + (i7 >>> i3) | 0;
  6858. i7 = i3 << 1;
  6859. i4 = 12952 + (i7 << 2) | 0;
  6860. i7 = 12952 + (i7 + 2 << 2) | 0;
  6861. i5 = HEAP32[i7 >> 2] | 0;
  6862. i2 = i5 + 8 | 0;
  6863. i6 = HEAP32[i2 >> 2] | 0;
  6864. do {
  6865. if ((i4 | 0) != (i6 | 0)) {
  6866. if (i6 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  6867. _abort();
  6868. }
  6869. i8 = i6 + 12 | 0;
  6870. if ((HEAP32[i8 >> 2] | 0) == (i5 | 0)) {
  6871. HEAP32[i8 >> 2] = i4;
  6872. HEAP32[i7 >> 2] = i6;
  6873. break;
  6874. } else {
  6875. _abort();
  6876. }
  6877. } else {
  6878. HEAP32[3228] = i18 & ~(1 << i3);
  6879. }
  6880. } while (0);
  6881. i6 = i3 << 3;
  6882. i4 = i6 - i12 | 0;
  6883. HEAP32[i5 + 4 >> 2] = i12 | 3;
  6884. i3 = i5 + i12 | 0;
  6885. HEAP32[i5 + (i12 | 4) >> 2] = i4 | 1;
  6886. HEAP32[i5 + i6 >> 2] = i4;
  6887. i6 = HEAP32[12920 >> 2] | 0;
  6888. if ((i6 | 0) != 0) {
  6889. i5 = HEAP32[12932 >> 2] | 0;
  6890. i8 = i6 >>> 3;
  6891. i9 = i8 << 1;
  6892. i6 = 12952 + (i9 << 2) | 0;
  6893. i7 = HEAP32[3228] | 0;
  6894. i8 = 1 << i8;
  6895. if ((i7 & i8 | 0) != 0) {
  6896. i7 = 12952 + (i9 + 2 << 2) | 0;
  6897. i8 = HEAP32[i7 >> 2] | 0;
  6898. if (i8 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  6899. _abort();
  6900. } else {
  6901. i28 = i7;
  6902. i27 = i8;
  6903. }
  6904. } else {
  6905. HEAP32[3228] = i7 | i8;
  6906. i28 = 12952 + (i9 + 2 << 2) | 0;
  6907. i27 = i6;
  6908. }
  6909. HEAP32[i28 >> 2] = i5;
  6910. HEAP32[i27 + 12 >> 2] = i5;
  6911. HEAP32[i5 + 8 >> 2] = i27;
  6912. HEAP32[i5 + 12 >> 2] = i6;
  6913. }
  6914. HEAP32[12920 >> 2] = i4;
  6915. HEAP32[12932 >> 2] = i3;
  6916. i32 = i2;
  6917. STACKTOP = i1;
  6918. return i32 | 0;
  6919. }
  6920. i18 = HEAP32[12916 >> 2] | 0;
  6921. if ((i18 | 0) != 0) {
  6922. i2 = (i18 & 0 - i18) + -1 | 0;
  6923. i31 = i2 >>> 12 & 16;
  6924. i2 = i2 >>> i31;
  6925. i30 = i2 >>> 5 & 8;
  6926. i2 = i2 >>> i30;
  6927. i32 = i2 >>> 2 & 4;
  6928. i2 = i2 >>> i32;
  6929. i6 = i2 >>> 1 & 2;
  6930. i2 = i2 >>> i6;
  6931. i3 = i2 >>> 1 & 1;
  6932. i3 = HEAP32[13216 + ((i30 | i31 | i32 | i6 | i3) + (i2 >>> i3) << 2) >> 2] | 0;
  6933. i2 = (HEAP32[i3 + 4 >> 2] & -8) - i12 | 0;
  6934. i6 = i3;
  6935. while (1) {
  6936. i5 = HEAP32[i6 + 16 >> 2] | 0;
  6937. if ((i5 | 0) == 0) {
  6938. i5 = HEAP32[i6 + 20 >> 2] | 0;
  6939. if ((i5 | 0) == 0) {
  6940. break;
  6941. }
  6942. }
  6943. i6 = (HEAP32[i5 + 4 >> 2] & -8) - i12 | 0;
  6944. i4 = i6 >>> 0 < i2 >>> 0;
  6945. i2 = i4 ? i6 : i2;
  6946. i6 = i5;
  6947. i3 = i4 ? i5 : i3;
  6948. }
  6949. i6 = HEAP32[12928 >> 2] | 0;
  6950. if (i3 >>> 0 < i6 >>> 0) {
  6951. _abort();
  6952. }
  6953. i4 = i3 + i12 | 0;
  6954. if (!(i3 >>> 0 < i4 >>> 0)) {
  6955. _abort();
  6956. }
  6957. i5 = HEAP32[i3 + 24 >> 2] | 0;
  6958. i7 = HEAP32[i3 + 12 >> 2] | 0;
  6959. do {
  6960. if ((i7 | 0) == (i3 | 0)) {
  6961. i8 = i3 + 20 | 0;
  6962. i7 = HEAP32[i8 >> 2] | 0;
  6963. if ((i7 | 0) == 0) {
  6964. i8 = i3 + 16 | 0;
  6965. i7 = HEAP32[i8 >> 2] | 0;
  6966. if ((i7 | 0) == 0) {
  6967. i26 = 0;
  6968. break;
  6969. }
  6970. }
  6971. while (1) {
  6972. i10 = i7 + 20 | 0;
  6973. i9 = HEAP32[i10 >> 2] | 0;
  6974. if ((i9 | 0) != 0) {
  6975. i7 = i9;
  6976. i8 = i10;
  6977. continue;
  6978. }
  6979. i10 = i7 + 16 | 0;
  6980. i9 = HEAP32[i10 >> 2] | 0;
  6981. if ((i9 | 0) == 0) {
  6982. break;
  6983. } else {
  6984. i7 = i9;
  6985. i8 = i10;
  6986. }
  6987. }
  6988. if (i8 >>> 0 < i6 >>> 0) {
  6989. _abort();
  6990. } else {
  6991. HEAP32[i8 >> 2] = 0;
  6992. i26 = i7;
  6993. break;
  6994. }
  6995. } else {
  6996. i8 = HEAP32[i3 + 8 >> 2] | 0;
  6997. if (i8 >>> 0 < i6 >>> 0) {
  6998. _abort();
  6999. }
  7000. i6 = i8 + 12 | 0;
  7001. if ((HEAP32[i6 >> 2] | 0) != (i3 | 0)) {
  7002. _abort();
  7003. }
  7004. i9 = i7 + 8 | 0;
  7005. if ((HEAP32[i9 >> 2] | 0) == (i3 | 0)) {
  7006. HEAP32[i6 >> 2] = i7;
  7007. HEAP32[i9 >> 2] = i8;
  7008. i26 = i7;
  7009. break;
  7010. } else {
  7011. _abort();
  7012. }
  7013. }
  7014. } while (0);
  7015. do {
  7016. if ((i5 | 0) != 0) {
  7017. i7 = HEAP32[i3 + 28 >> 2] | 0;
  7018. i6 = 13216 + (i7 << 2) | 0;
  7019. if ((i3 | 0) == (HEAP32[i6 >> 2] | 0)) {
  7020. HEAP32[i6 >> 2] = i26;
  7021. if ((i26 | 0) == 0) {
  7022. HEAP32[12916 >> 2] = HEAP32[12916 >> 2] & ~(1 << i7);
  7023. break;
  7024. }
  7025. } else {
  7026. if (i5 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7027. _abort();
  7028. }
  7029. i6 = i5 + 16 | 0;
  7030. if ((HEAP32[i6 >> 2] | 0) == (i3 | 0)) {
  7031. HEAP32[i6 >> 2] = i26;
  7032. } else {
  7033. HEAP32[i5 + 20 >> 2] = i26;
  7034. }
  7035. if ((i26 | 0) == 0) {
  7036. break;
  7037. }
  7038. }
  7039. if (i26 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7040. _abort();
  7041. }
  7042. HEAP32[i26 + 24 >> 2] = i5;
  7043. i5 = HEAP32[i3 + 16 >> 2] | 0;
  7044. do {
  7045. if ((i5 | 0) != 0) {
  7046. if (i5 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7047. _abort();
  7048. } else {
  7049. HEAP32[i26 + 16 >> 2] = i5;
  7050. HEAP32[i5 + 24 >> 2] = i26;
  7051. break;
  7052. }
  7053. }
  7054. } while (0);
  7055. i5 = HEAP32[i3 + 20 >> 2] | 0;
  7056. if ((i5 | 0) != 0) {
  7057. if (i5 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7058. _abort();
  7059. } else {
  7060. HEAP32[i26 + 20 >> 2] = i5;
  7061. HEAP32[i5 + 24 >> 2] = i26;
  7062. break;
  7063. }
  7064. }
  7065. }
  7066. } while (0);
  7067. if (i2 >>> 0 < 16) {
  7068. i32 = i2 + i12 | 0;
  7069. HEAP32[i3 + 4 >> 2] = i32 | 3;
  7070. i32 = i3 + (i32 + 4) | 0;
  7071. HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
  7072. } else {
  7073. HEAP32[i3 + 4 >> 2] = i12 | 3;
  7074. HEAP32[i3 + (i12 | 4) >> 2] = i2 | 1;
  7075. HEAP32[i3 + (i2 + i12) >> 2] = i2;
  7076. i6 = HEAP32[12920 >> 2] | 0;
  7077. if ((i6 | 0) != 0) {
  7078. i5 = HEAP32[12932 >> 2] | 0;
  7079. i8 = i6 >>> 3;
  7080. i9 = i8 << 1;
  7081. i6 = 12952 + (i9 << 2) | 0;
  7082. i7 = HEAP32[3228] | 0;
  7083. i8 = 1 << i8;
  7084. if ((i7 & i8 | 0) != 0) {
  7085. i7 = 12952 + (i9 + 2 << 2) | 0;
  7086. i8 = HEAP32[i7 >> 2] | 0;
  7087. if (i8 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7088. _abort();
  7089. } else {
  7090. i25 = i7;
  7091. i24 = i8;
  7092. }
  7093. } else {
  7094. HEAP32[3228] = i7 | i8;
  7095. i25 = 12952 + (i9 + 2 << 2) | 0;
  7096. i24 = i6;
  7097. }
  7098. HEAP32[i25 >> 2] = i5;
  7099. HEAP32[i24 + 12 >> 2] = i5;
  7100. HEAP32[i5 + 8 >> 2] = i24;
  7101. HEAP32[i5 + 12 >> 2] = i6;
  7102. }
  7103. HEAP32[12920 >> 2] = i2;
  7104. HEAP32[12932 >> 2] = i4;
  7105. }
  7106. i32 = i3 + 8 | 0;
  7107. STACKTOP = i1;
  7108. return i32 | 0;
  7109. }
  7110. }
  7111. } else {
  7112. if (!(i12 >>> 0 > 4294967231)) {
  7113. i24 = i12 + 11 | 0;
  7114. i12 = i24 & -8;
  7115. i26 = HEAP32[12916 >> 2] | 0;
  7116. if ((i26 | 0) != 0) {
  7117. i25 = 0 - i12 | 0;
  7118. i24 = i24 >>> 8;
  7119. if ((i24 | 0) != 0) {
  7120. if (i12 >>> 0 > 16777215) {
  7121. i27 = 31;
  7122. } else {
  7123. i31 = (i24 + 1048320 | 0) >>> 16 & 8;
  7124. i32 = i24 << i31;
  7125. i30 = (i32 + 520192 | 0) >>> 16 & 4;
  7126. i32 = i32 << i30;
  7127. i27 = (i32 + 245760 | 0) >>> 16 & 2;
  7128. i27 = 14 - (i30 | i31 | i27) + (i32 << i27 >>> 15) | 0;
  7129. i27 = i12 >>> (i27 + 7 | 0) & 1 | i27 << 1;
  7130. }
  7131. } else {
  7132. i27 = 0;
  7133. }
  7134. i30 = HEAP32[13216 + (i27 << 2) >> 2] | 0;
  7135. L126 : do {
  7136. if ((i30 | 0) == 0) {
  7137. i29 = 0;
  7138. i24 = 0;
  7139. } else {
  7140. if ((i27 | 0) == 31) {
  7141. i24 = 0;
  7142. } else {
  7143. i24 = 25 - (i27 >>> 1) | 0;
  7144. }
  7145. i29 = 0;
  7146. i28 = i12 << i24;
  7147. i24 = 0;
  7148. while (1) {
  7149. i32 = HEAP32[i30 + 4 >> 2] & -8;
  7150. i31 = i32 - i12 | 0;
  7151. if (i31 >>> 0 < i25 >>> 0) {
  7152. if ((i32 | 0) == (i12 | 0)) {
  7153. i25 = i31;
  7154. i29 = i30;
  7155. i24 = i30;
  7156. break L126;
  7157. } else {
  7158. i25 = i31;
  7159. i24 = i30;
  7160. }
  7161. }
  7162. i31 = HEAP32[i30 + 20 >> 2] | 0;
  7163. i30 = HEAP32[i30 + (i28 >>> 31 << 2) + 16 >> 2] | 0;
  7164. i29 = (i31 | 0) == 0 | (i31 | 0) == (i30 | 0) ? i29 : i31;
  7165. if ((i30 | 0) == 0) {
  7166. break;
  7167. } else {
  7168. i28 = i28 << 1;
  7169. }
  7170. }
  7171. }
  7172. } while (0);
  7173. if ((i29 | 0) == 0 & (i24 | 0) == 0) {
  7174. i32 = 2 << i27;
  7175. i26 = i26 & (i32 | 0 - i32);
  7176. if ((i26 | 0) == 0) {
  7177. break;
  7178. }
  7179. i32 = (i26 & 0 - i26) + -1 | 0;
  7180. i28 = i32 >>> 12 & 16;
  7181. i32 = i32 >>> i28;
  7182. i27 = i32 >>> 5 & 8;
  7183. i32 = i32 >>> i27;
  7184. i30 = i32 >>> 2 & 4;
  7185. i32 = i32 >>> i30;
  7186. i31 = i32 >>> 1 & 2;
  7187. i32 = i32 >>> i31;
  7188. i29 = i32 >>> 1 & 1;
  7189. i29 = HEAP32[13216 + ((i27 | i28 | i30 | i31 | i29) + (i32 >>> i29) << 2) >> 2] | 0;
  7190. }
  7191. if ((i29 | 0) != 0) {
  7192. while (1) {
  7193. i27 = (HEAP32[i29 + 4 >> 2] & -8) - i12 | 0;
  7194. i26 = i27 >>> 0 < i25 >>> 0;
  7195. i25 = i26 ? i27 : i25;
  7196. i24 = i26 ? i29 : i24;
  7197. i26 = HEAP32[i29 + 16 >> 2] | 0;
  7198. if ((i26 | 0) != 0) {
  7199. i29 = i26;
  7200. continue;
  7201. }
  7202. i29 = HEAP32[i29 + 20 >> 2] | 0;
  7203. if ((i29 | 0) == 0) {
  7204. break;
  7205. }
  7206. }
  7207. }
  7208. if ((i24 | 0) != 0 ? i25 >>> 0 < ((HEAP32[12920 >> 2] | 0) - i12 | 0) >>> 0 : 0) {
  7209. i4 = HEAP32[12928 >> 2] | 0;
  7210. if (i24 >>> 0 < i4 >>> 0) {
  7211. _abort();
  7212. }
  7213. i2 = i24 + i12 | 0;
  7214. if (!(i24 >>> 0 < i2 >>> 0)) {
  7215. _abort();
  7216. }
  7217. i3 = HEAP32[i24 + 24 >> 2] | 0;
  7218. i6 = HEAP32[i24 + 12 >> 2] | 0;
  7219. do {
  7220. if ((i6 | 0) == (i24 | 0)) {
  7221. i6 = i24 + 20 | 0;
  7222. i5 = HEAP32[i6 >> 2] | 0;
  7223. if ((i5 | 0) == 0) {
  7224. i6 = i24 + 16 | 0;
  7225. i5 = HEAP32[i6 >> 2] | 0;
  7226. if ((i5 | 0) == 0) {
  7227. i22 = 0;
  7228. break;
  7229. }
  7230. }
  7231. while (1) {
  7232. i8 = i5 + 20 | 0;
  7233. i7 = HEAP32[i8 >> 2] | 0;
  7234. if ((i7 | 0) != 0) {
  7235. i5 = i7;
  7236. i6 = i8;
  7237. continue;
  7238. }
  7239. i7 = i5 + 16 | 0;
  7240. i8 = HEAP32[i7 >> 2] | 0;
  7241. if ((i8 | 0) == 0) {
  7242. break;
  7243. } else {
  7244. i5 = i8;
  7245. i6 = i7;
  7246. }
  7247. }
  7248. if (i6 >>> 0 < i4 >>> 0) {
  7249. _abort();
  7250. } else {
  7251. HEAP32[i6 >> 2] = 0;
  7252. i22 = i5;
  7253. break;
  7254. }
  7255. } else {
  7256. i5 = HEAP32[i24 + 8 >> 2] | 0;
  7257. if (i5 >>> 0 < i4 >>> 0) {
  7258. _abort();
  7259. }
  7260. i7 = i5 + 12 | 0;
  7261. if ((HEAP32[i7 >> 2] | 0) != (i24 | 0)) {
  7262. _abort();
  7263. }
  7264. i4 = i6 + 8 | 0;
  7265. if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
  7266. HEAP32[i7 >> 2] = i6;
  7267. HEAP32[i4 >> 2] = i5;
  7268. i22 = i6;
  7269. break;
  7270. } else {
  7271. _abort();
  7272. }
  7273. }
  7274. } while (0);
  7275. do {
  7276. if ((i3 | 0) != 0) {
  7277. i4 = HEAP32[i24 + 28 >> 2] | 0;
  7278. i5 = 13216 + (i4 << 2) | 0;
  7279. if ((i24 | 0) == (HEAP32[i5 >> 2] | 0)) {
  7280. HEAP32[i5 >> 2] = i22;
  7281. if ((i22 | 0) == 0) {
  7282. HEAP32[12916 >> 2] = HEAP32[12916 >> 2] & ~(1 << i4);
  7283. break;
  7284. }
  7285. } else {
  7286. if (i3 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7287. _abort();
  7288. }
  7289. i4 = i3 + 16 | 0;
  7290. if ((HEAP32[i4 >> 2] | 0) == (i24 | 0)) {
  7291. HEAP32[i4 >> 2] = i22;
  7292. } else {
  7293. HEAP32[i3 + 20 >> 2] = i22;
  7294. }
  7295. if ((i22 | 0) == 0) {
  7296. break;
  7297. }
  7298. }
  7299. if (i22 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7300. _abort();
  7301. }
  7302. HEAP32[i22 + 24 >> 2] = i3;
  7303. i3 = HEAP32[i24 + 16 >> 2] | 0;
  7304. do {
  7305. if ((i3 | 0) != 0) {
  7306. if (i3 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7307. _abort();
  7308. } else {
  7309. HEAP32[i22 + 16 >> 2] = i3;
  7310. HEAP32[i3 + 24 >> 2] = i22;
  7311. break;
  7312. }
  7313. }
  7314. } while (0);
  7315. i3 = HEAP32[i24 + 20 >> 2] | 0;
  7316. if ((i3 | 0) != 0) {
  7317. if (i3 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7318. _abort();
  7319. } else {
  7320. HEAP32[i22 + 20 >> 2] = i3;
  7321. HEAP32[i3 + 24 >> 2] = i22;
  7322. break;
  7323. }
  7324. }
  7325. }
  7326. } while (0);
  7327. L204 : do {
  7328. if (!(i25 >>> 0 < 16)) {
  7329. HEAP32[i24 + 4 >> 2] = i12 | 3;
  7330. HEAP32[i24 + (i12 | 4) >> 2] = i25 | 1;
  7331. HEAP32[i24 + (i25 + i12) >> 2] = i25;
  7332. i4 = i25 >>> 3;
  7333. if (i25 >>> 0 < 256) {
  7334. i6 = i4 << 1;
  7335. i3 = 12952 + (i6 << 2) | 0;
  7336. i5 = HEAP32[3228] | 0;
  7337. i4 = 1 << i4;
  7338. if ((i5 & i4 | 0) != 0) {
  7339. i5 = 12952 + (i6 + 2 << 2) | 0;
  7340. i4 = HEAP32[i5 >> 2] | 0;
  7341. if (i4 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7342. _abort();
  7343. } else {
  7344. i21 = i5;
  7345. i20 = i4;
  7346. }
  7347. } else {
  7348. HEAP32[3228] = i5 | i4;
  7349. i21 = 12952 + (i6 + 2 << 2) | 0;
  7350. i20 = i3;
  7351. }
  7352. HEAP32[i21 >> 2] = i2;
  7353. HEAP32[i20 + 12 >> 2] = i2;
  7354. HEAP32[i24 + (i12 + 8) >> 2] = i20;
  7355. HEAP32[i24 + (i12 + 12) >> 2] = i3;
  7356. break;
  7357. }
  7358. i3 = i25 >>> 8;
  7359. if ((i3 | 0) != 0) {
  7360. if (i25 >>> 0 > 16777215) {
  7361. i3 = 31;
  7362. } else {
  7363. i31 = (i3 + 1048320 | 0) >>> 16 & 8;
  7364. i32 = i3 << i31;
  7365. i30 = (i32 + 520192 | 0) >>> 16 & 4;
  7366. i32 = i32 << i30;
  7367. i3 = (i32 + 245760 | 0) >>> 16 & 2;
  7368. i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
  7369. i3 = i25 >>> (i3 + 7 | 0) & 1 | i3 << 1;
  7370. }
  7371. } else {
  7372. i3 = 0;
  7373. }
  7374. i6 = 13216 + (i3 << 2) | 0;
  7375. HEAP32[i24 + (i12 + 28) >> 2] = i3;
  7376. HEAP32[i24 + (i12 + 20) >> 2] = 0;
  7377. HEAP32[i24 + (i12 + 16) >> 2] = 0;
  7378. i4 = HEAP32[12916 >> 2] | 0;
  7379. i5 = 1 << i3;
  7380. if ((i4 & i5 | 0) == 0) {
  7381. HEAP32[12916 >> 2] = i4 | i5;
  7382. HEAP32[i6 >> 2] = i2;
  7383. HEAP32[i24 + (i12 + 24) >> 2] = i6;
  7384. HEAP32[i24 + (i12 + 12) >> 2] = i2;
  7385. HEAP32[i24 + (i12 + 8) >> 2] = i2;
  7386. break;
  7387. }
  7388. i4 = HEAP32[i6 >> 2] | 0;
  7389. if ((i3 | 0) == 31) {
  7390. i3 = 0;
  7391. } else {
  7392. i3 = 25 - (i3 >>> 1) | 0;
  7393. }
  7394. L225 : do {
  7395. if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i25 | 0)) {
  7396. i3 = i25 << i3;
  7397. while (1) {
  7398. i6 = i4 + (i3 >>> 31 << 2) + 16 | 0;
  7399. i5 = HEAP32[i6 >> 2] | 0;
  7400. if ((i5 | 0) == 0) {
  7401. break;
  7402. }
  7403. if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i25 | 0)) {
  7404. i18 = i5;
  7405. break L225;
  7406. } else {
  7407. i3 = i3 << 1;
  7408. i4 = i5;
  7409. }
  7410. }
  7411. if (i6 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7412. _abort();
  7413. } else {
  7414. HEAP32[i6 >> 2] = i2;
  7415. HEAP32[i24 + (i12 + 24) >> 2] = i4;
  7416. HEAP32[i24 + (i12 + 12) >> 2] = i2;
  7417. HEAP32[i24 + (i12 + 8) >> 2] = i2;
  7418. break L204;
  7419. }
  7420. } else {
  7421. i18 = i4;
  7422. }
  7423. } while (0);
  7424. i4 = i18 + 8 | 0;
  7425. i3 = HEAP32[i4 >> 2] | 0;
  7426. i5 = HEAP32[12928 >> 2] | 0;
  7427. if (i18 >>> 0 < i5 >>> 0) {
  7428. _abort();
  7429. }
  7430. if (i3 >>> 0 < i5 >>> 0) {
  7431. _abort();
  7432. } else {
  7433. HEAP32[i3 + 12 >> 2] = i2;
  7434. HEAP32[i4 >> 2] = i2;
  7435. HEAP32[i24 + (i12 + 8) >> 2] = i3;
  7436. HEAP32[i24 + (i12 + 12) >> 2] = i18;
  7437. HEAP32[i24 + (i12 + 24) >> 2] = 0;
  7438. break;
  7439. }
  7440. } else {
  7441. i32 = i25 + i12 | 0;
  7442. HEAP32[i24 + 4 >> 2] = i32 | 3;
  7443. i32 = i24 + (i32 + 4) | 0;
  7444. HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
  7445. }
  7446. } while (0);
  7447. i32 = i24 + 8 | 0;
  7448. STACKTOP = i1;
  7449. return i32 | 0;
  7450. }
  7451. }
  7452. } else {
  7453. i12 = -1;
  7454. }
  7455. }
  7456. } while (0);
  7457. i18 = HEAP32[12920 >> 2] | 0;
  7458. if (!(i12 >>> 0 > i18 >>> 0)) {
  7459. i3 = i18 - i12 | 0;
  7460. i2 = HEAP32[12932 >> 2] | 0;
  7461. if (i3 >>> 0 > 15) {
  7462. HEAP32[12932 >> 2] = i2 + i12;
  7463. HEAP32[12920 >> 2] = i3;
  7464. HEAP32[i2 + (i12 + 4) >> 2] = i3 | 1;
  7465. HEAP32[i2 + i18 >> 2] = i3;
  7466. HEAP32[i2 + 4 >> 2] = i12 | 3;
  7467. } else {
  7468. HEAP32[12920 >> 2] = 0;
  7469. HEAP32[12932 >> 2] = 0;
  7470. HEAP32[i2 + 4 >> 2] = i18 | 3;
  7471. i32 = i2 + (i18 + 4) | 0;
  7472. HEAP32[i32 >> 2] = HEAP32[i32 >> 2] | 1;
  7473. }
  7474. i32 = i2 + 8 | 0;
  7475. STACKTOP = i1;
  7476. return i32 | 0;
  7477. }
  7478. i18 = HEAP32[12924 >> 2] | 0;
  7479. if (i12 >>> 0 < i18 >>> 0) {
  7480. i31 = i18 - i12 | 0;
  7481. HEAP32[12924 >> 2] = i31;
  7482. i32 = HEAP32[12936 >> 2] | 0;
  7483. HEAP32[12936 >> 2] = i32 + i12;
  7484. HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
  7485. HEAP32[i32 + 4 >> 2] = i12 | 3;
  7486. i32 = i32 + 8 | 0;
  7487. STACKTOP = i1;
  7488. return i32 | 0;
  7489. }
  7490. do {
  7491. if ((HEAP32[3346] | 0) == 0) {
  7492. i18 = _sysconf(30) | 0;
  7493. if ((i18 + -1 & i18 | 0) == 0) {
  7494. HEAP32[13392 >> 2] = i18;
  7495. HEAP32[13388 >> 2] = i18;
  7496. HEAP32[13396 >> 2] = -1;
  7497. HEAP32[13400 >> 2] = -1;
  7498. HEAP32[13404 >> 2] = 0;
  7499. HEAP32[13356 >> 2] = 0;
  7500. HEAP32[3346] = (_time(0) | 0) & -16 ^ 1431655768;
  7501. break;
  7502. } else {
  7503. _abort();
  7504. }
  7505. }
  7506. } while (0);
  7507. i20 = i12 + 48 | 0;
  7508. i25 = HEAP32[13392 >> 2] | 0;
  7509. i21 = i12 + 47 | 0;
  7510. i22 = i25 + i21 | 0;
  7511. i25 = 0 - i25 | 0;
  7512. i18 = i22 & i25;
  7513. if (!(i18 >>> 0 > i12 >>> 0)) {
  7514. i32 = 0;
  7515. STACKTOP = i1;
  7516. return i32 | 0;
  7517. }
  7518. i24 = HEAP32[13352 >> 2] | 0;
  7519. if ((i24 | 0) != 0 ? (i31 = HEAP32[13344 >> 2] | 0, i32 = i31 + i18 | 0, i32 >>> 0 <= i31 >>> 0 | i32 >>> 0 > i24 >>> 0) : 0) {
  7520. i32 = 0;
  7521. STACKTOP = i1;
  7522. return i32 | 0;
  7523. }
  7524. L269 : do {
  7525. if ((HEAP32[13356 >> 2] & 4 | 0) == 0) {
  7526. i26 = HEAP32[12936 >> 2] | 0;
  7527. L271 : do {
  7528. if ((i26 | 0) != 0) {
  7529. i24 = 13360 | 0;
  7530. while (1) {
  7531. i27 = HEAP32[i24 >> 2] | 0;
  7532. if (!(i27 >>> 0 > i26 >>> 0) ? (i23 = i24 + 4 | 0, (i27 + (HEAP32[i23 >> 2] | 0) | 0) >>> 0 > i26 >>> 0) : 0) {
  7533. break;
  7534. }
  7535. i24 = HEAP32[i24 + 8 >> 2] | 0;
  7536. if ((i24 | 0) == 0) {
  7537. i13 = 182;
  7538. break L271;
  7539. }
  7540. }
  7541. if ((i24 | 0) != 0) {
  7542. i25 = i22 - (HEAP32[12924 >> 2] | 0) & i25;
  7543. if (i25 >>> 0 < 2147483647) {
  7544. i13 = _sbrk(i25 | 0) | 0;
  7545. i26 = (i13 | 0) == ((HEAP32[i24 >> 2] | 0) + (HEAP32[i23 >> 2] | 0) | 0);
  7546. i22 = i13;
  7547. i24 = i25;
  7548. i23 = i26 ? i13 : -1;
  7549. i25 = i26 ? i25 : 0;
  7550. i13 = 191;
  7551. } else {
  7552. i25 = 0;
  7553. }
  7554. } else {
  7555. i13 = 182;
  7556. }
  7557. } else {
  7558. i13 = 182;
  7559. }
  7560. } while (0);
  7561. do {
  7562. if ((i13 | 0) == 182) {
  7563. i23 = _sbrk(0) | 0;
  7564. if ((i23 | 0) != (-1 | 0)) {
  7565. i24 = i23;
  7566. i22 = HEAP32[13388 >> 2] | 0;
  7567. i25 = i22 + -1 | 0;
  7568. if ((i25 & i24 | 0) == 0) {
  7569. i25 = i18;
  7570. } else {
  7571. i25 = i18 - i24 + (i25 + i24 & 0 - i22) | 0;
  7572. }
  7573. i24 = HEAP32[13344 >> 2] | 0;
  7574. i26 = i24 + i25 | 0;
  7575. if (i25 >>> 0 > i12 >>> 0 & i25 >>> 0 < 2147483647) {
  7576. i22 = HEAP32[13352 >> 2] | 0;
  7577. if ((i22 | 0) != 0 ? i26 >>> 0 <= i24 >>> 0 | i26 >>> 0 > i22 >>> 0 : 0) {
  7578. i25 = 0;
  7579. break;
  7580. }
  7581. i22 = _sbrk(i25 | 0) | 0;
  7582. i13 = (i22 | 0) == (i23 | 0);
  7583. i24 = i25;
  7584. i23 = i13 ? i23 : -1;
  7585. i25 = i13 ? i25 : 0;
  7586. i13 = 191;
  7587. } else {
  7588. i25 = 0;
  7589. }
  7590. } else {
  7591. i25 = 0;
  7592. }
  7593. }
  7594. } while (0);
  7595. L291 : do {
  7596. if ((i13 | 0) == 191) {
  7597. i13 = 0 - i24 | 0;
  7598. if ((i23 | 0) != (-1 | 0)) {
  7599. i17 = i23;
  7600. i14 = i25;
  7601. i13 = 202;
  7602. break L269;
  7603. }
  7604. do {
  7605. if ((i22 | 0) != (-1 | 0) & i24 >>> 0 < 2147483647 & i24 >>> 0 < i20 >>> 0 ? (i19 = HEAP32[13392 >> 2] | 0, i19 = i21 - i24 + i19 & 0 - i19, i19 >>> 0 < 2147483647) : 0) {
  7606. if ((_sbrk(i19 | 0) | 0) == (-1 | 0)) {
  7607. _sbrk(i13 | 0) | 0;
  7608. break L291;
  7609. } else {
  7610. i24 = i19 + i24 | 0;
  7611. break;
  7612. }
  7613. }
  7614. } while (0);
  7615. if ((i22 | 0) != (-1 | 0)) {
  7616. i17 = i22;
  7617. i14 = i24;
  7618. i13 = 202;
  7619. break L269;
  7620. }
  7621. }
  7622. } while (0);
  7623. HEAP32[13356 >> 2] = HEAP32[13356 >> 2] | 4;
  7624. i13 = 199;
  7625. } else {
  7626. i25 = 0;
  7627. i13 = 199;
  7628. }
  7629. } while (0);
  7630. if ((((i13 | 0) == 199 ? i18 >>> 0 < 2147483647 : 0) ? (i17 = _sbrk(i18 | 0) | 0, i16 = _sbrk(0) | 0, (i16 | 0) != (-1 | 0) & (i17 | 0) != (-1 | 0) & i17 >>> 0 < i16 >>> 0) : 0) ? (i15 = i16 - i17 | 0, i14 = i15 >>> 0 > (i12 + 40 | 0) >>> 0, i14) : 0) {
  7631. i14 = i14 ? i15 : i25;
  7632. i13 = 202;
  7633. }
  7634. if ((i13 | 0) == 202) {
  7635. i15 = (HEAP32[13344 >> 2] | 0) + i14 | 0;
  7636. HEAP32[13344 >> 2] = i15;
  7637. if (i15 >>> 0 > (HEAP32[13348 >> 2] | 0) >>> 0) {
  7638. HEAP32[13348 >> 2] = i15;
  7639. }
  7640. i15 = HEAP32[12936 >> 2] | 0;
  7641. L311 : do {
  7642. if ((i15 | 0) != 0) {
  7643. i21 = 13360 | 0;
  7644. while (1) {
  7645. i16 = HEAP32[i21 >> 2] | 0;
  7646. i19 = i21 + 4 | 0;
  7647. i20 = HEAP32[i19 >> 2] | 0;
  7648. if ((i17 | 0) == (i16 + i20 | 0)) {
  7649. i13 = 214;
  7650. break;
  7651. }
  7652. i18 = HEAP32[i21 + 8 >> 2] | 0;
  7653. if ((i18 | 0) == 0) {
  7654. break;
  7655. } else {
  7656. i21 = i18;
  7657. }
  7658. }
  7659. if (((i13 | 0) == 214 ? (HEAP32[i21 + 12 >> 2] & 8 | 0) == 0 : 0) ? i15 >>> 0 >= i16 >>> 0 & i15 >>> 0 < i17 >>> 0 : 0) {
  7660. HEAP32[i19 >> 2] = i20 + i14;
  7661. i2 = (HEAP32[12924 >> 2] | 0) + i14 | 0;
  7662. i3 = i15 + 8 | 0;
  7663. if ((i3 & 7 | 0) == 0) {
  7664. i3 = 0;
  7665. } else {
  7666. i3 = 0 - i3 & 7;
  7667. }
  7668. i32 = i2 - i3 | 0;
  7669. HEAP32[12936 >> 2] = i15 + i3;
  7670. HEAP32[12924 >> 2] = i32;
  7671. HEAP32[i15 + (i3 + 4) >> 2] = i32 | 1;
  7672. HEAP32[i15 + (i2 + 4) >> 2] = 40;
  7673. HEAP32[12940 >> 2] = HEAP32[13400 >> 2];
  7674. break;
  7675. }
  7676. if (i17 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7677. HEAP32[12928 >> 2] = i17;
  7678. }
  7679. i19 = i17 + i14 | 0;
  7680. i16 = 13360 | 0;
  7681. while (1) {
  7682. if ((HEAP32[i16 >> 2] | 0) == (i19 | 0)) {
  7683. i13 = 224;
  7684. break;
  7685. }
  7686. i18 = HEAP32[i16 + 8 >> 2] | 0;
  7687. if ((i18 | 0) == 0) {
  7688. break;
  7689. } else {
  7690. i16 = i18;
  7691. }
  7692. }
  7693. if ((i13 | 0) == 224 ? (HEAP32[i16 + 12 >> 2] & 8 | 0) == 0 : 0) {
  7694. HEAP32[i16 >> 2] = i17;
  7695. i6 = i16 + 4 | 0;
  7696. HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + i14;
  7697. i6 = i17 + 8 | 0;
  7698. if ((i6 & 7 | 0) == 0) {
  7699. i6 = 0;
  7700. } else {
  7701. i6 = 0 - i6 & 7;
  7702. }
  7703. i7 = i17 + (i14 + 8) | 0;
  7704. if ((i7 & 7 | 0) == 0) {
  7705. i13 = 0;
  7706. } else {
  7707. i13 = 0 - i7 & 7;
  7708. }
  7709. i15 = i17 + (i13 + i14) | 0;
  7710. i8 = i6 + i12 | 0;
  7711. i7 = i17 + i8 | 0;
  7712. i10 = i15 - (i17 + i6) - i12 | 0;
  7713. HEAP32[i17 + (i6 + 4) >> 2] = i12 | 3;
  7714. L348 : do {
  7715. if ((i15 | 0) != (HEAP32[12936 >> 2] | 0)) {
  7716. if ((i15 | 0) == (HEAP32[12932 >> 2] | 0)) {
  7717. i32 = (HEAP32[12920 >> 2] | 0) + i10 | 0;
  7718. HEAP32[12920 >> 2] = i32;
  7719. HEAP32[12932 >> 2] = i7;
  7720. HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
  7721. HEAP32[i17 + (i32 + i8) >> 2] = i32;
  7722. break;
  7723. }
  7724. i12 = i14 + 4 | 0;
  7725. i18 = HEAP32[i17 + (i12 + i13) >> 2] | 0;
  7726. if ((i18 & 3 | 0) == 1) {
  7727. i11 = i18 & -8;
  7728. i16 = i18 >>> 3;
  7729. do {
  7730. if (!(i18 >>> 0 < 256)) {
  7731. i9 = HEAP32[i17 + ((i13 | 24) + i14) >> 2] | 0;
  7732. i19 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
  7733. do {
  7734. if ((i19 | 0) == (i15 | 0)) {
  7735. i19 = i13 | 16;
  7736. i18 = i17 + (i12 + i19) | 0;
  7737. i16 = HEAP32[i18 >> 2] | 0;
  7738. if ((i16 | 0) == 0) {
  7739. i18 = i17 + (i19 + i14) | 0;
  7740. i16 = HEAP32[i18 >> 2] | 0;
  7741. if ((i16 | 0) == 0) {
  7742. i5 = 0;
  7743. break;
  7744. }
  7745. }
  7746. while (1) {
  7747. i20 = i16 + 20 | 0;
  7748. i19 = HEAP32[i20 >> 2] | 0;
  7749. if ((i19 | 0) != 0) {
  7750. i16 = i19;
  7751. i18 = i20;
  7752. continue;
  7753. }
  7754. i19 = i16 + 16 | 0;
  7755. i20 = HEAP32[i19 >> 2] | 0;
  7756. if ((i20 | 0) == 0) {
  7757. break;
  7758. } else {
  7759. i16 = i20;
  7760. i18 = i19;
  7761. }
  7762. }
  7763. if (i18 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7764. _abort();
  7765. } else {
  7766. HEAP32[i18 >> 2] = 0;
  7767. i5 = i16;
  7768. break;
  7769. }
  7770. } else {
  7771. i18 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
  7772. if (i18 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7773. _abort();
  7774. }
  7775. i16 = i18 + 12 | 0;
  7776. if ((HEAP32[i16 >> 2] | 0) != (i15 | 0)) {
  7777. _abort();
  7778. }
  7779. i20 = i19 + 8 | 0;
  7780. if ((HEAP32[i20 >> 2] | 0) == (i15 | 0)) {
  7781. HEAP32[i16 >> 2] = i19;
  7782. HEAP32[i20 >> 2] = i18;
  7783. i5 = i19;
  7784. break;
  7785. } else {
  7786. _abort();
  7787. }
  7788. }
  7789. } while (0);
  7790. if ((i9 | 0) != 0) {
  7791. i16 = HEAP32[i17 + (i14 + 28 + i13) >> 2] | 0;
  7792. i18 = 13216 + (i16 << 2) | 0;
  7793. if ((i15 | 0) == (HEAP32[i18 >> 2] | 0)) {
  7794. HEAP32[i18 >> 2] = i5;
  7795. if ((i5 | 0) == 0) {
  7796. HEAP32[12916 >> 2] = HEAP32[12916 >> 2] & ~(1 << i16);
  7797. break;
  7798. }
  7799. } else {
  7800. if (i9 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7801. _abort();
  7802. }
  7803. i16 = i9 + 16 | 0;
  7804. if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
  7805. HEAP32[i16 >> 2] = i5;
  7806. } else {
  7807. HEAP32[i9 + 20 >> 2] = i5;
  7808. }
  7809. if ((i5 | 0) == 0) {
  7810. break;
  7811. }
  7812. }
  7813. if (i5 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7814. _abort();
  7815. }
  7816. HEAP32[i5 + 24 >> 2] = i9;
  7817. i15 = i13 | 16;
  7818. i9 = HEAP32[i17 + (i15 + i14) >> 2] | 0;
  7819. do {
  7820. if ((i9 | 0) != 0) {
  7821. if (i9 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7822. _abort();
  7823. } else {
  7824. HEAP32[i5 + 16 >> 2] = i9;
  7825. HEAP32[i9 + 24 >> 2] = i5;
  7826. break;
  7827. }
  7828. }
  7829. } while (0);
  7830. i9 = HEAP32[i17 + (i12 + i15) >> 2] | 0;
  7831. if ((i9 | 0) != 0) {
  7832. if (i9 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7833. _abort();
  7834. } else {
  7835. HEAP32[i5 + 20 >> 2] = i9;
  7836. HEAP32[i9 + 24 >> 2] = i5;
  7837. break;
  7838. }
  7839. }
  7840. }
  7841. } else {
  7842. i5 = HEAP32[i17 + ((i13 | 8) + i14) >> 2] | 0;
  7843. i12 = HEAP32[i17 + (i14 + 12 + i13) >> 2] | 0;
  7844. i18 = 12952 + (i16 << 1 << 2) | 0;
  7845. if ((i5 | 0) != (i18 | 0)) {
  7846. if (i5 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7847. _abort();
  7848. }
  7849. if ((HEAP32[i5 + 12 >> 2] | 0) != (i15 | 0)) {
  7850. _abort();
  7851. }
  7852. }
  7853. if ((i12 | 0) == (i5 | 0)) {
  7854. HEAP32[3228] = HEAP32[3228] & ~(1 << i16);
  7855. break;
  7856. }
  7857. if ((i12 | 0) != (i18 | 0)) {
  7858. if (i12 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7859. _abort();
  7860. }
  7861. i16 = i12 + 8 | 0;
  7862. if ((HEAP32[i16 >> 2] | 0) == (i15 | 0)) {
  7863. i9 = i16;
  7864. } else {
  7865. _abort();
  7866. }
  7867. } else {
  7868. i9 = i12 + 8 | 0;
  7869. }
  7870. HEAP32[i5 + 12 >> 2] = i12;
  7871. HEAP32[i9 >> 2] = i5;
  7872. }
  7873. } while (0);
  7874. i15 = i17 + ((i11 | i13) + i14) | 0;
  7875. i10 = i11 + i10 | 0;
  7876. }
  7877. i5 = i15 + 4 | 0;
  7878. HEAP32[i5 >> 2] = HEAP32[i5 >> 2] & -2;
  7879. HEAP32[i17 + (i8 + 4) >> 2] = i10 | 1;
  7880. HEAP32[i17 + (i10 + i8) >> 2] = i10;
  7881. i5 = i10 >>> 3;
  7882. if (i10 >>> 0 < 256) {
  7883. i10 = i5 << 1;
  7884. i2 = 12952 + (i10 << 2) | 0;
  7885. i9 = HEAP32[3228] | 0;
  7886. i5 = 1 << i5;
  7887. if ((i9 & i5 | 0) != 0) {
  7888. i9 = 12952 + (i10 + 2 << 2) | 0;
  7889. i5 = HEAP32[i9 >> 2] | 0;
  7890. if (i5 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7891. _abort();
  7892. } else {
  7893. i3 = i9;
  7894. i4 = i5;
  7895. }
  7896. } else {
  7897. HEAP32[3228] = i9 | i5;
  7898. i3 = 12952 + (i10 + 2 << 2) | 0;
  7899. i4 = i2;
  7900. }
  7901. HEAP32[i3 >> 2] = i7;
  7902. HEAP32[i4 + 12 >> 2] = i7;
  7903. HEAP32[i17 + (i8 + 8) >> 2] = i4;
  7904. HEAP32[i17 + (i8 + 12) >> 2] = i2;
  7905. break;
  7906. }
  7907. i3 = i10 >>> 8;
  7908. if ((i3 | 0) != 0) {
  7909. if (i10 >>> 0 > 16777215) {
  7910. i3 = 31;
  7911. } else {
  7912. i31 = (i3 + 1048320 | 0) >>> 16 & 8;
  7913. i32 = i3 << i31;
  7914. i30 = (i32 + 520192 | 0) >>> 16 & 4;
  7915. i32 = i32 << i30;
  7916. i3 = (i32 + 245760 | 0) >>> 16 & 2;
  7917. i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
  7918. i3 = i10 >>> (i3 + 7 | 0) & 1 | i3 << 1;
  7919. }
  7920. } else {
  7921. i3 = 0;
  7922. }
  7923. i4 = 13216 + (i3 << 2) | 0;
  7924. HEAP32[i17 + (i8 + 28) >> 2] = i3;
  7925. HEAP32[i17 + (i8 + 20) >> 2] = 0;
  7926. HEAP32[i17 + (i8 + 16) >> 2] = 0;
  7927. i9 = HEAP32[12916 >> 2] | 0;
  7928. i5 = 1 << i3;
  7929. if ((i9 & i5 | 0) == 0) {
  7930. HEAP32[12916 >> 2] = i9 | i5;
  7931. HEAP32[i4 >> 2] = i7;
  7932. HEAP32[i17 + (i8 + 24) >> 2] = i4;
  7933. HEAP32[i17 + (i8 + 12) >> 2] = i7;
  7934. HEAP32[i17 + (i8 + 8) >> 2] = i7;
  7935. break;
  7936. }
  7937. i4 = HEAP32[i4 >> 2] | 0;
  7938. if ((i3 | 0) == 31) {
  7939. i3 = 0;
  7940. } else {
  7941. i3 = 25 - (i3 >>> 1) | 0;
  7942. }
  7943. L445 : do {
  7944. if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i10 | 0)) {
  7945. i3 = i10 << i3;
  7946. while (1) {
  7947. i5 = i4 + (i3 >>> 31 << 2) + 16 | 0;
  7948. i9 = HEAP32[i5 >> 2] | 0;
  7949. if ((i9 | 0) == 0) {
  7950. break;
  7951. }
  7952. if ((HEAP32[i9 + 4 >> 2] & -8 | 0) == (i10 | 0)) {
  7953. i2 = i9;
  7954. break L445;
  7955. } else {
  7956. i3 = i3 << 1;
  7957. i4 = i9;
  7958. }
  7959. }
  7960. if (i5 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  7961. _abort();
  7962. } else {
  7963. HEAP32[i5 >> 2] = i7;
  7964. HEAP32[i17 + (i8 + 24) >> 2] = i4;
  7965. HEAP32[i17 + (i8 + 12) >> 2] = i7;
  7966. HEAP32[i17 + (i8 + 8) >> 2] = i7;
  7967. break L348;
  7968. }
  7969. } else {
  7970. i2 = i4;
  7971. }
  7972. } while (0);
  7973. i4 = i2 + 8 | 0;
  7974. i3 = HEAP32[i4 >> 2] | 0;
  7975. i5 = HEAP32[12928 >> 2] | 0;
  7976. if (i2 >>> 0 < i5 >>> 0) {
  7977. _abort();
  7978. }
  7979. if (i3 >>> 0 < i5 >>> 0) {
  7980. _abort();
  7981. } else {
  7982. HEAP32[i3 + 12 >> 2] = i7;
  7983. HEAP32[i4 >> 2] = i7;
  7984. HEAP32[i17 + (i8 + 8) >> 2] = i3;
  7985. HEAP32[i17 + (i8 + 12) >> 2] = i2;
  7986. HEAP32[i17 + (i8 + 24) >> 2] = 0;
  7987. break;
  7988. }
  7989. } else {
  7990. i32 = (HEAP32[12924 >> 2] | 0) + i10 | 0;
  7991. HEAP32[12924 >> 2] = i32;
  7992. HEAP32[12936 >> 2] = i7;
  7993. HEAP32[i17 + (i8 + 4) >> 2] = i32 | 1;
  7994. }
  7995. } while (0);
  7996. i32 = i17 + (i6 | 8) | 0;
  7997. STACKTOP = i1;
  7998. return i32 | 0;
  7999. }
  8000. i3 = 13360 | 0;
  8001. while (1) {
  8002. i2 = HEAP32[i3 >> 2] | 0;
  8003. if (!(i2 >>> 0 > i15 >>> 0) ? (i11 = HEAP32[i3 + 4 >> 2] | 0, i10 = i2 + i11 | 0, i10 >>> 0 > i15 >>> 0) : 0) {
  8004. break;
  8005. }
  8006. i3 = HEAP32[i3 + 8 >> 2] | 0;
  8007. }
  8008. i3 = i2 + (i11 + -39) | 0;
  8009. if ((i3 & 7 | 0) == 0) {
  8010. i3 = 0;
  8011. } else {
  8012. i3 = 0 - i3 & 7;
  8013. }
  8014. i2 = i2 + (i11 + -47 + i3) | 0;
  8015. i2 = i2 >>> 0 < (i15 + 16 | 0) >>> 0 ? i15 : i2;
  8016. i3 = i2 + 8 | 0;
  8017. i4 = i17 + 8 | 0;
  8018. if ((i4 & 7 | 0) == 0) {
  8019. i4 = 0;
  8020. } else {
  8021. i4 = 0 - i4 & 7;
  8022. }
  8023. i32 = i14 + -40 - i4 | 0;
  8024. HEAP32[12936 >> 2] = i17 + i4;
  8025. HEAP32[12924 >> 2] = i32;
  8026. HEAP32[i17 + (i4 + 4) >> 2] = i32 | 1;
  8027. HEAP32[i17 + (i14 + -36) >> 2] = 40;
  8028. HEAP32[12940 >> 2] = HEAP32[13400 >> 2];
  8029. HEAP32[i2 + 4 >> 2] = 27;
  8030. HEAP32[i3 + 0 >> 2] = HEAP32[13360 >> 2];
  8031. HEAP32[i3 + 4 >> 2] = HEAP32[13364 >> 2];
  8032. HEAP32[i3 + 8 >> 2] = HEAP32[13368 >> 2];
  8033. HEAP32[i3 + 12 >> 2] = HEAP32[13372 >> 2];
  8034. HEAP32[13360 >> 2] = i17;
  8035. HEAP32[13364 >> 2] = i14;
  8036. HEAP32[13372 >> 2] = 0;
  8037. HEAP32[13368 >> 2] = i3;
  8038. i4 = i2 + 28 | 0;
  8039. HEAP32[i4 >> 2] = 7;
  8040. if ((i2 + 32 | 0) >>> 0 < i10 >>> 0) {
  8041. while (1) {
  8042. i3 = i4 + 4 | 0;
  8043. HEAP32[i3 >> 2] = 7;
  8044. if ((i4 + 8 | 0) >>> 0 < i10 >>> 0) {
  8045. i4 = i3;
  8046. } else {
  8047. break;
  8048. }
  8049. }
  8050. }
  8051. if ((i2 | 0) != (i15 | 0)) {
  8052. i2 = i2 - i15 | 0;
  8053. i3 = i15 + (i2 + 4) | 0;
  8054. HEAP32[i3 >> 2] = HEAP32[i3 >> 2] & -2;
  8055. HEAP32[i15 + 4 >> 2] = i2 | 1;
  8056. HEAP32[i15 + i2 >> 2] = i2;
  8057. i3 = i2 >>> 3;
  8058. if (i2 >>> 0 < 256) {
  8059. i4 = i3 << 1;
  8060. i2 = 12952 + (i4 << 2) | 0;
  8061. i5 = HEAP32[3228] | 0;
  8062. i3 = 1 << i3;
  8063. if ((i5 & i3 | 0) != 0) {
  8064. i4 = 12952 + (i4 + 2 << 2) | 0;
  8065. i3 = HEAP32[i4 >> 2] | 0;
  8066. if (i3 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  8067. _abort();
  8068. } else {
  8069. i7 = i4;
  8070. i8 = i3;
  8071. }
  8072. } else {
  8073. HEAP32[3228] = i5 | i3;
  8074. i7 = 12952 + (i4 + 2 << 2) | 0;
  8075. i8 = i2;
  8076. }
  8077. HEAP32[i7 >> 2] = i15;
  8078. HEAP32[i8 + 12 >> 2] = i15;
  8079. HEAP32[i15 + 8 >> 2] = i8;
  8080. HEAP32[i15 + 12 >> 2] = i2;
  8081. break;
  8082. }
  8083. i3 = i2 >>> 8;
  8084. if ((i3 | 0) != 0) {
  8085. if (i2 >>> 0 > 16777215) {
  8086. i3 = 31;
  8087. } else {
  8088. i31 = (i3 + 1048320 | 0) >>> 16 & 8;
  8089. i32 = i3 << i31;
  8090. i30 = (i32 + 520192 | 0) >>> 16 & 4;
  8091. i32 = i32 << i30;
  8092. i3 = (i32 + 245760 | 0) >>> 16 & 2;
  8093. i3 = 14 - (i30 | i31 | i3) + (i32 << i3 >>> 15) | 0;
  8094. i3 = i2 >>> (i3 + 7 | 0) & 1 | i3 << 1;
  8095. }
  8096. } else {
  8097. i3 = 0;
  8098. }
  8099. i7 = 13216 + (i3 << 2) | 0;
  8100. HEAP32[i15 + 28 >> 2] = i3;
  8101. HEAP32[i15 + 20 >> 2] = 0;
  8102. HEAP32[i15 + 16 >> 2] = 0;
  8103. i4 = HEAP32[12916 >> 2] | 0;
  8104. i5 = 1 << i3;
  8105. if ((i4 & i5 | 0) == 0) {
  8106. HEAP32[12916 >> 2] = i4 | i5;
  8107. HEAP32[i7 >> 2] = i15;
  8108. HEAP32[i15 + 24 >> 2] = i7;
  8109. HEAP32[i15 + 12 >> 2] = i15;
  8110. HEAP32[i15 + 8 >> 2] = i15;
  8111. break;
  8112. }
  8113. i4 = HEAP32[i7 >> 2] | 0;
  8114. if ((i3 | 0) == 31) {
  8115. i3 = 0;
  8116. } else {
  8117. i3 = 25 - (i3 >>> 1) | 0;
  8118. }
  8119. L499 : do {
  8120. if ((HEAP32[i4 + 4 >> 2] & -8 | 0) != (i2 | 0)) {
  8121. i3 = i2 << i3;
  8122. while (1) {
  8123. i7 = i4 + (i3 >>> 31 << 2) + 16 | 0;
  8124. i5 = HEAP32[i7 >> 2] | 0;
  8125. if ((i5 | 0) == 0) {
  8126. break;
  8127. }
  8128. if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i2 | 0)) {
  8129. i6 = i5;
  8130. break L499;
  8131. } else {
  8132. i3 = i3 << 1;
  8133. i4 = i5;
  8134. }
  8135. }
  8136. if (i7 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  8137. _abort();
  8138. } else {
  8139. HEAP32[i7 >> 2] = i15;
  8140. HEAP32[i15 + 24 >> 2] = i4;
  8141. HEAP32[i15 + 12 >> 2] = i15;
  8142. HEAP32[i15 + 8 >> 2] = i15;
  8143. break L311;
  8144. }
  8145. } else {
  8146. i6 = i4;
  8147. }
  8148. } while (0);
  8149. i4 = i6 + 8 | 0;
  8150. i3 = HEAP32[i4 >> 2] | 0;
  8151. i2 = HEAP32[12928 >> 2] | 0;
  8152. if (i6 >>> 0 < i2 >>> 0) {
  8153. _abort();
  8154. }
  8155. if (i3 >>> 0 < i2 >>> 0) {
  8156. _abort();
  8157. } else {
  8158. HEAP32[i3 + 12 >> 2] = i15;
  8159. HEAP32[i4 >> 2] = i15;
  8160. HEAP32[i15 + 8 >> 2] = i3;
  8161. HEAP32[i15 + 12 >> 2] = i6;
  8162. HEAP32[i15 + 24 >> 2] = 0;
  8163. break;
  8164. }
  8165. }
  8166. } else {
  8167. i32 = HEAP32[12928 >> 2] | 0;
  8168. if ((i32 | 0) == 0 | i17 >>> 0 < i32 >>> 0) {
  8169. HEAP32[12928 >> 2] = i17;
  8170. }
  8171. HEAP32[13360 >> 2] = i17;
  8172. HEAP32[13364 >> 2] = i14;
  8173. HEAP32[13372 >> 2] = 0;
  8174. HEAP32[12948 >> 2] = HEAP32[3346];
  8175. HEAP32[12944 >> 2] = -1;
  8176. i2 = 0;
  8177. do {
  8178. i32 = i2 << 1;
  8179. i31 = 12952 + (i32 << 2) | 0;
  8180. HEAP32[12952 + (i32 + 3 << 2) >> 2] = i31;
  8181. HEAP32[12952 + (i32 + 2 << 2) >> 2] = i31;
  8182. i2 = i2 + 1 | 0;
  8183. } while ((i2 | 0) != 32);
  8184. i2 = i17 + 8 | 0;
  8185. if ((i2 & 7 | 0) == 0) {
  8186. i2 = 0;
  8187. } else {
  8188. i2 = 0 - i2 & 7;
  8189. }
  8190. i32 = i14 + -40 - i2 | 0;
  8191. HEAP32[12936 >> 2] = i17 + i2;
  8192. HEAP32[12924 >> 2] = i32;
  8193. HEAP32[i17 + (i2 + 4) >> 2] = i32 | 1;
  8194. HEAP32[i17 + (i14 + -36) >> 2] = 40;
  8195. HEAP32[12940 >> 2] = HEAP32[13400 >> 2];
  8196. }
  8197. } while (0);
  8198. i2 = HEAP32[12924 >> 2] | 0;
  8199. if (i2 >>> 0 > i12 >>> 0) {
  8200. i31 = i2 - i12 | 0;
  8201. HEAP32[12924 >> 2] = i31;
  8202. i32 = HEAP32[12936 >> 2] | 0;
  8203. HEAP32[12936 >> 2] = i32 + i12;
  8204. HEAP32[i32 + (i12 + 4) >> 2] = i31 | 1;
  8205. HEAP32[i32 + 4 >> 2] = i12 | 3;
  8206. i32 = i32 + 8 | 0;
  8207. STACKTOP = i1;
  8208. return i32 | 0;
  8209. }
  8210. }
  8211. HEAP32[(___errno_location() | 0) >> 2] = 12;
  8212. i32 = 0;
  8213. STACKTOP = i1;
  8214. return i32 | 0;
  8215. }
  8216. function _llex(i2, i3) {
  8217. i2 = i2 | 0;
  8218. i3 = i3 | 0;
  8219. var i1 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0;
  8220. i1 = STACKTOP;
  8221. STACKTOP = STACKTOP + 16 | 0;
  8222. i12 = i1;
  8223. i4 = i2 + 60 | 0;
  8224. HEAP32[(HEAP32[i4 >> 2] | 0) + 4 >> 2] = 0;
  8225. i5 = i2 + 56 | 0;
  8226. L1 : while (1) {
  8227. i13 = HEAP32[i2 >> 2] | 0;
  8228. L3 : while (1) {
  8229. switch (i13 | 0) {
  8230. case 11:
  8231. case 9:
  8232. case 12:
  8233. case 32:
  8234. {
  8235. break;
  8236. }
  8237. case 91:
  8238. {
  8239. i9 = 25;
  8240. break L1;
  8241. }
  8242. case 62:
  8243. {
  8244. i9 = 45;
  8245. break L1;
  8246. }
  8247. case 46:
  8248. {
  8249. i9 = 161;
  8250. break L1;
  8251. }
  8252. case 13:
  8253. case 10:
  8254. {
  8255. i9 = 4;
  8256. break L3;
  8257. }
  8258. case 45:
  8259. {
  8260. break L3;
  8261. }
  8262. case 61:
  8263. {
  8264. i9 = 29;
  8265. break L1;
  8266. }
  8267. case 39:
  8268. case 34:
  8269. {
  8270. i9 = 69;
  8271. break L1;
  8272. }
  8273. case 126:
  8274. {
  8275. i9 = 53;
  8276. break L1;
  8277. }
  8278. case 60:
  8279. {
  8280. i9 = 37;
  8281. break L1;
  8282. }
  8283. case 58:
  8284. {
  8285. i9 = 61;
  8286. break L1;
  8287. }
  8288. case 57:
  8289. case 56:
  8290. case 55:
  8291. case 54:
  8292. case 53:
  8293. case 52:
  8294. case 51:
  8295. case 50:
  8296. case 49:
  8297. case 48:
  8298. {
  8299. i20 = i13;
  8300. break L1;
  8301. }
  8302. case -1:
  8303. {
  8304. i2 = 286;
  8305. i9 = 306;
  8306. break L1;
  8307. }
  8308. default:
  8309. {
  8310. i9 = 283;
  8311. break L1;
  8312. }
  8313. }
  8314. i13 = HEAP32[i5 >> 2] | 0;
  8315. i27 = HEAP32[i13 >> 2] | 0;
  8316. HEAP32[i13 >> 2] = i27 + -1;
  8317. if ((i27 | 0) == 0) {
  8318. i13 = _luaZ_fill(i13) | 0;
  8319. } else {
  8320. i27 = i13 + 4 | 0;
  8321. i13 = HEAP32[i27 >> 2] | 0;
  8322. HEAP32[i27 >> 2] = i13 + 1;
  8323. i13 = HEAPU8[i13] | 0;
  8324. }
  8325. HEAP32[i2 >> 2] = i13;
  8326. }
  8327. if ((i9 | 0) == 4) {
  8328. i9 = 0;
  8329. _inclinenumber(i2);
  8330. continue;
  8331. }
  8332. i13 = HEAP32[i5 >> 2] | 0;
  8333. i27 = HEAP32[i13 >> 2] | 0;
  8334. HEAP32[i13 >> 2] = i27 + -1;
  8335. if ((i27 | 0) == 0) {
  8336. i13 = _luaZ_fill(i13) | 0;
  8337. } else {
  8338. i27 = i13 + 4 | 0;
  8339. i13 = HEAP32[i27 >> 2] | 0;
  8340. HEAP32[i27 >> 2] = i13 + 1;
  8341. i13 = HEAPU8[i13] | 0;
  8342. }
  8343. HEAP32[i2 >> 2] = i13;
  8344. if ((i13 | 0) != 45) {
  8345. i2 = 45;
  8346. i9 = 306;
  8347. break;
  8348. }
  8349. i13 = HEAP32[i5 >> 2] | 0;
  8350. i27 = HEAP32[i13 >> 2] | 0;
  8351. HEAP32[i13 >> 2] = i27 + -1;
  8352. if ((i27 | 0) == 0) {
  8353. i13 = _luaZ_fill(i13) | 0;
  8354. } else {
  8355. i27 = i13 + 4 | 0;
  8356. i13 = HEAP32[i27 >> 2] | 0;
  8357. HEAP32[i27 >> 2] = i13 + 1;
  8358. i13 = HEAPU8[i13] | 0;
  8359. }
  8360. HEAP32[i2 >> 2] = i13;
  8361. do {
  8362. if ((i13 | 0) == 91) {
  8363. i13 = _skip_sep(i2) | 0;
  8364. HEAP32[(HEAP32[i4 >> 2] | 0) + 4 >> 2] = 0;
  8365. if ((i13 | 0) > -1) {
  8366. _read_long_string(i2, 0, i13);
  8367. HEAP32[(HEAP32[i4 >> 2] | 0) + 4 >> 2] = 0;
  8368. continue L1;
  8369. } else {
  8370. i13 = HEAP32[i2 >> 2] | 0;
  8371. break;
  8372. }
  8373. }
  8374. } while (0);
  8375. while (1) {
  8376. if ((i13 | 0) == -1 | (i13 | 0) == 13 | (i13 | 0) == 10) {
  8377. continue L1;
  8378. }
  8379. i13 = HEAP32[i5 >> 2] | 0;
  8380. i27 = HEAP32[i13 >> 2] | 0;
  8381. HEAP32[i13 >> 2] = i27 + -1;
  8382. if ((i27 | 0) == 0) {
  8383. i13 = _luaZ_fill(i13) | 0;
  8384. } else {
  8385. i27 = i13 + 4 | 0;
  8386. i13 = HEAP32[i27 >> 2] | 0;
  8387. HEAP32[i27 >> 2] = i13 + 1;
  8388. i13 = HEAPU8[i13] | 0;
  8389. }
  8390. HEAP32[i2 >> 2] = i13;
  8391. }
  8392. }
  8393. if ((i9 | 0) == 25) {
  8394. i9 = _skip_sep(i2) | 0;
  8395. if ((i9 | 0) > -1) {
  8396. _read_long_string(i2, i3, i9);
  8397. i27 = 289;
  8398. STACKTOP = i1;
  8399. return i27 | 0;
  8400. }
  8401. if ((i9 | 0) == -1) {
  8402. i27 = 91;
  8403. STACKTOP = i1;
  8404. return i27 | 0;
  8405. } else {
  8406. _lexerror(i2, 12272, 289);
  8407. }
  8408. } else if ((i9 | 0) == 29) {
  8409. i3 = HEAP32[i5 >> 2] | 0;
  8410. i27 = HEAP32[i3 >> 2] | 0;
  8411. HEAP32[i3 >> 2] = i27 + -1;
  8412. if ((i27 | 0) == 0) {
  8413. i3 = _luaZ_fill(i3) | 0;
  8414. } else {
  8415. i27 = i3 + 4 | 0;
  8416. i3 = HEAP32[i27 >> 2] | 0;
  8417. HEAP32[i27 >> 2] = i3 + 1;
  8418. i3 = HEAPU8[i3] | 0;
  8419. }
  8420. HEAP32[i2 >> 2] = i3;
  8421. if ((i3 | 0) != 61) {
  8422. i27 = 61;
  8423. STACKTOP = i1;
  8424. return i27 | 0;
  8425. }
  8426. i3 = HEAP32[i5 >> 2] | 0;
  8427. i27 = HEAP32[i3 >> 2] | 0;
  8428. HEAP32[i3 >> 2] = i27 + -1;
  8429. if ((i27 | 0) == 0) {
  8430. i3 = _luaZ_fill(i3) | 0;
  8431. } else {
  8432. i27 = i3 + 4 | 0;
  8433. i3 = HEAP32[i27 >> 2] | 0;
  8434. HEAP32[i27 >> 2] = i3 + 1;
  8435. i3 = HEAPU8[i3] | 0;
  8436. }
  8437. HEAP32[i2 >> 2] = i3;
  8438. i27 = 281;
  8439. STACKTOP = i1;
  8440. return i27 | 0;
  8441. } else if ((i9 | 0) == 37) {
  8442. i3 = HEAP32[i5 >> 2] | 0;
  8443. i27 = HEAP32[i3 >> 2] | 0;
  8444. HEAP32[i3 >> 2] = i27 + -1;
  8445. if ((i27 | 0) == 0) {
  8446. i3 = _luaZ_fill(i3) | 0;
  8447. } else {
  8448. i27 = i3 + 4 | 0;
  8449. i3 = HEAP32[i27 >> 2] | 0;
  8450. HEAP32[i27 >> 2] = i3 + 1;
  8451. i3 = HEAPU8[i3] | 0;
  8452. }
  8453. HEAP32[i2 >> 2] = i3;
  8454. if ((i3 | 0) != 61) {
  8455. i27 = 60;
  8456. STACKTOP = i1;
  8457. return i27 | 0;
  8458. }
  8459. i3 = HEAP32[i5 >> 2] | 0;
  8460. i27 = HEAP32[i3 >> 2] | 0;
  8461. HEAP32[i3 >> 2] = i27 + -1;
  8462. if ((i27 | 0) == 0) {
  8463. i3 = _luaZ_fill(i3) | 0;
  8464. } else {
  8465. i27 = i3 + 4 | 0;
  8466. i3 = HEAP32[i27 >> 2] | 0;
  8467. HEAP32[i27 >> 2] = i3 + 1;
  8468. i3 = HEAPU8[i3] | 0;
  8469. }
  8470. HEAP32[i2 >> 2] = i3;
  8471. i27 = 283;
  8472. STACKTOP = i1;
  8473. return i27 | 0;
  8474. } else if ((i9 | 0) == 45) {
  8475. i3 = HEAP32[i5 >> 2] | 0;
  8476. i27 = HEAP32[i3 >> 2] | 0;
  8477. HEAP32[i3 >> 2] = i27 + -1;
  8478. if ((i27 | 0) == 0) {
  8479. i3 = _luaZ_fill(i3) | 0;
  8480. } else {
  8481. i27 = i3 + 4 | 0;
  8482. i3 = HEAP32[i27 >> 2] | 0;
  8483. HEAP32[i27 >> 2] = i3 + 1;
  8484. i3 = HEAPU8[i3] | 0;
  8485. }
  8486. HEAP32[i2 >> 2] = i3;
  8487. if ((i3 | 0) != 61) {
  8488. i27 = 62;
  8489. STACKTOP = i1;
  8490. return i27 | 0;
  8491. }
  8492. i3 = HEAP32[i5 >> 2] | 0;
  8493. i27 = HEAP32[i3 >> 2] | 0;
  8494. HEAP32[i3 >> 2] = i27 + -1;
  8495. if ((i27 | 0) == 0) {
  8496. i3 = _luaZ_fill(i3) | 0;
  8497. } else {
  8498. i27 = i3 + 4 | 0;
  8499. i3 = HEAP32[i27 >> 2] | 0;
  8500. HEAP32[i27 >> 2] = i3 + 1;
  8501. i3 = HEAPU8[i3] | 0;
  8502. }
  8503. HEAP32[i2 >> 2] = i3;
  8504. i27 = 282;
  8505. STACKTOP = i1;
  8506. return i27 | 0;
  8507. } else if ((i9 | 0) == 53) {
  8508. i3 = HEAP32[i5 >> 2] | 0;
  8509. i27 = HEAP32[i3 >> 2] | 0;
  8510. HEAP32[i3 >> 2] = i27 + -1;
  8511. if ((i27 | 0) == 0) {
  8512. i3 = _luaZ_fill(i3) | 0;
  8513. } else {
  8514. i27 = i3 + 4 | 0;
  8515. i3 = HEAP32[i27 >> 2] | 0;
  8516. HEAP32[i27 >> 2] = i3 + 1;
  8517. i3 = HEAPU8[i3] | 0;
  8518. }
  8519. HEAP32[i2 >> 2] = i3;
  8520. if ((i3 | 0) != 61) {
  8521. i27 = 126;
  8522. STACKTOP = i1;
  8523. return i27 | 0;
  8524. }
  8525. i3 = HEAP32[i5 >> 2] | 0;
  8526. i27 = HEAP32[i3 >> 2] | 0;
  8527. HEAP32[i3 >> 2] = i27 + -1;
  8528. if ((i27 | 0) == 0) {
  8529. i3 = _luaZ_fill(i3) | 0;
  8530. } else {
  8531. i27 = i3 + 4 | 0;
  8532. i3 = HEAP32[i27 >> 2] | 0;
  8533. HEAP32[i27 >> 2] = i3 + 1;
  8534. i3 = HEAPU8[i3] | 0;
  8535. }
  8536. HEAP32[i2 >> 2] = i3;
  8537. i27 = 284;
  8538. STACKTOP = i1;
  8539. return i27 | 0;
  8540. } else if ((i9 | 0) == 61) {
  8541. i3 = HEAP32[i5 >> 2] | 0;
  8542. i27 = HEAP32[i3 >> 2] | 0;
  8543. HEAP32[i3 >> 2] = i27 + -1;
  8544. if ((i27 | 0) == 0) {
  8545. i3 = _luaZ_fill(i3) | 0;
  8546. } else {
  8547. i27 = i3 + 4 | 0;
  8548. i3 = HEAP32[i27 >> 2] | 0;
  8549. HEAP32[i27 >> 2] = i3 + 1;
  8550. i3 = HEAPU8[i3] | 0;
  8551. }
  8552. HEAP32[i2 >> 2] = i3;
  8553. if ((i3 | 0) != 58) {
  8554. i27 = 58;
  8555. STACKTOP = i1;
  8556. return i27 | 0;
  8557. }
  8558. i3 = HEAP32[i5 >> 2] | 0;
  8559. i27 = HEAP32[i3 >> 2] | 0;
  8560. HEAP32[i3 >> 2] = i27 + -1;
  8561. if ((i27 | 0) == 0) {
  8562. i3 = _luaZ_fill(i3) | 0;
  8563. } else {
  8564. i27 = i3 + 4 | 0;
  8565. i3 = HEAP32[i27 >> 2] | 0;
  8566. HEAP32[i27 >> 2] = i3 + 1;
  8567. i3 = HEAPU8[i3] | 0;
  8568. }
  8569. HEAP32[i2 >> 2] = i3;
  8570. i27 = 285;
  8571. STACKTOP = i1;
  8572. return i27 | 0;
  8573. } else if ((i9 | 0) == 69) {
  8574. i14 = HEAP32[i4 >> 2] | 0;
  8575. i7 = i14 + 4 | 0;
  8576. i15 = HEAP32[i7 >> 2] | 0;
  8577. i8 = i14 + 8 | 0;
  8578. i6 = HEAP32[i8 >> 2] | 0;
  8579. do {
  8580. if ((i15 + 1 | 0) >>> 0 > i6 >>> 0) {
  8581. if (i6 >>> 0 > 2147483645) {
  8582. _lexerror(i2, 12368, 0);
  8583. }
  8584. i16 = i6 << 1;
  8585. i15 = HEAP32[i2 + 52 >> 2] | 0;
  8586. if ((i16 | 0) == -2) {
  8587. _luaM_toobig(i15);
  8588. } else {
  8589. i24 = _luaM_realloc_(i15, HEAP32[i14 >> 2] | 0, i6, i16) | 0;
  8590. HEAP32[i14 >> 2] = i24;
  8591. HEAP32[i8 >> 2] = i16;
  8592. i23 = HEAP32[i7 >> 2] | 0;
  8593. break;
  8594. }
  8595. } else {
  8596. i23 = i15;
  8597. i24 = HEAP32[i14 >> 2] | 0;
  8598. }
  8599. } while (0);
  8600. i6 = i13 & 255;
  8601. HEAP32[i7 >> 2] = i23 + 1;
  8602. HEAP8[i24 + i23 | 0] = i6;
  8603. i7 = HEAP32[i5 >> 2] | 0;
  8604. i27 = HEAP32[i7 >> 2] | 0;
  8605. HEAP32[i7 >> 2] = i27 + -1;
  8606. if ((i27 | 0) == 0) {
  8607. i14 = _luaZ_fill(i7) | 0;
  8608. } else {
  8609. i27 = i7 + 4 | 0;
  8610. i14 = HEAP32[i27 >> 2] | 0;
  8611. HEAP32[i27 >> 2] = i14 + 1;
  8612. i14 = HEAPU8[i14] | 0;
  8613. }
  8614. HEAP32[i2 >> 2] = i14;
  8615. L139 : do {
  8616. if ((i14 | 0) != (i13 | 0)) {
  8617. i7 = i2 + 52 | 0;
  8618. L141 : while (1) {
  8619. L143 : do {
  8620. if ((i14 | 0) == 92) {
  8621. i8 = HEAP32[i5 >> 2] | 0;
  8622. i27 = HEAP32[i8 >> 2] | 0;
  8623. HEAP32[i8 >> 2] = i27 + -1;
  8624. if ((i27 | 0) == 0) {
  8625. i8 = _luaZ_fill(i8) | 0;
  8626. } else {
  8627. i27 = i8 + 4 | 0;
  8628. i8 = HEAP32[i27 >> 2] | 0;
  8629. HEAP32[i27 >> 2] = i8 + 1;
  8630. i8 = HEAPU8[i8] | 0;
  8631. }
  8632. HEAP32[i2 >> 2] = i8;
  8633. switch (i8 | 0) {
  8634. case 13:
  8635. case 10:
  8636. {
  8637. _inclinenumber(i2);
  8638. i8 = 10;
  8639. break;
  8640. }
  8641. case 39:
  8642. case 34:
  8643. case 92:
  8644. {
  8645. i9 = 124;
  8646. break;
  8647. }
  8648. case 122:
  8649. {
  8650. i8 = HEAP32[i5 >> 2] | 0;
  8651. i27 = HEAP32[i8 >> 2] | 0;
  8652. HEAP32[i8 >> 2] = i27 + -1;
  8653. if ((i27 | 0) == 0) {
  8654. i14 = _luaZ_fill(i8) | 0;
  8655. } else {
  8656. i27 = i8 + 4 | 0;
  8657. i14 = HEAP32[i27 >> 2] | 0;
  8658. HEAP32[i27 >> 2] = i14 + 1;
  8659. i14 = HEAPU8[i14] | 0;
  8660. }
  8661. HEAP32[i2 >> 2] = i14;
  8662. if ((HEAP8[i14 + 10913 | 0] & 8) == 0) {
  8663. break L143;
  8664. }
  8665. while (1) {
  8666. if ((i14 | 0) == 13 | (i14 | 0) == 10) {
  8667. _inclinenumber(i2);
  8668. i14 = HEAP32[i2 >> 2] | 0;
  8669. } else {
  8670. i8 = HEAP32[i5 >> 2] | 0;
  8671. i27 = HEAP32[i8 >> 2] | 0;
  8672. HEAP32[i8 >> 2] = i27 + -1;
  8673. if ((i27 | 0) == 0) {
  8674. i14 = _luaZ_fill(i8) | 0;
  8675. } else {
  8676. i27 = i8 + 4 | 0;
  8677. i14 = HEAP32[i27 >> 2] | 0;
  8678. HEAP32[i27 >> 2] = i14 + 1;
  8679. i14 = HEAPU8[i14] | 0;
  8680. }
  8681. HEAP32[i2 >> 2] = i14;
  8682. }
  8683. if ((HEAP8[i14 + 10913 | 0] & 8) == 0) {
  8684. break L143;
  8685. }
  8686. }
  8687. }
  8688. case 118:
  8689. {
  8690. i8 = 11;
  8691. i9 = 124;
  8692. break;
  8693. }
  8694. case 120:
  8695. {
  8696. HEAP32[i12 >> 2] = 120;
  8697. i14 = 1;
  8698. i8 = 0;
  8699. while (1) {
  8700. i9 = HEAP32[i5 >> 2] | 0;
  8701. i27 = HEAP32[i9 >> 2] | 0;
  8702. HEAP32[i9 >> 2] = i27 + -1;
  8703. if ((i27 | 0) == 0) {
  8704. i9 = _luaZ_fill(i9) | 0;
  8705. } else {
  8706. i27 = i9 + 4 | 0;
  8707. i9 = HEAP32[i27 >> 2] | 0;
  8708. HEAP32[i27 >> 2] = i9 + 1;
  8709. i9 = HEAPU8[i9] | 0;
  8710. }
  8711. HEAP32[i2 >> 2] = i9;
  8712. HEAP32[i12 + (i14 << 2) >> 2] = i9;
  8713. if ((HEAP8[i9 + 10913 | 0] & 16) == 0) {
  8714. i9 = 100;
  8715. break L141;
  8716. }
  8717. i8 = (_luaO_hexavalue(i9) | 0) + (i8 << 4) | 0;
  8718. i14 = i14 + 1 | 0;
  8719. if ((i14 | 0) >= 3) {
  8720. i9 = 124;
  8721. break;
  8722. }
  8723. }
  8724. break;
  8725. }
  8726. case -1:
  8727. {
  8728. i14 = -1;
  8729. break L143;
  8730. }
  8731. case 98:
  8732. {
  8733. i8 = 8;
  8734. i9 = 124;
  8735. break;
  8736. }
  8737. case 102:
  8738. {
  8739. i8 = 12;
  8740. i9 = 124;
  8741. break;
  8742. }
  8743. case 110:
  8744. {
  8745. i8 = 10;
  8746. i9 = 124;
  8747. break;
  8748. }
  8749. case 114:
  8750. {
  8751. i8 = 13;
  8752. i9 = 124;
  8753. break;
  8754. }
  8755. case 116:
  8756. {
  8757. i8 = 9;
  8758. i9 = 124;
  8759. break;
  8760. }
  8761. case 97:
  8762. {
  8763. i8 = 7;
  8764. i9 = 124;
  8765. break;
  8766. }
  8767. default:
  8768. {
  8769. if ((HEAP8[i8 + 10913 | 0] & 2) == 0) {
  8770. i9 = 116;
  8771. break L141;
  8772. } else {
  8773. i15 = i8;
  8774. i14 = 0;
  8775. i8 = 0;
  8776. }
  8777. do {
  8778. if ((HEAP8[i15 + 10913 | 0] & 2) == 0) {
  8779. break;
  8780. }
  8781. HEAP32[i12 + (i14 << 2) >> 2] = i15;
  8782. i8 = i15 + -48 + (i8 * 10 | 0) | 0;
  8783. i15 = HEAP32[i5 >> 2] | 0;
  8784. i27 = HEAP32[i15 >> 2] | 0;
  8785. HEAP32[i15 >> 2] = i27 + -1;
  8786. if ((i27 | 0) == 0) {
  8787. i15 = _luaZ_fill(i15) | 0;
  8788. } else {
  8789. i27 = i15 + 4 | 0;
  8790. i15 = HEAP32[i27 >> 2] | 0;
  8791. HEAP32[i27 >> 2] = i15 + 1;
  8792. i15 = HEAPU8[i15] | 0;
  8793. }
  8794. HEAP32[i2 >> 2] = i15;
  8795. i14 = i14 + 1 | 0;
  8796. } while ((i14 | 0) < 3);
  8797. if ((i8 | 0) > 255) {
  8798. i9 = 123;
  8799. break L141;
  8800. }
  8801. }
  8802. }
  8803. if ((i9 | 0) == 124) {
  8804. i9 = 0;
  8805. i14 = HEAP32[i5 >> 2] | 0;
  8806. i27 = HEAP32[i14 >> 2] | 0;
  8807. HEAP32[i14 >> 2] = i27 + -1;
  8808. if ((i27 | 0) == 0) {
  8809. i14 = _luaZ_fill(i14) | 0;
  8810. } else {
  8811. i27 = i14 + 4 | 0;
  8812. i14 = HEAP32[i27 >> 2] | 0;
  8813. HEAP32[i27 >> 2] = i14 + 1;
  8814. i14 = HEAPU8[i14] | 0;
  8815. }
  8816. HEAP32[i2 >> 2] = i14;
  8817. }
  8818. i15 = HEAP32[i4 >> 2] | 0;
  8819. i14 = i15 + 4 | 0;
  8820. i18 = HEAP32[i14 >> 2] | 0;
  8821. i16 = i15 + 8 | 0;
  8822. i17 = HEAP32[i16 >> 2] | 0;
  8823. if ((i18 + 1 | 0) >>> 0 > i17 >>> 0) {
  8824. if (i17 >>> 0 > 2147483645) {
  8825. i9 = 131;
  8826. break L141;
  8827. }
  8828. i18 = i17 << 1;
  8829. i19 = HEAP32[i7 >> 2] | 0;
  8830. if ((i18 | 0) == -2) {
  8831. i9 = 133;
  8832. break L141;
  8833. }
  8834. i27 = _luaM_realloc_(i19, HEAP32[i15 >> 2] | 0, i17, i18) | 0;
  8835. HEAP32[i15 >> 2] = i27;
  8836. HEAP32[i16 >> 2] = i18;
  8837. i18 = HEAP32[i14 >> 2] | 0;
  8838. i15 = i27;
  8839. } else {
  8840. i15 = HEAP32[i15 >> 2] | 0;
  8841. }
  8842. HEAP32[i14 >> 2] = i18 + 1;
  8843. HEAP8[i15 + i18 | 0] = i8;
  8844. i14 = HEAP32[i2 >> 2] | 0;
  8845. } else if ((i14 | 0) == -1) {
  8846. i9 = 82;
  8847. break L141;
  8848. } else if ((i14 | 0) == 13 | (i14 | 0) == 10) {
  8849. i9 = 83;
  8850. break L141;
  8851. } else {
  8852. i15 = HEAP32[i4 >> 2] | 0;
  8853. i8 = i15 + 4 | 0;
  8854. i18 = HEAP32[i8 >> 2] | 0;
  8855. i17 = i15 + 8 | 0;
  8856. i16 = HEAP32[i17 >> 2] | 0;
  8857. if ((i18 + 1 | 0) >>> 0 > i16 >>> 0) {
  8858. if (i16 >>> 0 > 2147483645) {
  8859. i9 = 139;
  8860. break L141;
  8861. }
  8862. i19 = i16 << 1;
  8863. i18 = HEAP32[i7 >> 2] | 0;
  8864. if ((i19 | 0) == -2) {
  8865. i9 = 141;
  8866. break L141;
  8867. }
  8868. i27 = _luaM_realloc_(i18, HEAP32[i15 >> 2] | 0, i16, i19) | 0;
  8869. HEAP32[i15 >> 2] = i27;
  8870. HEAP32[i17 >> 2] = i19;
  8871. i18 = HEAP32[i8 >> 2] | 0;
  8872. i15 = i27;
  8873. } else {
  8874. i15 = HEAP32[i15 >> 2] | 0;
  8875. }
  8876. HEAP32[i8 >> 2] = i18 + 1;
  8877. HEAP8[i15 + i18 | 0] = i14;
  8878. i8 = HEAP32[i5 >> 2] | 0;
  8879. i27 = HEAP32[i8 >> 2] | 0;
  8880. HEAP32[i8 >> 2] = i27 + -1;
  8881. if ((i27 | 0) == 0) {
  8882. i14 = _luaZ_fill(i8) | 0;
  8883. } else {
  8884. i27 = i8 + 4 | 0;
  8885. i14 = HEAP32[i27 >> 2] | 0;
  8886. HEAP32[i27 >> 2] = i14 + 1;
  8887. i14 = HEAPU8[i14] | 0;
  8888. }
  8889. HEAP32[i2 >> 2] = i14;
  8890. }
  8891. } while (0);
  8892. if ((i14 | 0) == (i13 | 0)) {
  8893. break L139;
  8894. }
  8895. }
  8896. if ((i9 | 0) == 82) {
  8897. _lexerror(i2, 12400, 286);
  8898. } else if ((i9 | 0) == 83) {
  8899. _lexerror(i2, 12400, 289);
  8900. } else if ((i9 | 0) == 100) {
  8901. _escerror(i2, i12, i14 + 1 | 0, 12480);
  8902. } else if ((i9 | 0) == 116) {
  8903. _escerror(i2, i2, 1, 12424);
  8904. } else if ((i9 | 0) == 123) {
  8905. _escerror(i2, i12, i14, 12448);
  8906. } else if ((i9 | 0) == 131) {
  8907. _lexerror(i2, 12368, 0);
  8908. } else if ((i9 | 0) == 133) {
  8909. _luaM_toobig(i19);
  8910. } else if ((i9 | 0) == 139) {
  8911. _lexerror(i2, 12368, 0);
  8912. } else if ((i9 | 0) == 141) {
  8913. _luaM_toobig(i18);
  8914. }
  8915. }
  8916. } while (0);
  8917. i7 = HEAP32[i4 >> 2] | 0;
  8918. i8 = i7 + 4 | 0;
  8919. i13 = HEAP32[i8 >> 2] | 0;
  8920. i12 = i7 + 8 | 0;
  8921. i9 = HEAP32[i12 >> 2] | 0;
  8922. do {
  8923. if ((i13 + 1 | 0) >>> 0 > i9 >>> 0) {
  8924. if (i9 >>> 0 > 2147483645) {
  8925. _lexerror(i2, 12368, 0);
  8926. }
  8927. i14 = i9 << 1;
  8928. i13 = HEAP32[i2 + 52 >> 2] | 0;
  8929. if ((i14 | 0) == -2) {
  8930. _luaM_toobig(i13);
  8931. } else {
  8932. i11 = _luaM_realloc_(i13, HEAP32[i7 >> 2] | 0, i9, i14) | 0;
  8933. HEAP32[i7 >> 2] = i11;
  8934. HEAP32[i12 >> 2] = i14;
  8935. i10 = HEAP32[i8 >> 2] | 0;
  8936. break;
  8937. }
  8938. } else {
  8939. i10 = i13;
  8940. i11 = HEAP32[i7 >> 2] | 0;
  8941. }
  8942. } while (0);
  8943. HEAP32[i8 >> 2] = i10 + 1;
  8944. HEAP8[i11 + i10 | 0] = i6;
  8945. i5 = HEAP32[i5 >> 2] | 0;
  8946. i27 = HEAP32[i5 >> 2] | 0;
  8947. HEAP32[i5 >> 2] = i27 + -1;
  8948. if ((i27 | 0) == 0) {
  8949. i5 = _luaZ_fill(i5) | 0;
  8950. } else {
  8951. i27 = i5 + 4 | 0;
  8952. i5 = HEAP32[i27 >> 2] | 0;
  8953. HEAP32[i27 >> 2] = i5 + 1;
  8954. i5 = HEAPU8[i5] | 0;
  8955. }
  8956. HEAP32[i2 >> 2] = i5;
  8957. i5 = HEAP32[i4 >> 2] | 0;
  8958. i4 = HEAP32[i2 + 52 >> 2] | 0;
  8959. i5 = _luaS_newlstr(i4, (HEAP32[i5 >> 2] | 0) + 1 | 0, (HEAP32[i5 + 4 >> 2] | 0) + -2 | 0) | 0;
  8960. i6 = i4 + 8 | 0;
  8961. i7 = HEAP32[i6 >> 2] | 0;
  8962. HEAP32[i6 >> 2] = i7 + 16;
  8963. HEAP32[i7 >> 2] = i5;
  8964. HEAP32[i7 + 8 >> 2] = HEAPU8[i5 + 4 | 0] | 64;
  8965. i7 = _luaH_set(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 4 >> 2] | 0, (HEAP32[i6 >> 2] | 0) + -16 | 0) | 0;
  8966. i2 = i7 + 8 | 0;
  8967. if ((HEAP32[i2 >> 2] | 0) == 0 ? (HEAP32[i7 >> 2] = 1, HEAP32[i2 >> 2] = 1, (HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 12 >> 2] | 0) > 0) : 0) {
  8968. _luaC_step(i4);
  8969. }
  8970. HEAP32[i6 >> 2] = (HEAP32[i6 >> 2] | 0) + -16;
  8971. HEAP32[i3 >> 2] = i5;
  8972. i27 = 289;
  8973. STACKTOP = i1;
  8974. return i27 | 0;
  8975. } else if ((i9 | 0) == 161) {
  8976. i10 = HEAP32[i4 >> 2] | 0;
  8977. i9 = i10 + 4 | 0;
  8978. i13 = HEAP32[i9 >> 2] | 0;
  8979. i12 = i10 + 8 | 0;
  8980. i11 = HEAP32[i12 >> 2] | 0;
  8981. do {
  8982. if ((i13 + 1 | 0) >>> 0 > i11 >>> 0) {
  8983. if (i11 >>> 0 > 2147483645) {
  8984. _lexerror(i2, 12368, 0);
  8985. }
  8986. i13 = i11 << 1;
  8987. i20 = HEAP32[i2 + 52 >> 2] | 0;
  8988. if ((i13 | 0) == -2) {
  8989. _luaM_toobig(i20);
  8990. } else {
  8991. i25 = _luaM_realloc_(i20, HEAP32[i10 >> 2] | 0, i11, i13) | 0;
  8992. HEAP32[i10 >> 2] = i25;
  8993. HEAP32[i12 >> 2] = i13;
  8994. i26 = HEAP32[i9 >> 2] | 0;
  8995. break;
  8996. }
  8997. } else {
  8998. i26 = i13;
  8999. i25 = HEAP32[i10 >> 2] | 0;
  9000. }
  9001. } while (0);
  9002. HEAP32[i9 >> 2] = i26 + 1;
  9003. HEAP8[i25 + i26 | 0] = 46;
  9004. i9 = HEAP32[i5 >> 2] | 0;
  9005. i27 = HEAP32[i9 >> 2] | 0;
  9006. HEAP32[i9 >> 2] = i27 + -1;
  9007. if ((i27 | 0) == 0) {
  9008. i20 = _luaZ_fill(i9) | 0;
  9009. } else {
  9010. i27 = i9 + 4 | 0;
  9011. i20 = HEAP32[i27 >> 2] | 0;
  9012. HEAP32[i27 >> 2] = i20 + 1;
  9013. i20 = HEAPU8[i20] | 0;
  9014. }
  9015. HEAP32[i2 >> 2] = i20;
  9016. if ((i20 | 0) != 0 ? (_memchr(12304, i20, 2) | 0) != 0 : 0) {
  9017. i6 = HEAP32[i4 >> 2] | 0;
  9018. i3 = i6 + 4 | 0;
  9019. i9 = HEAP32[i3 >> 2] | 0;
  9020. i8 = i6 + 8 | 0;
  9021. i7 = HEAP32[i8 >> 2] | 0;
  9022. do {
  9023. if ((i9 + 1 | 0) >>> 0 > i7 >>> 0) {
  9024. if (i7 >>> 0 > 2147483645) {
  9025. _lexerror(i2, 12368, 0);
  9026. }
  9027. i9 = i7 << 1;
  9028. i10 = HEAP32[i2 + 52 >> 2] | 0;
  9029. if ((i9 | 0) == -2) {
  9030. _luaM_toobig(i10);
  9031. } else {
  9032. i21 = _luaM_realloc_(i10, HEAP32[i6 >> 2] | 0, i7, i9) | 0;
  9033. HEAP32[i6 >> 2] = i21;
  9034. HEAP32[i8 >> 2] = i9;
  9035. i22 = HEAP32[i3 >> 2] | 0;
  9036. break;
  9037. }
  9038. } else {
  9039. i22 = i9;
  9040. i21 = HEAP32[i6 >> 2] | 0;
  9041. }
  9042. } while (0);
  9043. HEAP32[i3 >> 2] = i22 + 1;
  9044. HEAP8[i21 + i22 | 0] = i20;
  9045. i3 = HEAP32[i5 >> 2] | 0;
  9046. i27 = HEAP32[i3 >> 2] | 0;
  9047. HEAP32[i3 >> 2] = i27 + -1;
  9048. if ((i27 | 0) == 0) {
  9049. i3 = _luaZ_fill(i3) | 0;
  9050. } else {
  9051. i27 = i3 + 4 | 0;
  9052. i3 = HEAP32[i27 >> 2] | 0;
  9053. HEAP32[i27 >> 2] = i3 + 1;
  9054. i3 = HEAPU8[i3] | 0;
  9055. }
  9056. HEAP32[i2 >> 2] = i3;
  9057. if ((i3 | 0) == 0) {
  9058. i27 = 279;
  9059. STACKTOP = i1;
  9060. return i27 | 0;
  9061. }
  9062. if ((_memchr(12304, i3, 2) | 0) == 0) {
  9063. i27 = 279;
  9064. STACKTOP = i1;
  9065. return i27 | 0;
  9066. }
  9067. i6 = HEAP32[i4 >> 2] | 0;
  9068. i7 = i6 + 4 | 0;
  9069. i9 = HEAP32[i7 >> 2] | 0;
  9070. i8 = i6 + 8 | 0;
  9071. i4 = HEAP32[i8 >> 2] | 0;
  9072. do {
  9073. if ((i9 + 1 | 0) >>> 0 > i4 >>> 0) {
  9074. if (i4 >>> 0 > 2147483645) {
  9075. _lexerror(i2, 12368, 0);
  9076. }
  9077. i10 = i4 << 1;
  9078. i9 = HEAP32[i2 + 52 >> 2] | 0;
  9079. if ((i10 | 0) == -2) {
  9080. _luaM_toobig(i9);
  9081. } else {
  9082. i18 = _luaM_realloc_(i9, HEAP32[i6 >> 2] | 0, i4, i10) | 0;
  9083. HEAP32[i6 >> 2] = i18;
  9084. HEAP32[i8 >> 2] = i10;
  9085. i19 = HEAP32[i7 >> 2] | 0;
  9086. break;
  9087. }
  9088. } else {
  9089. i19 = i9;
  9090. i18 = HEAP32[i6 >> 2] | 0;
  9091. }
  9092. } while (0);
  9093. HEAP32[i7 >> 2] = i19 + 1;
  9094. HEAP8[i18 + i19 | 0] = i3;
  9095. i3 = HEAP32[i5 >> 2] | 0;
  9096. i27 = HEAP32[i3 >> 2] | 0;
  9097. HEAP32[i3 >> 2] = i27 + -1;
  9098. if ((i27 | 0) == 0) {
  9099. i3 = _luaZ_fill(i3) | 0;
  9100. } else {
  9101. i27 = i3 + 4 | 0;
  9102. i3 = HEAP32[i27 >> 2] | 0;
  9103. HEAP32[i27 >> 2] = i3 + 1;
  9104. i3 = HEAPU8[i3] | 0;
  9105. }
  9106. HEAP32[i2 >> 2] = i3;
  9107. i27 = 280;
  9108. STACKTOP = i1;
  9109. return i27 | 0;
  9110. }
  9111. if ((HEAP8[i20 + 10913 | 0] & 2) == 0) {
  9112. i27 = 46;
  9113. STACKTOP = i1;
  9114. return i27 | 0;
  9115. }
  9116. } else if ((i9 | 0) == 283) {
  9117. if ((HEAP8[i13 + 10913 | 0] & 1) == 0) {
  9118. i3 = HEAP32[i5 >> 2] | 0;
  9119. i27 = HEAP32[i3 >> 2] | 0;
  9120. HEAP32[i3 >> 2] = i27 + -1;
  9121. if ((i27 | 0) == 0) {
  9122. i3 = _luaZ_fill(i3) | 0;
  9123. } else {
  9124. i27 = i3 + 4 | 0;
  9125. i3 = HEAP32[i27 >> 2] | 0;
  9126. HEAP32[i27 >> 2] = i3 + 1;
  9127. i3 = HEAPU8[i3] | 0;
  9128. }
  9129. HEAP32[i2 >> 2] = i3;
  9130. i27 = i13;
  9131. STACKTOP = i1;
  9132. return i27 | 0;
  9133. }
  9134. i10 = i2 + 52 | 0;
  9135. while (1) {
  9136. i11 = HEAP32[i4 >> 2] | 0;
  9137. i9 = i11 + 4 | 0;
  9138. i12 = HEAP32[i9 >> 2] | 0;
  9139. i19 = i11 + 8 | 0;
  9140. i18 = HEAP32[i19 >> 2] | 0;
  9141. if ((i12 + 1 | 0) >>> 0 > i18 >>> 0) {
  9142. if (i18 >>> 0 > 2147483645) {
  9143. i9 = 288;
  9144. break;
  9145. }
  9146. i21 = i18 << 1;
  9147. i12 = HEAP32[i10 >> 2] | 0;
  9148. if ((i21 | 0) == -2) {
  9149. i9 = 290;
  9150. break;
  9151. }
  9152. i27 = _luaM_realloc_(i12, HEAP32[i11 >> 2] | 0, i18, i21) | 0;
  9153. HEAP32[i11 >> 2] = i27;
  9154. HEAP32[i19 >> 2] = i21;
  9155. i12 = HEAP32[i9 >> 2] | 0;
  9156. i11 = i27;
  9157. } else {
  9158. i11 = HEAP32[i11 >> 2] | 0;
  9159. }
  9160. HEAP32[i9 >> 2] = i12 + 1;
  9161. HEAP8[i11 + i12 | 0] = i13;
  9162. i9 = HEAP32[i5 >> 2] | 0;
  9163. i27 = HEAP32[i9 >> 2] | 0;
  9164. HEAP32[i9 >> 2] = i27 + -1;
  9165. if ((i27 | 0) == 0) {
  9166. i13 = _luaZ_fill(i9) | 0;
  9167. } else {
  9168. i27 = i9 + 4 | 0;
  9169. i13 = HEAP32[i27 >> 2] | 0;
  9170. HEAP32[i27 >> 2] = i13 + 1;
  9171. i13 = HEAPU8[i13] | 0;
  9172. }
  9173. HEAP32[i2 >> 2] = i13;
  9174. if ((HEAP8[i13 + 10913 | 0] & 3) == 0) {
  9175. i9 = 296;
  9176. break;
  9177. }
  9178. }
  9179. if ((i9 | 0) == 288) {
  9180. _lexerror(i2, 12368, 0);
  9181. } else if ((i9 | 0) == 290) {
  9182. _luaM_toobig(i12);
  9183. } else if ((i9 | 0) == 296) {
  9184. i6 = HEAP32[i4 >> 2] | 0;
  9185. i4 = HEAP32[i10 >> 2] | 0;
  9186. i6 = _luaS_newlstr(i4, HEAP32[i6 >> 2] | 0, HEAP32[i6 + 4 >> 2] | 0) | 0;
  9187. i7 = i4 + 8 | 0;
  9188. i8 = HEAP32[i7 >> 2] | 0;
  9189. HEAP32[i7 >> 2] = i8 + 16;
  9190. HEAP32[i8 >> 2] = i6;
  9191. i5 = i6 + 4 | 0;
  9192. HEAP32[i8 + 8 >> 2] = HEAPU8[i5] | 64;
  9193. i8 = _luaH_set(i4, HEAP32[(HEAP32[i2 + 48 >> 2] | 0) + 4 >> 2] | 0, (HEAP32[i7 >> 2] | 0) + -16 | 0) | 0;
  9194. i2 = i8 + 8 | 0;
  9195. if ((HEAP32[i2 >> 2] | 0) == 0 ? (HEAP32[i8 >> 2] = 1, HEAP32[i2 >> 2] = 1, (HEAP32[(HEAP32[i4 + 12 >> 2] | 0) + 12 >> 2] | 0) > 0) : 0) {
  9196. _luaC_step(i4);
  9197. }
  9198. HEAP32[i7 >> 2] = (HEAP32[i7 >> 2] | 0) + -16;
  9199. HEAP32[i3 >> 2] = i6;
  9200. if ((HEAP8[i5] | 0) != 4) {
  9201. i27 = 288;
  9202. STACKTOP = i1;
  9203. return i27 | 0;
  9204. }
  9205. i2 = HEAP8[i6 + 6 | 0] | 0;
  9206. if (i2 << 24 >> 24 == 0) {
  9207. i27 = 288;
  9208. STACKTOP = i1;
  9209. return i27 | 0;
  9210. }
  9211. i27 = i2 & 255 | 256;
  9212. STACKTOP = i1;
  9213. return i27 | 0;
  9214. }
  9215. } else if ((i9 | 0) == 306) {
  9216. STACKTOP = i1;
  9217. return i2 | 0;
  9218. }
  9219. i9 = HEAP32[i4 >> 2] | 0;
  9220. i12 = i9 + 4 | 0;
  9221. i13 = HEAP32[i12 >> 2] | 0;
  9222. i11 = i9 + 8 | 0;
  9223. i10 = HEAP32[i11 >> 2] | 0;
  9224. do {
  9225. if ((i13 + 1 | 0) >>> 0 > i10 >>> 0) {
  9226. if (i10 >>> 0 > 2147483645) {
  9227. _lexerror(i2, 12368, 0);
  9228. }
  9229. i18 = i10 << 1;
  9230. i13 = HEAP32[i2 + 52 >> 2] | 0;
  9231. if ((i18 | 0) == -2) {
  9232. _luaM_toobig(i13);
  9233. } else {
  9234. i16 = _luaM_realloc_(i13, HEAP32[i9 >> 2] | 0, i10, i18) | 0;
  9235. HEAP32[i9 >> 2] = i16;
  9236. HEAP32[i11 >> 2] = i18;
  9237. i17 = HEAP32[i12 >> 2] | 0;
  9238. break;
  9239. }
  9240. } else {
  9241. i17 = i13;
  9242. i16 = HEAP32[i9 >> 2] | 0;
  9243. }
  9244. } while (0);
  9245. HEAP32[i12 >> 2] = i17 + 1;
  9246. HEAP8[i16 + i17 | 0] = i20;
  9247. i9 = HEAP32[i5 >> 2] | 0;
  9248. i27 = HEAP32[i9 >> 2] | 0;
  9249. HEAP32[i9 >> 2] = i27 + -1;
  9250. if ((i27 | 0) == 0) {
  9251. i9 = _luaZ_fill(i9) | 0;
  9252. } else {
  9253. i27 = i9 + 4 | 0;
  9254. i9 = HEAP32[i27 >> 2] | 0;
  9255. HEAP32[i27 >> 2] = i9 + 1;
  9256. i9 = HEAPU8[i9] | 0;
  9257. }
  9258. HEAP32[i2 >> 2] = i9;
  9259. if ((i20 | 0) == 48) {
  9260. if ((i9 | 0) != 0) {
  9261. if ((_memchr(12320, i9, 3) | 0) == 0) {
  9262. i15 = i9;
  9263. i9 = 12312;
  9264. } else {
  9265. i10 = HEAP32[i4 >> 2] | 0;
  9266. i13 = i10 + 4 | 0;
  9267. i16 = HEAP32[i13 >> 2] | 0;
  9268. i11 = i10 + 8 | 0;
  9269. i12 = HEAP32[i11 >> 2] | 0;
  9270. do {
  9271. if ((i16 + 1 | 0) >>> 0 > i12 >>> 0) {
  9272. if (i12 >>> 0 > 2147483645) {
  9273. _lexerror(i2, 12368, 0);
  9274. }
  9275. i17 = i12 << 1;
  9276. i16 = HEAP32[i2 + 52 >> 2] | 0;
  9277. if ((i17 | 0) == -2) {
  9278. _luaM_toobig(i16);
  9279. } else {
  9280. i15 = _luaM_realloc_(i16, HEAP32[i10 >> 2] | 0, i12, i17) | 0;
  9281. HEAP32[i10 >> 2] = i15;
  9282. HEAP32[i11 >> 2] = i17;
  9283. i14 = HEAP32[i13 >> 2] | 0;
  9284. break;
  9285. }
  9286. } else {
  9287. i14 = i16;
  9288. i15 = HEAP32[i10 >> 2] | 0;
  9289. }
  9290. } while (0);
  9291. HEAP32[i13 >> 2] = i14 + 1;
  9292. HEAP8[i15 + i14 | 0] = i9;
  9293. i9 = HEAP32[i5 >> 2] | 0;
  9294. i27 = HEAP32[i9 >> 2] | 0;
  9295. HEAP32[i9 >> 2] = i27 + -1;
  9296. if ((i27 | 0) == 0) {
  9297. i15 = _luaZ_fill(i9) | 0;
  9298. } else {
  9299. i27 = i9 + 4 | 0;
  9300. i15 = HEAP32[i27 >> 2] | 0;
  9301. HEAP32[i27 >> 2] = i15 + 1;
  9302. i15 = HEAPU8[i15] | 0;
  9303. }
  9304. HEAP32[i2 >> 2] = i15;
  9305. i9 = 12328;
  9306. }
  9307. } else {
  9308. i15 = 0;
  9309. i9 = 12312;
  9310. }
  9311. } else {
  9312. i15 = i9;
  9313. i9 = 12312;
  9314. }
  9315. i10 = i2 + 52 | 0;
  9316. while (1) {
  9317. if ((i15 | 0) != 0) {
  9318. if ((_memchr(i9, i15, 3) | 0) != 0) {
  9319. i12 = HEAP32[i4 >> 2] | 0;
  9320. i11 = i12 + 4 | 0;
  9321. i16 = HEAP32[i11 >> 2] | 0;
  9322. i14 = i12 + 8 | 0;
  9323. i13 = HEAP32[i14 >> 2] | 0;
  9324. if ((i16 + 1 | 0) >>> 0 > i13 >>> 0) {
  9325. if (i13 >>> 0 > 2147483645) {
  9326. i9 = 227;
  9327. break;
  9328. }
  9329. i17 = i13 << 1;
  9330. i16 = HEAP32[i10 >> 2] | 0;
  9331. if ((i17 | 0) == -2) {
  9332. i9 = 229;
  9333. break;
  9334. }
  9335. i27 = _luaM_realloc_(i16, HEAP32[i12 >> 2] | 0, i13, i17) | 0;
  9336. HEAP32[i12 >> 2] = i27;
  9337. HEAP32[i14 >> 2] = i17;
  9338. i16 = HEAP32[i11 >> 2] | 0;
  9339. i12 = i27;
  9340. } else {
  9341. i12 = HEAP32[i12 >> 2] | 0;
  9342. }
  9343. HEAP32[i11 >> 2] = i16 + 1;
  9344. HEAP8[i12 + i16 | 0] = i15;
  9345. i11 = HEAP32[i5 >> 2] | 0;
  9346. i27 = HEAP32[i11 >> 2] | 0;
  9347. HEAP32[i11 >> 2] = i27 + -1;
  9348. if ((i27 | 0) == 0) {
  9349. i15 = _luaZ_fill(i11) | 0;
  9350. } else {
  9351. i27 = i11 + 4 | 0;
  9352. i15 = HEAP32[i27 >> 2] | 0;
  9353. HEAP32[i27 >> 2] = i15 + 1;
  9354. i15 = HEAPU8[i15] | 0;
  9355. }
  9356. HEAP32[i2 >> 2] = i15;
  9357. if ((i15 | 0) != 0) {
  9358. if ((_memchr(12336, i15, 3) | 0) != 0) {
  9359. i12 = HEAP32[i4 >> 2] | 0;
  9360. i11 = i12 + 4 | 0;
  9361. i16 = HEAP32[i11 >> 2] | 0;
  9362. i14 = i12 + 8 | 0;
  9363. i13 = HEAP32[i14 >> 2] | 0;
  9364. if ((i16 + 1 | 0) >>> 0 > i13 >>> 0) {
  9365. if (i13 >>> 0 > 2147483645) {
  9366. i9 = 239;
  9367. break;
  9368. }
  9369. i17 = i13 << 1;
  9370. i16 = HEAP32[i10 >> 2] | 0;
  9371. if ((i17 | 0) == -2) {
  9372. i9 = 241;
  9373. break;
  9374. }
  9375. i27 = _luaM_realloc_(i16, HEAP32[i12 >> 2] | 0, i13, i17) | 0;
  9376. HEAP32[i12 >> 2] = i27;
  9377. HEAP32[i14 >> 2] = i17;
  9378. i16 = HEAP32[i11 >> 2] | 0;
  9379. i12 = i27;
  9380. } else {
  9381. i12 = HEAP32[i12 >> 2] | 0;
  9382. }
  9383. HEAP32[i11 >> 2] = i16 + 1;
  9384. HEAP8[i12 + i16 | 0] = i15;
  9385. i11 = HEAP32[i5 >> 2] | 0;
  9386. i27 = HEAP32[i11 >> 2] | 0;
  9387. HEAP32[i11 >> 2] = i27 + -1;
  9388. if ((i27 | 0) == 0) {
  9389. i15 = _luaZ_fill(i11) | 0;
  9390. } else {
  9391. i27 = i11 + 4 | 0;
  9392. i15 = HEAP32[i27 >> 2] | 0;
  9393. HEAP32[i27 >> 2] = i15 + 1;
  9394. i15 = HEAPU8[i15] | 0;
  9395. }
  9396. HEAP32[i2 >> 2] = i15;
  9397. }
  9398. } else {
  9399. i15 = 0;
  9400. }
  9401. }
  9402. } else {
  9403. i15 = 0;
  9404. }
  9405. i12 = HEAP32[i4 >> 2] | 0;
  9406. i11 = i12 + 4 | 0;
  9407. i17 = HEAP32[i11 >> 2] | 0;
  9408. i14 = i12 + 8 | 0;
  9409. i13 = HEAP32[i14 >> 2] | 0;
  9410. i16 = (i17 + 1 | 0) >>> 0 > i13 >>> 0;
  9411. if (!((HEAP8[i15 + 10913 | 0] & 16) != 0 | (i15 | 0) == 46)) {
  9412. i9 = 259;
  9413. break;
  9414. }
  9415. if (i16) {
  9416. if (i13 >>> 0 > 2147483645) {
  9417. i9 = 251;
  9418. break;
  9419. }
  9420. i17 = i13 << 1;
  9421. i16 = HEAP32[i10 >> 2] | 0;
  9422. if ((i17 | 0) == -2) {
  9423. i9 = 253;
  9424. break;
  9425. }
  9426. i27 = _luaM_realloc_(i16, HEAP32[i12 >> 2] | 0, i13, i17) | 0;
  9427. HEAP32[i12 >> 2] = i27;
  9428. HEAP32[i14 >> 2] = i17;
  9429. i17 = HEAP32[i11 >> 2] | 0;
  9430. i12 = i27;
  9431. } else {
  9432. i12 = HEAP32[i12 >> 2] | 0;
  9433. }
  9434. HEAP32[i11 >> 2] = i17 + 1;
  9435. HEAP8[i12 + i17 | 0] = i15;
  9436. i11 = HEAP32[i5 >> 2] | 0;
  9437. i27 = HEAP32[i11 >> 2] | 0;
  9438. HEAP32[i11 >> 2] = i27 + -1;
  9439. if ((i27 | 0) == 0) {
  9440. i15 = _luaZ_fill(i11) | 0;
  9441. } else {
  9442. i27 = i11 + 4 | 0;
  9443. i15 = HEAP32[i27 >> 2] | 0;
  9444. HEAP32[i27 >> 2] = i15 + 1;
  9445. i15 = HEAPU8[i15] | 0;
  9446. }
  9447. HEAP32[i2 >> 2] = i15;
  9448. }
  9449. if ((i9 | 0) == 227) {
  9450. _lexerror(i2, 12368, 0);
  9451. } else if ((i9 | 0) == 229) {
  9452. _luaM_toobig(i16);
  9453. } else if ((i9 | 0) == 239) {
  9454. _lexerror(i2, 12368, 0);
  9455. } else if ((i9 | 0) == 241) {
  9456. _luaM_toobig(i16);
  9457. } else if ((i9 | 0) == 251) {
  9458. _lexerror(i2, 12368, 0);
  9459. } else if ((i9 | 0) == 253) {
  9460. _luaM_toobig(i16);
  9461. } else if ((i9 | 0) == 259) {
  9462. do {
  9463. if (i16) {
  9464. if (i13 >>> 0 > 2147483645) {
  9465. _lexerror(i2, 12368, 0);
  9466. }
  9467. i5 = i13 << 1;
  9468. i9 = HEAP32[i10 >> 2] | 0;
  9469. if ((i5 | 0) == -2) {
  9470. _luaM_toobig(i9);
  9471. } else {
  9472. i7 = _luaM_realloc_(i9, HEAP32[i12 >> 2] | 0, i13, i5) | 0;
  9473. HEAP32[i12 >> 2] = i7;
  9474. HEAP32[i14 >> 2] = i5;
  9475. i8 = HEAP32[i11 >> 2] | 0;
  9476. break;
  9477. }
  9478. } else {
  9479. i8 = i17;
  9480. i7 = HEAP32[i12 >> 2] | 0;
  9481. }
  9482. } while (0);
  9483. HEAP32[i11 >> 2] = i8 + 1;
  9484. HEAP8[i7 + i8 | 0] = 0;
  9485. i5 = i2 + 76 | 0;
  9486. i7 = HEAP8[i5] | 0;
  9487. i10 = HEAP32[i4 >> 2] | 0;
  9488. i8 = HEAP32[i10 >> 2] | 0;
  9489. i10 = HEAP32[i10 + 4 >> 2] | 0;
  9490. if ((i10 | 0) == 0) {
  9491. i7 = -1;
  9492. } else {
  9493. do {
  9494. i10 = i10 + -1 | 0;
  9495. i9 = i8 + i10 | 0;
  9496. if ((HEAP8[i9] | 0) == 46) {
  9497. HEAP8[i9] = i7;
  9498. }
  9499. } while ((i10 | 0) != 0);
  9500. i7 = HEAP32[i4 >> 2] | 0;
  9501. i8 = HEAP32[i7 >> 2] | 0;
  9502. i7 = (HEAP32[i7 + 4 >> 2] | 0) + -1 | 0;
  9503. }
  9504. if ((_luaO_str2d(i8, i7, i3) | 0) != 0) {
  9505. i27 = 287;
  9506. STACKTOP = i1;
  9507. return i27 | 0;
  9508. }
  9509. i9 = HEAP8[i5] | 0;
  9510. i8 = HEAP8[HEAP32[(_localeconv() | 0) >> 2] | 0] | 0;
  9511. HEAP8[i5] = i8;
  9512. i10 = HEAP32[i4 >> 2] | 0;
  9513. i7 = HEAP32[i10 >> 2] | 0;
  9514. i10 = HEAP32[i10 + 4 >> 2] | 0;
  9515. if ((i10 | 0) == 0) {
  9516. i8 = -1;
  9517. } else {
  9518. do {
  9519. i10 = i10 + -1 | 0;
  9520. i11 = i7 + i10 | 0;
  9521. if ((HEAP8[i11] | 0) == i9 << 24 >> 24) {
  9522. HEAP8[i11] = i8;
  9523. }
  9524. } while ((i10 | 0) != 0);
  9525. i8 = HEAP32[i4 >> 2] | 0;
  9526. i7 = HEAP32[i8 >> 2] | 0;
  9527. i8 = (HEAP32[i8 + 4 >> 2] | 0) + -1 | 0;
  9528. }
  9529. if ((_luaO_str2d(i7, i8, i3) | 0) != 0) {
  9530. i27 = 287;
  9531. STACKTOP = i1;
  9532. return i27 | 0;
  9533. }
  9534. i1 = HEAP8[i5] | 0;
  9535. i4 = HEAP32[i4 >> 2] | 0;
  9536. i3 = HEAP32[i4 >> 2] | 0;
  9537. i4 = HEAP32[i4 + 4 >> 2] | 0;
  9538. if ((i4 | 0) == 0) {
  9539. _lexerror(i2, 12344, 287);
  9540. } else {
  9541. i6 = i4;
  9542. }
  9543. do {
  9544. i6 = i6 + -1 | 0;
  9545. i4 = i3 + i6 | 0;
  9546. if ((HEAP8[i4] | 0) == i1 << 24 >> 24) {
  9547. HEAP8[i4] = 46;
  9548. }
  9549. } while ((i6 | 0) != 0);
  9550. _lexerror(i2, 12344, 287);
  9551. }
  9552. return 0;
  9553. }
  9554. function _luaV_execute(i1) {
  9555. i1 = i1 | 0;
  9556. var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0, i33 = 0, i34 = 0, i35 = 0, i36 = 0, d37 = 0.0, d38 = 0.0, d39 = 0.0;
  9557. i12 = STACKTOP;
  9558. STACKTOP = STACKTOP + 32 | 0;
  9559. i13 = i12 + 24 | 0;
  9560. i10 = i12 + 16 | 0;
  9561. i9 = i12 + 8 | 0;
  9562. i8 = i12;
  9563. i3 = i1 + 16 | 0;
  9564. i4 = i1 + 40 | 0;
  9565. i6 = i1 + 12 | 0;
  9566. i5 = i1 + 8 | 0;
  9567. i11 = i1 + 24 | 0;
  9568. i17 = i1 + 48 | 0;
  9569. i2 = i1 + 20 | 0;
  9570. i16 = i1 + 6 | 0;
  9571. i7 = i1 + 44 | 0;
  9572. i19 = HEAP32[i3 >> 2] | 0;
  9573. L1 : while (1) {
  9574. i22 = HEAP32[HEAP32[i19 >> 2] >> 2] | 0;
  9575. i18 = i22 + 12 | 0;
  9576. i23 = HEAP32[(HEAP32[i18 >> 2] | 0) + 8 >> 2] | 0;
  9577. i20 = i19 + 24 | 0;
  9578. i21 = i19 + 28 | 0;
  9579. i22 = i22 + 16 | 0;
  9580. i24 = i19 + 4 | 0;
  9581. i25 = HEAP32[i20 >> 2] | 0;
  9582. L3 : while (1) {
  9583. i28 = HEAP32[i21 >> 2] | 0;
  9584. HEAP32[i21 >> 2] = i28 + 4;
  9585. i28 = HEAP32[i28 >> 2] | 0;
  9586. i27 = HEAP8[i4] | 0;
  9587. do {
  9588. if (!((i27 & 12) == 0)) {
  9589. i26 = (HEAP32[i17 >> 2] | 0) + -1 | 0;
  9590. HEAP32[i17 >> 2] = i26;
  9591. i26 = (i26 | 0) == 0;
  9592. if (!i26 ? (i27 & 4) == 0 : 0) {
  9593. break;
  9594. }
  9595. i25 = HEAP32[i3 >> 2] | 0;
  9596. i29 = i27 & 255;
  9597. if ((i29 & 8 | 0) == 0 | i26 ^ 1) {
  9598. i27 = 0;
  9599. } else {
  9600. HEAP32[i17 >> 2] = HEAP32[i7 >> 2];
  9601. i27 = 1;
  9602. }
  9603. i26 = i25 + 18 | 0;
  9604. i30 = HEAPU8[i26] | 0;
  9605. if ((i30 & 128 | 0) == 0) {
  9606. if (i27) {
  9607. _luaD_hook(i1, 3, -1);
  9608. }
  9609. do {
  9610. if ((i29 & 4 | 0) == 0) {
  9611. i29 = i25 + 28 | 0;
  9612. } else {
  9613. i34 = HEAP32[(HEAP32[HEAP32[i25 >> 2] >> 2] | 0) + 12 >> 2] | 0;
  9614. i29 = i25 + 28 | 0;
  9615. i32 = HEAP32[i29 >> 2] | 0;
  9616. i35 = HEAP32[i34 + 12 >> 2] | 0;
  9617. i33 = (i32 - i35 >> 2) + -1 | 0;
  9618. i34 = HEAP32[i34 + 20 >> 2] | 0;
  9619. i31 = (i34 | 0) == 0;
  9620. if (i31) {
  9621. i30 = 0;
  9622. } else {
  9623. i30 = HEAP32[i34 + (i33 << 2) >> 2] | 0;
  9624. }
  9625. if ((i33 | 0) != 0 ? (i14 = HEAP32[i2 >> 2] | 0, i32 >>> 0 > i14 >>> 0) : 0) {
  9626. if (i31) {
  9627. i31 = 0;
  9628. } else {
  9629. i31 = HEAP32[i34 + ((i14 - i35 >> 2) + -1 << 2) >> 2] | 0;
  9630. }
  9631. if ((i30 | 0) == (i31 | 0)) {
  9632. break;
  9633. }
  9634. }
  9635. _luaD_hook(i1, 2, i30);
  9636. }
  9637. } while (0);
  9638. HEAP32[i2 >> 2] = HEAP32[i29 >> 2];
  9639. if ((HEAP8[i16] | 0) == 1) {
  9640. i15 = 23;
  9641. break L1;
  9642. }
  9643. } else {
  9644. HEAP8[i26] = i30 & 127;
  9645. }
  9646. i25 = HEAP32[i20 >> 2] | 0;
  9647. }
  9648. } while (0);
  9649. i26 = i28 >>> 6 & 255;
  9650. i27 = i25 + (i26 << 4) | 0;
  9651. switch (i28 & 63 | 0) {
  9652. case 9:
  9653. {
  9654. i28 = HEAP32[i22 + (i28 >>> 23 << 2) >> 2] | 0;
  9655. i35 = HEAP32[i28 + 8 >> 2] | 0;
  9656. i33 = i27;
  9657. i34 = HEAP32[i33 + 4 >> 2] | 0;
  9658. i36 = i35;
  9659. HEAP32[i36 >> 2] = HEAP32[i33 >> 2];
  9660. HEAP32[i36 + 4 >> 2] = i34;
  9661. i36 = i25 + (i26 << 4) + 8 | 0;
  9662. HEAP32[i35 + 8 >> 2] = HEAP32[i36 >> 2];
  9663. if ((HEAP32[i36 >> 2] & 64 | 0) == 0) {
  9664. continue L3;
  9665. }
  9666. i26 = HEAP32[i27 >> 2] | 0;
  9667. if ((HEAP8[i26 + 5 | 0] & 3) == 0) {
  9668. continue L3;
  9669. }
  9670. if ((HEAP8[i28 + 5 | 0] & 4) == 0) {
  9671. continue L3;
  9672. }
  9673. _luaC_barrier_(i1, i28, i26);
  9674. continue L3;
  9675. }
  9676. case 10:
  9677. {
  9678. i26 = i28 >>> 23;
  9679. if ((i26 & 256 | 0) == 0) {
  9680. i26 = i25 + (i26 << 4) | 0;
  9681. } else {
  9682. i26 = i23 + ((i26 & 255) << 4) | 0;
  9683. }
  9684. i28 = i28 >>> 14;
  9685. if ((i28 & 256 | 0) == 0) {
  9686. i25 = i25 + ((i28 & 511) << 4) | 0;
  9687. } else {
  9688. i25 = i23 + ((i28 & 255) << 4) | 0;
  9689. }
  9690. _luaV_settable(i1, i27, i26, i25);
  9691. i25 = HEAP32[i20 >> 2] | 0;
  9692. continue L3;
  9693. }
  9694. case 17:
  9695. {
  9696. i29 = i28 >>> 23;
  9697. if ((i29 & 256 | 0) == 0) {
  9698. i29 = i25 + (i29 << 4) | 0;
  9699. } else {
  9700. i29 = i23 + ((i29 & 255) << 4) | 0;
  9701. }
  9702. i28 = i28 >>> 14;
  9703. if ((i28 & 256 | 0) == 0) {
  9704. i28 = i25 + ((i28 & 511) << 4) | 0;
  9705. } else {
  9706. i28 = i23 + ((i28 & 255) << 4) | 0;
  9707. }
  9708. if ((HEAP32[i29 + 8 >> 2] | 0) == 3 ? (HEAP32[i28 + 8 >> 2] | 0) == 3 : 0) {
  9709. d37 = +HEAPF64[i29 >> 3];
  9710. d38 = +HEAPF64[i28 >> 3];
  9711. HEAPF64[i27 >> 3] = d37 - d38 * +Math_floor(+(d37 / d38));
  9712. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 3;
  9713. continue L3;
  9714. }
  9715. _luaV_arith(i1, i27, i29, i28, 10);
  9716. i25 = HEAP32[i20 >> 2] | 0;
  9717. continue L3;
  9718. }
  9719. case 23:
  9720. {
  9721. if ((i26 | 0) != 0) {
  9722. _luaF_close(i1, (HEAP32[i20 >> 2] | 0) + (i26 + -1 << 4) | 0);
  9723. }
  9724. HEAP32[i21 >> 2] = (HEAP32[i21 >> 2] | 0) + ((i28 >>> 14) + -131071 << 2);
  9725. continue L3;
  9726. }
  9727. case 24:
  9728. {
  9729. i27 = i28 >>> 23;
  9730. if ((i27 & 256 | 0) == 0) {
  9731. i27 = i25 + (i27 << 4) | 0;
  9732. } else {
  9733. i27 = i23 + ((i27 & 255) << 4) | 0;
  9734. }
  9735. i28 = i28 >>> 14;
  9736. if ((i28 & 256 | 0) == 0) {
  9737. i25 = i25 + ((i28 & 511) << 4) | 0;
  9738. } else {
  9739. i25 = i23 + ((i28 & 255) << 4) | 0;
  9740. }
  9741. if ((HEAP32[i27 + 8 >> 2] | 0) == (HEAP32[i25 + 8 >> 2] | 0)) {
  9742. i27 = (_luaV_equalobj_(i1, i27, i25) | 0) != 0;
  9743. } else {
  9744. i27 = 0;
  9745. }
  9746. i25 = HEAP32[i21 >> 2] | 0;
  9747. if ((i27 & 1 | 0) == (i26 | 0)) {
  9748. i26 = HEAP32[i25 >> 2] | 0;
  9749. i27 = i26 >>> 6 & 255;
  9750. if ((i27 | 0) != 0) {
  9751. _luaF_close(i1, (HEAP32[i20 >> 2] | 0) + (i27 + -1 << 4) | 0);
  9752. i25 = HEAP32[i21 >> 2] | 0;
  9753. }
  9754. i25 = i25 + ((i26 >>> 14) + -131070 << 2) | 0;
  9755. } else {
  9756. i25 = i25 + 4 | 0;
  9757. }
  9758. HEAP32[i21 >> 2] = i25;
  9759. i25 = HEAP32[i20 >> 2] | 0;
  9760. continue L3;
  9761. }
  9762. case 18:
  9763. {
  9764. i29 = i28 >>> 23;
  9765. if ((i29 & 256 | 0) == 0) {
  9766. i29 = i25 + (i29 << 4) | 0;
  9767. } else {
  9768. i29 = i23 + ((i29 & 255) << 4) | 0;
  9769. }
  9770. i28 = i28 >>> 14;
  9771. if ((i28 & 256 | 0) == 0) {
  9772. i28 = i25 + ((i28 & 511) << 4) | 0;
  9773. } else {
  9774. i28 = i23 + ((i28 & 255) << 4) | 0;
  9775. }
  9776. if ((HEAP32[i29 + 8 >> 2] | 0) == 3 ? (HEAP32[i28 + 8 >> 2] | 0) == 3 : 0) {
  9777. HEAPF64[i27 >> 3] = +Math_pow(+(+HEAPF64[i29 >> 3]), +(+HEAPF64[i28 >> 3]));
  9778. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 3;
  9779. continue L3;
  9780. }
  9781. _luaV_arith(i1, i27, i29, i28, 11);
  9782. i25 = HEAP32[i20 >> 2] | 0;
  9783. continue L3;
  9784. }
  9785. case 1:
  9786. {
  9787. i36 = i28 >>> 14;
  9788. i33 = i23 + (i36 << 4) | 0;
  9789. i34 = HEAP32[i33 + 4 >> 2] | 0;
  9790. i35 = i27;
  9791. HEAP32[i35 >> 2] = HEAP32[i33 >> 2];
  9792. HEAP32[i35 + 4 >> 2] = i34;
  9793. HEAP32[i25 + (i26 << 4) + 8 >> 2] = HEAP32[i23 + (i36 << 4) + 8 >> 2];
  9794. continue L3;
  9795. }
  9796. case 0:
  9797. {
  9798. i36 = i28 >>> 23;
  9799. i33 = i25 + (i36 << 4) | 0;
  9800. i34 = HEAP32[i33 + 4 >> 2] | 0;
  9801. i35 = i27;
  9802. HEAP32[i35 >> 2] = HEAP32[i33 >> 2];
  9803. HEAP32[i35 + 4 >> 2] = i34;
  9804. HEAP32[i25 + (i26 << 4) + 8 >> 2] = HEAP32[i25 + (i36 << 4) + 8 >> 2];
  9805. continue L3;
  9806. }
  9807. case 2:
  9808. {
  9809. i36 = HEAP32[i21 >> 2] | 0;
  9810. HEAP32[i21 >> 2] = i36 + 4;
  9811. i36 = (HEAP32[i36 >> 2] | 0) >>> 6;
  9812. i33 = i23 + (i36 << 4) | 0;
  9813. i34 = HEAP32[i33 + 4 >> 2] | 0;
  9814. i35 = i27;
  9815. HEAP32[i35 >> 2] = HEAP32[i33 >> 2];
  9816. HEAP32[i35 + 4 >> 2] = i34;
  9817. HEAP32[i25 + (i26 << 4) + 8 >> 2] = HEAP32[i23 + (i36 << 4) + 8 >> 2];
  9818. continue L3;
  9819. }
  9820. case 5:
  9821. {
  9822. i36 = HEAP32[(HEAP32[i22 + (i28 >>> 23 << 2) >> 2] | 0) + 8 >> 2] | 0;
  9823. i33 = i36;
  9824. i34 = HEAP32[i33 + 4 >> 2] | 0;
  9825. i35 = i27;
  9826. HEAP32[i35 >> 2] = HEAP32[i33 >> 2];
  9827. HEAP32[i35 + 4 >> 2] = i34;
  9828. HEAP32[i25 + (i26 << 4) + 8 >> 2] = HEAP32[i36 + 8 >> 2];
  9829. continue L3;
  9830. }
  9831. case 3:
  9832. {
  9833. HEAP32[i27 >> 2] = i28 >>> 23;
  9834. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 1;
  9835. if ((i28 & 8372224 | 0) == 0) {
  9836. continue L3;
  9837. }
  9838. HEAP32[i21 >> 2] = (HEAP32[i21 >> 2] | 0) + 4;
  9839. continue L3;
  9840. }
  9841. case 7:
  9842. {
  9843. i26 = i28 >>> 14;
  9844. if ((i26 & 256 | 0) == 0) {
  9845. i26 = i25 + ((i26 & 511) << 4) | 0;
  9846. } else {
  9847. i26 = i23 + ((i26 & 255) << 4) | 0;
  9848. }
  9849. _luaV_gettable(i1, i25 + (i28 >>> 23 << 4) | 0, i26, i27);
  9850. i25 = HEAP32[i20 >> 2] | 0;
  9851. continue L3;
  9852. }
  9853. case 12:
  9854. {
  9855. i36 = i28 >>> 23;
  9856. i29 = i25 + (i36 << 4) | 0;
  9857. i26 = i26 + 1 | 0;
  9858. i33 = i29;
  9859. i34 = HEAP32[i33 + 4 >> 2] | 0;
  9860. i35 = i25 + (i26 << 4) | 0;
  9861. HEAP32[i35 >> 2] = HEAP32[i33 >> 2];
  9862. HEAP32[i35 + 4 >> 2] = i34;
  9863. HEAP32[i25 + (i26 << 4) + 8 >> 2] = HEAP32[i25 + (i36 << 4) + 8 >> 2];
  9864. i26 = i28 >>> 14;
  9865. if ((i26 & 256 | 0) == 0) {
  9866. i25 = i25 + ((i26 & 511) << 4) | 0;
  9867. } else {
  9868. i25 = i23 + ((i26 & 255) << 4) | 0;
  9869. }
  9870. _luaV_gettable(i1, i29, i25, i27);
  9871. i25 = HEAP32[i20 >> 2] | 0;
  9872. continue L3;
  9873. }
  9874. case 13:
  9875. {
  9876. i29 = i28 >>> 23;
  9877. if ((i29 & 256 | 0) == 0) {
  9878. i29 = i25 + (i29 << 4) | 0;
  9879. } else {
  9880. i29 = i23 + ((i29 & 255) << 4) | 0;
  9881. }
  9882. i28 = i28 >>> 14;
  9883. if ((i28 & 256 | 0) == 0) {
  9884. i28 = i25 + ((i28 & 511) << 4) | 0;
  9885. } else {
  9886. i28 = i23 + ((i28 & 255) << 4) | 0;
  9887. }
  9888. if ((HEAP32[i29 + 8 >> 2] | 0) == 3 ? (HEAP32[i28 + 8 >> 2] | 0) == 3 : 0) {
  9889. HEAPF64[i27 >> 3] = +HEAPF64[i29 >> 3] + +HEAPF64[i28 >> 3];
  9890. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 3;
  9891. continue L3;
  9892. }
  9893. _luaV_arith(i1, i27, i29, i28, 6);
  9894. i25 = HEAP32[i20 >> 2] | 0;
  9895. continue L3;
  9896. }
  9897. case 14:
  9898. {
  9899. i29 = i28 >>> 23;
  9900. if ((i29 & 256 | 0) == 0) {
  9901. i29 = i25 + (i29 << 4) | 0;
  9902. } else {
  9903. i29 = i23 + ((i29 & 255) << 4) | 0;
  9904. }
  9905. i28 = i28 >>> 14;
  9906. if ((i28 & 256 | 0) == 0) {
  9907. i28 = i25 + ((i28 & 511) << 4) | 0;
  9908. } else {
  9909. i28 = i23 + ((i28 & 255) << 4) | 0;
  9910. }
  9911. if ((HEAP32[i29 + 8 >> 2] | 0) == 3 ? (HEAP32[i28 + 8 >> 2] | 0) == 3 : 0) {
  9912. HEAPF64[i27 >> 3] = +HEAPF64[i29 >> 3] - +HEAPF64[i28 >> 3];
  9913. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 3;
  9914. continue L3;
  9915. }
  9916. _luaV_arith(i1, i27, i29, i28, 7);
  9917. i25 = HEAP32[i20 >> 2] | 0;
  9918. continue L3;
  9919. }
  9920. case 6:
  9921. {
  9922. i26 = i28 >>> 14;
  9923. if ((i26 & 256 | 0) == 0) {
  9924. i25 = i25 + ((i26 & 511) << 4) | 0;
  9925. } else {
  9926. i25 = i23 + ((i26 & 255) << 4) | 0;
  9927. }
  9928. _luaV_gettable(i1, HEAP32[(HEAP32[i22 + (i28 >>> 23 << 2) >> 2] | 0) + 8 >> 2] | 0, i25, i27);
  9929. i25 = HEAP32[i20 >> 2] | 0;
  9930. continue L3;
  9931. }
  9932. case 4:
  9933. {
  9934. i26 = i28 >>> 23;
  9935. while (1) {
  9936. HEAP32[i27 + 8 >> 2] = 0;
  9937. if ((i26 | 0) == 0) {
  9938. continue L3;
  9939. } else {
  9940. i26 = i26 + -1 | 0;
  9941. i27 = i27 + 16 | 0;
  9942. }
  9943. }
  9944. }
  9945. case 8:
  9946. {
  9947. i27 = i28 >>> 23;
  9948. if ((i27 & 256 | 0) == 0) {
  9949. i27 = i25 + (i27 << 4) | 0;
  9950. } else {
  9951. i27 = i23 + ((i27 & 255) << 4) | 0;
  9952. }
  9953. i28 = i28 >>> 14;
  9954. if ((i28 & 256 | 0) == 0) {
  9955. i25 = i25 + ((i28 & 511) << 4) | 0;
  9956. } else {
  9957. i25 = i23 + ((i28 & 255) << 4) | 0;
  9958. }
  9959. _luaV_settable(i1, HEAP32[(HEAP32[i22 + (i26 << 2) >> 2] | 0) + 8 >> 2] | 0, i27, i25);
  9960. i25 = HEAP32[i20 >> 2] | 0;
  9961. continue L3;
  9962. }
  9963. case 11:
  9964. {
  9965. i29 = i28 >>> 23;
  9966. i28 = i28 >>> 14 & 511;
  9967. i30 = _luaH_new(i1) | 0;
  9968. HEAP32[i27 >> 2] = i30;
  9969. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 69;
  9970. if ((i28 | i29 | 0) != 0) {
  9971. i36 = _luaO_fb2int(i29) | 0;
  9972. _luaH_resize(i1, i30, i36, _luaO_fb2int(i28) | 0);
  9973. }
  9974. if ((HEAP32[(HEAP32[i6 >> 2] | 0) + 12 >> 2] | 0) > 0) {
  9975. HEAP32[i5 >> 2] = i25 + (i26 + 1 << 4);
  9976. _luaC_step(i1);
  9977. HEAP32[i5 >> 2] = HEAP32[i24 >> 2];
  9978. }
  9979. i25 = HEAP32[i20 >> 2] | 0;
  9980. continue L3;
  9981. }
  9982. case 19:
  9983. {
  9984. i36 = i28 >>> 23;
  9985. i28 = i25 + (i36 << 4) | 0;
  9986. if ((HEAP32[i25 + (i36 << 4) + 8 >> 2] | 0) == 3) {
  9987. HEAPF64[i27 >> 3] = -+HEAPF64[i28 >> 3];
  9988. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 3;
  9989. continue L3;
  9990. } else {
  9991. _luaV_arith(i1, i27, i28, i28, 12);
  9992. i25 = HEAP32[i20 >> 2] | 0;
  9993. continue L3;
  9994. }
  9995. }
  9996. case 15:
  9997. {
  9998. i29 = i28 >>> 23;
  9999. if ((i29 & 256 | 0) == 0) {
  10000. i29 = i25 + (i29 << 4) | 0;
  10001. } else {
  10002. i29 = i23 + ((i29 & 255) << 4) | 0;
  10003. }
  10004. i28 = i28 >>> 14;
  10005. if ((i28 & 256 | 0) == 0) {
  10006. i28 = i25 + ((i28 & 511) << 4) | 0;
  10007. } else {
  10008. i28 = i23 + ((i28 & 255) << 4) | 0;
  10009. }
  10010. if ((HEAP32[i29 + 8 >> 2] | 0) == 3 ? (HEAP32[i28 + 8 >> 2] | 0) == 3 : 0) {
  10011. HEAPF64[i27 >> 3] = +HEAPF64[i29 >> 3] * +HEAPF64[i28 >> 3];
  10012. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 3;
  10013. continue L3;
  10014. }
  10015. _luaV_arith(i1, i27, i29, i28, 8);
  10016. i25 = HEAP32[i20 >> 2] | 0;
  10017. continue L3;
  10018. }
  10019. case 16:
  10020. {
  10021. i29 = i28 >>> 23;
  10022. if ((i29 & 256 | 0) == 0) {
  10023. i29 = i25 + (i29 << 4) | 0;
  10024. } else {
  10025. i29 = i23 + ((i29 & 255) << 4) | 0;
  10026. }
  10027. i28 = i28 >>> 14;
  10028. if ((i28 & 256 | 0) == 0) {
  10029. i28 = i25 + ((i28 & 511) << 4) | 0;
  10030. } else {
  10031. i28 = i23 + ((i28 & 255) << 4) | 0;
  10032. }
  10033. if ((HEAP32[i29 + 8 >> 2] | 0) == 3 ? (HEAP32[i28 + 8 >> 2] | 0) == 3 : 0) {
  10034. HEAPF64[i27 >> 3] = +HEAPF64[i29 >> 3] / +HEAPF64[i28 >> 3];
  10035. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 3;
  10036. continue L3;
  10037. }
  10038. _luaV_arith(i1, i27, i29, i28, 9);
  10039. i25 = HEAP32[i20 >> 2] | 0;
  10040. continue L3;
  10041. }
  10042. case 20:
  10043. {
  10044. i29 = i28 >>> 23;
  10045. i28 = HEAP32[i25 + (i29 << 4) + 8 >> 2] | 0;
  10046. if ((i28 | 0) != 0) {
  10047. if ((i28 | 0) == 1) {
  10048. i28 = (HEAP32[i25 + (i29 << 4) >> 2] | 0) == 0;
  10049. } else {
  10050. i28 = 0;
  10051. }
  10052. } else {
  10053. i28 = 1;
  10054. }
  10055. HEAP32[i27 >> 2] = i28 & 1;
  10056. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 1;
  10057. continue L3;
  10058. }
  10059. case 21:
  10060. {
  10061. _luaV_objlen(i1, i27, i25 + (i28 >>> 23 << 4) | 0);
  10062. i25 = HEAP32[i20 >> 2] | 0;
  10063. continue L3;
  10064. }
  10065. case 22:
  10066. {
  10067. i27 = i28 >>> 23;
  10068. i28 = i28 >>> 14 & 511;
  10069. HEAP32[i5 >> 2] = i25 + (i28 + 1 << 4);
  10070. _luaV_concat(i1, 1 - i27 + i28 | 0);
  10071. i25 = HEAP32[i20 >> 2] | 0;
  10072. i28 = i25 + (i27 << 4) | 0;
  10073. i34 = i28;
  10074. i35 = HEAP32[i34 + 4 >> 2] | 0;
  10075. i36 = i25 + (i26 << 4) | 0;
  10076. HEAP32[i36 >> 2] = HEAP32[i34 >> 2];
  10077. HEAP32[i36 + 4 >> 2] = i35;
  10078. HEAP32[i25 + (i26 << 4) + 8 >> 2] = HEAP32[i25 + (i27 << 4) + 8 >> 2];
  10079. if ((HEAP32[(HEAP32[i6 >> 2] | 0) + 12 >> 2] | 0) > 0) {
  10080. if (!(i26 >>> 0 < i27 >>> 0)) {
  10081. i28 = i25 + (i26 + 1 << 4) | 0;
  10082. }
  10083. HEAP32[i5 >> 2] = i28;
  10084. _luaC_step(i1);
  10085. HEAP32[i5 >> 2] = HEAP32[i24 >> 2];
  10086. }
  10087. i25 = HEAP32[i20 >> 2] | 0;
  10088. HEAP32[i5 >> 2] = HEAP32[i24 >> 2];
  10089. continue L3;
  10090. }
  10091. case 25:
  10092. {
  10093. i27 = i28 >>> 23;
  10094. if ((i27 & 256 | 0) == 0) {
  10095. i27 = i25 + (i27 << 4) | 0;
  10096. } else {
  10097. i27 = i23 + ((i27 & 255) << 4) | 0;
  10098. }
  10099. i28 = i28 >>> 14;
  10100. if ((i28 & 256 | 0) == 0) {
  10101. i25 = i25 + ((i28 & 511) << 4) | 0;
  10102. } else {
  10103. i25 = i23 + ((i28 & 255) << 4) | 0;
  10104. }
  10105. i36 = (_luaV_lessthan(i1, i27, i25) | 0) == (i26 | 0);
  10106. i26 = HEAP32[i21 >> 2] | 0;
  10107. if (i36) {
  10108. i25 = HEAP32[i26 >> 2] | 0;
  10109. i27 = i25 >>> 6 & 255;
  10110. if ((i27 | 0) != 0) {
  10111. _luaF_close(i1, (HEAP32[i20 >> 2] | 0) + (i27 + -1 << 4) | 0);
  10112. i26 = HEAP32[i21 >> 2] | 0;
  10113. }
  10114. i25 = i26 + ((i25 >>> 14) + -131070 << 2) | 0;
  10115. } else {
  10116. i25 = i26 + 4 | 0;
  10117. }
  10118. HEAP32[i21 >> 2] = i25;
  10119. i25 = HEAP32[i20 >> 2] | 0;
  10120. continue L3;
  10121. }
  10122. case 27:
  10123. {
  10124. i29 = HEAP32[i25 + (i26 << 4) + 8 >> 2] | 0;
  10125. i26 = (i29 | 0) == 0;
  10126. if ((i28 & 8372224 | 0) == 0) {
  10127. if (!i26) {
  10128. if (!((i29 | 0) == 1 ? (HEAP32[i27 >> 2] | 0) == 0 : 0)) {
  10129. i15 = 192;
  10130. }
  10131. }
  10132. } else {
  10133. if (!i26) {
  10134. if ((i29 | 0) == 1 ? (HEAP32[i27 >> 2] | 0) == 0 : 0) {
  10135. i15 = 192;
  10136. }
  10137. } else {
  10138. i15 = 192;
  10139. }
  10140. }
  10141. if ((i15 | 0) == 192) {
  10142. i15 = 0;
  10143. HEAP32[i21 >> 2] = (HEAP32[i21 >> 2] | 0) + 4;
  10144. continue L3;
  10145. }
  10146. i27 = HEAP32[i21 >> 2] | 0;
  10147. i26 = HEAP32[i27 >> 2] | 0;
  10148. i28 = i26 >>> 6 & 255;
  10149. if ((i28 | 0) != 0) {
  10150. _luaF_close(i1, (HEAP32[i20 >> 2] | 0) + (i28 + -1 << 4) | 0);
  10151. i27 = HEAP32[i21 >> 2] | 0;
  10152. }
  10153. HEAP32[i21 >> 2] = i27 + ((i26 >>> 14) + -131070 << 2);
  10154. continue L3;
  10155. }
  10156. case 26:
  10157. {
  10158. i27 = i28 >>> 23;
  10159. if ((i27 & 256 | 0) == 0) {
  10160. i27 = i25 + (i27 << 4) | 0;
  10161. } else {
  10162. i27 = i23 + ((i27 & 255) << 4) | 0;
  10163. }
  10164. i28 = i28 >>> 14;
  10165. if ((i28 & 256 | 0) == 0) {
  10166. i25 = i25 + ((i28 & 511) << 4) | 0;
  10167. } else {
  10168. i25 = i23 + ((i28 & 255) << 4) | 0;
  10169. }
  10170. i36 = (_luaV_lessequal(i1, i27, i25) | 0) == (i26 | 0);
  10171. i26 = HEAP32[i21 >> 2] | 0;
  10172. if (i36) {
  10173. i25 = HEAP32[i26 >> 2] | 0;
  10174. i27 = i25 >>> 6 & 255;
  10175. if ((i27 | 0) != 0) {
  10176. _luaF_close(i1, (HEAP32[i20 >> 2] | 0) + (i27 + -1 << 4) | 0);
  10177. i26 = HEAP32[i21 >> 2] | 0;
  10178. }
  10179. i25 = i26 + ((i25 >>> 14) + -131070 << 2) | 0;
  10180. } else {
  10181. i25 = i26 + 4 | 0;
  10182. }
  10183. HEAP32[i21 >> 2] = i25;
  10184. i25 = HEAP32[i20 >> 2] | 0;
  10185. continue L3;
  10186. }
  10187. case 28:
  10188. {
  10189. i30 = i28 >>> 23;
  10190. i29 = i25 + (i30 << 4) | 0;
  10191. i30 = HEAP32[i25 + (i30 << 4) + 8 >> 2] | 0;
  10192. i31 = (i30 | 0) == 0;
  10193. if ((i28 & 8372224 | 0) == 0) {
  10194. if (!i31) {
  10195. if (!((i30 | 0) == 1 ? (HEAP32[i29 >> 2] | 0) == 0 : 0)) {
  10196. i15 = 203;
  10197. }
  10198. }
  10199. } else {
  10200. if (!i31) {
  10201. if ((i30 | 0) == 1 ? (HEAP32[i29 >> 2] | 0) == 0 : 0) {
  10202. i15 = 203;
  10203. }
  10204. } else {
  10205. i15 = 203;
  10206. }
  10207. }
  10208. if ((i15 | 0) == 203) {
  10209. i15 = 0;
  10210. HEAP32[i21 >> 2] = (HEAP32[i21 >> 2] | 0) + 4;
  10211. continue L3;
  10212. }
  10213. i36 = i29;
  10214. i28 = HEAP32[i36 + 4 >> 2] | 0;
  10215. HEAP32[i27 >> 2] = HEAP32[i36 >> 2];
  10216. HEAP32[i27 + 4 >> 2] = i28;
  10217. HEAP32[i25 + (i26 << 4) + 8 >> 2] = i30;
  10218. i27 = HEAP32[i21 >> 2] | 0;
  10219. i26 = HEAP32[i27 >> 2] | 0;
  10220. i28 = i26 >>> 6 & 255;
  10221. if ((i28 | 0) != 0) {
  10222. _luaF_close(i1, (HEAP32[i20 >> 2] | 0) + (i28 + -1 << 4) | 0);
  10223. i27 = HEAP32[i21 >> 2] | 0;
  10224. }
  10225. HEAP32[i21 >> 2] = i27 + ((i26 >>> 14) + -131070 << 2);
  10226. continue L3;
  10227. }
  10228. case 30:
  10229. {
  10230. i28 = i28 >>> 23;
  10231. if ((i28 | 0) != 0) {
  10232. HEAP32[i5 >> 2] = i25 + (i26 + i28 << 4);
  10233. }
  10234. if ((_luaD_precall(i1, i27, -1) | 0) == 0) {
  10235. i15 = 218;
  10236. break L3;
  10237. }
  10238. i25 = HEAP32[i20 >> 2] | 0;
  10239. continue L3;
  10240. }
  10241. case 29:
  10242. {
  10243. i29 = i28 >>> 23;
  10244. i28 = i28 >>> 14 & 511;
  10245. if ((i29 | 0) != 0) {
  10246. HEAP32[i5 >> 2] = i25 + (i26 + i29 << 4);
  10247. }
  10248. if ((_luaD_precall(i1, i27, i28 + -1 | 0) | 0) == 0) {
  10249. i15 = 213;
  10250. break L3;
  10251. }
  10252. if ((i28 | 0) != 0) {
  10253. HEAP32[i5 >> 2] = HEAP32[i24 >> 2];
  10254. }
  10255. i25 = HEAP32[i20 >> 2] | 0;
  10256. continue L3;
  10257. }
  10258. case 32:
  10259. {
  10260. d39 = +HEAPF64[i25 + (i26 + 2 << 4) >> 3];
  10261. d38 = d39 + +HEAPF64[i27 >> 3];
  10262. d37 = +HEAPF64[i25 + (i26 + 1 << 4) >> 3];
  10263. if (d39 > 0.0) {
  10264. if (!(d38 <= d37)) {
  10265. continue L3;
  10266. }
  10267. } else {
  10268. if (!(d37 <= d38)) {
  10269. continue L3;
  10270. }
  10271. }
  10272. HEAP32[i21 >> 2] = (HEAP32[i21 >> 2] | 0) + ((i28 >>> 14) + -131071 << 2);
  10273. HEAPF64[i27 >> 3] = d38;
  10274. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 3;
  10275. i36 = i26 + 3 | 0;
  10276. HEAPF64[i25 + (i36 << 4) >> 3] = d38;
  10277. HEAP32[i25 + (i36 << 4) + 8 >> 2] = 3;
  10278. continue L3;
  10279. }
  10280. case 33:
  10281. {
  10282. i32 = i26 + 1 | 0;
  10283. i30 = i25 + (i32 << 4) | 0;
  10284. i31 = i26 + 2 | 0;
  10285. i29 = i25 + (i31 << 4) | 0;
  10286. i26 = i25 + (i26 << 4) + 8 | 0;
  10287. i33 = HEAP32[i26 >> 2] | 0;
  10288. if ((i33 | 0) != 3) {
  10289. if ((i33 & 15 | 0) != 4) {
  10290. i15 = 239;
  10291. break L1;
  10292. }
  10293. i36 = HEAP32[i27 >> 2] | 0;
  10294. if ((_luaO_str2d(i36 + 16 | 0, HEAP32[i36 + 12 >> 2] | 0, i8) | 0) == 0) {
  10295. i15 = 239;
  10296. break L1;
  10297. }
  10298. HEAPF64[i27 >> 3] = +HEAPF64[i8 >> 3];
  10299. HEAP32[i26 >> 2] = 3;
  10300. if ((i27 | 0) == 0) {
  10301. i15 = 239;
  10302. break L1;
  10303. }
  10304. }
  10305. i33 = i25 + (i32 << 4) + 8 | 0;
  10306. i32 = HEAP32[i33 >> 2] | 0;
  10307. if ((i32 | 0) != 3) {
  10308. if ((i32 & 15 | 0) != 4) {
  10309. i15 = 244;
  10310. break L1;
  10311. }
  10312. i36 = HEAP32[i30 >> 2] | 0;
  10313. if ((_luaO_str2d(i36 + 16 | 0, HEAP32[i36 + 12 >> 2] | 0, i9) | 0) == 0) {
  10314. i15 = 244;
  10315. break L1;
  10316. }
  10317. HEAPF64[i30 >> 3] = +HEAPF64[i9 >> 3];
  10318. HEAP32[i33 >> 2] = 3;
  10319. }
  10320. i31 = i25 + (i31 << 4) + 8 | 0;
  10321. i30 = HEAP32[i31 >> 2] | 0;
  10322. if ((i30 | 0) != 3) {
  10323. if ((i30 & 15 | 0) != 4) {
  10324. i15 = 249;
  10325. break L1;
  10326. }
  10327. i36 = HEAP32[i29 >> 2] | 0;
  10328. if ((_luaO_str2d(i36 + 16 | 0, HEAP32[i36 + 12 >> 2] | 0, i10) | 0) == 0) {
  10329. i15 = 249;
  10330. break L1;
  10331. }
  10332. HEAPF64[i29 >> 3] = +HEAPF64[i10 >> 3];
  10333. HEAP32[i31 >> 2] = 3;
  10334. }
  10335. HEAPF64[i27 >> 3] = +HEAPF64[i27 >> 3] - +HEAPF64[i29 >> 3];
  10336. HEAP32[i26 >> 2] = 3;
  10337. HEAP32[i21 >> 2] = (HEAP32[i21 >> 2] | 0) + ((i28 >>> 14) + -131071 << 2);
  10338. continue L3;
  10339. }
  10340. case 31:
  10341. {
  10342. i15 = 223;
  10343. break L3;
  10344. }
  10345. case 34:
  10346. {
  10347. i35 = i26 + 3 | 0;
  10348. i36 = i25 + (i35 << 4) | 0;
  10349. i33 = i26 + 2 | 0;
  10350. i34 = i26 + 5 | 0;
  10351. i32 = i25 + (i33 << 4) | 0;
  10352. i31 = HEAP32[i32 + 4 >> 2] | 0;
  10353. i30 = i25 + (i34 << 4) | 0;
  10354. HEAP32[i30 >> 2] = HEAP32[i32 >> 2];
  10355. HEAP32[i30 + 4 >> 2] = i31;
  10356. HEAP32[i25 + (i34 << 4) + 8 >> 2] = HEAP32[i25 + (i33 << 4) + 8 >> 2];
  10357. i34 = i26 + 1 | 0;
  10358. i33 = i26 + 4 | 0;
  10359. i30 = i25 + (i34 << 4) | 0;
  10360. i31 = HEAP32[i30 + 4 >> 2] | 0;
  10361. i32 = i25 + (i33 << 4) | 0;
  10362. HEAP32[i32 >> 2] = HEAP32[i30 >> 2];
  10363. HEAP32[i32 + 4 >> 2] = i31;
  10364. HEAP32[i25 + (i33 << 4) + 8 >> 2] = HEAP32[i25 + (i34 << 4) + 8 >> 2];
  10365. i33 = i27;
  10366. i34 = HEAP32[i33 + 4 >> 2] | 0;
  10367. i27 = i36;
  10368. HEAP32[i27 >> 2] = HEAP32[i33 >> 2];
  10369. HEAP32[i27 + 4 >> 2] = i34;
  10370. HEAP32[i25 + (i35 << 4) + 8 >> 2] = HEAP32[i25 + (i26 << 4) + 8 >> 2];
  10371. HEAP32[i5 >> 2] = i25 + (i26 + 6 << 4);
  10372. _luaD_call(i1, i36, i28 >>> 14 & 511, 1);
  10373. i36 = HEAP32[i20 >> 2] | 0;
  10374. HEAP32[i5 >> 2] = HEAP32[i24 >> 2];
  10375. i27 = HEAP32[i21 >> 2] | 0;
  10376. HEAP32[i21 >> 2] = i27 + 4;
  10377. i27 = HEAP32[i27 >> 2] | 0;
  10378. i25 = i36;
  10379. i28 = i27;
  10380. i27 = i36 + ((i27 >>> 6 & 255) << 4) | 0;
  10381. break;
  10382. }
  10383. case 35:
  10384. {
  10385. break;
  10386. }
  10387. case 36:
  10388. {
  10389. i29 = i28 >>> 23;
  10390. i28 = i28 >>> 14 & 511;
  10391. if ((i29 | 0) == 0) {
  10392. i29 = ((HEAP32[i5 >> 2] | 0) - i27 >> 4) + -1 | 0;
  10393. }
  10394. if ((i28 | 0) == 0) {
  10395. i28 = HEAP32[i21 >> 2] | 0;
  10396. HEAP32[i21 >> 2] = i28 + 4;
  10397. i28 = (HEAP32[i28 >> 2] | 0) >>> 6;
  10398. }
  10399. i27 = HEAP32[i27 >> 2] | 0;
  10400. i30 = i29 + -50 + (i28 * 50 | 0) | 0;
  10401. if ((i30 | 0) > (HEAP32[i27 + 28 >> 2] | 0)) {
  10402. _luaH_resizearray(i1, i27, i30);
  10403. }
  10404. if ((i29 | 0) > 0) {
  10405. i28 = i27 + 5 | 0;
  10406. while (1) {
  10407. i36 = i29 + i26 | 0;
  10408. i32 = i25 + (i36 << 4) | 0;
  10409. i31 = i30 + -1 | 0;
  10410. _luaH_setint(i1, i27, i30, i32);
  10411. if (((HEAP32[i25 + (i36 << 4) + 8 >> 2] & 64 | 0) != 0 ? !((HEAP8[(HEAP32[i32 >> 2] | 0) + 5 | 0] & 3) == 0) : 0) ? !((HEAP8[i28] & 4) == 0) : 0) {
  10412. _luaC_barrierback_(i1, i27);
  10413. }
  10414. i29 = i29 + -1 | 0;
  10415. if ((i29 | 0) > 0) {
  10416. i30 = i31;
  10417. } else {
  10418. break;
  10419. }
  10420. }
  10421. }
  10422. HEAP32[i5 >> 2] = HEAP32[i24 >> 2];
  10423. continue L3;
  10424. }
  10425. case 37:
  10426. {
  10427. i29 = HEAP32[(HEAP32[(HEAP32[i18 >> 2] | 0) + 16 >> 2] | 0) + (i28 >>> 14 << 2) >> 2] | 0;
  10428. i28 = i29 + 32 | 0;
  10429. i33 = HEAP32[i28 >> 2] | 0;
  10430. i30 = HEAP32[i29 + 40 >> 2] | 0;
  10431. i31 = HEAP32[i29 + 28 >> 2] | 0;
  10432. L323 : do {
  10433. if ((i33 | 0) == 0) {
  10434. i15 = 276;
  10435. } else {
  10436. if ((i30 | 0) > 0) {
  10437. i34 = i33 + 16 | 0;
  10438. i32 = 0;
  10439. while (1) {
  10440. i35 = HEAPU8[i31 + (i32 << 3) + 5 | 0] | 0;
  10441. if ((HEAP8[i31 + (i32 << 3) + 4 | 0] | 0) == 0) {
  10442. i36 = HEAP32[(HEAP32[i22 + (i35 << 2) >> 2] | 0) + 8 >> 2] | 0;
  10443. } else {
  10444. i36 = i25 + (i35 << 4) | 0;
  10445. }
  10446. i35 = i32 + 1 | 0;
  10447. if ((HEAP32[(HEAP32[i34 + (i32 << 2) >> 2] | 0) + 8 >> 2] | 0) != (i36 | 0)) {
  10448. i15 = 276;
  10449. break L323;
  10450. }
  10451. if ((i35 | 0) < (i30 | 0)) {
  10452. i32 = i35;
  10453. } else {
  10454. break;
  10455. }
  10456. }
  10457. }
  10458. HEAP32[i27 >> 2] = i33;
  10459. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 70;
  10460. }
  10461. } while (0);
  10462. if ((i15 | 0) == 276) {
  10463. i15 = 0;
  10464. i32 = _luaF_newLclosure(i1, i30) | 0;
  10465. HEAP32[i32 + 12 >> 2] = i29;
  10466. HEAP32[i27 >> 2] = i32;
  10467. HEAP32[i25 + (i26 << 4) + 8 >> 2] = 70;
  10468. if ((i30 | 0) > 0) {
  10469. i27 = i32 + 16 | 0;
  10470. i34 = 0;
  10471. do {
  10472. i33 = HEAPU8[i31 + (i34 << 3) + 5 | 0] | 0;
  10473. if ((HEAP8[i31 + (i34 << 3) + 4 | 0] | 0) == 0) {
  10474. HEAP32[i27 + (i34 << 2) >> 2] = HEAP32[i22 + (i33 << 2) >> 2];
  10475. } else {
  10476. HEAP32[i27 + (i34 << 2) >> 2] = _luaF_findupval(i1, i25 + (i33 << 4) | 0) | 0;
  10477. }
  10478. i34 = i34 + 1 | 0;
  10479. } while ((i34 | 0) != (i30 | 0));
  10480. }
  10481. if (!((HEAP8[i29 + 5 | 0] & 4) == 0)) {
  10482. _luaC_barrierproto_(i1, i29, i32);
  10483. }
  10484. HEAP32[i28 >> 2] = i32;
  10485. }
  10486. if ((HEAP32[(HEAP32[i6 >> 2] | 0) + 12 >> 2] | 0) > 0) {
  10487. HEAP32[i5 >> 2] = i25 + (i26 + 1 << 4);
  10488. _luaC_step(i1);
  10489. HEAP32[i5 >> 2] = HEAP32[i24 >> 2];
  10490. }
  10491. i25 = HEAP32[i20 >> 2] | 0;
  10492. continue L3;
  10493. }
  10494. case 38:
  10495. {
  10496. i36 = i28 >>> 23;
  10497. i29 = i36 + -1 | 0;
  10498. i30 = (i25 - (HEAP32[i19 >> 2] | 0) >> 4) - (HEAPU8[(HEAP32[i18 >> 2] | 0) + 76 | 0] | 0) | 0;
  10499. i28 = i30 + -1 | 0;
  10500. if ((i36 | 0) == 0) {
  10501. if (((HEAP32[i11 >> 2] | 0) - (HEAP32[i5 >> 2] | 0) >> 4 | 0) <= (i28 | 0)) {
  10502. _luaD_growstack(i1, i28);
  10503. }
  10504. i27 = HEAP32[i20 >> 2] | 0;
  10505. HEAP32[i5 >> 2] = i27 + (i28 + i26 << 4);
  10506. i29 = i28;
  10507. i25 = i27;
  10508. i27 = i27 + (i26 << 4) | 0;
  10509. }
  10510. if ((i29 | 0) <= 0) {
  10511. continue L3;
  10512. }
  10513. i26 = 1 - i30 | 0;
  10514. i30 = 0;
  10515. while (1) {
  10516. if ((i30 | 0) < (i28 | 0)) {
  10517. i36 = i30 + i26 | 0;
  10518. i33 = i25 + (i36 << 4) | 0;
  10519. i34 = HEAP32[i33 + 4 >> 2] | 0;
  10520. i35 = i27 + (i30 << 4) | 0;
  10521. HEAP32[i35 >> 2] = HEAP32[i33 >> 2];
  10522. HEAP32[i35 + 4 >> 2] = i34;
  10523. HEAP32[i27 + (i30 << 4) + 8 >> 2] = HEAP32[i25 + (i36 << 4) + 8 >> 2];
  10524. } else {
  10525. HEAP32[i27 + (i30 << 4) + 8 >> 2] = 0;
  10526. }
  10527. i30 = i30 + 1 | 0;
  10528. if ((i30 | 0) == (i29 | 0)) {
  10529. continue L3;
  10530. }
  10531. }
  10532. }
  10533. default:
  10534. {
  10535. continue L3;
  10536. }
  10537. }
  10538. i26 = HEAP32[i27 + 24 >> 2] | 0;
  10539. if ((i26 | 0) == 0) {
  10540. continue;
  10541. }
  10542. i34 = i27 + 16 | 0;
  10543. i35 = HEAP32[i34 + 4 >> 2] | 0;
  10544. i36 = i27;
  10545. HEAP32[i36 >> 2] = HEAP32[i34 >> 2];
  10546. HEAP32[i36 + 4 >> 2] = i35;
  10547. HEAP32[i27 + 8 >> 2] = i26;
  10548. HEAP32[i21 >> 2] = (HEAP32[i21 >> 2] | 0) + ((i28 >>> 14) + -131071 << 2);
  10549. }
  10550. if ((i15 | 0) == 213) {
  10551. i15 = 0;
  10552. i19 = HEAP32[i3 >> 2] | 0;
  10553. i36 = i19 + 18 | 0;
  10554. HEAP8[i36] = HEAPU8[i36] | 4;
  10555. continue;
  10556. } else if ((i15 | 0) == 218) {
  10557. i15 = 0;
  10558. i22 = HEAP32[i3 >> 2] | 0;
  10559. i19 = HEAP32[i22 + 8 >> 2] | 0;
  10560. i23 = HEAP32[i22 >> 2] | 0;
  10561. i24 = HEAP32[i19 >> 2] | 0;
  10562. i20 = i22 + 24 | 0;
  10563. i21 = (HEAP32[i20 >> 2] | 0) + (HEAPU8[(HEAP32[(HEAP32[i23 >> 2] | 0) + 12 >> 2] | 0) + 76 | 0] << 4) | 0;
  10564. if ((HEAP32[(HEAP32[i18 >> 2] | 0) + 56 >> 2] | 0) > 0) {
  10565. _luaF_close(i1, HEAP32[i19 + 24 >> 2] | 0);
  10566. }
  10567. if (i23 >>> 0 < i21 >>> 0) {
  10568. i25 = i23;
  10569. i18 = 0;
  10570. do {
  10571. i34 = i25;
  10572. i35 = HEAP32[i34 + 4 >> 2] | 0;
  10573. i36 = i24 + (i18 << 4) | 0;
  10574. HEAP32[i36 >> 2] = HEAP32[i34 >> 2];
  10575. HEAP32[i36 + 4 >> 2] = i35;
  10576. HEAP32[i24 + (i18 << 4) + 8 >> 2] = HEAP32[i23 + (i18 << 4) + 8 >> 2];
  10577. i18 = i18 + 1 | 0;
  10578. i25 = i23 + (i18 << 4) | 0;
  10579. } while (i25 >>> 0 < i21 >>> 0);
  10580. }
  10581. i36 = i23;
  10582. HEAP32[i19 + 24 >> 2] = i24 + ((HEAP32[i20 >> 2] | 0) - i36 >> 4 << 4);
  10583. i36 = i24 + ((HEAP32[i5 >> 2] | 0) - i36 >> 4 << 4) | 0;
  10584. HEAP32[i5 >> 2] = i36;
  10585. HEAP32[i19 + 4 >> 2] = i36;
  10586. HEAP32[i19 + 28 >> 2] = HEAP32[i22 + 28 >> 2];
  10587. i36 = i19 + 18 | 0;
  10588. HEAP8[i36] = HEAPU8[i36] | 64;
  10589. HEAP32[i3 >> 2] = i19;
  10590. continue;
  10591. } else if ((i15 | 0) == 223) {
  10592. i15 = 0;
  10593. i20 = i28 >>> 23;
  10594. if ((i20 | 0) != 0) {
  10595. HEAP32[i5 >> 2] = i25 + (i20 + -1 + i26 << 4);
  10596. }
  10597. if ((HEAP32[(HEAP32[i18 >> 2] | 0) + 56 >> 2] | 0) > 0) {
  10598. _luaF_close(i1, i25);
  10599. }
  10600. i18 = _luaD_poscall(i1, i27) | 0;
  10601. if ((HEAP8[i19 + 18 | 0] & 4) == 0) {
  10602. i15 = 228;
  10603. break;
  10604. }
  10605. i19 = HEAP32[i3 >> 2] | 0;
  10606. if ((i18 | 0) == 0) {
  10607. continue;
  10608. }
  10609. HEAP32[i5 >> 2] = HEAP32[i19 + 4 >> 2];
  10610. continue;
  10611. }
  10612. }
  10613. if ((i15 | 0) == 23) {
  10614. if (!i27) {
  10615. i36 = HEAP32[i29 >> 2] | 0;
  10616. i36 = i36 + -4 | 0;
  10617. HEAP32[i29 >> 2] = i36;
  10618. i36 = HEAP8[i26] | 0;
  10619. i36 = i36 & 255;
  10620. i36 = i36 | 128;
  10621. i36 = i36 & 255;
  10622. HEAP8[i26] = i36;
  10623. i36 = HEAP32[i5 >> 2] | 0;
  10624. i36 = i36 + -16 | 0;
  10625. HEAP32[i25 >> 2] = i36;
  10626. _luaD_throw(i1, 1);
  10627. }
  10628. HEAP32[i17 >> 2] = 1;
  10629. i36 = HEAP32[i29 >> 2] | 0;
  10630. i36 = i36 + -4 | 0;
  10631. HEAP32[i29 >> 2] = i36;
  10632. i36 = HEAP8[i26] | 0;
  10633. i36 = i36 & 255;
  10634. i36 = i36 | 128;
  10635. i36 = i36 & 255;
  10636. HEAP8[i26] = i36;
  10637. i36 = HEAP32[i5 >> 2] | 0;
  10638. i36 = i36 + -16 | 0;
  10639. HEAP32[i25 >> 2] = i36;
  10640. _luaD_throw(i1, 1);
  10641. } else if ((i15 | 0) == 228) {
  10642. STACKTOP = i12;
  10643. return;
  10644. } else if ((i15 | 0) == 239) {
  10645. _luaG_runerror(i1, 9040, i13);
  10646. } else if ((i15 | 0) == 244) {
  10647. _luaG_runerror(i1, 9080, i13);
  10648. } else if ((i15 | 0) == 249) {
  10649. _luaG_runerror(i1, 9112, i13);
  10650. }
  10651. }
  10652. function ___floatscan(i8, i2, i11) {
  10653. i8 = i8 | 0;
  10654. i2 = i2 | 0;
  10655. i11 = i11 | 0;
  10656. var i1 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i9 = 0, i10 = 0, i12 = 0, i13 = 0, d14 = 0.0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, d28 = 0.0, i29 = 0, d30 = 0.0, d31 = 0.0, d32 = 0.0, d33 = 0.0;
  10657. i1 = STACKTOP;
  10658. STACKTOP = STACKTOP + 512 | 0;
  10659. i5 = i1;
  10660. if ((i2 | 0) == 1) {
  10661. i2 = 53;
  10662. i3 = -1074;
  10663. } else if ((i2 | 0) == 2) {
  10664. i2 = 53;
  10665. i3 = -1074;
  10666. } else if ((i2 | 0) == 0) {
  10667. i2 = 24;
  10668. i3 = -149;
  10669. } else {
  10670. d31 = 0.0;
  10671. STACKTOP = i1;
  10672. return +d31;
  10673. }
  10674. i9 = i8 + 4 | 0;
  10675. i10 = i8 + 100 | 0;
  10676. do {
  10677. i4 = HEAP32[i9 >> 2] | 0;
  10678. if (i4 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10679. HEAP32[i9 >> 2] = i4 + 1;
  10680. i21 = HEAPU8[i4] | 0;
  10681. } else {
  10682. i21 = ___shgetc(i8) | 0;
  10683. }
  10684. } while ((_isspace(i21 | 0) | 0) != 0);
  10685. do {
  10686. if ((i21 | 0) == 43 | (i21 | 0) == 45) {
  10687. i4 = 1 - (((i21 | 0) == 45) << 1) | 0;
  10688. i7 = HEAP32[i9 >> 2] | 0;
  10689. if (i7 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10690. HEAP32[i9 >> 2] = i7 + 1;
  10691. i21 = HEAPU8[i7] | 0;
  10692. break;
  10693. } else {
  10694. i21 = ___shgetc(i8) | 0;
  10695. break;
  10696. }
  10697. } else {
  10698. i4 = 1;
  10699. }
  10700. } while (0);
  10701. i7 = 0;
  10702. do {
  10703. if ((i21 | 32 | 0) != (HEAP8[13408 + i7 | 0] | 0)) {
  10704. break;
  10705. }
  10706. do {
  10707. if (i7 >>> 0 < 7) {
  10708. i12 = HEAP32[i9 >> 2] | 0;
  10709. if (i12 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10710. HEAP32[i9 >> 2] = i12 + 1;
  10711. i21 = HEAPU8[i12] | 0;
  10712. break;
  10713. } else {
  10714. i21 = ___shgetc(i8) | 0;
  10715. break;
  10716. }
  10717. }
  10718. } while (0);
  10719. i7 = i7 + 1 | 0;
  10720. } while (i7 >>> 0 < 8);
  10721. do {
  10722. if ((i7 | 0) == 3) {
  10723. i13 = 23;
  10724. } else if ((i7 | 0) != 8) {
  10725. i12 = (i11 | 0) == 0;
  10726. if (!(i7 >>> 0 < 4 | i12)) {
  10727. if ((i7 | 0) == 8) {
  10728. break;
  10729. } else {
  10730. i13 = 23;
  10731. break;
  10732. }
  10733. }
  10734. L34 : do {
  10735. if ((i7 | 0) == 0) {
  10736. i7 = 0;
  10737. do {
  10738. if ((i21 | 32 | 0) != (HEAP8[13424 + i7 | 0] | 0)) {
  10739. break L34;
  10740. }
  10741. do {
  10742. if (i7 >>> 0 < 2) {
  10743. i15 = HEAP32[i9 >> 2] | 0;
  10744. if (i15 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10745. HEAP32[i9 >> 2] = i15 + 1;
  10746. i21 = HEAPU8[i15] | 0;
  10747. break;
  10748. } else {
  10749. i21 = ___shgetc(i8) | 0;
  10750. break;
  10751. }
  10752. }
  10753. } while (0);
  10754. i7 = i7 + 1 | 0;
  10755. } while (i7 >>> 0 < 3);
  10756. }
  10757. } while (0);
  10758. if ((i7 | 0) == 0) {
  10759. do {
  10760. if ((i21 | 0) == 48) {
  10761. i7 = HEAP32[i9 >> 2] | 0;
  10762. if (i7 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10763. HEAP32[i9 >> 2] = i7 + 1;
  10764. i7 = HEAPU8[i7] | 0;
  10765. } else {
  10766. i7 = ___shgetc(i8) | 0;
  10767. }
  10768. if ((i7 | 32 | 0) != 120) {
  10769. if ((HEAP32[i10 >> 2] | 0) == 0) {
  10770. i21 = 48;
  10771. break;
  10772. }
  10773. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  10774. i21 = 48;
  10775. break;
  10776. }
  10777. i5 = HEAP32[i9 >> 2] | 0;
  10778. if (i5 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10779. HEAP32[i9 >> 2] = i5 + 1;
  10780. i21 = HEAPU8[i5] | 0;
  10781. i19 = 0;
  10782. } else {
  10783. i21 = ___shgetc(i8) | 0;
  10784. i19 = 0;
  10785. }
  10786. while (1) {
  10787. if ((i21 | 0) == 46) {
  10788. i13 = 70;
  10789. break;
  10790. } else if ((i21 | 0) != 48) {
  10791. i5 = 0;
  10792. i7 = 0;
  10793. i15 = 0;
  10794. i16 = 0;
  10795. i18 = 0;
  10796. i20 = 0;
  10797. d28 = 1.0;
  10798. i17 = 0;
  10799. d14 = 0.0;
  10800. break;
  10801. }
  10802. i5 = HEAP32[i9 >> 2] | 0;
  10803. if (i5 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10804. HEAP32[i9 >> 2] = i5 + 1;
  10805. i21 = HEAPU8[i5] | 0;
  10806. i19 = 1;
  10807. continue;
  10808. } else {
  10809. i21 = ___shgetc(i8) | 0;
  10810. i19 = 1;
  10811. continue;
  10812. }
  10813. }
  10814. L66 : do {
  10815. if ((i13 | 0) == 70) {
  10816. i5 = HEAP32[i9 >> 2] | 0;
  10817. if (i5 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10818. HEAP32[i9 >> 2] = i5 + 1;
  10819. i21 = HEAPU8[i5] | 0;
  10820. } else {
  10821. i21 = ___shgetc(i8) | 0;
  10822. }
  10823. if ((i21 | 0) == 48) {
  10824. i15 = -1;
  10825. i16 = -1;
  10826. while (1) {
  10827. i5 = HEAP32[i9 >> 2] | 0;
  10828. if (i5 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10829. HEAP32[i9 >> 2] = i5 + 1;
  10830. i21 = HEAPU8[i5] | 0;
  10831. } else {
  10832. i21 = ___shgetc(i8) | 0;
  10833. }
  10834. if ((i21 | 0) != 48) {
  10835. i5 = 0;
  10836. i7 = 0;
  10837. i19 = 1;
  10838. i18 = 1;
  10839. i20 = 0;
  10840. d28 = 1.0;
  10841. i17 = 0;
  10842. d14 = 0.0;
  10843. break L66;
  10844. }
  10845. i29 = _i64Add(i15 | 0, i16 | 0, -1, -1) | 0;
  10846. i15 = i29;
  10847. i16 = tempRet0;
  10848. }
  10849. } else {
  10850. i5 = 0;
  10851. i7 = 0;
  10852. i15 = 0;
  10853. i16 = 0;
  10854. i18 = 1;
  10855. i20 = 0;
  10856. d28 = 1.0;
  10857. i17 = 0;
  10858. d14 = 0.0;
  10859. }
  10860. }
  10861. } while (0);
  10862. L79 : while (1) {
  10863. i24 = i21 + -48 | 0;
  10864. do {
  10865. if (!(i24 >>> 0 < 10)) {
  10866. i23 = i21 | 32;
  10867. i22 = (i21 | 0) == 46;
  10868. if (!((i23 + -97 | 0) >>> 0 < 6 | i22)) {
  10869. break L79;
  10870. }
  10871. if (i22) {
  10872. if ((i18 | 0) == 0) {
  10873. i15 = i7;
  10874. i16 = i5;
  10875. i18 = 1;
  10876. break;
  10877. } else {
  10878. i21 = 46;
  10879. break L79;
  10880. }
  10881. } else {
  10882. i24 = (i21 | 0) > 57 ? i23 + -87 | 0 : i24;
  10883. i13 = 84;
  10884. break;
  10885. }
  10886. } else {
  10887. i13 = 84;
  10888. }
  10889. } while (0);
  10890. if ((i13 | 0) == 84) {
  10891. i13 = 0;
  10892. do {
  10893. if (!((i5 | 0) < 0 | (i5 | 0) == 0 & i7 >>> 0 < 8)) {
  10894. if ((i5 | 0) < 0 | (i5 | 0) == 0 & i7 >>> 0 < 14) {
  10895. d31 = d28 * .0625;
  10896. d30 = d31;
  10897. d14 = d14 + d31 * +(i24 | 0);
  10898. break;
  10899. }
  10900. if ((i24 | 0) != 0 & (i20 | 0) == 0) {
  10901. i20 = 1;
  10902. d30 = d28;
  10903. d14 = d14 + d28 * .5;
  10904. } else {
  10905. d30 = d28;
  10906. }
  10907. } else {
  10908. d30 = d28;
  10909. i17 = i24 + (i17 << 4) | 0;
  10910. }
  10911. } while (0);
  10912. i7 = _i64Add(i7 | 0, i5 | 0, 1, 0) | 0;
  10913. i5 = tempRet0;
  10914. i19 = 1;
  10915. d28 = d30;
  10916. }
  10917. i21 = HEAP32[i9 >> 2] | 0;
  10918. if (i21 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  10919. HEAP32[i9 >> 2] = i21 + 1;
  10920. i21 = HEAPU8[i21] | 0;
  10921. continue;
  10922. } else {
  10923. i21 = ___shgetc(i8) | 0;
  10924. continue;
  10925. }
  10926. }
  10927. if ((i19 | 0) == 0) {
  10928. i2 = (HEAP32[i10 >> 2] | 0) == 0;
  10929. if (!i2) {
  10930. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  10931. }
  10932. if (!i12) {
  10933. if (!i2 ? (i6 = HEAP32[i9 >> 2] | 0, HEAP32[i9 >> 2] = i6 + -1, (i18 | 0) != 0) : 0) {
  10934. HEAP32[i9 >> 2] = i6 + -2;
  10935. }
  10936. } else {
  10937. ___shlim(i8, 0);
  10938. }
  10939. d31 = +(i4 | 0) * 0.0;
  10940. STACKTOP = i1;
  10941. return +d31;
  10942. }
  10943. i13 = (i18 | 0) == 0;
  10944. i6 = i13 ? i7 : i15;
  10945. i13 = i13 ? i5 : i16;
  10946. if ((i5 | 0) < 0 | (i5 | 0) == 0 & i7 >>> 0 < 8) {
  10947. do {
  10948. i17 = i17 << 4;
  10949. i7 = _i64Add(i7 | 0, i5 | 0, 1, 0) | 0;
  10950. i5 = tempRet0;
  10951. } while ((i5 | 0) < 0 | (i5 | 0) == 0 & i7 >>> 0 < 8);
  10952. }
  10953. do {
  10954. if ((i21 | 32 | 0) == 112) {
  10955. i7 = _scanexp(i8, i11) | 0;
  10956. i5 = tempRet0;
  10957. if ((i7 | 0) == 0 & (i5 | 0) == -2147483648) {
  10958. if (i12) {
  10959. ___shlim(i8, 0);
  10960. d31 = 0.0;
  10961. STACKTOP = i1;
  10962. return +d31;
  10963. } else {
  10964. if ((HEAP32[i10 >> 2] | 0) == 0) {
  10965. i7 = 0;
  10966. i5 = 0;
  10967. break;
  10968. }
  10969. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  10970. i7 = 0;
  10971. i5 = 0;
  10972. break;
  10973. }
  10974. }
  10975. } else {
  10976. if ((HEAP32[i10 >> 2] | 0) == 0) {
  10977. i7 = 0;
  10978. i5 = 0;
  10979. } else {
  10980. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  10981. i7 = 0;
  10982. i5 = 0;
  10983. }
  10984. }
  10985. } while (0);
  10986. i6 = _bitshift64Shl(i6 | 0, i13 | 0, 2) | 0;
  10987. i6 = _i64Add(i6 | 0, tempRet0 | 0, -32, -1) | 0;
  10988. i5 = _i64Add(i6 | 0, tempRet0 | 0, i7 | 0, i5 | 0) | 0;
  10989. i6 = tempRet0;
  10990. if ((i17 | 0) == 0) {
  10991. d31 = +(i4 | 0) * 0.0;
  10992. STACKTOP = i1;
  10993. return +d31;
  10994. }
  10995. if ((i6 | 0) > 0 | (i6 | 0) == 0 & i5 >>> 0 > (0 - i3 | 0) >>> 0) {
  10996. HEAP32[(___errno_location() | 0) >> 2] = 34;
  10997. d31 = +(i4 | 0) * 1.7976931348623157e+308 * 1.7976931348623157e+308;
  10998. STACKTOP = i1;
  10999. return +d31;
  11000. }
  11001. i29 = i3 + -106 | 0;
  11002. i27 = ((i29 | 0) < 0) << 31 >> 31;
  11003. if ((i6 | 0) < (i27 | 0) | (i6 | 0) == (i27 | 0) & i5 >>> 0 < i29 >>> 0) {
  11004. HEAP32[(___errno_location() | 0) >> 2] = 34;
  11005. d31 = +(i4 | 0) * 2.2250738585072014e-308 * 2.2250738585072014e-308;
  11006. STACKTOP = i1;
  11007. return +d31;
  11008. }
  11009. if ((i17 | 0) > -1) {
  11010. do {
  11011. i17 = i17 << 1;
  11012. if (!(d14 >= .5)) {
  11013. d28 = d14;
  11014. } else {
  11015. d28 = d14 + -1.0;
  11016. i17 = i17 | 1;
  11017. }
  11018. d14 = d14 + d28;
  11019. i5 = _i64Add(i5 | 0, i6 | 0, -1, -1) | 0;
  11020. i6 = tempRet0;
  11021. } while ((i17 | 0) > -1);
  11022. }
  11023. i3 = _i64Subtract(32, 0, i3 | 0, ((i3 | 0) < 0) << 31 >> 31 | 0) | 0;
  11024. i3 = _i64Add(i5 | 0, i6 | 0, i3 | 0, tempRet0 | 0) | 0;
  11025. i29 = tempRet0;
  11026. if (0 > (i29 | 0) | 0 == (i29 | 0) & i2 >>> 0 > i3 >>> 0) {
  11027. i2 = (i3 | 0) < 0 ? 0 : i3;
  11028. }
  11029. if ((i2 | 0) < 53) {
  11030. d28 = +(i4 | 0);
  11031. d30 = +_copysign(+(+_scalbn(1.0, 84 - i2 | 0)), +d28);
  11032. if ((i2 | 0) < 32 & d14 != 0.0) {
  11033. i29 = i17 & 1;
  11034. i17 = (i29 ^ 1) + i17 | 0;
  11035. d14 = (i29 | 0) == 0 ? 0.0 : d14;
  11036. }
  11037. } else {
  11038. d28 = +(i4 | 0);
  11039. d30 = 0.0;
  11040. }
  11041. d14 = d28 * d14 + (d30 + d28 * +(i17 >>> 0)) - d30;
  11042. if (!(d14 != 0.0)) {
  11043. HEAP32[(___errno_location() | 0) >> 2] = 34;
  11044. }
  11045. d31 = +_scalbnl(d14, i5);
  11046. STACKTOP = i1;
  11047. return +d31;
  11048. }
  11049. } while (0);
  11050. i7 = i3 + i2 | 0;
  11051. i6 = 0 - i7 | 0;
  11052. i20 = 0;
  11053. while (1) {
  11054. if ((i21 | 0) == 46) {
  11055. i13 = 139;
  11056. break;
  11057. } else if ((i21 | 0) != 48) {
  11058. i25 = 0;
  11059. i22 = 0;
  11060. i19 = 0;
  11061. break;
  11062. }
  11063. i15 = HEAP32[i9 >> 2] | 0;
  11064. if (i15 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  11065. HEAP32[i9 >> 2] = i15 + 1;
  11066. i21 = HEAPU8[i15] | 0;
  11067. i20 = 1;
  11068. continue;
  11069. } else {
  11070. i21 = ___shgetc(i8) | 0;
  11071. i20 = 1;
  11072. continue;
  11073. }
  11074. }
  11075. L168 : do {
  11076. if ((i13 | 0) == 139) {
  11077. i15 = HEAP32[i9 >> 2] | 0;
  11078. if (i15 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  11079. HEAP32[i9 >> 2] = i15 + 1;
  11080. i21 = HEAPU8[i15] | 0;
  11081. } else {
  11082. i21 = ___shgetc(i8) | 0;
  11083. }
  11084. if ((i21 | 0) == 48) {
  11085. i25 = -1;
  11086. i22 = -1;
  11087. while (1) {
  11088. i15 = HEAP32[i9 >> 2] | 0;
  11089. if (i15 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  11090. HEAP32[i9 >> 2] = i15 + 1;
  11091. i21 = HEAPU8[i15] | 0;
  11092. } else {
  11093. i21 = ___shgetc(i8) | 0;
  11094. }
  11095. if ((i21 | 0) != 48) {
  11096. i20 = 1;
  11097. i19 = 1;
  11098. break L168;
  11099. }
  11100. i29 = _i64Add(i25 | 0, i22 | 0, -1, -1) | 0;
  11101. i25 = i29;
  11102. i22 = tempRet0;
  11103. }
  11104. } else {
  11105. i25 = 0;
  11106. i22 = 0;
  11107. i19 = 1;
  11108. }
  11109. }
  11110. } while (0);
  11111. HEAP32[i5 >> 2] = 0;
  11112. i26 = i21 + -48 | 0;
  11113. i27 = (i21 | 0) == 46;
  11114. L182 : do {
  11115. if (i26 >>> 0 < 10 | i27) {
  11116. i15 = i5 + 496 | 0;
  11117. i24 = 0;
  11118. i23 = 0;
  11119. i18 = 0;
  11120. i17 = 0;
  11121. i16 = 0;
  11122. while (1) {
  11123. do {
  11124. if (i27) {
  11125. if ((i19 | 0) == 0) {
  11126. i25 = i24;
  11127. i22 = i23;
  11128. i19 = 1;
  11129. } else {
  11130. break L182;
  11131. }
  11132. } else {
  11133. i27 = _i64Add(i24 | 0, i23 | 0, 1, 0) | 0;
  11134. i23 = tempRet0;
  11135. i29 = (i21 | 0) != 48;
  11136. if ((i17 | 0) >= 125) {
  11137. if (!i29) {
  11138. i24 = i27;
  11139. break;
  11140. }
  11141. HEAP32[i15 >> 2] = HEAP32[i15 >> 2] | 1;
  11142. i24 = i27;
  11143. break;
  11144. }
  11145. i20 = i5 + (i17 << 2) | 0;
  11146. if ((i18 | 0) != 0) {
  11147. i26 = i21 + -48 + ((HEAP32[i20 >> 2] | 0) * 10 | 0) | 0;
  11148. }
  11149. HEAP32[i20 >> 2] = i26;
  11150. i18 = i18 + 1 | 0;
  11151. i21 = (i18 | 0) == 9;
  11152. i24 = i27;
  11153. i20 = 1;
  11154. i18 = i21 ? 0 : i18;
  11155. i17 = (i21 & 1) + i17 | 0;
  11156. i16 = i29 ? i27 : i16;
  11157. }
  11158. } while (0);
  11159. i21 = HEAP32[i9 >> 2] | 0;
  11160. if (i21 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  11161. HEAP32[i9 >> 2] = i21 + 1;
  11162. i21 = HEAPU8[i21] | 0;
  11163. } else {
  11164. i21 = ___shgetc(i8) | 0;
  11165. }
  11166. i26 = i21 + -48 | 0;
  11167. i27 = (i21 | 0) == 46;
  11168. if (!(i26 >>> 0 < 10 | i27)) {
  11169. i13 = 162;
  11170. break;
  11171. }
  11172. }
  11173. } else {
  11174. i24 = 0;
  11175. i23 = 0;
  11176. i18 = 0;
  11177. i17 = 0;
  11178. i16 = 0;
  11179. i13 = 162;
  11180. }
  11181. } while (0);
  11182. if ((i13 | 0) == 162) {
  11183. i13 = (i19 | 0) == 0;
  11184. i25 = i13 ? i24 : i25;
  11185. i22 = i13 ? i23 : i22;
  11186. }
  11187. i13 = (i20 | 0) != 0;
  11188. if (i13 ? (i21 | 32 | 0) == 101 : 0) {
  11189. i15 = _scanexp(i8, i11) | 0;
  11190. i11 = tempRet0;
  11191. do {
  11192. if ((i15 | 0) == 0 & (i11 | 0) == -2147483648) {
  11193. if (i12) {
  11194. ___shlim(i8, 0);
  11195. d31 = 0.0;
  11196. STACKTOP = i1;
  11197. return +d31;
  11198. } else {
  11199. if ((HEAP32[i10 >> 2] | 0) == 0) {
  11200. i15 = 0;
  11201. i11 = 0;
  11202. break;
  11203. }
  11204. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  11205. i15 = 0;
  11206. i11 = 0;
  11207. break;
  11208. }
  11209. }
  11210. } while (0);
  11211. i9 = _i64Add(i15 | 0, i11 | 0, i25 | 0, i22 | 0) | 0;
  11212. i22 = tempRet0;
  11213. } else {
  11214. if ((i21 | 0) > -1 ? (HEAP32[i10 >> 2] | 0) != 0 : 0) {
  11215. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  11216. i9 = i25;
  11217. } else {
  11218. i9 = i25;
  11219. }
  11220. }
  11221. if (!i13) {
  11222. HEAP32[(___errno_location() | 0) >> 2] = 22;
  11223. ___shlim(i8, 0);
  11224. d31 = 0.0;
  11225. STACKTOP = i1;
  11226. return +d31;
  11227. }
  11228. i8 = HEAP32[i5 >> 2] | 0;
  11229. if ((i8 | 0) == 0) {
  11230. d31 = +(i4 | 0) * 0.0;
  11231. STACKTOP = i1;
  11232. return +d31;
  11233. }
  11234. do {
  11235. if ((i9 | 0) == (i24 | 0) & (i22 | 0) == (i23 | 0) & ((i23 | 0) < 0 | (i23 | 0) == 0 & i24 >>> 0 < 10)) {
  11236. if (!(i2 >>> 0 > 30) ? (i8 >>> i2 | 0) != 0 : 0) {
  11237. break;
  11238. }
  11239. d31 = +(i4 | 0) * +(i8 >>> 0);
  11240. STACKTOP = i1;
  11241. return +d31;
  11242. }
  11243. } while (0);
  11244. i29 = (i3 | 0) / -2 | 0;
  11245. i27 = ((i29 | 0) < 0) << 31 >> 31;
  11246. if ((i22 | 0) > (i27 | 0) | (i22 | 0) == (i27 | 0) & i9 >>> 0 > i29 >>> 0) {
  11247. HEAP32[(___errno_location() | 0) >> 2] = 34;
  11248. d31 = +(i4 | 0) * 1.7976931348623157e+308 * 1.7976931348623157e+308;
  11249. STACKTOP = i1;
  11250. return +d31;
  11251. }
  11252. i29 = i3 + -106 | 0;
  11253. i27 = ((i29 | 0) < 0) << 31 >> 31;
  11254. if ((i22 | 0) < (i27 | 0) | (i22 | 0) == (i27 | 0) & i9 >>> 0 < i29 >>> 0) {
  11255. HEAP32[(___errno_location() | 0) >> 2] = 34;
  11256. d31 = +(i4 | 0) * 2.2250738585072014e-308 * 2.2250738585072014e-308;
  11257. STACKTOP = i1;
  11258. return +d31;
  11259. }
  11260. if ((i18 | 0) != 0) {
  11261. if ((i18 | 0) < 9) {
  11262. i8 = i5 + (i17 << 2) | 0;
  11263. i10 = HEAP32[i8 >> 2] | 0;
  11264. do {
  11265. i10 = i10 * 10 | 0;
  11266. i18 = i18 + 1 | 0;
  11267. } while ((i18 | 0) != 9);
  11268. HEAP32[i8 >> 2] = i10;
  11269. }
  11270. i17 = i17 + 1 | 0;
  11271. }
  11272. do {
  11273. if ((i16 | 0) < 9 ? (i16 | 0) <= (i9 | 0) & (i9 | 0) < 18 : 0) {
  11274. if ((i9 | 0) == 9) {
  11275. d31 = +(i4 | 0) * +((HEAP32[i5 >> 2] | 0) >>> 0);
  11276. STACKTOP = i1;
  11277. return +d31;
  11278. }
  11279. if ((i9 | 0) < 9) {
  11280. d31 = +(i4 | 0) * +((HEAP32[i5 >> 2] | 0) >>> 0) / +(HEAP32[13440 + (8 - i9 << 2) >> 2] | 0);
  11281. STACKTOP = i1;
  11282. return +d31;
  11283. }
  11284. i10 = i2 + 27 + (Math_imul(i9, -3) | 0) | 0;
  11285. i8 = HEAP32[i5 >> 2] | 0;
  11286. if ((i10 | 0) <= 30 ? (i8 >>> i10 | 0) != 0 : 0) {
  11287. break;
  11288. }
  11289. d31 = +(i4 | 0) * +(i8 >>> 0) * +(HEAP32[13440 + (i9 + -10 << 2) >> 2] | 0);
  11290. STACKTOP = i1;
  11291. return +d31;
  11292. }
  11293. } while (0);
  11294. i8 = (i9 | 0) % 9 | 0;
  11295. if ((i8 | 0) == 0) {
  11296. i8 = 0;
  11297. i10 = 0;
  11298. } else {
  11299. i11 = (i9 | 0) > -1 ? i8 : i8 + 9 | 0;
  11300. i12 = HEAP32[13440 + (8 - i11 << 2) >> 2] | 0;
  11301. if ((i17 | 0) != 0) {
  11302. i10 = 1e9 / (i12 | 0) | 0;
  11303. i8 = 0;
  11304. i16 = 0;
  11305. i15 = 0;
  11306. while (1) {
  11307. i27 = i5 + (i15 << 2) | 0;
  11308. i13 = HEAP32[i27 >> 2] | 0;
  11309. i29 = ((i13 >>> 0) / (i12 >>> 0) | 0) + i16 | 0;
  11310. HEAP32[i27 >> 2] = i29;
  11311. i16 = Math_imul((i13 >>> 0) % (i12 >>> 0) | 0, i10) | 0;
  11312. i13 = i15 + 1 | 0;
  11313. if ((i15 | 0) == (i8 | 0) & (i29 | 0) == 0) {
  11314. i8 = i13 & 127;
  11315. i9 = i9 + -9 | 0;
  11316. }
  11317. if ((i13 | 0) == (i17 | 0)) {
  11318. break;
  11319. } else {
  11320. i15 = i13;
  11321. }
  11322. }
  11323. if ((i16 | 0) != 0) {
  11324. HEAP32[i5 + (i17 << 2) >> 2] = i16;
  11325. i17 = i17 + 1 | 0;
  11326. }
  11327. } else {
  11328. i8 = 0;
  11329. i17 = 0;
  11330. }
  11331. i10 = 0;
  11332. i9 = 9 - i11 + i9 | 0;
  11333. }
  11334. L280 : while (1) {
  11335. i11 = i5 + (i8 << 2) | 0;
  11336. if ((i9 | 0) < 18) {
  11337. do {
  11338. i13 = 0;
  11339. i11 = i17 + 127 | 0;
  11340. while (1) {
  11341. i11 = i11 & 127;
  11342. i12 = i5 + (i11 << 2) | 0;
  11343. i15 = _bitshift64Shl(HEAP32[i12 >> 2] | 0, 0, 29) | 0;
  11344. i15 = _i64Add(i15 | 0, tempRet0 | 0, i13 | 0, 0) | 0;
  11345. i13 = tempRet0;
  11346. if (i13 >>> 0 > 0 | (i13 | 0) == 0 & i15 >>> 0 > 1e9) {
  11347. i29 = ___udivdi3(i15 | 0, i13 | 0, 1e9, 0) | 0;
  11348. i15 = ___uremdi3(i15 | 0, i13 | 0, 1e9, 0) | 0;
  11349. i13 = i29;
  11350. } else {
  11351. i13 = 0;
  11352. }
  11353. HEAP32[i12 >> 2] = i15;
  11354. i12 = (i11 | 0) == (i8 | 0);
  11355. if (!((i11 | 0) != (i17 + 127 & 127 | 0) | i12)) {
  11356. i17 = (i15 | 0) == 0 ? i11 : i17;
  11357. }
  11358. if (i12) {
  11359. break;
  11360. } else {
  11361. i11 = i11 + -1 | 0;
  11362. }
  11363. }
  11364. i10 = i10 + -29 | 0;
  11365. } while ((i13 | 0) == 0);
  11366. } else {
  11367. if ((i9 | 0) != 18) {
  11368. break;
  11369. }
  11370. do {
  11371. if (!((HEAP32[i11 >> 2] | 0) >>> 0 < 9007199)) {
  11372. i9 = 18;
  11373. break L280;
  11374. }
  11375. i13 = 0;
  11376. i12 = i17 + 127 | 0;
  11377. while (1) {
  11378. i12 = i12 & 127;
  11379. i15 = i5 + (i12 << 2) | 0;
  11380. i16 = _bitshift64Shl(HEAP32[i15 >> 2] | 0, 0, 29) | 0;
  11381. i16 = _i64Add(i16 | 0, tempRet0 | 0, i13 | 0, 0) | 0;
  11382. i13 = tempRet0;
  11383. if (i13 >>> 0 > 0 | (i13 | 0) == 0 & i16 >>> 0 > 1e9) {
  11384. i29 = ___udivdi3(i16 | 0, i13 | 0, 1e9, 0) | 0;
  11385. i16 = ___uremdi3(i16 | 0, i13 | 0, 1e9, 0) | 0;
  11386. i13 = i29;
  11387. } else {
  11388. i13 = 0;
  11389. }
  11390. HEAP32[i15 >> 2] = i16;
  11391. i15 = (i12 | 0) == (i8 | 0);
  11392. if (!((i12 | 0) != (i17 + 127 & 127 | 0) | i15)) {
  11393. i17 = (i16 | 0) == 0 ? i12 : i17;
  11394. }
  11395. if (i15) {
  11396. break;
  11397. } else {
  11398. i12 = i12 + -1 | 0;
  11399. }
  11400. }
  11401. i10 = i10 + -29 | 0;
  11402. } while ((i13 | 0) == 0);
  11403. }
  11404. i8 = i8 + 127 & 127;
  11405. if ((i8 | 0) == (i17 | 0)) {
  11406. i29 = i17 + 127 & 127;
  11407. i17 = i5 + ((i17 + 126 & 127) << 2) | 0;
  11408. HEAP32[i17 >> 2] = HEAP32[i17 >> 2] | HEAP32[i5 + (i29 << 2) >> 2];
  11409. i17 = i29;
  11410. }
  11411. HEAP32[i5 + (i8 << 2) >> 2] = i13;
  11412. i9 = i9 + 9 | 0;
  11413. }
  11414. L311 : while (1) {
  11415. i11 = i17 + 1 & 127;
  11416. i12 = i5 + ((i17 + 127 & 127) << 2) | 0;
  11417. while (1) {
  11418. i15 = (i9 | 0) == 18;
  11419. i13 = (i9 | 0) > 27 ? 9 : 1;
  11420. while (1) {
  11421. i16 = 0;
  11422. while (1) {
  11423. i18 = i16 + i8 & 127;
  11424. if ((i18 | 0) == (i17 | 0)) {
  11425. i16 = 2;
  11426. break;
  11427. }
  11428. i18 = HEAP32[i5 + (i18 << 2) >> 2] | 0;
  11429. i19 = HEAP32[13432 + (i16 << 2) >> 2] | 0;
  11430. if (i18 >>> 0 < i19 >>> 0) {
  11431. i16 = 2;
  11432. break;
  11433. }
  11434. i20 = i16 + 1 | 0;
  11435. if (i18 >>> 0 > i19 >>> 0) {
  11436. break;
  11437. }
  11438. if ((i20 | 0) < 2) {
  11439. i16 = i20;
  11440. } else {
  11441. i16 = i20;
  11442. break;
  11443. }
  11444. }
  11445. if ((i16 | 0) == 2 & i15) {
  11446. break L311;
  11447. }
  11448. i10 = i13 + i10 | 0;
  11449. if ((i8 | 0) == (i17 | 0)) {
  11450. i8 = i17;
  11451. } else {
  11452. break;
  11453. }
  11454. }
  11455. i15 = (1 << i13) + -1 | 0;
  11456. i19 = 1e9 >>> i13;
  11457. i18 = i8;
  11458. i16 = 0;
  11459. do {
  11460. i27 = i5 + (i8 << 2) | 0;
  11461. i29 = HEAP32[i27 >> 2] | 0;
  11462. i20 = (i29 >>> i13) + i16 | 0;
  11463. HEAP32[i27 >> 2] = i20;
  11464. i16 = Math_imul(i29 & i15, i19) | 0;
  11465. i20 = (i8 | 0) == (i18 | 0) & (i20 | 0) == 0;
  11466. i8 = i8 + 1 & 127;
  11467. i9 = i20 ? i9 + -9 | 0 : i9;
  11468. i18 = i20 ? i8 : i18;
  11469. } while ((i8 | 0) != (i17 | 0));
  11470. if ((i16 | 0) == 0) {
  11471. i8 = i18;
  11472. continue;
  11473. }
  11474. if ((i11 | 0) != (i18 | 0)) {
  11475. break;
  11476. }
  11477. HEAP32[i12 >> 2] = HEAP32[i12 >> 2] | 1;
  11478. i8 = i18;
  11479. }
  11480. HEAP32[i5 + (i17 << 2) >> 2] = i16;
  11481. i8 = i18;
  11482. i17 = i11;
  11483. }
  11484. i9 = i8 & 127;
  11485. if ((i9 | 0) == (i17 | 0)) {
  11486. HEAP32[i5 + (i11 + -1 << 2) >> 2] = 0;
  11487. i17 = i11;
  11488. }
  11489. d28 = +((HEAP32[i5 + (i9 << 2) >> 2] | 0) >>> 0);
  11490. i9 = i8 + 1 & 127;
  11491. if ((i9 | 0) == (i17 | 0)) {
  11492. i17 = i17 + 1 & 127;
  11493. HEAP32[i5 + (i17 + -1 << 2) >> 2] = 0;
  11494. }
  11495. d14 = +(i4 | 0);
  11496. d30 = d14 * (d28 * 1.0e9 + +((HEAP32[i5 + (i9 << 2) >> 2] | 0) >>> 0));
  11497. i4 = i10 + 53 | 0;
  11498. i3 = i4 - i3 | 0;
  11499. if ((i3 | 0) < (i2 | 0)) {
  11500. i2 = (i3 | 0) < 0 ? 0 : i3;
  11501. i9 = 1;
  11502. } else {
  11503. i9 = 0;
  11504. }
  11505. if ((i2 | 0) < 53) {
  11506. d33 = +_copysign(+(+_scalbn(1.0, 105 - i2 | 0)), +d30);
  11507. d32 = +_fmod(+d30, +(+_scalbn(1.0, 53 - i2 | 0)));
  11508. d28 = d33;
  11509. d31 = d32;
  11510. d30 = d33 + (d30 - d32);
  11511. } else {
  11512. d28 = 0.0;
  11513. d31 = 0.0;
  11514. }
  11515. i11 = i8 + 2 & 127;
  11516. if ((i11 | 0) != (i17 | 0)) {
  11517. i5 = HEAP32[i5 + (i11 << 2) >> 2] | 0;
  11518. do {
  11519. if (!(i5 >>> 0 < 5e8)) {
  11520. if (i5 >>> 0 > 5e8) {
  11521. d31 = d14 * .75 + d31;
  11522. break;
  11523. }
  11524. if ((i8 + 3 & 127 | 0) == (i17 | 0)) {
  11525. d31 = d14 * .5 + d31;
  11526. break;
  11527. } else {
  11528. d31 = d14 * .75 + d31;
  11529. break;
  11530. }
  11531. } else {
  11532. if ((i5 | 0) == 0 ? (i8 + 3 & 127 | 0) == (i17 | 0) : 0) {
  11533. break;
  11534. }
  11535. d31 = d14 * .25 + d31;
  11536. }
  11537. } while (0);
  11538. if ((53 - i2 | 0) > 1 ? !(+_fmod(+d31, 1.0) != 0.0) : 0) {
  11539. d31 = d31 + 1.0;
  11540. }
  11541. }
  11542. d14 = d30 + d31 - d28;
  11543. do {
  11544. if ((i4 & 2147483647 | 0) > (-2 - i7 | 0)) {
  11545. if (+Math_abs(+d14) >= 9007199254740992.0) {
  11546. i9 = (i9 | 0) != 0 & (i2 | 0) == (i3 | 0) ? 0 : i9;
  11547. i10 = i10 + 1 | 0;
  11548. d14 = d14 * .5;
  11549. }
  11550. if ((i10 + 50 | 0) <= (i6 | 0) ? !((i9 | 0) != 0 & d31 != 0.0) : 0) {
  11551. break;
  11552. }
  11553. HEAP32[(___errno_location() | 0) >> 2] = 34;
  11554. }
  11555. } while (0);
  11556. d33 = +_scalbnl(d14, i10);
  11557. STACKTOP = i1;
  11558. return +d33;
  11559. } else if ((i7 | 0) == 3) {
  11560. i2 = HEAP32[i9 >> 2] | 0;
  11561. if (i2 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  11562. HEAP32[i9 >> 2] = i2 + 1;
  11563. i2 = HEAPU8[i2] | 0;
  11564. } else {
  11565. i2 = ___shgetc(i8) | 0;
  11566. }
  11567. if ((i2 | 0) == 40) {
  11568. i2 = 1;
  11569. } else {
  11570. if ((HEAP32[i10 >> 2] | 0) == 0) {
  11571. d33 = nan;
  11572. STACKTOP = i1;
  11573. return +d33;
  11574. }
  11575. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  11576. d33 = nan;
  11577. STACKTOP = i1;
  11578. return +d33;
  11579. }
  11580. while (1) {
  11581. i3 = HEAP32[i9 >> 2] | 0;
  11582. if (i3 >>> 0 < (HEAP32[i10 >> 2] | 0) >>> 0) {
  11583. HEAP32[i9 >> 2] = i3 + 1;
  11584. i3 = HEAPU8[i3] | 0;
  11585. } else {
  11586. i3 = ___shgetc(i8) | 0;
  11587. }
  11588. if (!((i3 + -48 | 0) >>> 0 < 10 | (i3 + -65 | 0) >>> 0 < 26) ? !((i3 + -97 | 0) >>> 0 < 26 | (i3 | 0) == 95) : 0) {
  11589. break;
  11590. }
  11591. i2 = i2 + 1 | 0;
  11592. }
  11593. if ((i3 | 0) == 41) {
  11594. d33 = nan;
  11595. STACKTOP = i1;
  11596. return +d33;
  11597. }
  11598. i3 = (HEAP32[i10 >> 2] | 0) == 0;
  11599. if (!i3) {
  11600. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  11601. }
  11602. if (i12) {
  11603. HEAP32[(___errno_location() | 0) >> 2] = 22;
  11604. ___shlim(i8, 0);
  11605. d33 = 0.0;
  11606. STACKTOP = i1;
  11607. return +d33;
  11608. }
  11609. if ((i2 | 0) == 0 | i3) {
  11610. d33 = nan;
  11611. STACKTOP = i1;
  11612. return +d33;
  11613. }
  11614. while (1) {
  11615. i2 = i2 + -1 | 0;
  11616. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  11617. if ((i2 | 0) == 0) {
  11618. d14 = nan;
  11619. break;
  11620. }
  11621. }
  11622. STACKTOP = i1;
  11623. return +d14;
  11624. } else {
  11625. if ((HEAP32[i10 >> 2] | 0) != 0) {
  11626. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  11627. }
  11628. HEAP32[(___errno_location() | 0) >> 2] = 22;
  11629. ___shlim(i8, 0);
  11630. d33 = 0.0;
  11631. STACKTOP = i1;
  11632. return +d33;
  11633. }
  11634. }
  11635. } while (0);
  11636. if ((i13 | 0) == 23) {
  11637. i2 = (HEAP32[i10 >> 2] | 0) == 0;
  11638. if (!i2) {
  11639. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  11640. }
  11641. if (!(i7 >>> 0 < 4 | (i11 | 0) == 0 | i2)) {
  11642. do {
  11643. HEAP32[i9 >> 2] = (HEAP32[i9 >> 2] | 0) + -1;
  11644. i7 = i7 + -1 | 0;
  11645. } while (i7 >>> 0 > 3);
  11646. }
  11647. }
  11648. d33 = +(i4 | 0) * inf;
  11649. STACKTOP = i1;
  11650. return +d33;
  11651. }
  11652. function _statement(i4) {
  11653. i4 = i4 | 0;
  11654. var i1 = 0, i2 = 0, i3 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0;
  11655. i2 = STACKTOP;
  11656. STACKTOP = STACKTOP + 160 | 0;
  11657. i8 = i2 + 120 | 0;
  11658. i24 = i2 + 96 | 0;
  11659. i15 = i2 + 72 | 0;
  11660. i25 = i2 + 48 | 0;
  11661. i20 = i2 + 24 | 0;
  11662. i21 = i2;
  11663. i19 = i4 + 4 | 0;
  11664. i6 = HEAP32[i19 >> 2] | 0;
  11665. i3 = i4 + 48 | 0;
  11666. i9 = HEAP32[i3 >> 2] | 0;
  11667. i1 = i4 + 52 | 0;
  11668. i26 = (HEAP32[i1 >> 2] | 0) + 38 | 0;
  11669. i27 = (HEAP16[i26 >> 1] | 0) + 1 << 16 >> 16;
  11670. HEAP16[i26 >> 1] = i27;
  11671. if ((i27 & 65535) > 200) {
  11672. i27 = i9 + 12 | 0;
  11673. i26 = HEAP32[(HEAP32[i27 >> 2] | 0) + 52 >> 2] | 0;
  11674. i5 = HEAP32[(HEAP32[i9 >> 2] | 0) + 64 >> 2] | 0;
  11675. if ((i5 | 0) == 0) {
  11676. i29 = 6552;
  11677. HEAP32[i8 >> 2] = 6360;
  11678. i28 = i8 + 4 | 0;
  11679. HEAP32[i28 >> 2] = 200;
  11680. i28 = i8 + 8 | 0;
  11681. HEAP32[i28 >> 2] = i29;
  11682. i28 = _luaO_pushfstring(i26, 6592, i8) | 0;
  11683. i29 = HEAP32[i27 >> 2] | 0;
  11684. _luaX_syntaxerror(i29, i28);
  11685. }
  11686. HEAP32[i8 >> 2] = i5;
  11687. i28 = _luaO_pushfstring(i26, 6568, i8) | 0;
  11688. HEAP32[i8 >> 2] = 6360;
  11689. i29 = i8 + 4 | 0;
  11690. HEAP32[i29 >> 2] = 200;
  11691. i29 = i8 + 8 | 0;
  11692. HEAP32[i29 >> 2] = i28;
  11693. i29 = _luaO_pushfstring(i26, 6592, i8) | 0;
  11694. i28 = HEAP32[i27 >> 2] | 0;
  11695. _luaX_syntaxerror(i28, i29);
  11696. }
  11697. i5 = i4 + 16 | 0;
  11698. L8 : do {
  11699. switch (HEAP32[i5 >> 2] | 0) {
  11700. case 59:
  11701. {
  11702. _luaX_next(i4);
  11703. break;
  11704. }
  11705. case 267:
  11706. {
  11707. HEAP32[i21 >> 2] = -1;
  11708. _test_then_block(i4, i21);
  11709. while (1) {
  11710. i8 = HEAP32[i5 >> 2] | 0;
  11711. if ((i8 | 0) == 260) {
  11712. i7 = 10;
  11713. break;
  11714. } else if ((i8 | 0) != 261) {
  11715. break;
  11716. }
  11717. _test_then_block(i4, i21);
  11718. }
  11719. if ((i7 | 0) == 10) {
  11720. _luaX_next(i4);
  11721. i7 = HEAP32[i3 >> 2] | 0;
  11722. HEAP8[i20 + 10 | 0] = 0;
  11723. HEAP8[i20 + 8 | 0] = HEAP8[i7 + 46 | 0] | 0;
  11724. i29 = HEAP32[(HEAP32[i7 + 12 >> 2] | 0) + 64 >> 2] | 0;
  11725. HEAP16[i20 + 4 >> 1] = HEAP32[i29 + 28 >> 2];
  11726. HEAP16[i20 + 6 >> 1] = HEAP32[i29 + 16 >> 2];
  11727. HEAP8[i20 + 9 | 0] = 0;
  11728. i29 = i7 + 16 | 0;
  11729. HEAP32[i20 >> 2] = HEAP32[i29 >> 2];
  11730. HEAP32[i29 >> 2] = i20;
  11731. L16 : do {
  11732. i8 = HEAP32[i5 >> 2] | 0;
  11733. switch (i8 | 0) {
  11734. case 277:
  11735. case 286:
  11736. case 262:
  11737. case 261:
  11738. case 260:
  11739. {
  11740. break L16;
  11741. }
  11742. default:
  11743. {}
  11744. }
  11745. _statement(i4);
  11746. } while ((i8 | 0) != 274);
  11747. _leaveblock(i7);
  11748. }
  11749. _check_match(i4, 262, 267, i6);
  11750. _luaK_patchtohere(i9, HEAP32[i21 >> 2] | 0);
  11751. break;
  11752. }
  11753. case 259:
  11754. {
  11755. _luaX_next(i4);
  11756. i7 = HEAP32[i3 >> 2] | 0;
  11757. HEAP8[i20 + 10 | 0] = 0;
  11758. HEAP8[i20 + 8 | 0] = HEAP8[i7 + 46 | 0] | 0;
  11759. i29 = HEAP32[(HEAP32[i7 + 12 >> 2] | 0) + 64 >> 2] | 0;
  11760. HEAP16[i20 + 4 >> 1] = HEAP32[i29 + 28 >> 2];
  11761. HEAP16[i20 + 6 >> 1] = HEAP32[i29 + 16 >> 2];
  11762. HEAP8[i20 + 9 | 0] = 0;
  11763. i29 = i7 + 16 | 0;
  11764. HEAP32[i20 >> 2] = HEAP32[i29 >> 2];
  11765. HEAP32[i29 >> 2] = i20;
  11766. L22 : do {
  11767. i8 = HEAP32[i5 >> 2] | 0;
  11768. switch (i8 | 0) {
  11769. case 277:
  11770. case 286:
  11771. case 262:
  11772. case 261:
  11773. case 260:
  11774. {
  11775. break L22;
  11776. }
  11777. default:
  11778. {}
  11779. }
  11780. _statement(i4);
  11781. } while ((i8 | 0) != 274);
  11782. _leaveblock(i7);
  11783. _check_match(i4, 262, 259, i6);
  11784. break;
  11785. }
  11786. case 269:
  11787. {
  11788. _luaX_next(i4);
  11789. i6 = HEAP32[i5 >> 2] | 0;
  11790. if ((i6 | 0) == 265) {
  11791. _luaX_next(i4);
  11792. i7 = HEAP32[i3 >> 2] | 0;
  11793. if ((HEAP32[i5 >> 2] | 0) == 288) {
  11794. i29 = HEAP32[i4 + 24 >> 2] | 0;
  11795. _luaX_next(i4);
  11796. _new_localvar(i4, i29);
  11797. i29 = HEAP32[i3 >> 2] | 0;
  11798. i27 = i29 + 46 | 0;
  11799. i28 = (HEAPU8[i27] | 0) + 1 | 0;
  11800. HEAP8[i27] = i28;
  11801. HEAP32[(HEAP32[(HEAP32[i29 >> 2] | 0) + 24 >> 2] | 0) + ((HEAP16[(HEAP32[HEAP32[(HEAP32[i29 + 12 >> 2] | 0) + 64 >> 2] >> 2] | 0) + ((i28 & 255) + -1 + (HEAP32[i29 + 40 >> 2] | 0) << 1) >> 1] | 0) * 12 | 0) + 4 >> 2] = HEAP32[i29 + 20 >> 2];
  11802. _body(i4, i25, 0, HEAP32[i19 >> 2] | 0);
  11803. HEAP32[(HEAP32[(HEAP32[i7 >> 2] | 0) + 24 >> 2] | 0) + ((HEAP16[(HEAP32[HEAP32[(HEAP32[i7 + 12 >> 2] | 0) + 64 >> 2] >> 2] | 0) + ((HEAP32[i7 + 40 >> 2] | 0) + (HEAP32[i25 + 8 >> 2] | 0) << 1) >> 1] | 0) * 12 | 0) + 4 >> 2] = HEAP32[i7 + 20 >> 2];
  11804. break L8;
  11805. } else {
  11806. _error_expected(i4, 288);
  11807. }
  11808. }
  11809. if ((i6 | 0) != 288) {
  11810. _error_expected(i4, 288);
  11811. }
  11812. i7 = i4 + 24 | 0;
  11813. i6 = 1;
  11814. while (1) {
  11815. i8 = HEAP32[i7 >> 2] | 0;
  11816. _luaX_next(i4);
  11817. _new_localvar(i4, i8);
  11818. i8 = HEAP32[i5 >> 2] | 0;
  11819. if ((i8 | 0) == 61) {
  11820. i7 = 81;
  11821. break;
  11822. } else if ((i8 | 0) != 44) {
  11823. i7 = 83;
  11824. break;
  11825. }
  11826. _luaX_next(i4);
  11827. if ((HEAP32[i5 >> 2] | 0) == 288) {
  11828. i6 = i6 + 1 | 0;
  11829. } else {
  11830. i7 = 78;
  11831. break;
  11832. }
  11833. }
  11834. do {
  11835. if ((i7 | 0) == 78) {
  11836. _error_expected(i4, 288);
  11837. } else if ((i7 | 0) == 81) {
  11838. _luaX_next(i4);
  11839. _subexpr(i4, i15, 0) | 0;
  11840. if ((HEAP32[i5 >> 2] | 0) == 44) {
  11841. i8 = 1;
  11842. do {
  11843. _luaX_next(i4);
  11844. _luaK_exp2nextreg(HEAP32[i3 >> 2] | 0, i15);
  11845. _subexpr(i4, i15, 0) | 0;
  11846. i8 = i8 + 1 | 0;
  11847. } while ((HEAP32[i5 >> 2] | 0) == 44);
  11848. } else {
  11849. i8 = 1;
  11850. }
  11851. i5 = HEAP32[i15 >> 2] | 0;
  11852. i4 = HEAP32[i3 >> 2] | 0;
  11853. i8 = i6 - i8 | 0;
  11854. if ((i5 | 0) == 0) {
  11855. i17 = i8;
  11856. i18 = i4;
  11857. i7 = 88;
  11858. break;
  11859. } else if (!((i5 | 0) == 13 | (i5 | 0) == 12)) {
  11860. _luaK_exp2nextreg(i4, i15);
  11861. i17 = i8;
  11862. i18 = i4;
  11863. i7 = 88;
  11864. break;
  11865. }
  11866. i5 = i8 + 1 | 0;
  11867. i5 = (i5 | 0) < 0 ? 0 : i5;
  11868. _luaK_setreturns(i4, i15, i5);
  11869. if ((i5 | 0) > 1) {
  11870. _luaK_reserveregs(i4, i5 + -1 | 0);
  11871. }
  11872. } else if ((i7 | 0) == 83) {
  11873. HEAP32[i15 >> 2] = 0;
  11874. i17 = i6;
  11875. i18 = HEAP32[i3 >> 2] | 0;
  11876. i7 = 88;
  11877. }
  11878. } while (0);
  11879. if ((i7 | 0) == 88 ? (i17 | 0) > 0 : 0) {
  11880. i29 = HEAPU8[i18 + 48 | 0] | 0;
  11881. _luaK_reserveregs(i18, i17);
  11882. _luaK_nil(i18, i29, i17);
  11883. }
  11884. i5 = HEAP32[i3 >> 2] | 0;
  11885. i4 = i5 + 46 | 0;
  11886. i7 = (HEAPU8[i4] | 0) + i6 | 0;
  11887. HEAP8[i4] = i7;
  11888. if ((i6 | 0) != 0 ? (i11 = i5 + 20 | 0, i14 = i5 + 40 | 0, i12 = HEAP32[(HEAP32[i5 >> 2] | 0) + 24 >> 2] | 0, i13 = HEAP32[HEAP32[(HEAP32[i5 + 12 >> 2] | 0) + 64 >> 2] >> 2] | 0, HEAP32[i12 + ((HEAP16[i13 + ((i7 & 255) - i6 + (HEAP32[i14 >> 2] | 0) << 1) >> 1] | 0) * 12 | 0) + 4 >> 2] = HEAP32[i11 >> 2], i16 = i6 + -1 | 0, (i16 | 0) != 0) : 0) {
  11889. do {
  11890. HEAP32[i12 + ((HEAP16[i13 + ((HEAPU8[i4] | 0) - i16 + (HEAP32[i14 >> 2] | 0) << 1) >> 1] | 0) * 12 | 0) + 4 >> 2] = HEAP32[i11 >> 2];
  11891. i16 = i16 + -1 | 0;
  11892. } while ((i16 | 0) != 0);
  11893. }
  11894. break;
  11895. }
  11896. case 264:
  11897. {
  11898. HEAP8[i24 + 10 | 0] = 1;
  11899. HEAP8[i24 + 8 | 0] = HEAP8[i9 + 46 | 0] | 0;
  11900. i29 = HEAP32[(HEAP32[i9 + 12 >> 2] | 0) + 64 >> 2] | 0;
  11901. HEAP16[i24 + 4 >> 1] = HEAP32[i29 + 28 >> 2];
  11902. HEAP16[i24 + 6 >> 1] = HEAP32[i29 + 16 >> 2];
  11903. HEAP8[i24 + 9 | 0] = 0;
  11904. i29 = i9 + 16 | 0;
  11905. HEAP32[i24 >> 2] = HEAP32[i29 >> 2];
  11906. HEAP32[i29 >> 2] = i24;
  11907. _luaX_next(i4);
  11908. if ((HEAP32[i5 >> 2] | 0) != 288) {
  11909. _error_expected(i4, 288);
  11910. }
  11911. i14 = i4 + 24 | 0;
  11912. i13 = HEAP32[i14 >> 2] | 0;
  11913. _luaX_next(i4);
  11914. i11 = HEAP32[i5 >> 2] | 0;
  11915. if ((i11 | 0) == 268 | (i11 | 0) == 44) {
  11916. i12 = HEAP32[i3 >> 2] | 0;
  11917. i11 = HEAPU8[i12 + 48 | 0] | 0;
  11918. _new_localvar(i4, _luaX_newstring(i4, 6744, 15) | 0);
  11919. _new_localvar(i4, _luaX_newstring(i4, 6760, 11) | 0);
  11920. _new_localvar(i4, _luaX_newstring(i4, 6776, 13) | 0);
  11921. _new_localvar(i4, i13);
  11922. i13 = HEAP32[i5 >> 2] | 0;
  11923. do {
  11924. if ((i13 | 0) == 44) {
  11925. i15 = 4;
  11926. while (1) {
  11927. _luaX_next(i4);
  11928. if ((HEAP32[i5 >> 2] | 0) != 288) {
  11929. i7 = 40;
  11930. break;
  11931. }
  11932. i13 = HEAP32[i14 >> 2] | 0;
  11933. _luaX_next(i4);
  11934. _new_localvar(i4, i13);
  11935. i13 = HEAP32[i5 >> 2] | 0;
  11936. if ((i13 | 0) == 44) {
  11937. i15 = i15 + 1 | 0;
  11938. } else {
  11939. i7 = 42;
  11940. break;
  11941. }
  11942. }
  11943. if ((i7 | 0) == 40) {
  11944. _error_expected(i4, 288);
  11945. } else if ((i7 | 0) == 42) {
  11946. i22 = i13;
  11947. i10 = i15 + -2 | 0;
  11948. break;
  11949. }
  11950. } else {
  11951. i22 = i13;
  11952. i10 = 1;
  11953. }
  11954. } while (0);
  11955. if ((i22 | 0) != 268) {
  11956. _error_expected(i4, 268);
  11957. }
  11958. _luaX_next(i4);
  11959. i13 = HEAP32[i19 >> 2] | 0;
  11960. _subexpr(i4, i8, 0) | 0;
  11961. if ((HEAP32[i5 >> 2] | 0) == 44) {
  11962. i14 = 1;
  11963. do {
  11964. _luaX_next(i4);
  11965. _luaK_exp2nextreg(HEAP32[i3 >> 2] | 0, i8);
  11966. _subexpr(i4, i8, 0) | 0;
  11967. i14 = i14 + 1 | 0;
  11968. } while ((HEAP32[i5 >> 2] | 0) == 44);
  11969. } else {
  11970. i14 = 1;
  11971. }
  11972. i5 = HEAP32[i3 >> 2] | 0;
  11973. i14 = 3 - i14 | 0;
  11974. i15 = HEAP32[i8 >> 2] | 0;
  11975. if ((i15 | 0) == 0) {
  11976. i7 = 51;
  11977. } else if ((i15 | 0) == 13 | (i15 | 0) == 12) {
  11978. i15 = i14 + 1 | 0;
  11979. i15 = (i15 | 0) < 0 ? 0 : i15;
  11980. _luaK_setreturns(i5, i8, i15);
  11981. if ((i15 | 0) > 1) {
  11982. _luaK_reserveregs(i5, i15 + -1 | 0);
  11983. }
  11984. } else {
  11985. _luaK_exp2nextreg(i5, i8);
  11986. i7 = 51;
  11987. }
  11988. if ((i7 | 0) == 51 ? (i14 | 0) > 0 : 0) {
  11989. i29 = HEAPU8[i5 + 48 | 0] | 0;
  11990. _luaK_reserveregs(i5, i14);
  11991. _luaK_nil(i5, i29, i14);
  11992. }
  11993. _luaK_checkstack(i12, 3);
  11994. _forbody(i4, i11, i13, i10, 0);
  11995. } else if ((i11 | 0) == 61) {
  11996. i11 = HEAP32[i3 >> 2] | 0;
  11997. i7 = i11 + 48 | 0;
  11998. i10 = HEAPU8[i7] | 0;
  11999. _new_localvar(i4, _luaX_newstring(i4, 6792, 11) | 0);
  12000. _new_localvar(i4, _luaX_newstring(i4, 6808, 11) | 0);
  12001. _new_localvar(i4, _luaX_newstring(i4, 6824, 10) | 0);
  12002. _new_localvar(i4, i13);
  12003. if ((HEAP32[i5 >> 2] | 0) != 61) {
  12004. _error_expected(i4, 61);
  12005. }
  12006. _luaX_next(i4);
  12007. _subexpr(i4, i8, 0) | 0;
  12008. _luaK_exp2nextreg(HEAP32[i3 >> 2] | 0, i8);
  12009. if ((HEAP32[i5 >> 2] | 0) != 44) {
  12010. _error_expected(i4, 44);
  12011. }
  12012. _luaX_next(i4);
  12013. _subexpr(i4, i8, 0) | 0;
  12014. _luaK_exp2nextreg(HEAP32[i3 >> 2] | 0, i8);
  12015. if ((HEAP32[i5 >> 2] | 0) == 44) {
  12016. _luaX_next(i4);
  12017. _subexpr(i4, i8, 0) | 0;
  12018. _luaK_exp2nextreg(HEAP32[i3 >> 2] | 0, i8);
  12019. } else {
  12020. i29 = HEAPU8[i7] | 0;
  12021. _luaK_codek(i11, i29, _luaK_numberK(i11, 1.0) | 0) | 0;
  12022. _luaK_reserveregs(i11, 1);
  12023. }
  12024. _forbody(i4, i10, i6, 1, 1);
  12025. } else {
  12026. _luaX_syntaxerror(i4, 6720);
  12027. }
  12028. _check_match(i4, 262, 264, i6);
  12029. _leaveblock(i9);
  12030. break;
  12031. }
  12032. case 265:
  12033. {
  12034. _luaX_next(i4);
  12035. if ((HEAP32[i5 >> 2] | 0) != 288) {
  12036. _error_expected(i4, 288);
  12037. }
  12038. i8 = HEAP32[i4 + 24 >> 2] | 0;
  12039. _luaX_next(i4);
  12040. i9 = HEAP32[i3 >> 2] | 0;
  12041. if ((_singlevaraux(i9, i8, i20, 1) | 0) == 0) {
  12042. _singlevaraux(i9, HEAP32[i4 + 72 >> 2] | 0, i20, 1) | 0;
  12043. i29 = _luaK_stringK(HEAP32[i3 >> 2] | 0, i8) | 0;
  12044. HEAP32[i25 + 16 >> 2] = -1;
  12045. HEAP32[i25 + 20 >> 2] = -1;
  12046. HEAP32[i25 >> 2] = 4;
  12047. HEAP32[i25 + 8 >> 2] = i29;
  12048. _luaK_indexed(i9, i20, i25);
  12049. }
  12050. while (1) {
  12051. i8 = HEAP32[i5 >> 2] | 0;
  12052. if ((i8 | 0) == 58) {
  12053. i7 = 70;
  12054. break;
  12055. } else if ((i8 | 0) != 46) {
  12056. i5 = 0;
  12057. break;
  12058. }
  12059. _fieldsel(i4, i20);
  12060. }
  12061. if ((i7 | 0) == 70) {
  12062. _fieldsel(i4, i20);
  12063. i5 = 1;
  12064. }
  12065. _body(i4, i21, i5, i6);
  12066. _luaK_storevar(HEAP32[i3 >> 2] | 0, i20, i21);
  12067. _luaK_fixline(HEAP32[i3 >> 2] | 0, i6);
  12068. break;
  12069. }
  12070. case 278:
  12071. {
  12072. _luaX_next(i4);
  12073. i7 = _luaK_getlabel(i9) | 0;
  12074. _subexpr(i4, i20, 0) | 0;
  12075. if ((HEAP32[i20 >> 2] | 0) == 1) {
  12076. HEAP32[i20 >> 2] = 3;
  12077. }
  12078. _luaK_goiftrue(HEAP32[i3 >> 2] | 0, i20);
  12079. i8 = HEAP32[i20 + 20 >> 2] | 0;
  12080. HEAP8[i21 + 10 | 0] = 1;
  12081. HEAP8[i21 + 8 | 0] = HEAP8[i9 + 46 | 0] | 0;
  12082. i29 = HEAP32[(HEAP32[i9 + 12 >> 2] | 0) + 64 >> 2] | 0;
  12083. HEAP16[i21 + 4 >> 1] = HEAP32[i29 + 28 >> 2];
  12084. HEAP16[i21 + 6 >> 1] = HEAP32[i29 + 16 >> 2];
  12085. HEAP8[i21 + 9 | 0] = 0;
  12086. i29 = i9 + 16 | 0;
  12087. HEAP32[i21 >> 2] = HEAP32[i29 >> 2];
  12088. HEAP32[i29 >> 2] = i21;
  12089. if ((HEAP32[i5 >> 2] | 0) != 259) {
  12090. _error_expected(i4, 259);
  12091. }
  12092. _luaX_next(i4);
  12093. i10 = HEAP32[i3 >> 2] | 0;
  12094. HEAP8[i20 + 10 | 0] = 0;
  12095. HEAP8[i20 + 8 | 0] = HEAP8[i10 + 46 | 0] | 0;
  12096. i29 = HEAP32[(HEAP32[i10 + 12 >> 2] | 0) + 64 >> 2] | 0;
  12097. HEAP16[i20 + 4 >> 1] = HEAP32[i29 + 28 >> 2];
  12098. HEAP16[i20 + 6 >> 1] = HEAP32[i29 + 16 >> 2];
  12099. HEAP8[i20 + 9 | 0] = 0;
  12100. i29 = i10 + 16 | 0;
  12101. HEAP32[i20 >> 2] = HEAP32[i29 >> 2];
  12102. HEAP32[i29 >> 2] = i20;
  12103. L119 : do {
  12104. i11 = HEAP32[i5 >> 2] | 0;
  12105. switch (i11 | 0) {
  12106. case 277:
  12107. case 286:
  12108. case 262:
  12109. case 261:
  12110. case 260:
  12111. {
  12112. break L119;
  12113. }
  12114. default:
  12115. {}
  12116. }
  12117. _statement(i4);
  12118. } while ((i11 | 0) != 274);
  12119. _leaveblock(i10);
  12120. _luaK_patchlist(i9, _luaK_jump(i9) | 0, i7);
  12121. _check_match(i4, 262, 278, i6);
  12122. _leaveblock(i9);
  12123. _luaK_patchtohere(i9, i8);
  12124. break;
  12125. }
  12126. case 273:
  12127. {
  12128. i7 = _luaK_getlabel(i9) | 0;
  12129. HEAP8[i24 + 10 | 0] = 1;
  12130. i28 = i9 + 46 | 0;
  12131. HEAP8[i24 + 8 | 0] = HEAP8[i28] | 0;
  12132. i11 = i9 + 12 | 0;
  12133. i29 = HEAP32[(HEAP32[i11 >> 2] | 0) + 64 >> 2] | 0;
  12134. HEAP16[i24 + 4 >> 1] = HEAP32[i29 + 28 >> 2];
  12135. HEAP16[i24 + 6 >> 1] = HEAP32[i29 + 16 >> 2];
  12136. HEAP8[i24 + 9 | 0] = 0;
  12137. i29 = i9 + 16 | 0;
  12138. HEAP32[i24 >> 2] = HEAP32[i29 >> 2];
  12139. HEAP32[i29 >> 2] = i24;
  12140. HEAP8[i15 + 10 | 0] = 0;
  12141. i10 = i15 + 8 | 0;
  12142. HEAP8[i10] = HEAP8[i28] | 0;
  12143. i11 = HEAP32[(HEAP32[i11 >> 2] | 0) + 64 >> 2] | 0;
  12144. HEAP16[i15 + 4 >> 1] = HEAP32[i11 + 28 >> 2];
  12145. HEAP16[i15 + 6 >> 1] = HEAP32[i11 + 16 >> 2];
  12146. i11 = i15 + 9 | 0;
  12147. HEAP8[i11] = 0;
  12148. HEAP32[i15 >> 2] = HEAP32[i29 >> 2];
  12149. HEAP32[i29 >> 2] = i15;
  12150. _luaX_next(i4);
  12151. L124 : do {
  12152. i12 = HEAP32[i5 >> 2] | 0;
  12153. switch (i12 | 0) {
  12154. case 277:
  12155. case 286:
  12156. case 262:
  12157. case 261:
  12158. case 260:
  12159. {
  12160. break L124;
  12161. }
  12162. default:
  12163. {}
  12164. }
  12165. _statement(i4);
  12166. } while ((i12 | 0) != 274);
  12167. _check_match(i4, 277, 273, i6);
  12168. _subexpr(i4, i8, 0) | 0;
  12169. if ((HEAP32[i8 >> 2] | 0) == 1) {
  12170. HEAP32[i8 >> 2] = 3;
  12171. }
  12172. _luaK_goiftrue(HEAP32[i3 >> 2] | 0, i8);
  12173. i4 = HEAP32[i8 + 20 >> 2] | 0;
  12174. if ((HEAP8[i11] | 0) != 0) {
  12175. _luaK_patchclose(i9, i4, HEAPU8[i10] | 0);
  12176. }
  12177. _leaveblock(i9);
  12178. _luaK_patchlist(i9, i4, i7);
  12179. _leaveblock(i9);
  12180. break;
  12181. }
  12182. case 285:
  12183. {
  12184. _luaX_next(i4);
  12185. if ((HEAP32[i5 >> 2] | 0) != 288) {
  12186. _error_expected(i4, 288);
  12187. }
  12188. i10 = HEAP32[i4 + 24 >> 2] | 0;
  12189. _luaX_next(i4);
  12190. i15 = HEAP32[i3 >> 2] | 0;
  12191. i9 = i4 + 64 | 0;
  12192. i14 = HEAP32[i9 >> 2] | 0;
  12193. i12 = i14 + 24 | 0;
  12194. i11 = i15 + 16 | 0;
  12195. i16 = HEAP16[(HEAP32[i11 >> 2] | 0) + 4 >> 1] | 0;
  12196. i13 = i14 + 28 | 0;
  12197. L138 : do {
  12198. if ((i16 | 0) < (HEAP32[i13 >> 2] | 0)) {
  12199. while (1) {
  12200. i17 = i16 + 1 | 0;
  12201. if ((_luaS_eqstr(i10, HEAP32[(HEAP32[i12 >> 2] | 0) + (i16 << 4) >> 2] | 0) | 0) != 0) {
  12202. break;
  12203. }
  12204. if ((i17 | 0) < (HEAP32[i13 >> 2] | 0)) {
  12205. i16 = i17;
  12206. } else {
  12207. break L138;
  12208. }
  12209. }
  12210. i28 = i15 + 12 | 0;
  12211. i29 = HEAP32[(HEAP32[i28 >> 2] | 0) + 52 >> 2] | 0;
  12212. i27 = HEAP32[(HEAP32[i12 >> 2] | 0) + (i16 << 4) + 8 >> 2] | 0;
  12213. HEAP32[i8 >> 2] = i10 + 16;
  12214. HEAP32[i8 + 4 >> 2] = i27;
  12215. i29 = _luaO_pushfstring(i29, 6680, i8) | 0;
  12216. _semerror(HEAP32[i28 >> 2] | 0, i29);
  12217. }
  12218. } while (0);
  12219. if ((HEAP32[i5 >> 2] | 0) != 285) {
  12220. _error_expected(i4, 285);
  12221. }
  12222. _luaX_next(i4);
  12223. i8 = HEAP32[i15 + 20 >> 2] | 0;
  12224. i15 = HEAP32[i13 >> 2] | 0;
  12225. i14 = i14 + 32 | 0;
  12226. if ((i15 | 0) < (HEAP32[i14 >> 2] | 0)) {
  12227. i14 = HEAP32[i12 >> 2] | 0;
  12228. } else {
  12229. i14 = _luaM_growaux_(HEAP32[i1 >> 2] | 0, HEAP32[i12 >> 2] | 0, i14, 16, 32767, 6312) | 0;
  12230. HEAP32[i12 >> 2] = i14;
  12231. }
  12232. HEAP32[i14 + (i15 << 4) >> 2] = i10;
  12233. i29 = HEAP32[i12 >> 2] | 0;
  12234. HEAP32[i29 + (i15 << 4) + 8 >> 2] = i6;
  12235. HEAP8[i29 + (i15 << 4) + 12 | 0] = HEAP8[(HEAP32[i3 >> 2] | 0) + 46 | 0] | 0;
  12236. HEAP32[(HEAP32[i12 >> 2] | 0) + (i15 << 4) + 4 >> 2] = i8;
  12237. HEAP32[i13 >> 2] = (HEAP32[i13 >> 2] | 0) + 1;
  12238. L152 : while (1) {
  12239. switch (HEAP32[i5 >> 2] | 0) {
  12240. case 285:
  12241. case 59:
  12242. {
  12243. break;
  12244. }
  12245. case 286:
  12246. case 262:
  12247. case 261:
  12248. case 260:
  12249. {
  12250. i7 = 108;
  12251. break L152;
  12252. }
  12253. default:
  12254. {
  12255. break L152;
  12256. }
  12257. }
  12258. _statement(i4);
  12259. }
  12260. if ((i7 | 0) == 108) {
  12261. HEAP8[(HEAP32[i12 >> 2] | 0) + (i15 << 4) + 12 | 0] = HEAP8[(HEAP32[i11 >> 2] | 0) + 8 | 0] | 0;
  12262. }
  12263. i5 = (HEAP32[i12 >> 2] | 0) + (i15 << 4) | 0;
  12264. i8 = HEAP32[i9 >> 2] | 0;
  12265. i7 = HEAP16[(HEAP32[(HEAP32[i3 >> 2] | 0) + 16 >> 2] | 0) + 6 >> 1] | 0;
  12266. i6 = i8 + 16 | 0;
  12267. if ((i7 | 0) < (HEAP32[i6 >> 2] | 0)) {
  12268. i8 = i8 + 12 | 0;
  12269. do {
  12270. while (1) {
  12271. if ((_luaS_eqstr(HEAP32[(HEAP32[i8 >> 2] | 0) + (i7 << 4) >> 2] | 0, HEAP32[i5 >> 2] | 0) | 0) == 0) {
  12272. break;
  12273. }
  12274. _closegoto(i4, i7, i5);
  12275. if ((i7 | 0) >= (HEAP32[i6 >> 2] | 0)) {
  12276. break L8;
  12277. }
  12278. }
  12279. i7 = i7 + 1 | 0;
  12280. } while ((i7 | 0) < (HEAP32[i6 >> 2] | 0));
  12281. }
  12282. break;
  12283. }
  12284. case 274:
  12285. {
  12286. _luaX_next(i4);
  12287. i6 = HEAP32[i3 >> 2] | 0;
  12288. L166 : do {
  12289. switch (HEAP32[i5 >> 2] | 0) {
  12290. case 59:
  12291. case 277:
  12292. case 286:
  12293. case 262:
  12294. case 261:
  12295. case 260:
  12296. {
  12297. i8 = 0;
  12298. i7 = 0;
  12299. break;
  12300. }
  12301. default:
  12302. {
  12303. _subexpr(i4, i24, 0) | 0;
  12304. if ((HEAP32[i5 >> 2] | 0) == 44) {
  12305. i7 = 1;
  12306. do {
  12307. _luaX_next(i4);
  12308. _luaK_exp2nextreg(HEAP32[i3 >> 2] | 0, i24);
  12309. _subexpr(i4, i24, 0) | 0;
  12310. i7 = i7 + 1 | 0;
  12311. } while ((HEAP32[i5 >> 2] | 0) == 44);
  12312. } else {
  12313. i7 = 1;
  12314. }
  12315. if (!(((HEAP32[i24 >> 2] | 0) + -12 | 0) >>> 0 < 2)) {
  12316. if ((i7 | 0) == 1) {
  12317. i8 = _luaK_exp2anyreg(i6, i24) | 0;
  12318. i7 = 1;
  12319. break L166;
  12320. } else {
  12321. _luaK_exp2nextreg(i6, i24);
  12322. i8 = HEAPU8[i6 + 46 | 0] | 0;
  12323. break L166;
  12324. }
  12325. } else {
  12326. _luaK_setreturns(i6, i24, -1);
  12327. if ((HEAP32[i24 >> 2] | 0) == 12 & (i7 | 0) == 1) {
  12328. i29 = (HEAP32[(HEAP32[i6 >> 2] | 0) + 12 >> 2] | 0) + (HEAP32[i24 + 8 >> 2] << 2) | 0;
  12329. HEAP32[i29 >> 2] = HEAP32[i29 >> 2] & -64 | 30;
  12330. }
  12331. i8 = HEAPU8[i6 + 46 | 0] | 0;
  12332. i7 = -1;
  12333. break L166;
  12334. }
  12335. }
  12336. }
  12337. } while (0);
  12338. _luaK_ret(i6, i8, i7);
  12339. if ((HEAP32[i5 >> 2] | 0) == 59) {
  12340. _luaX_next(i4);
  12341. }
  12342. break;
  12343. }
  12344. case 266:
  12345. case 258:
  12346. {
  12347. i6 = _luaK_jump(i9) | 0;
  12348. i7 = HEAP32[i19 >> 2] | 0;
  12349. i29 = (HEAP32[i5 >> 2] | 0) == 266;
  12350. _luaX_next(i4);
  12351. do {
  12352. if (i29) {
  12353. if ((HEAP32[i5 >> 2] | 0) == 288) {
  12354. i23 = HEAP32[i4 + 24 >> 2] | 0;
  12355. _luaX_next(i4);
  12356. break;
  12357. } else {
  12358. _error_expected(i4, 288);
  12359. }
  12360. } else {
  12361. i23 = _luaS_new(HEAP32[i1 >> 2] | 0, 6304) | 0;
  12362. }
  12363. } while (0);
  12364. i10 = HEAP32[i4 + 64 >> 2] | 0;
  12365. i9 = i10 + 12 | 0;
  12366. i5 = i10 + 16 | 0;
  12367. i8 = HEAP32[i5 >> 2] | 0;
  12368. i10 = i10 + 20 | 0;
  12369. if ((i8 | 0) < (HEAP32[i10 >> 2] | 0)) {
  12370. i10 = HEAP32[i9 >> 2] | 0;
  12371. } else {
  12372. i10 = _luaM_growaux_(HEAP32[i1 >> 2] | 0, HEAP32[i9 >> 2] | 0, i10, 16, 32767, 6312) | 0;
  12373. HEAP32[i9 >> 2] = i10;
  12374. }
  12375. HEAP32[i10 + (i8 << 4) >> 2] = i23;
  12376. i29 = HEAP32[i9 >> 2] | 0;
  12377. HEAP32[i29 + (i8 << 4) + 8 >> 2] = i7;
  12378. HEAP8[i29 + (i8 << 4) + 12 | 0] = HEAP8[(HEAP32[i3 >> 2] | 0) + 46 | 0] | 0;
  12379. HEAP32[(HEAP32[i9 >> 2] | 0) + (i8 << 4) + 4 >> 2] = i6;
  12380. HEAP32[i5 >> 2] = (HEAP32[i5 >> 2] | 0) + 1;
  12381. _findlabel(i4, i8) | 0;
  12382. break;
  12383. }
  12384. default:
  12385. {
  12386. i6 = i8 + 8 | 0;
  12387. _suffixedexp(i4, i6);
  12388. i29 = HEAP32[i5 >> 2] | 0;
  12389. if ((i29 | 0) == 44 | (i29 | 0) == 61) {
  12390. HEAP32[i8 >> 2] = 0;
  12391. _assignment(i4, i8, 1);
  12392. break L8;
  12393. }
  12394. if ((HEAP32[i6 >> 2] | 0) == 12) {
  12395. i29 = (HEAP32[(HEAP32[i9 >> 2] | 0) + 12 >> 2] | 0) + (HEAP32[i8 + 16 >> 2] << 2) | 0;
  12396. HEAP32[i29 >> 2] = HEAP32[i29 >> 2] & -8372225 | 16384;
  12397. break L8;
  12398. } else {
  12399. _luaX_syntaxerror(i4, 6344);
  12400. }
  12401. }
  12402. }
  12403. } while (0);
  12404. i29 = HEAP32[i3 >> 2] | 0;
  12405. HEAP8[i29 + 48 | 0] = HEAP8[i29 + 46 | 0] | 0;
  12406. i29 = (HEAP32[i1 >> 2] | 0) + 38 | 0;
  12407. HEAP16[i29 >> 1] = (HEAP16[i29 >> 1] | 0) + -1 << 16 >> 16;
  12408. STACKTOP = i2;
  12409. return;
  12410. }
  12411. function _match(i1, i12, i11) {
  12412. i1 = i1 | 0;
  12413. i12 = i12 | 0;
  12414. i11 = i11 | 0;
  12415. var i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0, i22 = 0, i23 = 0, i24 = 0, i25 = 0, i26 = 0, i27 = 0, i28 = 0, i29 = 0, i30 = 0, i31 = 0, i32 = 0;
  12416. i2 = STACKTOP;
  12417. STACKTOP = STACKTOP + 16 | 0;
  12418. i8 = i2;
  12419. i32 = HEAP32[i1 >> 2] | 0;
  12420. HEAP32[i1 >> 2] = i32 + -1;
  12421. if ((i32 | 0) == 0) {
  12422. _luaL_error(HEAP32[i1 + 16 >> 2] | 0, 7272, i8) | 0;
  12423. }
  12424. i14 = i1 + 12 | 0;
  12425. i22 = HEAP32[i14 >> 2] | 0;
  12426. L4 : do {
  12427. if ((i22 | 0) != (i11 | 0)) {
  12428. i3 = i1 + 8 | 0;
  12429. i9 = i1 + 16 | 0;
  12430. i16 = i1 + 4 | 0;
  12431. i10 = i1 + 20 | 0;
  12432. L6 : while (1) {
  12433. i19 = i12 + 1 | 0;
  12434. i20 = i12 + -1 | 0;
  12435. L8 : while (1) {
  12436. i23 = HEAP8[i11] | 0;
  12437. i21 = i23 << 24 >> 24;
  12438. L10 : do {
  12439. if ((i21 | 0) == 36) {
  12440. i7 = i11 + 1 | 0;
  12441. if ((i7 | 0) == (i22 | 0)) {
  12442. i7 = 23;
  12443. break L6;
  12444. } else {
  12445. i22 = i7;
  12446. i21 = i7;
  12447. i7 = 89;
  12448. }
  12449. } else if ((i21 | 0) == 37) {
  12450. i21 = i11 + 1 | 0;
  12451. i23 = HEAP8[i21] | 0;
  12452. switch (i23 << 24 >> 24 | 0) {
  12453. case 57:
  12454. case 56:
  12455. case 55:
  12456. case 54:
  12457. case 53:
  12458. case 52:
  12459. case 51:
  12460. case 50:
  12461. case 49:
  12462. case 48:
  12463. {
  12464. i7 = 69;
  12465. break L8;
  12466. }
  12467. case 98:
  12468. {
  12469. i7 = 25;
  12470. break L8;
  12471. }
  12472. case 102:
  12473. {
  12474. break;
  12475. }
  12476. default:
  12477. {
  12478. if ((i21 | 0) == (i22 | 0)) {
  12479. _luaL_error(HEAP32[i9 >> 2] | 0, 7368, i8) | 0;
  12480. }
  12481. i22 = i11 + 2 | 0;
  12482. i7 = 89;
  12483. break L10;
  12484. }
  12485. }
  12486. i22 = i11 + 2 | 0;
  12487. if ((HEAP8[i22] | 0) == 91) {
  12488. i21 = 91;
  12489. } else {
  12490. _luaL_error(HEAP32[i9 >> 2] | 0, 7296, i8) | 0;
  12491. i21 = HEAP8[i22] | 0;
  12492. }
  12493. i23 = i11 + 3 | 0;
  12494. i21 = i21 << 24 >> 24;
  12495. if ((i21 | 0) == 91) {
  12496. i21 = (HEAP8[i23] | 0) == 94 ? i11 + 4 | 0 : i23;
  12497. while (1) {
  12498. if ((i21 | 0) == (HEAP32[i14 >> 2] | 0)) {
  12499. _luaL_error(HEAP32[i9 >> 2] | 0, 7408, i8) | 0;
  12500. }
  12501. i11 = i21 + 1 | 0;
  12502. if ((HEAP8[i21] | 0) == 37) {
  12503. i11 = i11 >>> 0 < (HEAP32[i14 >> 2] | 0) >>> 0 ? i21 + 2 | 0 : i11;
  12504. }
  12505. if ((HEAP8[i11] | 0) == 93) {
  12506. break;
  12507. } else {
  12508. i21 = i11;
  12509. }
  12510. }
  12511. i11 = i11 + 1 | 0;
  12512. } else if ((i21 | 0) == 37) {
  12513. if ((i23 | 0) == (HEAP32[i14 >> 2] | 0)) {
  12514. _luaL_error(HEAP32[i9 >> 2] | 0, 7368, i8) | 0;
  12515. }
  12516. i11 = i11 + 4 | 0;
  12517. } else {
  12518. i11 = i23;
  12519. }
  12520. if ((i12 | 0) == (HEAP32[i16 >> 2] | 0)) {
  12521. i25 = 0;
  12522. } else {
  12523. i25 = HEAP8[i20] | 0;
  12524. }
  12525. i24 = i25 & 255;
  12526. i21 = i11 + -1 | 0;
  12527. i26 = (HEAP8[i23] | 0) == 94;
  12528. i28 = i26 ? i23 : i22;
  12529. i27 = i26 & 1;
  12530. i26 = i27 ^ 1;
  12531. i30 = i28 + 1 | 0;
  12532. L41 : do {
  12533. if (i30 >>> 0 < i21 >>> 0) {
  12534. while (1) {
  12535. i32 = HEAP8[i30] | 0;
  12536. i29 = i28 + 2 | 0;
  12537. i31 = HEAP8[i29] | 0;
  12538. do {
  12539. if (i32 << 24 >> 24 == 37) {
  12540. if ((_match_class(i24, i31 & 255) | 0) == 0) {
  12541. i28 = i29;
  12542. } else {
  12543. break L41;
  12544. }
  12545. } else {
  12546. if (i31 << 24 >> 24 == 45 ? (i18 = i28 + 3 | 0, i18 >>> 0 < i21 >>> 0) : 0) {
  12547. if ((i32 & 255) > (i25 & 255)) {
  12548. i28 = i18;
  12549. break;
  12550. }
  12551. if ((HEAPU8[i18] | 0) < (i25 & 255)) {
  12552. i28 = i18;
  12553. break;
  12554. } else {
  12555. break L41;
  12556. }
  12557. }
  12558. if (i32 << 24 >> 24 == i25 << 24 >> 24) {
  12559. break L41;
  12560. } else {
  12561. i28 = i30;
  12562. }
  12563. }
  12564. } while (0);
  12565. i30 = i28 + 1 | 0;
  12566. if (!(i30 >>> 0 < i21 >>> 0)) {
  12567. i26 = i27;
  12568. break;
  12569. }
  12570. }
  12571. } else {
  12572. i26 = i27;
  12573. }
  12574. } while (0);
  12575. if ((i26 | 0) != 0) {
  12576. i12 = 0;
  12577. break L4;
  12578. }
  12579. i24 = HEAP8[i12] | 0;
  12580. i25 = i24 & 255;
  12581. i27 = (HEAP8[i23] | 0) == 94;
  12582. i26 = i27 ? i23 : i22;
  12583. i22 = i27 & 1;
  12584. i23 = i22 ^ 1;
  12585. i30 = i26 + 1 | 0;
  12586. L55 : do {
  12587. if (i30 >>> 0 < i21 >>> 0) {
  12588. do {
  12589. i29 = HEAP8[i30] | 0;
  12590. i28 = i26 + 2 | 0;
  12591. i27 = HEAP8[i28] | 0;
  12592. do {
  12593. if (i29 << 24 >> 24 == 37) {
  12594. if ((_match_class(i25, i27 & 255) | 0) == 0) {
  12595. i26 = i28;
  12596. } else {
  12597. i22 = i23;
  12598. break L55;
  12599. }
  12600. } else {
  12601. if (i27 << 24 >> 24 == 45 ? (i17 = i26 + 3 | 0, i17 >>> 0 < i21 >>> 0) : 0) {
  12602. if ((i29 & 255) > (i24 & 255)) {
  12603. i26 = i17;
  12604. break;
  12605. }
  12606. if ((HEAPU8[i17] | 0) < (i24 & 255)) {
  12607. i26 = i17;
  12608. break;
  12609. } else {
  12610. i22 = i23;
  12611. break L55;
  12612. }
  12613. }
  12614. if (i29 << 24 >> 24 == i24 << 24 >> 24) {
  12615. i22 = i23;
  12616. break L55;
  12617. } else {
  12618. i26 = i30;
  12619. }
  12620. }
  12621. } while (0);
  12622. i30 = i26 + 1 | 0;
  12623. } while (i30 >>> 0 < i21 >>> 0);
  12624. }
  12625. } while (0);
  12626. if ((i22 | 0) == 0) {
  12627. i12 = 0;
  12628. break L4;
  12629. }
  12630. } else if ((i21 | 0) == 40) {
  12631. i7 = 7;
  12632. break L6;
  12633. } else if ((i21 | 0) != 41) {
  12634. i21 = i11 + 1 | 0;
  12635. if (i23 << 24 >> 24 == 91) {
  12636. i7 = (HEAP8[i21] | 0) == 94 ? i11 + 2 | 0 : i21;
  12637. while (1) {
  12638. if ((i7 | 0) == (i22 | 0)) {
  12639. _luaL_error(HEAP32[i9 >> 2] | 0, 7408, i8) | 0;
  12640. }
  12641. i22 = i7 + 1 | 0;
  12642. if ((HEAP8[i7] | 0) == 37) {
  12643. i7 = i22 >>> 0 < (HEAP32[i14 >> 2] | 0) >>> 0 ? i7 + 2 | 0 : i22;
  12644. } else {
  12645. i7 = i22;
  12646. }
  12647. if ((HEAP8[i7] | 0) == 93) {
  12648. break;
  12649. }
  12650. i22 = HEAP32[i14 >> 2] | 0;
  12651. }
  12652. i22 = i7 + 1 | 0;
  12653. i7 = 89;
  12654. } else {
  12655. i22 = i21;
  12656. i7 = 89;
  12657. }
  12658. } else {
  12659. i7 = 16;
  12660. break L6;
  12661. }
  12662. } while (0);
  12663. L80 : do {
  12664. if ((i7 | 0) == 89) {
  12665. i7 = 0;
  12666. do {
  12667. if ((HEAP32[i3 >> 2] | 0) >>> 0 > i12 >>> 0) {
  12668. i23 = HEAP8[i12] | 0;
  12669. i24 = i23 & 255;
  12670. i26 = HEAP8[i11] | 0;
  12671. i25 = i26 << 24 >> 24;
  12672. L85 : do {
  12673. if ((i25 | 0) == 46) {
  12674. i23 = HEAP8[i22] | 0;
  12675. } else if ((i25 | 0) == 37) {
  12676. i25 = _match_class(i24, HEAPU8[i21] | 0) | 0;
  12677. i7 = 104;
  12678. } else if ((i25 | 0) == 91) {
  12679. i7 = i22 + -1 | 0;
  12680. i25 = (HEAP8[i21] | 0) == 94;
  12681. i27 = i25 ? i21 : i11;
  12682. i26 = i25 & 1;
  12683. i25 = i26 ^ 1;
  12684. i30 = i27 + 1 | 0;
  12685. if (i30 >>> 0 < i7 >>> 0) {
  12686. while (1) {
  12687. i31 = HEAP8[i30] | 0;
  12688. i29 = i27 + 2 | 0;
  12689. i28 = HEAP8[i29] | 0;
  12690. do {
  12691. if (i31 << 24 >> 24 == 37) {
  12692. if ((_match_class(i24, i28 & 255) | 0) == 0) {
  12693. i27 = i29;
  12694. } else {
  12695. i7 = 104;
  12696. break L85;
  12697. }
  12698. } else {
  12699. if (i28 << 24 >> 24 == 45 ? (i13 = i27 + 3 | 0, i13 >>> 0 < i7 >>> 0) : 0) {
  12700. if ((i31 & 255) > (i23 & 255)) {
  12701. i27 = i13;
  12702. break;
  12703. }
  12704. if ((HEAPU8[i13] | 0) < (i23 & 255)) {
  12705. i27 = i13;
  12706. break;
  12707. } else {
  12708. i7 = 104;
  12709. break L85;
  12710. }
  12711. }
  12712. if (i31 << 24 >> 24 == i23 << 24 >> 24) {
  12713. i7 = 104;
  12714. break L85;
  12715. } else {
  12716. i27 = i30;
  12717. }
  12718. }
  12719. } while (0);
  12720. i30 = i27 + 1 | 0;
  12721. if (!(i30 >>> 0 < i7 >>> 0)) {
  12722. i25 = i26;
  12723. i7 = 104;
  12724. break;
  12725. }
  12726. }
  12727. } else {
  12728. i25 = i26;
  12729. i7 = 104;
  12730. }
  12731. } else {
  12732. i25 = i26 << 24 >> 24 == i23 << 24 >> 24 | 0;
  12733. i7 = 104;
  12734. }
  12735. } while (0);
  12736. if ((i7 | 0) == 104) {
  12737. i7 = 0;
  12738. i23 = HEAP8[i22] | 0;
  12739. if ((i25 | 0) == 0) {
  12740. break;
  12741. }
  12742. }
  12743. i23 = i23 << 24 >> 24;
  12744. if ((i23 | 0) == 45) {
  12745. i7 = 109;
  12746. break L6;
  12747. } else if ((i23 | 0) == 42) {
  12748. i7 = 112;
  12749. break L6;
  12750. } else if ((i23 | 0) == 43) {
  12751. break L6;
  12752. } else if ((i23 | 0) != 63) {
  12753. i12 = i19;
  12754. i11 = i22;
  12755. break L8;
  12756. }
  12757. i11 = i22 + 1 | 0;
  12758. i21 = _match(i1, i19, i11) | 0;
  12759. if ((i21 | 0) == 0) {
  12760. break L80;
  12761. } else {
  12762. i12 = i21;
  12763. break L4;
  12764. }
  12765. } else {
  12766. i23 = HEAP8[i22] | 0;
  12767. }
  12768. } while (0);
  12769. if (!(i23 << 24 >> 24 == 45 | i23 << 24 >> 24 == 63 | i23 << 24 >> 24 == 42)) {
  12770. i12 = 0;
  12771. break L4;
  12772. }
  12773. i11 = i22 + 1 | 0;
  12774. }
  12775. } while (0);
  12776. i22 = HEAP32[i14 >> 2] | 0;
  12777. if ((i11 | 0) == (i22 | 0)) {
  12778. break L4;
  12779. }
  12780. }
  12781. if ((i7 | 0) == 25) {
  12782. i7 = 0;
  12783. i21 = i11 + 2 | 0;
  12784. if (!((i22 + -1 | 0) >>> 0 > i21 >>> 0)) {
  12785. _luaL_error(HEAP32[i9 >> 2] | 0, 7440, i8) | 0;
  12786. }
  12787. i20 = HEAP8[i12] | 0;
  12788. if (!(i20 << 24 >> 24 == (HEAP8[i21] | 0))) {
  12789. i12 = 0;
  12790. break L4;
  12791. }
  12792. i21 = HEAP8[i11 + 3 | 0] | 0;
  12793. i22 = HEAP32[i3 >> 2] | 0;
  12794. if (i19 >>> 0 < i22 >>> 0) {
  12795. i24 = 1;
  12796. } else {
  12797. i12 = 0;
  12798. break L4;
  12799. }
  12800. while (1) {
  12801. i23 = HEAP8[i19] | 0;
  12802. if (i23 << 24 >> 24 == i21 << 24 >> 24) {
  12803. i24 = i24 + -1 | 0;
  12804. if ((i24 | 0) == 0) {
  12805. break;
  12806. }
  12807. } else {
  12808. i24 = (i23 << 24 >> 24 == i20 << 24 >> 24) + i24 | 0;
  12809. }
  12810. i12 = i19 + 1 | 0;
  12811. if (i12 >>> 0 < i22 >>> 0) {
  12812. i32 = i19;
  12813. i19 = i12;
  12814. i12 = i32;
  12815. } else {
  12816. i12 = 0;
  12817. break L4;
  12818. }
  12819. }
  12820. i12 = i12 + 2 | 0;
  12821. i11 = i11 + 4 | 0;
  12822. } else if ((i7 | 0) == 69) {
  12823. i7 = 0;
  12824. i20 = i23 & 255;
  12825. i19 = i20 + -49 | 0;
  12826. if (((i19 | 0) >= 0 ? (i19 | 0) < (HEAP32[i10 >> 2] | 0) : 0) ? (i15 = HEAP32[i1 + (i19 << 3) + 28 >> 2] | 0, !((i15 | 0) == -1)) : 0) {
  12827. i20 = i15;
  12828. } else {
  12829. i19 = HEAP32[i9 >> 2] | 0;
  12830. HEAP32[i8 >> 2] = i20 + -48;
  12831. i20 = _luaL_error(i19, 7336, i8) | 0;
  12832. i19 = i20;
  12833. i20 = HEAP32[i1 + (i20 << 3) + 28 >> 2] | 0;
  12834. }
  12835. if (((HEAP32[i3 >> 2] | 0) - i12 | 0) >>> 0 < i20 >>> 0) {
  12836. i12 = 0;
  12837. break L4;
  12838. }
  12839. if ((_memcmp(HEAP32[i1 + (i19 << 3) + 24 >> 2] | 0, i12, i20) | 0) != 0) {
  12840. i12 = 0;
  12841. break L4;
  12842. }
  12843. i12 = i12 + i20 | 0;
  12844. if ((i12 | 0) == 0) {
  12845. i12 = 0;
  12846. break L4;
  12847. }
  12848. i11 = i11 + 2 | 0;
  12849. }
  12850. i22 = HEAP32[i14 >> 2] | 0;
  12851. if ((i11 | 0) == (i22 | 0)) {
  12852. break L4;
  12853. }
  12854. }
  12855. if ((i7 | 0) == 7) {
  12856. i3 = i11 + 1 | 0;
  12857. if ((HEAP8[i3] | 0) == 41) {
  12858. i3 = HEAP32[i10 >> 2] | 0;
  12859. if ((i3 | 0) > 31) {
  12860. _luaL_error(HEAP32[i9 >> 2] | 0, 7200, i8) | 0;
  12861. }
  12862. HEAP32[i1 + (i3 << 3) + 24 >> 2] = i12;
  12863. HEAP32[i1 + (i3 << 3) + 28 >> 2] = -2;
  12864. HEAP32[i10 >> 2] = i3 + 1;
  12865. i12 = _match(i1, i12, i11 + 2 | 0) | 0;
  12866. if ((i12 | 0) != 0) {
  12867. break;
  12868. }
  12869. HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + -1;
  12870. i12 = 0;
  12871. break;
  12872. } else {
  12873. i4 = HEAP32[i10 >> 2] | 0;
  12874. if ((i4 | 0) > 31) {
  12875. _luaL_error(HEAP32[i9 >> 2] | 0, 7200, i8) | 0;
  12876. }
  12877. HEAP32[i1 + (i4 << 3) + 24 >> 2] = i12;
  12878. HEAP32[i1 + (i4 << 3) + 28 >> 2] = -1;
  12879. HEAP32[i10 >> 2] = i4 + 1;
  12880. i12 = _match(i1, i12, i3) | 0;
  12881. if ((i12 | 0) != 0) {
  12882. break;
  12883. }
  12884. HEAP32[i10 >> 2] = (HEAP32[i10 >> 2] | 0) + -1;
  12885. i12 = 0;
  12886. break;
  12887. }
  12888. } else if ((i7 | 0) == 16) {
  12889. i3 = i11 + 1 | 0;
  12890. i5 = HEAP32[i10 >> 2] | 0;
  12891. while (1) {
  12892. i4 = i5 + -1 | 0;
  12893. if ((i5 | 0) <= 0) {
  12894. i7 = 19;
  12895. break;
  12896. }
  12897. if ((HEAP32[i1 + (i4 << 3) + 28 >> 2] | 0) == -1) {
  12898. break;
  12899. } else {
  12900. i5 = i4;
  12901. }
  12902. }
  12903. if ((i7 | 0) == 19) {
  12904. i4 = _luaL_error(HEAP32[i9 >> 2] | 0, 7488, i8) | 0;
  12905. }
  12906. i5 = i1 + (i4 << 3) + 28 | 0;
  12907. HEAP32[i5 >> 2] = i12 - (HEAP32[i1 + (i4 << 3) + 24 >> 2] | 0);
  12908. i12 = _match(i1, i12, i3) | 0;
  12909. if ((i12 | 0) != 0) {
  12910. break;
  12911. }
  12912. HEAP32[i5 >> 2] = -1;
  12913. i12 = 0;
  12914. break;
  12915. } else if ((i7 | 0) == 23) {
  12916. i12 = (i12 | 0) == (HEAP32[i3 >> 2] | 0) ? i12 : 0;
  12917. break;
  12918. } else if ((i7 | 0) == 109) {
  12919. i4 = i22 + 1 | 0;
  12920. i8 = _match(i1, i12, i4) | 0;
  12921. if ((i8 | 0) != 0) {
  12922. i12 = i8;
  12923. break;
  12924. }
  12925. i8 = i22 + -1 | 0;
  12926. while (1) {
  12927. if (!((HEAP32[i3 >> 2] | 0) >>> 0 > i12 >>> 0)) {
  12928. i12 = 0;
  12929. break L4;
  12930. }
  12931. i9 = HEAP8[i12] | 0;
  12932. i10 = i9 & 255;
  12933. i14 = HEAP8[i11] | 0;
  12934. i13 = i14 << 24 >> 24;
  12935. L139 : do {
  12936. if ((i13 | 0) == 91) {
  12937. i6 = (HEAP8[i21] | 0) == 94;
  12938. i13 = i6 ? i21 : i11;
  12939. i6 = i6 & 1;
  12940. i7 = i6 ^ 1;
  12941. i14 = i13 + 1 | 0;
  12942. if (i14 >>> 0 < i8 >>> 0) {
  12943. while (1) {
  12944. i17 = HEAP8[i14] | 0;
  12945. i15 = i13 + 2 | 0;
  12946. i16 = HEAP8[i15] | 0;
  12947. do {
  12948. if (i17 << 24 >> 24 == 37) {
  12949. if ((_match_class(i10, i16 & 255) | 0) == 0) {
  12950. i13 = i15;
  12951. } else {
  12952. i6 = i7;
  12953. i7 = 147;
  12954. break L139;
  12955. }
  12956. } else {
  12957. if (i16 << 24 >> 24 == 45 ? (i5 = i13 + 3 | 0, i5 >>> 0 < i8 >>> 0) : 0) {
  12958. if ((i17 & 255) > (i9 & 255)) {
  12959. i13 = i5;
  12960. break;
  12961. }
  12962. if ((HEAPU8[i5] | 0) < (i9 & 255)) {
  12963. i13 = i5;
  12964. break;
  12965. } else {
  12966. i6 = i7;
  12967. i7 = 147;
  12968. break L139;
  12969. }
  12970. }
  12971. if (i17 << 24 >> 24 == i9 << 24 >> 24) {
  12972. i6 = i7;
  12973. i7 = 147;
  12974. break L139;
  12975. } else {
  12976. i13 = i14;
  12977. }
  12978. }
  12979. } while (0);
  12980. i14 = i13 + 1 | 0;
  12981. if (!(i14 >>> 0 < i8 >>> 0)) {
  12982. i7 = 147;
  12983. break;
  12984. }
  12985. }
  12986. } else {
  12987. i7 = 147;
  12988. }
  12989. } else if ((i13 | 0) == 37) {
  12990. i6 = _match_class(i10, HEAPU8[i21] | 0) | 0;
  12991. i7 = 147;
  12992. } else if ((i13 | 0) != 46) {
  12993. i6 = i14 << 24 >> 24 == i9 << 24 >> 24 | 0;
  12994. i7 = 147;
  12995. }
  12996. } while (0);
  12997. if ((i7 | 0) == 147 ? (i7 = 0, (i6 | 0) == 0) : 0) {
  12998. i12 = 0;
  12999. break L4;
  13000. }
  13001. i9 = i12 + 1 | 0;
  13002. i12 = _match(i1, i9, i4) | 0;
  13003. if ((i12 | 0) == 0) {
  13004. i12 = i9;
  13005. } else {
  13006. break L4;
  13007. }
  13008. }
  13009. } else if ((i7 | 0) == 112) {
  13010. i19 = i12;
  13011. }
  13012. i10 = HEAP32[i3 >> 2] | 0;
  13013. if (i10 >>> 0 > i19 >>> 0) {
  13014. i5 = i22 + -1 | 0;
  13015. i8 = i19;
  13016. i6 = 0;
  13017. do {
  13018. i8 = HEAP8[i8] | 0;
  13019. i9 = i8 & 255;
  13020. i13 = HEAP8[i11] | 0;
  13021. i12 = i13 << 24 >> 24;
  13022. L183 : do {
  13023. if ((i12 | 0) == 37) {
  13024. i10 = _match_class(i9, HEAPU8[i21] | 0) | 0;
  13025. i7 = 129;
  13026. } else if ((i12 | 0) == 91) {
  13027. i7 = (HEAP8[i21] | 0) == 94;
  13028. i12 = i7 ? i21 : i11;
  13029. i10 = i7 & 1;
  13030. i7 = i10 ^ 1;
  13031. i13 = i12 + 1 | 0;
  13032. if (i13 >>> 0 < i5 >>> 0) {
  13033. while (1) {
  13034. i14 = HEAP8[i13] | 0;
  13035. i16 = i12 + 2 | 0;
  13036. i15 = HEAP8[i16] | 0;
  13037. do {
  13038. if (i14 << 24 >> 24 == 37) {
  13039. if ((_match_class(i9, i15 & 255) | 0) == 0) {
  13040. i12 = i16;
  13041. } else {
  13042. i10 = i7;
  13043. i7 = 129;
  13044. break L183;
  13045. }
  13046. } else {
  13047. if (i15 << 24 >> 24 == 45 ? (i4 = i12 + 3 | 0, i4 >>> 0 < i5 >>> 0) : 0) {
  13048. if ((i14 & 255) > (i8 & 255)) {
  13049. i12 = i4;
  13050. break;
  13051. }
  13052. if ((HEAPU8[i4] | 0) < (i8 & 255)) {
  13053. i12 = i4;
  13054. break;
  13055. } else {
  13056. i10 = i7;
  13057. i7 = 129;
  13058. break L183;
  13059. }
  13060. }
  13061. if (i14 << 24 >> 24 == i8 << 24 >> 24) {
  13062. i10 = i7;
  13063. i7 = 129;
  13064. break L183;
  13065. } else {
  13066. i12 = i13;
  13067. }
  13068. }
  13069. } while (0);
  13070. i13 = i12 + 1 | 0;
  13071. if (!(i13 >>> 0 < i5 >>> 0)) {
  13072. i7 = 129;
  13073. break;
  13074. }
  13075. }
  13076. } else {
  13077. i7 = 129;
  13078. }
  13079. } else if ((i12 | 0) != 46) {
  13080. i10 = i13 << 24 >> 24 == i8 << 24 >> 24 | 0;
  13081. i7 = 129;
  13082. }
  13083. } while (0);
  13084. if ((i7 | 0) == 129) {
  13085. i7 = 0;
  13086. if ((i10 | 0) == 0) {
  13087. break;
  13088. }
  13089. i10 = HEAP32[i3 >> 2] | 0;
  13090. }
  13091. i6 = i6 + 1 | 0;
  13092. i8 = i19 + i6 | 0;
  13093. } while (i10 >>> 0 > i8 >>> 0);
  13094. if (!((i6 | 0) > -1)) {
  13095. i12 = 0;
  13096. break;
  13097. }
  13098. } else {
  13099. i6 = 0;
  13100. }
  13101. i3 = i22 + 1 | 0;
  13102. while (1) {
  13103. i12 = _match(i1, i19 + i6 | 0, i3) | 0;
  13104. if ((i12 | 0) != 0) {
  13105. break L4;
  13106. }
  13107. if ((i6 | 0) > 0) {
  13108. i6 = i6 + -1 | 0;
  13109. } else {
  13110. i12 = 0;
  13111. break;
  13112. }
  13113. }
  13114. }
  13115. } while (0);
  13116. HEAP32[i1 >> 2] = (HEAP32[i1 >> 2] | 0) + 1;
  13117. STACKTOP = i2;
  13118. return i12 | 0;
  13119. }
  13120. function _free(i7) {
  13121. i7 = i7 | 0;
  13122. var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0, i21 = 0;
  13123. i1 = STACKTOP;
  13124. if ((i7 | 0) == 0) {
  13125. STACKTOP = i1;
  13126. return;
  13127. }
  13128. i15 = i7 + -8 | 0;
  13129. i16 = HEAP32[12928 >> 2] | 0;
  13130. if (i15 >>> 0 < i16 >>> 0) {
  13131. _abort();
  13132. }
  13133. i13 = HEAP32[i7 + -4 >> 2] | 0;
  13134. i12 = i13 & 3;
  13135. if ((i12 | 0) == 1) {
  13136. _abort();
  13137. }
  13138. i8 = i13 & -8;
  13139. i6 = i7 + (i8 + -8) | 0;
  13140. do {
  13141. if ((i13 & 1 | 0) == 0) {
  13142. i19 = HEAP32[i15 >> 2] | 0;
  13143. if ((i12 | 0) == 0) {
  13144. STACKTOP = i1;
  13145. return;
  13146. }
  13147. i15 = -8 - i19 | 0;
  13148. i13 = i7 + i15 | 0;
  13149. i12 = i19 + i8 | 0;
  13150. if (i13 >>> 0 < i16 >>> 0) {
  13151. _abort();
  13152. }
  13153. if ((i13 | 0) == (HEAP32[12932 >> 2] | 0)) {
  13154. i2 = i7 + (i8 + -4) | 0;
  13155. if ((HEAP32[i2 >> 2] & 3 | 0) != 3) {
  13156. i2 = i13;
  13157. i11 = i12;
  13158. break;
  13159. }
  13160. HEAP32[12920 >> 2] = i12;
  13161. HEAP32[i2 >> 2] = HEAP32[i2 >> 2] & -2;
  13162. HEAP32[i7 + (i15 + 4) >> 2] = i12 | 1;
  13163. HEAP32[i6 >> 2] = i12;
  13164. STACKTOP = i1;
  13165. return;
  13166. }
  13167. i18 = i19 >>> 3;
  13168. if (i19 >>> 0 < 256) {
  13169. i2 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
  13170. i11 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
  13171. i14 = 12952 + (i18 << 1 << 2) | 0;
  13172. if ((i2 | 0) != (i14 | 0)) {
  13173. if (i2 >>> 0 < i16 >>> 0) {
  13174. _abort();
  13175. }
  13176. if ((HEAP32[i2 + 12 >> 2] | 0) != (i13 | 0)) {
  13177. _abort();
  13178. }
  13179. }
  13180. if ((i11 | 0) == (i2 | 0)) {
  13181. HEAP32[3228] = HEAP32[3228] & ~(1 << i18);
  13182. i2 = i13;
  13183. i11 = i12;
  13184. break;
  13185. }
  13186. if ((i11 | 0) != (i14 | 0)) {
  13187. if (i11 >>> 0 < i16 >>> 0) {
  13188. _abort();
  13189. }
  13190. i14 = i11 + 8 | 0;
  13191. if ((HEAP32[i14 >> 2] | 0) == (i13 | 0)) {
  13192. i17 = i14;
  13193. } else {
  13194. _abort();
  13195. }
  13196. } else {
  13197. i17 = i11 + 8 | 0;
  13198. }
  13199. HEAP32[i2 + 12 >> 2] = i11;
  13200. HEAP32[i17 >> 2] = i2;
  13201. i2 = i13;
  13202. i11 = i12;
  13203. break;
  13204. }
  13205. i17 = HEAP32[i7 + (i15 + 24) >> 2] | 0;
  13206. i18 = HEAP32[i7 + (i15 + 12) >> 2] | 0;
  13207. do {
  13208. if ((i18 | 0) == (i13 | 0)) {
  13209. i19 = i7 + (i15 + 20) | 0;
  13210. i18 = HEAP32[i19 >> 2] | 0;
  13211. if ((i18 | 0) == 0) {
  13212. i19 = i7 + (i15 + 16) | 0;
  13213. i18 = HEAP32[i19 >> 2] | 0;
  13214. if ((i18 | 0) == 0) {
  13215. i14 = 0;
  13216. break;
  13217. }
  13218. }
  13219. while (1) {
  13220. i21 = i18 + 20 | 0;
  13221. i20 = HEAP32[i21 >> 2] | 0;
  13222. if ((i20 | 0) != 0) {
  13223. i18 = i20;
  13224. i19 = i21;
  13225. continue;
  13226. }
  13227. i20 = i18 + 16 | 0;
  13228. i21 = HEAP32[i20 >> 2] | 0;
  13229. if ((i21 | 0) == 0) {
  13230. break;
  13231. } else {
  13232. i18 = i21;
  13233. i19 = i20;
  13234. }
  13235. }
  13236. if (i19 >>> 0 < i16 >>> 0) {
  13237. _abort();
  13238. } else {
  13239. HEAP32[i19 >> 2] = 0;
  13240. i14 = i18;
  13241. break;
  13242. }
  13243. } else {
  13244. i19 = HEAP32[i7 + (i15 + 8) >> 2] | 0;
  13245. if (i19 >>> 0 < i16 >>> 0) {
  13246. _abort();
  13247. }
  13248. i16 = i19 + 12 | 0;
  13249. if ((HEAP32[i16 >> 2] | 0) != (i13 | 0)) {
  13250. _abort();
  13251. }
  13252. i20 = i18 + 8 | 0;
  13253. if ((HEAP32[i20 >> 2] | 0) == (i13 | 0)) {
  13254. HEAP32[i16 >> 2] = i18;
  13255. HEAP32[i20 >> 2] = i19;
  13256. i14 = i18;
  13257. break;
  13258. } else {
  13259. _abort();
  13260. }
  13261. }
  13262. } while (0);
  13263. if ((i17 | 0) != 0) {
  13264. i18 = HEAP32[i7 + (i15 + 28) >> 2] | 0;
  13265. i16 = 13216 + (i18 << 2) | 0;
  13266. if ((i13 | 0) == (HEAP32[i16 >> 2] | 0)) {
  13267. HEAP32[i16 >> 2] = i14;
  13268. if ((i14 | 0) == 0) {
  13269. HEAP32[12916 >> 2] = HEAP32[12916 >> 2] & ~(1 << i18);
  13270. i2 = i13;
  13271. i11 = i12;
  13272. break;
  13273. }
  13274. } else {
  13275. if (i17 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13276. _abort();
  13277. }
  13278. i16 = i17 + 16 | 0;
  13279. if ((HEAP32[i16 >> 2] | 0) == (i13 | 0)) {
  13280. HEAP32[i16 >> 2] = i14;
  13281. } else {
  13282. HEAP32[i17 + 20 >> 2] = i14;
  13283. }
  13284. if ((i14 | 0) == 0) {
  13285. i2 = i13;
  13286. i11 = i12;
  13287. break;
  13288. }
  13289. }
  13290. if (i14 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13291. _abort();
  13292. }
  13293. HEAP32[i14 + 24 >> 2] = i17;
  13294. i16 = HEAP32[i7 + (i15 + 16) >> 2] | 0;
  13295. do {
  13296. if ((i16 | 0) != 0) {
  13297. if (i16 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13298. _abort();
  13299. } else {
  13300. HEAP32[i14 + 16 >> 2] = i16;
  13301. HEAP32[i16 + 24 >> 2] = i14;
  13302. break;
  13303. }
  13304. }
  13305. } while (0);
  13306. i15 = HEAP32[i7 + (i15 + 20) >> 2] | 0;
  13307. if ((i15 | 0) != 0) {
  13308. if (i15 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13309. _abort();
  13310. } else {
  13311. HEAP32[i14 + 20 >> 2] = i15;
  13312. HEAP32[i15 + 24 >> 2] = i14;
  13313. i2 = i13;
  13314. i11 = i12;
  13315. break;
  13316. }
  13317. } else {
  13318. i2 = i13;
  13319. i11 = i12;
  13320. }
  13321. } else {
  13322. i2 = i13;
  13323. i11 = i12;
  13324. }
  13325. } else {
  13326. i2 = i15;
  13327. i11 = i8;
  13328. }
  13329. } while (0);
  13330. if (!(i2 >>> 0 < i6 >>> 0)) {
  13331. _abort();
  13332. }
  13333. i12 = i7 + (i8 + -4) | 0;
  13334. i13 = HEAP32[i12 >> 2] | 0;
  13335. if ((i13 & 1 | 0) == 0) {
  13336. _abort();
  13337. }
  13338. if ((i13 & 2 | 0) == 0) {
  13339. if ((i6 | 0) == (HEAP32[12936 >> 2] | 0)) {
  13340. i21 = (HEAP32[12924 >> 2] | 0) + i11 | 0;
  13341. HEAP32[12924 >> 2] = i21;
  13342. HEAP32[12936 >> 2] = i2;
  13343. HEAP32[i2 + 4 >> 2] = i21 | 1;
  13344. if ((i2 | 0) != (HEAP32[12932 >> 2] | 0)) {
  13345. STACKTOP = i1;
  13346. return;
  13347. }
  13348. HEAP32[12932 >> 2] = 0;
  13349. HEAP32[12920 >> 2] = 0;
  13350. STACKTOP = i1;
  13351. return;
  13352. }
  13353. if ((i6 | 0) == (HEAP32[12932 >> 2] | 0)) {
  13354. i21 = (HEAP32[12920 >> 2] | 0) + i11 | 0;
  13355. HEAP32[12920 >> 2] = i21;
  13356. HEAP32[12932 >> 2] = i2;
  13357. HEAP32[i2 + 4 >> 2] = i21 | 1;
  13358. HEAP32[i2 + i21 >> 2] = i21;
  13359. STACKTOP = i1;
  13360. return;
  13361. }
  13362. i11 = (i13 & -8) + i11 | 0;
  13363. i12 = i13 >>> 3;
  13364. do {
  13365. if (!(i13 >>> 0 < 256)) {
  13366. i10 = HEAP32[i7 + (i8 + 16) >> 2] | 0;
  13367. i15 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
  13368. do {
  13369. if ((i15 | 0) == (i6 | 0)) {
  13370. i13 = i7 + (i8 + 12) | 0;
  13371. i12 = HEAP32[i13 >> 2] | 0;
  13372. if ((i12 | 0) == 0) {
  13373. i13 = i7 + (i8 + 8) | 0;
  13374. i12 = HEAP32[i13 >> 2] | 0;
  13375. if ((i12 | 0) == 0) {
  13376. i9 = 0;
  13377. break;
  13378. }
  13379. }
  13380. while (1) {
  13381. i14 = i12 + 20 | 0;
  13382. i15 = HEAP32[i14 >> 2] | 0;
  13383. if ((i15 | 0) != 0) {
  13384. i12 = i15;
  13385. i13 = i14;
  13386. continue;
  13387. }
  13388. i14 = i12 + 16 | 0;
  13389. i15 = HEAP32[i14 >> 2] | 0;
  13390. if ((i15 | 0) == 0) {
  13391. break;
  13392. } else {
  13393. i12 = i15;
  13394. i13 = i14;
  13395. }
  13396. }
  13397. if (i13 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13398. _abort();
  13399. } else {
  13400. HEAP32[i13 >> 2] = 0;
  13401. i9 = i12;
  13402. break;
  13403. }
  13404. } else {
  13405. i13 = HEAP32[i7 + i8 >> 2] | 0;
  13406. if (i13 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13407. _abort();
  13408. }
  13409. i14 = i13 + 12 | 0;
  13410. if ((HEAP32[i14 >> 2] | 0) != (i6 | 0)) {
  13411. _abort();
  13412. }
  13413. i12 = i15 + 8 | 0;
  13414. if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
  13415. HEAP32[i14 >> 2] = i15;
  13416. HEAP32[i12 >> 2] = i13;
  13417. i9 = i15;
  13418. break;
  13419. } else {
  13420. _abort();
  13421. }
  13422. }
  13423. } while (0);
  13424. if ((i10 | 0) != 0) {
  13425. i12 = HEAP32[i7 + (i8 + 20) >> 2] | 0;
  13426. i13 = 13216 + (i12 << 2) | 0;
  13427. if ((i6 | 0) == (HEAP32[i13 >> 2] | 0)) {
  13428. HEAP32[i13 >> 2] = i9;
  13429. if ((i9 | 0) == 0) {
  13430. HEAP32[12916 >> 2] = HEAP32[12916 >> 2] & ~(1 << i12);
  13431. break;
  13432. }
  13433. } else {
  13434. if (i10 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13435. _abort();
  13436. }
  13437. i12 = i10 + 16 | 0;
  13438. if ((HEAP32[i12 >> 2] | 0) == (i6 | 0)) {
  13439. HEAP32[i12 >> 2] = i9;
  13440. } else {
  13441. HEAP32[i10 + 20 >> 2] = i9;
  13442. }
  13443. if ((i9 | 0) == 0) {
  13444. break;
  13445. }
  13446. }
  13447. if (i9 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13448. _abort();
  13449. }
  13450. HEAP32[i9 + 24 >> 2] = i10;
  13451. i6 = HEAP32[i7 + (i8 + 8) >> 2] | 0;
  13452. do {
  13453. if ((i6 | 0) != 0) {
  13454. if (i6 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13455. _abort();
  13456. } else {
  13457. HEAP32[i9 + 16 >> 2] = i6;
  13458. HEAP32[i6 + 24 >> 2] = i9;
  13459. break;
  13460. }
  13461. }
  13462. } while (0);
  13463. i6 = HEAP32[i7 + (i8 + 12) >> 2] | 0;
  13464. if ((i6 | 0) != 0) {
  13465. if (i6 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13466. _abort();
  13467. } else {
  13468. HEAP32[i9 + 20 >> 2] = i6;
  13469. HEAP32[i6 + 24 >> 2] = i9;
  13470. break;
  13471. }
  13472. }
  13473. }
  13474. } else {
  13475. i9 = HEAP32[i7 + i8 >> 2] | 0;
  13476. i7 = HEAP32[i7 + (i8 | 4) >> 2] | 0;
  13477. i8 = 12952 + (i12 << 1 << 2) | 0;
  13478. if ((i9 | 0) != (i8 | 0)) {
  13479. if (i9 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13480. _abort();
  13481. }
  13482. if ((HEAP32[i9 + 12 >> 2] | 0) != (i6 | 0)) {
  13483. _abort();
  13484. }
  13485. }
  13486. if ((i7 | 0) == (i9 | 0)) {
  13487. HEAP32[3228] = HEAP32[3228] & ~(1 << i12);
  13488. break;
  13489. }
  13490. if ((i7 | 0) != (i8 | 0)) {
  13491. if (i7 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13492. _abort();
  13493. }
  13494. i8 = i7 + 8 | 0;
  13495. if ((HEAP32[i8 >> 2] | 0) == (i6 | 0)) {
  13496. i10 = i8;
  13497. } else {
  13498. _abort();
  13499. }
  13500. } else {
  13501. i10 = i7 + 8 | 0;
  13502. }
  13503. HEAP32[i9 + 12 >> 2] = i7;
  13504. HEAP32[i10 >> 2] = i9;
  13505. }
  13506. } while (0);
  13507. HEAP32[i2 + 4 >> 2] = i11 | 1;
  13508. HEAP32[i2 + i11 >> 2] = i11;
  13509. if ((i2 | 0) == (HEAP32[12932 >> 2] | 0)) {
  13510. HEAP32[12920 >> 2] = i11;
  13511. STACKTOP = i1;
  13512. return;
  13513. }
  13514. } else {
  13515. HEAP32[i12 >> 2] = i13 & -2;
  13516. HEAP32[i2 + 4 >> 2] = i11 | 1;
  13517. HEAP32[i2 + i11 >> 2] = i11;
  13518. }
  13519. i6 = i11 >>> 3;
  13520. if (i11 >>> 0 < 256) {
  13521. i7 = i6 << 1;
  13522. i3 = 12952 + (i7 << 2) | 0;
  13523. i8 = HEAP32[3228] | 0;
  13524. i6 = 1 << i6;
  13525. if ((i8 & i6 | 0) != 0) {
  13526. i6 = 12952 + (i7 + 2 << 2) | 0;
  13527. i7 = HEAP32[i6 >> 2] | 0;
  13528. if (i7 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13529. _abort();
  13530. } else {
  13531. i4 = i6;
  13532. i5 = i7;
  13533. }
  13534. } else {
  13535. HEAP32[3228] = i8 | i6;
  13536. i4 = 12952 + (i7 + 2 << 2) | 0;
  13537. i5 = i3;
  13538. }
  13539. HEAP32[i4 >> 2] = i2;
  13540. HEAP32[i5 + 12 >> 2] = i2;
  13541. HEAP32[i2 + 8 >> 2] = i5;
  13542. HEAP32[i2 + 12 >> 2] = i3;
  13543. STACKTOP = i1;
  13544. return;
  13545. }
  13546. i4 = i11 >>> 8;
  13547. if ((i4 | 0) != 0) {
  13548. if (i11 >>> 0 > 16777215) {
  13549. i4 = 31;
  13550. } else {
  13551. i20 = (i4 + 1048320 | 0) >>> 16 & 8;
  13552. i21 = i4 << i20;
  13553. i19 = (i21 + 520192 | 0) >>> 16 & 4;
  13554. i21 = i21 << i19;
  13555. i4 = (i21 + 245760 | 0) >>> 16 & 2;
  13556. i4 = 14 - (i19 | i20 | i4) + (i21 << i4 >>> 15) | 0;
  13557. i4 = i11 >>> (i4 + 7 | 0) & 1 | i4 << 1;
  13558. }
  13559. } else {
  13560. i4 = 0;
  13561. }
  13562. i5 = 13216 + (i4 << 2) | 0;
  13563. HEAP32[i2 + 28 >> 2] = i4;
  13564. HEAP32[i2 + 20 >> 2] = 0;
  13565. HEAP32[i2 + 16 >> 2] = 0;
  13566. i7 = HEAP32[12916 >> 2] | 0;
  13567. i6 = 1 << i4;
  13568. L199 : do {
  13569. if ((i7 & i6 | 0) != 0) {
  13570. i5 = HEAP32[i5 >> 2] | 0;
  13571. if ((i4 | 0) == 31) {
  13572. i4 = 0;
  13573. } else {
  13574. i4 = 25 - (i4 >>> 1) | 0;
  13575. }
  13576. L204 : do {
  13577. if ((HEAP32[i5 + 4 >> 2] & -8 | 0) != (i11 | 0)) {
  13578. i4 = i11 << i4;
  13579. i7 = i5;
  13580. while (1) {
  13581. i6 = i7 + (i4 >>> 31 << 2) + 16 | 0;
  13582. i5 = HEAP32[i6 >> 2] | 0;
  13583. if ((i5 | 0) == 0) {
  13584. break;
  13585. }
  13586. if ((HEAP32[i5 + 4 >> 2] & -8 | 0) == (i11 | 0)) {
  13587. i3 = i5;
  13588. break L204;
  13589. } else {
  13590. i4 = i4 << 1;
  13591. i7 = i5;
  13592. }
  13593. }
  13594. if (i6 >>> 0 < (HEAP32[12928 >> 2] | 0) >>> 0) {
  13595. _abort();
  13596. } else {
  13597. HEAP32[i6 >> 2] = i2;
  13598. HEAP32[i2 + 24 >> 2] = i7;
  13599. HEAP32[i2 + 12 >> 2] = i2;
  13600. HEAP32[i2 + 8 >> 2] = i2;
  13601. break L199;
  13602. }
  13603. } else {
  13604. i3 = i5;
  13605. }
  13606. } while (0);
  13607. i5 = i3 + 8 | 0;
  13608. i4 = HEAP32[i5 >> 2] | 0;
  13609. i6 = HEAP32[12928 >> 2] | 0;
  13610. if (i3 >>> 0 < i6 >>> 0) {
  13611. _abort();
  13612. }
  13613. if (i4 >>> 0 < i6 >>> 0) {
  13614. _abort();
  13615. } else {
  13616. HEAP32[i4 + 12 >> 2] = i2;
  13617. HEAP32[i5 >> 2] = i2;
  13618. HEAP32[i2 + 8 >> 2] = i4;
  13619. HEAP32[i2 + 12 >> 2] = i3;
  13620. HEAP32[i2 + 24 >> 2] = 0;
  13621. break;
  13622. }
  13623. } else {
  13624. HEAP32[12916 >> 2] = i7 | i6;
  13625. HEAP32[i5 >> 2] = i2;
  13626. HEAP32[i2 + 24 >> 2] = i5;
  13627. HEAP32[i2 + 12 >> 2] = i2;
  13628. HEAP32[i2 + 8 >> 2] = i2;
  13629. }
  13630. } while (0);
  13631. i21 = (HEAP32[12944 >> 2] | 0) + -1 | 0;
  13632. HEAP32[12944 >> 2] = i21;
  13633. if ((i21 | 0) == 0) {
  13634. i2 = 13368 | 0;
  13635. } else {
  13636. STACKTOP = i1;
  13637. return;
  13638. }
  13639. while (1) {
  13640. i2 = HEAP32[i2 >> 2] | 0;
  13641. if ((i2 | 0) == 0) {
  13642. break;
  13643. } else {
  13644. i2 = i2 + 8 | 0;
  13645. }
  13646. }
  13647. HEAP32[12944 >> 2] = -1;
  13648. STACKTOP = i1;
  13649. return;
  13650. }
  13651. function _dispose_chunk(i6, i7) {
  13652. i6 = i6 | 0;
  13653. i7 = i7 | 0;
  13654. var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0, i16 = 0, i17 = 0, i18 = 0, i19 = 0, i20 = 0;
  13655. i1 = STACKTOP;
  13656. i5 = i6 + i7 | 0;
  13657. i10 = HEAP32[i6 + 4 >> 2] | 0;
  13658. do {
  13659. if ((i10 & 1 | 0) == 0) {
  13660. i14 = HEAP32[i6 >> 2] | 0;
  13661. if ((i10 & 3 | 0) == 0) {
  13662. STACKTOP = i1;
  13663. return;
  13664. }
  13665. i10 = i6 + (0 - i14) | 0;
  13666. i11 = i14 + i7 | 0;
  13667. i15 = HEAP32[12928 >> 2] | 0;
  13668. if (i10 >>> 0 < i15 >>> 0) {
  13669. _abort();
  13670. }
  13671. if ((i10 | 0) == (HEAP32[12932 >> 2] | 0)) {
  13672. i2 = i6 + (i7 + 4) | 0;
  13673. if ((HEAP32[i2 >> 2] & 3 | 0) != 3) {
  13674. i2 = i10;
  13675. i12 = i11;
  13676. break;
  13677. }
  13678. HEAP32[12920 >> 2] = i11;
  13679. HEAP32[i2 >> 2] = HEAP32[i2 >> 2] & -2;
  13680. HEAP32[i6 + (4 - i14) >> 2] = i11 | 1;
  13681. HEAP32[i5 >> 2] = i11;
  13682. STACKTOP = i1;
  13683. return;
  13684. }
  13685. i17 = i14 >>> 3;
  13686. if (i14 >>> 0 < 256) {
  13687. i2 = HEAP32[i6 + (8 - i14) >> 2] | 0;
  13688. i12 = HEAP32[i6 + (12 - i14) >> 2] | 0;
  13689. i13 = 12952 + (i17 << 1 << 2) | 0;
  13690. if ((i2 | 0) != (i13 | 0)) {
  13691. if (i2 >>> 0 < i15 >>> 0) {
  13692. _abort();
  13693. }
  13694. if ((HEAP32[i2 + 12 >> 2] | 0) != (i10 | 0)) {
  13695. _abort();
  13696. }
  13697. }
  13698. if ((i12 | 0) == (i2 | 0)) {
  13699. HEAP32[3228] = HEAP32[3228] & ~(1 << i17);
  13700. i2 = i10;
  13701. i12 = i11;
  13702. break;
  13703. }
  13704. if ((i12 | 0) != (i13 | 0)) {
  13705. if (i12 >>> 0 < i15 >>> 0) {
  13706. _abort();
  13707. }
  13708. i13 = i12 + 8 | 0;
  13709. if ((HEAP32[i13 >> 2] | 0) == (i10 | 0)) {
  13710. i16 = i13;
  13711. } else {
  13712. _abort();
  13713. }
  13714. } else {
  13715. i16 = i12 + 8 | 0;
  13716. }
  13717. HEAP32[i2 + 12 >> 2] = i12;
  13718. HEAP32[i16 >> 2] = i2;
  13719. i2 = i10;
  13720. i12 = i11;
  13721. break;
  13722. }
  13723. i16 = HEAP32[i6 + (24 - i14) >> 2] | 0;
  13724. i18 = HEAP32[i6 + (12 - i14) >> 2] | 0;
  13725. do {
  13726. if ((i18 | 0) == (i10 | 0)) {
  13727. i19 = 16 - i14 | 0;
  13728. i18 = i6 + (i19 + 4) | 0;
  13729. i17 = HEAP32[i18 >> 2] | 0;
  13730. if ((i17 | 0) == 0) {
  13731. i18 = i6 + i19 | 0;
  13732. i17 = HEAP32[i18 >> 2] | 0;
  13733. if ((i17 | 0) == 0) {
  13734. i13 = 0;
  13735. break;
  13736. }
  13737. }
  13738. while (1) {
  13739. i19 = i17 + 20 | 0;
  13740. i20 = HEAP32[i19 >> 2] | 0;
  13741. if ((i20 | 0) != 0) {
  13742. i17 = i20;
  13743. i18 = i19;
  13744. continue;
  13745. }
  13746. i20 = i17 + 16 | 0;
  13747. i19 = HEAP32[i20 >> 2] | 0;
  13748. if ((i19 | 0) == 0) {
  13749. break;
  13750. } else {
  13751. i17 = i19;
  13752. i18 = i20;
  13753. }
  13754. }
  13755. if (i18 >>> 0 < i15 >>> 0) {
  13756. _abort();
  13757. } else {
  13758. HEAP32[i18 >> 2] = 0;
  13759. i13 = i17;
  13760. break;
  13761. }
  13762. } else {
  13763. i17 = HEAP32[i6 + (8 - i14) >> 2] | 0;
  13764. if (i17 >>> 0 < i15 >>> 0) {
  13765. _abort();
  13766. }
  13767. i19 = i17 + 12 | 0;
  13768. if ((HEAP32[i19 >> 2] | 0) != (i10 | 0)) {
  13769. _abort();
  13770. }
  13771. i15 = i18 + 8 | 0;
  13772. if ((HEAP32[i15 >> 2] | 0) == (i10 | 0)) {
  13773. HEAP32[i19 >> 2] = i18;
  13774. HEAP32[i15 >> 2] = i17;
  13775. i13 = i18;
  13776. break;
  13777. } else {
  13778. _abort();
  13779. }
  13780. }
  13781. } whil